加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。
移动平均,又名滑动平均、滚动平均,英文名有Moving Average、Running Average、Rolling Average。它属于时间相关分析,是指在时间序列的每个节点上,计算某个指标在该节点最近N个周期的平均值,通过平均值消除数据在较小周期上的较大波动,从而展示出较为平滑的长期趋势。
按照平均值的不同算法,移动平均可以分为简单移动平均、加权移动平均、指数移动平均等,最常见的是使用算数平均值计算的简单移动平均。
时间跨度(周期数N)越长,趋势越平滑,但滞后性的劣势影响也越大,导致缺乏敏感性,所以选择合适的时间跨度很重要。
解决方案
简单移动平均是指时间节点最近的周期数个周期的指标之和/周期数,需要如下几个参数:
1 指标,如销量、购买客户数、价格;
2 周期,日、月、年;
3 周期数,向前滚动的周期数。
计算过程中,开始端的时间节点如果数据不满足周期数,返回空值;结束端后面的时间节点,也应返回空值;中间的时间节点如果指标有空值,按0计算。
举例
有2021年9月到2022年7月的销售数据(2022年6月无销售数据),计算滚动3个月的移动平均。
R3M Average =
VAR _vm_N = 3
VAR _vt_Period =
DATESINPERIOD(
'Dim_Date'[Date],
MAX('Dim_Date'[Date]),
-_vm_N,
MONTH
)
VAR _vm_MinSalesDate = MINX(ALL('Fact_Sales'[日期]),[日期])
VAR _vm_MaxSalesDate = MAXX(ALL('Fact_Sales'[日期]),[日期])
VAR _SelectedTimePoint = SELECTEDVALUE('Dim_Date'[YearMonth])
VAR _vm_MinTimePoint =
CALCULATE(VALUES('Dim_Date'[YearMonth]),
FILTER(ALL('Dim_Date'), 'Dim_Date'[Date] = DATE(YEAR(_vm_MinSalesDate), MONTH(_vm_MinSalesDate)+_vm_N-1, DAY(_vm_MinSalesDate)))
)
VAR _vm_MaxTimePoint =
CALCULATE(VALUES('Dim_Date'[YearMonth]),
FILTER(ALL('Dim_Date'), 'Dim_Date'[Date] = _vm_MaxSalesDate)
)
VAR
_vm_R_N_Total =
IF(HASONEVALUE('Dim_Date'[YearMonth]) && _SelectedTimePoint>=_vm_MinTimePoint && _SelectedTimePoint<=_vm_MaxTimePoint,
SUMX(
_vt_Period,
[销量]+0
)
)
RETURN
_vm_R_N_Total/_vm_N
如果周期是日或年,把_vt_Period 中DATESINPERIOD的参数MONTH替换为DAY或YEAR,把最小时间节点中的月份移动MONTH(_vm_MinSalesDate)+_vm_N-1变为日或年的移动,以及用到年月字段'Dim_Date'[YearMonth]的地方换为日或年字段。
拓展
1 新建参数,将公式中的_vm_N=参数值,可实现动态设置N个周期的移动平均。
2 窗口函数等也可以用来计算移动平均,以滚动N个周期年周的移动平均的Period为例。
VAR _vt_Period =
WINDOW(1-_vm_N,REL,0,REL,
ALL('Dim_Date'[YearWeek]),
ORDERBY('Dim_Date'[YearWeek],ASC),,,MATCHBY('Dim_Date'[YearWeek])
)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。