滚动年份:实际和去年

Rolling Year: Actual And Last Year

我有以下字段:

  1. 年份
  2. 类别
  3. 创客
  4. 月份
  5. 月数
  6. 销量
  7. 销售额
  8. 日期

所以,我在破折号中有一个“月号”和“年”的过滤器:

我的目标是创建两个新度量;首先是需要总计 12 个月的 Rolling Year,结束于用户 select 在提到的过滤器中的那一刻。例如,如果 y select Year 2021 和 Month 01。Rolling Year 需要对 selected 类别从 2020-02 到 2021- 的销售额求和01(这意味着自枢轴月以来始终为 12 个月)。

因为第二个是完全一样的,一个叫Rolling Last Year的measure,也需要滚动求和,但是最后一个周期,以便比较。如果我有 2020-02 到 2021-01 期间,则以相同的示例为例。最后一期的Rolling Last Year应该是2019-02到2020-01.

我尝试使用从 Microsoft 页面中提取的 DAX 代码但没有成功:

Rolling Year =
CALCULATE (
SUMX ( Table, Table[Sales] ),
FILTER (
ALL (Table[Date] ),
AND (
Table[Date] <= MAX ( Table[Date] ),
DATEADD ( Table[Date], 12, MONTH ) > MAX ( Table[Date] ))))

我与您分享我的基础摘录:

提前致谢!!!

根据 table 和您共享的代码,尚不清楚从何处应用日期过滤器。如果您还没有这样做,我强烈建议从您的销售 table 中删除 [Month] 和 [Month Number] 字段,并将它们保存在一个单独的日历 table 中,从那里应该有过滤器选择。然后,对您当前的公式进行简单调整即可解决问题:

Rolling Year = 
CALCULATE (  
SUMX ( Table, Table[Sales] ),  
FILTER (  
ALL ('Calendar'[Date] ),  
AND (  
Table[Date] <= MAX ( 'Calendar'[Date] ),  
DATEADD ( 'Calendar'[Date], 12, MONTH ) > MAX ( 'Calendar'[Date] ))))

不过,您可以尝试使用此代码变体,稍微优化一下,以免每次都扫描整个销售 table:

Rolling Year = 
VAR EndSelectedDate = MAX ( 'Calendar'[Date] )
VAR StartSelectedDate =
    CALCULATE (
        MAX ( 'Calendar'[Date] ),
        ALL ( 'Calendar'[Year] ),
        'Calendar'[Year]
            = MAX ( 'Calendar'[Year] ) - 1
    )
RETURN
    CALCULATE (
        SUM ( Table[Sales] ),
        ALL ( 'Calendar' ),
        'Calendar'[Date] <= EndSelectedDate,
        'Calendar'[Date] > StartSelectedDate
)