Power BI如何计算任意所选期间的环比?
文/陆文捷
物流供应链优化分析师,Power BI爱好者,知乎:Beethovenist
Power BI内置了一系列日期智能函数,覆盖了计算同环比,上年同期,本期至今,期初期末,当期全局数据等高频需求。
星主也发表过基于标准日期智能函数思路的非标准日历计算方法和任意期间上期的计算方法。
这类方法在处理连续日期段的汇总比较(今年vs去年 / 当月vs上月/ 移动平均等)可谓得心应手;而对于非连续期间的处理,标准的日期智能函数往往捉襟见肘。
例如选择某年3月、5月、9月份的数据,并将其与所选的上一期数据对比,也就是5月v s 3月,9月 vs 5月,这种需求如何计算呢?
本文介绍如何用DAX处理该类问题的技巧。
日期表永远是是模型中的必要部分,如何构造及要求不再赘述。
案例以 [年度月份] 维度对事实表的 [利润] 进行汇总,
接着计算每个年度月份所选上期利润,[利润.上期所选] 度量值公式:
这个度量值的逻辑是,对变量PreviousYearMonth用CALCULATE + ALLSELECED改变筛选上下文环境,返回上一期选择的年月,进而作为计算利润的筛选条件得出上一期所选数值。
CALCULATE 与ALL系列函数的经典组合成功实现对视图层面的上一期利润计算。这里的关键在于对筛选环境的动态控制,请仔细体会下ALLSELECTED, ALL, KEEPFILTERS出现的位置和对CALCULATE筛选器的影响。
计算结果如下:
突破了计算非连续日期的上期利润瓶颈之后,便能轻松按照常规套路进一步处理,比较相隔期间的数据变动,
然后计算比率就很简单了,最终结果如下:
总结
本文作为按日期汇总数据方法的补充,本质还是基于的日期智能函数的套路并结合DAX强大的筛选器调整能力实现灵活计算。伙伴们可以多多实践,更好的驾驭DAX~
参考文章:
https://www.sqlbi.com/articles/comparing-with-previous-selected-time-period-in-dax/
示例数据基于星球案例文件。