这个场景我是20年碰到的,当时写了一个非常复杂的方案,基本实现了想要的功能。然而在使用的过程中,发现季度的汇总会异常,想了很多办法都没解决。后来参考了一些资料,从新做了思考,于是简化到了现在这个程度。今天正好在群里看到有人问这个问题,于是写下来,希望帮助到更多人。
这个场景在销售分析中是比较常见的,尤其是领导关注的比较细。想看到当月已过的这几天,在去年或者上个月的表现。这个需求我觉得还是比较充分的,对于一些周期性的行业来说,其实非常有必要。今天就给大家分享下如何计算。
需求
按照当月已过的天数,同比去年或环比上月同样已过天数的数据表现。
使用下图中的,t1时间区间和t2与t3分别做环比和同比的计算。
思路
这里面最核心的解题思路是,只查看模型最大日期之前的数据,同时据此使用日期函数进行计算,只要能解决这个点,那么公式就非常容易写了。
方案
- 第一步:计算模型最大日期
模型 模型日期 = MAXX( ALL( 'FM订单表'[下单日期] ), 'FM订单表'[下单日期] )
- 第二步:计算上月或上年同期
销售 金额 上年 同期 = CALCULATE( [销售 金额], DATEADD( 'DM日期表'[@日期], -1, YEAR ) )
销售 金额 上月 同期 = CALCULATE( [销售 金额], DATEADD( 'DM日期表'[@日期], -1, MONTH ) )
- 第三步:按当月已过天数计算上年或上月的值
销售 金额 上年 按 当月已过天数 = CALCULATE( [销售 金额 上年 同期], FILTER( 'DM日期表', 'DM日期表'[@日期] <= [模型 模型日期] ) )
销售 金额 上月 按 当月已过天数 = CALCULATE( [销售 金额 上月 同期], FILTER( 'DM日期表', 'DM日期表'[@日期] <= [模型 模型日期] ) )
- 第四步:按当月已过天数计算和上年已过天数与上月已过天数的同比和环比
销售 金额 上年 按 当月已过天数 同比 % =
VAR t1 = [销售 金额]
VAR t3 = [销售 金额 上年 按 当月已过天数]
RETURN DIVIDE( t1 - t3, t3 )
销售 金额 上月 按 当月已过天数 环比 % =
VAR t1 = [销售 金额]
VAR t2 = [销售 金额 上月 按 当月已过天数]
RETURN DIVIDE( t1 - t2, t2 )