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

PowerBI DAX 计算EX02与VA02值存在差异的文档ID非重复计数

DAX实现:统计存在自动提取值与人工校验值差异的文档非重复计数

前置准备

DAX无法直接识别数据源的原始行排列顺序,你需要先在Power Query编辑器中完成以下字段加工,确保两类记录可按顺序匹配:

  • 按DOCID分组,筛选CALL_POINT = "EX02"的记录,按原始排列顺序生成从1开始的连续组内序号,命名为Ex_Seq
  • 同理按DOCID分组,筛选CALL_POINT = "VA02"的记录,按原始排列顺序生成从1开始的连续组内序号,命名为Va_Seq
    加工完成后,同一DOCID下Ex_Seq = n的自动提取记录,将与Va_Seq = n的人工校验记录一一对应。

度量值代码

将代码中的表名、字段名替换为你模型中的实际名称即可使用:

差异文档计数 = 
COUNTROWS (
    FILTER (
        -- 遍历所有非重复DOCID
        VALUES ( '业务数据表'[DOCID] ),
        VAR CurrDoc = '业务数据表'[DOCID]
        -- 提取当前文档下所有自动提取环节的序号和取值
        VAR ExSet =
            SELECTCOLUMNS (
                FILTER ( ALL('业务数据表'), '业务数据表'[DOCID] = CurrDoc && '业务数据表'[CALL_POINT] = "EX02" ),
                "Seq", [Ex_Seq],
                "ExVal", [取值字段]
            )
        -- 提取当前文档下所有人工校验环节的序号和取值
        VAR VaSet =
            SELECTCOLUMNS (
                FILTER ( ALL('业务数据表'), '业务数据表'[DOCID] = CurrDoc && '业务数据表'[CALL_POINT] = "VA02" ),
                "Seq", [Va_Seq],
                "VaVal", [取值字段]
            )
        -- 按序号关联后检查是否存在值不匹配的记录对
        VAR MismatchRows =
            FILTER (
                NATURALINNERJOIN(ExSet, VaSet),
                -- 用差值判断规避浮点数精度误差,可根据业务精度要求调整阈值
                ABS([ExVal] - [VaVal]) > 0.001
            )
        RETURN
            -- 存在不匹配记录则当前DOCID计入统计
            NOT ISEMPTY(MismatchRows)
    )
)

场景验证

  • 单文档场景:DOCID 654474存在第2行EX02取值44.57、对应VA02取值0.00的差异,度量值返回结果为1,符合预期
  • 多文档场景:DOCID 654476(10.00 vs 15.00)、DOCID 654477(95.73 vs 95.00)均存在取值差异,度量值返回结果为2,符合预期

优化提示

如果你在Power Query阶段已经将同DOCID同序号的EX02、VA02取值合并到同一行,可以使用更简洁的度量值:

差异文档计数_简化版 = 
COUNTROWS (
    FILTER (
        VALUES('业务数据表'[DOCID]),
        CALCULATE(
            COUNTROWS('业务数据表'),
            ABS('业务数据表'[EX02取值] - '业务数据表'[VA02取值]) > 0.001
        ) > 0
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:39:19