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

问题描述

| 我目前正在使用Reporting Services(和MDX语言)构建报告。 我得到一个日期归功于一个参数:
MEMBER [Measures].[retail sales amount] AS (
STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy),[Measures].[Retail sales amount invoiced including tax])
STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy)可能类似于[Time calendar]。[Time Calendar montharchive]。[Time calendar date]。&[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])
    

解决方法

尝试:
MTD( STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy) ) * {[Measures].[Retail sales amount invoiced including tax]}
如果不起作用,则结果是什么:
STRTOMEMBER(@TimecalendarTimecalendarmonthhierarchy).name
    ,MTD将为您提供从月份的第一天到指定日期的日期集。如果要获得月份,可以使用ANCESTOR或PARENT。如果Month在层次结构中的Date的正上方,则Parent将工作。当您考虑前几个月时,SUM(MTD(date),measure)和(date.parent,measure)之间的区别很明显-如果您过去的一个月是过去的MTD,则会得到部分结果,而不是month成员本身(适用于该月的最后日期以外的日期)。 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对MTD的定义