SSAS去年MTD计算不定期Calnedar

SSAS去年MTD计算不定期Calnedar,ssas,mdx,ssas-2012,Ssas,Mdx,Ssas 2012,我有一个销售日历,每个月的日历每年都在变化。例如,2015年9月被定义为9月1日至9月30日,但去年是9月3日至9月30日。 因此,当我想比较今年2015年9月1日的MTD时,应将其与2014年9月3日进行比较。我有时间维度中的所有日期,如LAST MTD Start和LAST MTD End,并将它们放在层次结构中,日期为LAST MTD Start和LAST MTD End,并尝试了祖先函数,如 WITH MEMBER [Measures].LMTD AS SUM(

我有一个销售日历,每个月的日历每年都在变化。例如,2015年9月被定义为9月1日至9月30日,但去年是9月3日至9月30日。
因此,当我想比较今年2015年9月1日的MTD时,应将其与2014年9月3日进行比较。我有时间维度中的所有日期,如LAST MTD Start和LAST MTD End,并将它们放在层次结构中,日期为LAST MTD Start和LAST MTD End,并尝试了祖先函数,如

WITH 
 MEMBER [Measures].LMTD AS 
    SUM(
       ANCESTOR(
         [Time].[LYMD_START].CURRENTMEMBER
        ,1
       )
      ,[Measures].[Volume]
    )
SELECT 
  [Measures].LMTD on 0
FROM  [myCUBE]
WHERE [Time].[DATE].&[2015-09-01T00:00:00];

但是我只返回当前月份的合计数量。

假设您有一个包含日期、销售月和销售年的维度,下面的操作应该可以。如果您过滤到2015-09-01(即第9个销售月的第一天),则这将退回一个销售年度,然后查找第9个销售月的第一天(2014-09-03):

然后,您要总结该销售月到2014-09-03的天数:

ParallelPeriod(
    [Date].[Sales Calendar].[Sales Year], 
    1, 
    [Date].[Sales Calendar].CurrentMember
   )
Sum(
  PeriodsToDate(
    [Date].[Sales Calendar].[Sales Month],
    ParallelPeriod(
        [Date].[Sales Calendar].[Sales Year], 
        1, 
        [Date].[Sales Calendar].CurrentMember
       )
    ),
  [Measures].[Volume]
 )

因此,努力的工作是在正确的销售月份构建维度。MDX只能导航该层次结构

谢谢格雷格。我最后要做的是为我要查找的每个日期(MTD、YTD、去年MTD等)创建单独的层次结构,在层次结构中查找我要使用的开始日期和结束日期,然后使用stroset函数动态创建计算成员。这篇博文()概述了这项技术。格雷格·加洛韦的回答回答了你的问题吗?我从你的评论中意识到,这不是你所实施的方法,但它回答了问题吗?@whytheq他的回答很好,但没有解决我的问题,所以我想没有。这仍然是一个很好的回答一个常见问题,只是不是我的。