PowerBI中如何在SUMMARIZE生成的表中计算上月差值
在PowerBI的SUMMARIZE汇总表中添加月度差值列
你可以直接在原有的SUMMARIZE表达式中添加计算月度差值的列,核心是利用DAX的时间智能函数获取上月总额,再与当月做差。以下是具体实现方案:
基础版(单年份月度数据)
如果你的数据仅涉及单一年份,使用以下DAX代码即可:
items_facturation_history_totals = SUMMARIZE( items_facturation_join, Calendar[Month Number], -- 用于保证月份按时间顺序排列,可视化时可隐藏 Calendar[Month Name], "Total Prize", SUM(items_facturation_join[invoiced]), "MoM Difference", VAR CurrentTotal = SUM(items_facturation_join[invoiced]) -- 获取上月的 invoiced 总额 VAR PreviousTotal = CALCULATE( SUM(items_facturation_join[invoiced]), DATEADD(Calendar[Date], -1, MONTH) ) RETURN CurrentTotal - PreviousTotal )
多年份适配版
如果数据包含多个年份,需要将年份加入分组条件,避免不同年份的同月数据被合并,同时保证跨年的月度差值计算正确:
items_facturation_history_totals = SUMMARIZE( items_facturation_join, Calendar[Year], Calendar[Month Number], Calendar[Month Name], "Total Prize", SUM(items_facturation_join[invoiced]), "MoM Difference", VAR CurrentTotal = SUM(items_facturation_join[invoiced]) VAR PreviousTotal = CALCULATE( SUM(items_facturation_join[invoiced]), DATEADD(Calendar[Date], -1, MONTH) ) RETURN CurrentTotal - PreviousTotal )
关键说明
Calendar[Month Number]是必须的:仅按Month Name排序会出现10月排在1月之前的问题,加入月份序号后可保证时间顺序,后续在报表可视化中隐藏该列即可。- 时间智能函数依赖正确的日期表:需确保你的
Calendar表已在PowerBI中标记为日期表(右键表 → 标记为日期表),否则DATEADD等函数无法正常工作。 - 首月差值处理:第一个月因无上月数据,差值会显示为空白,若要转为0,可修改RETURN部分为
IF(ISBLANK(PreviousTotal), 0, CurrentTotal - PreviousTotal)。
内容的提问来源于stack exchange,提问作者Víctor Martín
相关产品推荐
相关产品推荐

