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
相关产品推荐
相关产品推荐

