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

Power BI如何按分组取末条记录值生成去重表或计算列

Power BI 实现合同去重保留最后一条报价拒因的方法

你要的需求不适合用计算列实现(计算列依附原表存在,无法直接生成独立的去重结果表),可以通过Power Query表转换(优先推荐)或者DAX新建计算表两种方式实现,具体操作如下:


方法一:Power Query 可视化操作(推荐,性能好易维护)

操作全程不需要写复杂代码,原数据刷新时结果会自动同步:

  • 进入Power Query编辑器:点击顶部主页选项卡的「转换数据」按钮,打开编辑界面
  • 补充行顺序标识:Power BI不会固定保存表的原始行顺序,必须先加一个字段作为判断“最后一条”的依据:
    • 如果原表已经有报价提交时间、记录自增ID这类可以判断先后的字段,直接用现有字段即可
    • 如果没有,点击顶部「添加列」选项卡>「索引列」>「从1开始」,生成从1逐行递增的序号,序号越大代表记录越靠后,对应你要的最后一条
  • 按合同编号分组:选中Contract列,点击「转换」选项卡>「分组依据」,在弹窗里选「高级」模式:
    • 第一个聚合项:新列名填MaxOrder,操作选「最大值」,列选你刚才用来标识顺序的字段(索引/提交时间/自增ID都可以)
    • 点「添加聚合」加第二个项:新列名填Detail,操作选「所有行」
    • 点确认完成分组
  • 提取对应最后一条的拒因:
    • 点Detail列右上角的展开箭头,只勾选Reason和你用来排序的顺序字段,取消「使用原始列名作为前缀」的勾选,点确认
    • 筛选行,只保留顺序字段值和MaxOrder值相等的行
    • 删除多余的MaxOrder、顺序辅助列,把Contract列重命名为Contract(Distinct)
  • 点击左上角「关闭并应用」,就能得到你要的结果表。

方法二:DAX 新建计算表

如果不想调整Power Query的转换逻辑,可以直接在报表视图写DAX生成计算表,把代码里的你的业务表名换成你实际的表名即可:

合同去重结果表 = 
VAR 加行序标记 = 
    ADDCOLUMNS(
        '你的业务表名',
        "@行序",
        RANKX(
            FILTER('你的业务表名', '你的业务表名'[Contract] = EARLIER('你的业务表名'[Contract])),
            '你的业务表名'[Reason],,ASC,DENSE
        )
    )
VAR 取最后一条 = 
    SELECTCOLUMNS(
        FILTER(加行序标记, [@行序] = MAXX(FILTER(加行序标记, [Contract] = EARLIER([Contract])), [@行序])),
        "Contract(Distinct)", [Contract],
        "Reason", [Reason]
    )
RETURN 取最后一条

注意:如果有明确的时间/ID排序字段,把上面RANKX里用来排序的[Reason]换成你的排序字段,结果会更准确,避免因为原表加载顺序变动导致结果出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:15:40