Power BI中跨多年同月份的滚动平均计算方法问询
Power BI 跨年度同月份滚动平均实现方案
一、使用度量值实现(推荐,支持动态上下文)
这种方式适合在矩阵、卡片图等可视化组件中动态展示,无需提前计算固定表格。
前提条件
确保你已创建标准日期表,并与包含总计数值的事实表通过日期字段建立关系。日期表需包含日期、年份、月份(数字或统一格式文本)字段。
DAX度量值代码
同月份滚动5年平均 = VAR 当前月份 = MONTH(MAX('日期表'[日期])) VAR 当前年份 = YEAR(MAX('日期表'[日期])) -- 筛选过去5年(含当前年)的同月份日期范围 VAR 目标日期范围 = FILTER( ALL('日期表'), MONTH('日期表'[日期]) = 当前月份 && YEAR('日期表'[日期]) >= 当前年份 - 4 && YEAR('日期表'[日期]) <= 当前年份 ) -- 计算筛选范围内各年份同月份的总计数值的平均值 RETURN AVERAGEX(目标日期范围, CALCULATE(SUM('事实表'[总计数值])))
代码说明
当前月份/当前年份:从当前可视化上下文(比如选中的年份、月份)提取对应值目标日期范围:筛选出近5年中与当前月份相同的所有日期AVERAGEX:遍历筛选出的每个年份,计算对应月份的总计数值,再取平均值
调整滚动年限
若需要改为3年滚动平均,只需将当前年份 - 4改为当前年份 - 2(包含当前年在内共3年)。
二、使用计算表格实现(静态数据,适合批量分析)
如果需要生成一份固定的同月份平均数据表格用于后续分析,可创建计算表:
DAX计算表代码
同月份滚动平均汇总表 = ADDCOLUMNS( -- 先按年份、月份分组 SUMMARIZE('日期表', '日期表'[年份], '日期表'[月份]), "5年同月份平均", VAR 当前月份 = '日期表'[月份] VAR 当前年份 = '日期表'[年份] VAR 目标日期范围 = FILTER( ALL('日期表'), '日期表'[月份] = 当前月份 && '日期表'[年份] >= 当前年份 - 4 && '日期表'[年份] <= 当前年份 ) RETURN AVERAGEX(目标日期范围, CALCULATE(SUM('事实表'[总计数值]))) )
说明
该计算表会生成包含年份、月份、5年同月份平均三列的静态表格,后续可直接用于报表或进一步处理。
注意事项
- 若部分年份的对应月份无数据,
AVERAGEX会自动忽略空值,仅计算有数据的年份平均值;若需强制包含所有年份(空值按0计算),可将SUM('事实表'[总计数值])改为COALESCE(SUM('事实表'[总计数值]), 0)。 - 日期表的月份字段需保持格式统一,避免因文本格式不一致(如"1月"和"01月")导致匹配失败。
内容的提问来源于stack exchange,提问作者frequent user
相关产品推荐
相关产品推荐

