上一篇文讲了累计聚合,这篇文章继续讲一下滚动聚合,比如常用的MAT计算,Moving Annual Total,滚动年度总计,即向前滚动12月的合计数。
滚动年度求和,也经常用于财务上的滚动预算,看完这篇文章,你以后会很轻松的计算出需要的数据了。
模拟一份2018年1月至2019年7月的订单数据,
利用CALENDARAUTO生成一份日期表,按日期列建立关系,那么如何计算向前滚动12月的销售额合计呢?
其实很简单,新建度量值,
MAT=
IF(MIN('日期表'[日期])
CALCULATE(
[收入],
DATESINPERIOD(
'日期表'[日期],
LASTDATE('日期表'[日期]),-1,YEAR)
)
)
这里直接用了上篇文章的思路,先判断最大订单日期,这样就可以避免最新订单日期之后的计算。
这个度量值的关键是DATESINPERIOD函数的使用,它用来返回移动一定间隔的时间段,在上面的度量值中,正好利用它返回向前滚动一整年的日期。
关于这个时间智能函数的用法,可以参考函数卡片:
结果如下:
因为是从2018年1月才开始有数据,所以2018年12月之前的滚动求和都是不满12个月的数据。如果要求不满12月,就不要显示数据,从达到12个月以后再开始计算,可以优化一下这个度量值,
MAT 优化=
IF(MIN('日期表'[日期])
CALCULATE(
IF(
COUNTROWS(
FILTER(VALUES('日期表'[月份]),[收入]>0)
)=12,
[收入]),
DATESINPERIOD(
'日期表'[日期],
LASTDATE('日期表'[日期]),-1,YEAR)
)
)
结果如下:
除了滚动求和,求移动平均同样是很常见的需求,求往前推一年的平均数,只要把上面度量值中,CALCULATE的第一个参数,改成使用AVERAGE来聚合。
在实际计算时,求往前推一年的平均值并不是必须要求满12个月才开始计算,所以直接使用上面第一个度量值的写法,
滚动平均 年度=
IF(MIN('日期表'[日期])
CALCULATE(
AVERAGE('订单表'[销售额]),
DATESINPERIOD(
'日期表'[日期],
LASTDATE('日期表'[日期]),-1,YEAR)
)
)
上面的例子都是按照一年计算滚动粒度的,如果你需要其他数量和粒度的计算,正常情况下更改一下DATESINPERIOD函数的参数就行了。
领取专属 10元无门槛券
私享最新 技术干货