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

如何在DAX中实现类似Excel的同一字段上一条记录值引用?

在DAX中实现引用上一条记录的方法

嘿,完全懂你的感受——Excel里拖个相对引用就能轻松拿到上一行的值,到了DAX里因为它是基于列的计算逻辑,确实得换个思路。下面给你几种实用的方案,根据你的场景选就行:

方法1:用CALCULATE + FILTER(兼容所有DAX版本)

如果你的表有明确的排序依据(比如递增的ID、日期),这种方法最稳妥。假设你的表叫SalesData,要引用的字段是Amount,排序用唯一的TransactionID,计算列公式如下:

Previous Amount = 
VAR CurrentID = SalesData[TransactionID]
RETURN
CALCULATE(
    MAX(SalesData[Amount]),
    FILTER(
        SalesData,
        SalesData[TransactionID] = CurrentID - 1
    )
)
  • 先把当前行的TransactionID存成变量CurrentID,再筛选出ID刚好小1的行,取对应的Amount值(用MAX是因为筛选后只会有一行,MAX/MIN/SUM结果都一样)。
  • 如果排序依据是日期(可能有重复),可以先找到当前日期之前的最大日期,再用LOOKUPVALUE匹配值:
Previous Amount = 
VAR CurrentDate = SalesData[TransactionDate]
VAR PreviousDate = 
    CALCULATE(
        MAX(SalesData[TransactionDate]),
        FILTER(SalesData, SalesData[TransactionDate] < CurrentDate)
    )
RETURN
LOOKUPVALUE(SalesData[Amount], SalesData[TransactionDate], PreviousDate)

方法2:用OFFSET函数(DAX 2021+版本推荐)

如果你用的是Power BI 2021年之后的版本,OFFSET函数简直是为这个需求量身定做的,语法和Excel的相对引用逻辑几乎一致:

Previous Amount = 
OFFSET(
    -1, // 偏移量:-1代表上一条记录
    ORDERBY(SalesData[TransactionID]), // 指定排序规则
    DEFAULT,
    PARTITIONBY(SalesData[ProductCategory]) // 可选:按类别分组,只在同类别内取上一条
)[Amount]
  • 这个函数直接指定偏移行数,还支持分组(比如同一个产品分类里取上一条数据),代码简洁又直观。

注意事项

  • 第一行没有上一条记录时,公式会返回BLANK(),你可以用IF(ISBLANK([Previous Amount]), 0, [Previous Amount])改成默认值。
  • 排序字段尽量保证唯一,如果有重复,建议结合多个字段排序(比如ORDERBY(SalesData[TransactionDate], SalesData[TransactionID])),避免结果不准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:47:48