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

Power BI 使用DAX实现同element_id相邻version_id行数据变更对比

DAX 版本字段变更判断计算列实现方案

核心逻辑

针对相同elment_id、type_name的分组,先提取版本号的可排序数值,找到当前行的前序版本对应字段值,再对比两个字段是否发生变更,无前置版本则返回空值。

完整DAX代码

直接在你的数据表中新建计算列,粘贴以下代码,替换对应参数即可:

expected result = 
VAR CurrentElmentID = '你的表名'[elment_id]
VAR CurrentTypeName = '你的表名'[type_name]
// 提取版本号可排序数值,根据实际版本格式调整替换规则
VAR CurrentVersionNum = VALUE(SUBSTITUTE('你的表名'[version_Id], "x", ""))
// 查找同分组下的前序最大版本号
VAR PrevVersionNum = MAXX(
    FILTER(
        '你的表名',
        '你的表名'[elment_id] = CurrentElmentID
        && '你的表名'[type_name] = CurrentTypeName
        && VALUE(SUBSTITUTE('你的表名'[version_Id], "x", "")) < CurrentVersionNum
    ),
    VALUE(SUBSTITUTE('你的表名'[version_Id], "x", ""))
)
// 获取前序版本的对应字段值
VAR PrevTypeSorting = CALCULATE(
    MAX('你的表名'[type_sorting]),
    FILTER(
        '你的表名',
        '你的表名'[elment_id] = CurrentElmentID
        && '你的表名'[type_name] = CurrentTypeName
        && VALUE(SUBSTITUTE('你的表名'[version_Id], "x", "")) = PrevVersionNum
    )
)
VAR PrevWorkSet = CALCULATE(
    MAX('你的表名'[workSet]),
    FILTER(
        '你的表名',
        '你的表名'[elment_id] = CurrentElmentID
        && '你的表名'[type_name] = CurrentTypeName
        && VALUE(SUBSTITUTE('你的表名'[version_Id], "x", "")) = PrevVersionNum
    )
)
RETURN
IF(
    ISBLANK(PrevVersionNum),
    BLANK(),
    '你的表名'[type_sorting] <> PrevTypeSorting || '你的表名'[workSet] <> PrevWorkSet
)

使用说明

  • 代码中所有你的表名替换为你实际的数据表名称
  • 若你的version_Id前缀不是x,将SUBSTITUTE函数中的第二个参数"x"改为实际前缀即可,比如版本格式为v1、v2则改为"v"
  • 若version_Id本身为纯数字格式,直接删除SUBSTITUTE函数,用'你的表名'[version_Id]直接参与数值比较即可

效果验证

你提供的示例数据运行上述代码后,输出结果和预期完全一致:

  • elment_id为01、version_Id为x1的行无前置版本,返回空
  • elment_id为02、version_Id为x1的行无前置版本,返回空
  • elment_id为01、version_Id为x2的行两个字段均发生变更,返回True
  • elment_id为02、version_Id为x2的行两个字段均无变更,返回False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:30:05