我目前正在使用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])
答案 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])