Power BI中计算上月滚动总计的DAX表达式求解
搞定Power BI上月滚动总计的DAX写法
嘿,针对你已经实现当前月份滚动总计的情况,我帮你梳理两种常见场景的调整方案,直接套用就能解决需求:
场景1:筛选特定月份时,计算整个上月的滚动累计
比如你选了2024年3月,想展示2024年2月从月初到每天的滚动销售额总和,用这个DAX就行:
Rolling_Total_Last_Month = VAR CurrentMonthStart = MIN(SalesInvoice[Date]) -- 拿到你筛选月份的第一天 VAR LastMonthStart = DATE(YEAR(CurrentMonthStart), MONTH(CurrentMonthStart)-1, 1) -- 上月第一天 VAR LastMonthEnd = EOMONTH(LastMonthStart, 0) -- 上月最后一天 RETURN CALCULATE( SUM(SalesInvoice[Sales]), FILTER( ALL(SalesInvoice[Date]), -- 解锁日期列,确保能取到上月完整范围 SalesInvoice[Date] <= MAX(SalesInvoice[Date]) - DATE(0,1,0) -- 当前日期往回推1个月 && SalesInvoice[Date] >= LastMonthStart ) )
嫌代码长?试试更简洁的版本,用时间智能函数省事儿:
Rolling_Total_Last_Month = VAR LastMonthFullRange = DATESBETWEEN( SalesInvoice[Date], STARTOFMONTH(DATEADD(MIN(SalesInvoice[Date]), -1, MONTH)), ENDOFMONTH(DATEADD(MAX(SalesInvoice[Date]), -1, MONTH)) ) RETURN CALCULATE( SUM(SalesInvoice[Sales]), FILTER( ALLSELECTED(SalesInvoice[Date]), SalesInvoice[Date] <= MAX(LastMonthFullRange) && SalesInvoice[Date] >= MIN(LastMonthFullRange) ) )
核心逻辑
- 用
DATEADD把你当前筛选的日期直接往回挪1个月,锁定上月的完整时间范围 - 保留你原来滚动累计的逻辑:对上月的每一天,计算从月初到这天的销售额总和
场景2:筛选任意日期范围时,计算上月同期的滚动累计
比如你选了2024年3月5日-15日,想算2024年2月5日-15日这段时间的滚动累计,就用这个:
Rolling_Total_Last_Month_Period = VAR SelectedStart = MIN(SalesInvoice[Date]) -- 你选的起始日期 VAR SelectedEnd = MAX(SalesInvoice[Date]) -- 你选的结束日期 VAR LastMonthStart = DATEADD(SelectedStart, -1, MONTH) -- 上月同期起始日 VAR LastMonthEnd = DATEADD(SelectedEnd, -1, MONTH) -- 上月同期结束日 RETURN CALCULATE( SUM(SalesInvoice[Sales]), FILTER( ALL(SalesInvoice[Date]), SalesInvoice[Date] <= MAX(SalesInvoice[Date]) - DATE(0,1,0) && SalesInvoice[Date] >= LastMonthStart && SalesInvoice[Date] <= LastMonthEnd ) )
核心逻辑
- 直接把你选中的起始、结束日期各往回推1个月,精准匹配上月同期区间
- 滚动逻辑不变:对上月同期的每一天,计算从区间第一天到这天的销售额总和
踩坑提醒
- 确保你的
SalesInvoice[Date]是标准日期类型,别有空值或者格式不对的日期,不然函数会罢工 - 如果你的报表用了单独的日期表,记得把DAX里的
SalesInvoice[Date]换成日期表的日期列,计算会更稳定准确 - 记得测试跨年情况哦,比如选2024年1月,上月是2023年12月,看看计算结果是否符合预期
内容的提问来源于stack exchange,提问作者brandog
相关产品推荐
相关产品推荐

