You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power BI中基于DAX计算三个月间的百分比变化?

在Power BI中计算月度百分比变化的问题

数据集

以下是包含日期与In Month Actual字段的数据集:

Date        In Month Actual
31/01/2023  2,590,446.12
31/01/2023  47.40
31/01/2023  58.20
31/01/2023  38,471.94 
31/01/2023  7,557.15 
31/01/2023  6,870,250.38
31/01/2023  73,325.34 
31/01/2023  5,754.04
31/01/2023  1,270,666.30 
31/01/2023  426,068.41 
28/02/2023  161.36 
28/02/2023  7,557.15
28/02/2023  5,754.03
28/02/2023  426,068.78 
28/02/2023  161.36 
28/02/2023  7,557.15
28/02/2023  5,754.03
28/02/2023  426,068.78
28/02/2023  5,754.03
28/02/2023  426,068.78
31/03/2023  161.36
31/03/2023  38,026.78
31/03/2023  3,444.45 
31/03/2023  779,195.00
31/03/2023  1,145,854.33 
31/03/2023  26.88 
31/03/2023  1,078,846.04 
31/03/2023  7,626.63
31/03/2023  402,275.36 
31/03/2023  1,021,696.88

用户问题及现有DAX公式

用户需要计算月度间的百分比变化,但编写的DAX公式无法正常运行:

InMonthActualPercentageChange =

VAR CurrentMonthValue = CALCULATE(SUM(A120[In Month Actual]), LASTDATE(A120[Date of Data]))

VAR PreviousMonthValue = CALCULATE(SUM(A120[In Month Actual]), DATEADD(LASTDATE(A120[Date of Data]), -1, MONTH))

解决方案

现有公式的问题

  1. 字段名不匹配:数据集里的日期字段是Date,但公式中用的是A120[Date of Data],字段名错误导致无法筛选数据。
  2. 缺少计算逻辑:仅定义了两个变量,但没有返回百分比变化的最终计算结果。
  3. 上下文适配差:直接用LASTDATE无法适配报表中的筛选上下文,比如多月份筛选时结果会不符合预期。

推荐的DAX写法(基于日期表)

Power BI中时间智能函数的最佳实践是使用独立日期表,先创建日期表并与事实表(A120)建立关联,再使用以下公式:

InMonthActualPercentageChange = 
VAR CurrentMonthTotal = SUM(A120[In Month Actual])
VAR PreviousMonthTotal = CALCULATE(
    SUM(A120[In Month Actual]),
    DATEADD('Date'[Date], -1, MONTH)
)
RETURN
    IF(
        NOT ISBLANK(PreviousMonthTotal) && PreviousMonthTotal <> 0,
        DIVIDE(CurrentMonthTotal - PreviousMonthTotal, PreviousMonthTotal),
        BLANK()
    )

公式说明

  • CurrentMonthTotal:直接计算当前筛选上下文下In Month Actual的总和,日期表和筛选上下文会自动锁定当前月份范围。
  • PreviousMonthTotal:通过DATEADD基于日期表偏移一个月,获取上月的总和,依赖日期表关联确保时间智能函数正常工作。
  • 返回逻辑:用DIVIDE避免除零错误,仅在上月值非空且非0时计算百分比变化,否则返回空值避免错误显示。

无日期表的替代方案

如果暂时没有日期表,可以用以下公式(不推荐,稳定性不如日期表方案):

InMonthActualPercentageChange = 
VAR CurrentMonth = EOMONTH(MAX(A120[Date]), 0)
VAR CurrentMonthTotal = CALCULATE(
    SUM(A120[In Month Actual]),
    EOMONTH(A120[Date], 0) = CurrentMonth
)
VAR PreviousMonth = EOMONTH(CurrentMonth, -1)
VAR PreviousMonthTotal = CALCULATE(
    SUM(A120[In Month Actual]),
    EOMONTH(A120[Date], 0) = PreviousMonth
)
RETURN
    IF(
        NOT ISBLANK(PreviousMonthTotal) && PreviousMonthTotal <> 0,
        DIVIDE(CurrentMonthTotal - PreviousMonthTotal, PreviousMonthTotal),
        BLANK()
    )

额外注意点

  • 确保In Month Actual是数值型字段,如果是文本格式,需先在Power Query中转换类型或用VALUE函数转换。
  • 若要计算与前两个月的变化,只需将DATEADD的第二个参数改为-2即可。

内容的提问来源于stack exchange,提问作者Kaycee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:09:54