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

如何在Power Query中基于ID的STATUS条件创建自定义列?

Power Query 实现"STATUS CHECK"自定义列方案

需求规则

  • 同一ID下只要存在任意一行STATUS值为Terminated,该ID所有行的STATUS CHECK列统一标记为Terminated
  • 若该ID下无Terminated状态,STATUS CHECK直接返回原STATUS值

实现方法

方法1:分组+合并(高性能推荐)

适合大数据量场景,仅需一次分组操作,避免重复查询:

let
    源 = 你的数据表, // 替换为实际表名或数据源
    // 按ID分组,标记该ID是否包含Terminated状态
    分组标记 = Table.Group(源, {"ID"}, {{"HasTerminated", each List.Contains([STATUS], "Terminated"), type logical}}),
    // 合并原表与分组标记表
    合并表 = Table.NestedJoin(源, {"ID"}, 分组标记, {"ID"}, "分组数据", JoinKind.LeftOuter),
    // 展开标记列
    展开列 = Table.ExpandTableColumn(合并表, "分组数据", {"HasTerminated"}, {"HasTerminated"}),
    // 添加目标自定义列
    添加STATUS_CHECK = Table.AddColumn(展开列, "STATUS CHECK", each if [HasTerminated] then "Terminated" else [STATUS]),
    // 移除临时标记列(可选操作)
    清理临时列 = Table.RemoveColumns(添加STATUS_CHECK, {"HasTerminated"})
in
    清理临时列

方法2:直接列表判断(代码简洁)

代码更直观,但大数据量下性能略低于方法1:

let
    源 = 你的数据表, // 替换为实际表名或数据源
    // 添加STATUS CHECK列,实时判断当前ID的所有状态
    添加自定义列 = Table.AddColumn(源, "STATUS CHECK", 
        (当前行) => 
            let
                // 获取当前ID对应的所有STATUS值列表
                当前ID状态列表 = Table.SelectRows(源, each [ID] = 当前行[ID])[STATUS]
            in
                if List.Contains(当前ID状态列表, "Terminated") then "Terminated" else 当前行[STATUS]
    )
in
    添加自定义列

结果验证

运行上述代码后,将得到与示例完全一致的结果:

IDSTATUSSTATUS CHECK
A1PendingTerminated
A1CompletedTerminated
A3TerminatedTerminated
A4CompletedCompleted
A4PendingPending
A2PendingPending
A1TerminatedTerminated
A2CompletedCompleted
A2CompletedCompleted
A3CompletedTerminated
A3CompletedTerminated

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:20:16