【问题标题】:SSAS Last Year MTD Calculation Irregular CalnedarSSAS 去年年初至今计算不规则日历
【发布时间】:2023-03-16 06:27:01
【问题描述】:

我有一个销售日历,其中一个月的日历每年都在变化。例如,2015 年 9 月被定义为 9 月 1 日 - 9 月 30 日,但去年是从 9 月 3 日 - 9 月 30 日。
因此,当我想比较今年 2015 年 9 月 1 日的 MTD 时,应该将其与 2014 年 9 月 3 日进行比较。我有时间维度中的所有日期,如 LAST MTD Start 和 LAST MTD End,并将它们放在一个层次结构中,DATE 与 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];

但我只取回当月的总成交量。

【问题讨论】:

    标签: ssas mdx ssas-2012


    【解决方案1】:

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

    ParallelPeriod(
        [Date].[Sales Calendar].[Sales Year], 
        1, 
        [Date].[Sales Calendar].CurrentMember
       )
    

    然后你想总结那个销售月到 2014-09-03 的天数:

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

    因此,艰苦的工作是建立具有正确销售月份的维度。 MDX 只能导航该层次结构。

    【讨论】:

    • 谢谢格雷格。我最终做的是为我正在寻找的每个日期(MTD、YTD、去年 MTD 等)创建单独的层次结构,在层次结构中查找我想要使用的开始和结束日期,然后使用STRTOSET 函数动态创建计算成员。这篇博文 (ditchiecubeblog.wordpress.com/2013/06/16/…) 中概述了这种技术。
    • @TonyG。 Greg Galloway 的回答是否回答了您的问题?我从您的评论中意识到这不是您实施的方法,但它回答了问题吗?
    • @whytheq 他的回答很好,但没有解决我的问题,所以我猜不是。对于一个常见问题,它仍然是一个很好的答案,只是不是我的。
    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多