MDX中的年化

MDX中的年化,mdx,Mdx,导言 目前,我正在对一个度量值进行维护,该度量值将另一个(YTD)度量值年度化。度量的粒度为个月。年度化在月份级别上运行良好,但当我们在日期层次结构中使用父级时,计算不起作用 它应该是这样工作的: MeasureAnnualized = YTDMeasure * (CurrentMonth / 12) CurrentMonth实现为 ClosingPeriod([Date].[DateHierarchy].[Month], [Date].[DateHierarchy]).MemberValue

导言 目前,我正在对一个度量值进行维护,该度量值将另一个(YTD)度量值年度化。度量的粒度为个月。年度化在月份级别上运行良好,但当我们在日期层次结构中使用父级时,计算不起作用

它应该是这样工作的:

MeasureAnnualized = YTDMeasure * (CurrentMonth / 12)
CurrentMonth实现为

ClosingPeriod([Date].[DateHierarchy].[Month], [Date].[DateHierarchy]).MemberValue
在月份级别上,这可以正常工作:

Month MeasureYTD MeasureAnnualized ClosingPeriod july -50 -85,71 7 august -60 -90,00 8 september (null) (null) 9 月测量TD测量年度结算期 7月50日至85日,71 7 八月至六十至九十,00 8 九月(零)(零)9日 但在DateHierarchy的更高级别上,这不起作用。例如,在季度级别:

Quarter MeasureYTD MeasureAnnualized ClosingPeriod 3 -60 -80,00 (should be : -90,00) 9 (should be: 8) 季度计量TD计量年度结算期 3-60-80,00(应该是:-90,00)9(应该是:8) 如您所见,它选择了第三季度(=9)的结算期,而这应该是最后一个“非空”结算期(=8)。这同样适用于年份级别:

Year MeasureYTD MeasureAnnualized ClosingPeriod 2016 -60 -60,00 (should be : -90,00) 12 (should be: 8) 年度计量TD计量年度结算期 2016-60-60,00(应为:-90,00)12(应为:8)
因此,问题是:如何使此ClosingPeriod成为YTD度量值不为(空)的最后一个期间?

ClosingPeriod
的msdn定义中,它给出了相同逻辑的等效嵌套版本:

Tail(Descendants(Member_Expression, Level_Expression), 1)
下面与此类似,添加了一个
非空的

WITH 
  MEMBER Measures.[LastNonEmpty] AS 
    Tail
    (
      NonEmpty
      (
        (EXISTING 
          [Date].[Calendar].[Month])
       ,[Measures].[Internet Sales Amount]
      )
     ,1
    ).Item(0).MemberValue 
SELECT 
  Measures.[LastNonEmpty] ON 0
 ,[Date].[Calendar].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works];
它返回以下内容:


ClosingPeriod
的msdn定义中,它给出了相同逻辑的等效嵌套版本:

Tail(Descendants(Member_Expression, Level_Expression), 1)
下面与此类似,添加了一个
非空的

WITH 
  MEMBER Measures.[LastNonEmpty] AS 
    Tail
    (
      NonEmpty
      (
        (EXISTING 
          [Date].[Calendar].[Month])
       ,[Measures].[Internet Sales Amount]
      )
     ,1
    ).Item(0).MemberValue 
SELECT 
  Measures.[LastNonEmpty] ON 0
 ,[Date].[Calendar].[Calendar Year].MEMBERS ON 1
FROM [Adventure Works];
它返回以下内容:


让人惊讶的是:
ClosingPeriod([Date].[DateHierarchy].[Month],[Date].[DateHierarchy]).MemberValue
根据定义()第二个参数应该是一个成员表达式-因此它必须假设
[Date].[DateHierarchy].[All]
[Date]。[DateHierarchy].CURRENTMEMBER
对此感到惊讶:
ClosingPeriod([Date].[DateHierarchy].[Month],[Date].[DateHierarchy]).MemberValue
根据定义()第二个参数应该是一个成员表达式-因此必须假设
[Date].[DateHierarchy]
是其他的,可能是
[Date].[DateHierarchy]。[全部]
[Date].[DateHierarchy].CURRENTMEMBER
非常感谢,它很有效!!!对于QTD值的年度化,我还需要将解决方案的结果(一年中最后一个非空月)转换为“季度月”。例如:3>3,4>1,12>3等等。我注意到MDX没有模函数,你知道怎么做吗?@Rutger给你:(随时提供有用的答案,如果你满意的话,请将其标记为正确)非常感谢,它很有效!!!对于QTD值的年度化,我还需要转换你的解决方案的结果(一年中最后一个非空的月份)到“季度月份”。例如:3>3、4>1、12>3等等。我注意到MDX没有模函数,你知道怎么做吗?@Rutger给你:(如果你满意的话,请随意给出有用的答案,并将它们标记为正确)