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

Power BI 无日期变量场景下计算预算修订版差值的方法

问题根因

原有度量值返回结果和最新版一致,是因为报表筛选上下文已经限定仅展示最新修订号的数据,LASTNONBLANK在被筛选后的REVISIONNUMBER列中只能取到当前最新版本号,无法穿透筛选拿到上一版本的数值。

正确DAX写法

核心逻辑是先移除筛选上下文对修订号的限制,先定位当前范围的最新修订号,再匹配倒数第二版的对应数值,按预算行维度自动对齐材料、工时等不同类别的数据。

连续修订号场景(修订号从1开始逐次+1无跳号)

先写获取上一版本预算额的度量值:

Billingprice-1 = 
// 获取当前筛选范围内的最新修订号
VAR CurrentLatestRev = CALCULATE(MAX(JOBBUDGETLINE[REVISIONNUMBER]), ALLSELECTED(JOBBUDGETLINE[REVISIONNUMBER]))
VAR PrevVersionRev = CurrentLatestRev - 1
RETURN
CALCULATE(
    [Fixed price amount],
    // 移除原有对修订号的筛选
    REMOVEFILTERS(JOBBUDGETLINE[REVISIONNUMBER]),
    // 匹配倒数第二版修订号
    JOBBUDGETLINE[REVISIONNUMBER] = PrevVersionRev
)

再计算两版差值:

Budget Delta = [Fixed price amount] - [Billingprice-1]

修订号存在跳号场景(存在中间版本删除、修订号不连续的情况)

如果修订号不是严格连续递增,把获取上一版本号的逻辑替换为取小于最新版的最大修订号即可,对应度量值如下:

Billingprice-1 = 
VAR CurrentLatestRev = CALCULATE(MAX(JOBBUDGETLINE[REVISIONNUMBER]), ALLSELECTED(JOBBUDGETLINE[REVISIONNUMBER]))
VAR PrevVersionRev = 
CALCULATE(
    MAX(JOBBUDGETLINE[REVISIONNUMBER]),
    ALLSELECTED(JOBBUDGETLINE[REVISIONNUMBER]),
    JOBBUDGETLINE[REVISIONNUMBER] < CurrentLatestRev
)
RETURN
CALCULATE(
    [Fixed price amount],
    REMOVEFILTERS(JOBBUDGETLINE[REVISIONNUMBER]),
    JOBBUDGETLINE[REVISIONNUMBER] = PrevVersionRev
)
注意事项
  • 该写法完全适配现有业务规则:只要任意预算项调整就会给所有行分配新修订号,按修订号匹配不会出现部分行取不到上一版本值的问题
  • 如果需要按项目、预算类别等维度拆分统计差值,不需要额外修改度量值,现有逻辑会自动在对应筛选上下文下计算
  • 不要用LASTNONBLANK嵌套的方式取上一版本,该函数在多行列值匹配时很容易受筛选上下文影响出现计算偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:18:15