从MDX中的日期参数获取月份

时间:2011-05-24 13:58:35

标签: ssrs-2008 mdx

我目前正在使用Reporting Services(和MDX语言)构建报表。 我得到一个参数的日期:

MEMBER [Measures].[retail sales amount] AS (
STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy)
, [Measures].[Retail sales amount invoiced including tax])

STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy)可能是那样的[时间日历]。[时间日历月份层次]。[时间日历日期]。& [2011-03-18T00:00:00]

我想只得到这个参数的月份。当我使用时:

MTD([Time calendar].[Time calendar month hierarchy].[Time calendar date].&[2011-03-18T00:00:00]
, [Measures].[Retail sales amount invoiced including tax])

它工作正常,但

的情况并非如此
MTD(STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy)
, [Measures].[Retail sales amount invoiced including tax])

2 个答案:

答案 0 :(得分:0)

尝试:

MTD( STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy) ) * {[Measures].[Retail sales amount invoiced including tax]}

如果不起作用,结果如下:

STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy).name

答案 1 :(得分:0)

MTD 会为您提供从该月的第一个日期到指定日期的日期集。如果您想获得月份,可以使用 ANCESTOR PARENT 。如果Month直接位于层次结构中的Date之上,则Parent将起作用。当您考虑前几个月时, SUM(MTD(日期),度量)(date.parent,度量)之间的区别是显而易见的 - 如果您去一个月过去 MTD 会为您提供部分结果,而不是月份会员本身(对于该月的最后一个日期以外的日期)。

StrToMember 基本上将字符串转换为MDX中的成员表达式。写作之间没有区别(功能上):

([Time].[Month].&[201001], [Measures].[SomeMeasure])

(StrToMember("[Time].[Month].&[201001]"), [Measures].[SomeMeasure])

当您执行非工作表达式以进行调试时,听到错误的确切内容会很有趣。

如果您只想获得该度量的月份金额,您应该写:

(StrToMember(@param).Parent, [Measures].[Retail sales amount...])

或(如果您之间有更多级别):

(Ancestor(StrToMember(@param), 
          [Time calendar].[<hierarchy>].[<month level>]), 
 [Measures].[Retail sales amount...])

此外,使用 MTD 时,您想写:

SUM(MTD(<date member>), [Measure].[Some Measure])

而不是

MTD(<date member>, [Measure].[Some Measure])

查看BOL's definition of MTD