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

Power Query自定义列报错:如何为重复主题行标记‘T’结果?

Power Query自定义列问题解决方法

报错原因

你写的嵌套Table.SelectRows存在两个问题:

  1. 参数缺失:Table.SelectRows需要两个必传参数(目标表 + 筛选条件),但你内层的Table.SelectRows(each [SUBJECT_ID] = [SUBJECT_ID]...)只传了筛选函数,没指定要操作的表,这就是报错“传1个参数但需要2个”的核心原因。
  2. 冗余条件:[RECEIVED] = [RECEIVED]是恒成立的判断,完全没必要加入筛选逻辑。

解法一:分组+合并(性能最优,适合大数据量)

先按主题分组标记是否包含"T",再合并回原表,步骤清晰且效率高:

let
    源 = #"Renamed Columns4",
    // 按主题分组,判断每组是否有订单结果为"T"
    主题分组 = Table.Group(源, {"SUBJECT_ID"}, {{"T issued?", each if List.Contains([ORDER_RESULT], "T") then "Yes" else null}}),
    // 将分组结果合并回原表
    合并表 = Table.NestedJoin(源, {"SUBJECT_ID"}, 主题分组, {"SUBJECT_ID"}, "临时分组", JoinKind.LeftOuter),
    // 提取自定义列并移除临时列
    最终表 = Table.ExpandTableColumn(合并表, "临时分组", {"T issued?"}, {"T issued?"})
in
    最终表

解法二:修正自定义列公式(贴近你的原始思路)

在自定义列中明确指定操作的表,修正你原来的代码:

= Table.AddColumn(#"Renamed Columns4", "T issued?", each 
    let
        当前主题 = [SUBJECT_ID],
        // 筛选当前主题的所有行
        主题相关行 = Table.SelectRows(#"Renamed Columns4", each [SUBJECT_ID] = 当前主题),
        // 检查是否存在订单结果为"T"的行
        存在T = List.Contains(主题相关行[ORDER_RESULT], "T")
    in
        if 存在T then "Yes" else null
)

注:如果数据量较大,优先选解法一,分组操作比逐行筛选的性能高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:50:13