Power Query自定义列报错:如何为重复主题行标记‘T’结果?
Power Query自定义列问题解决方法
报错原因
你写的嵌套Table.SelectRows存在两个问题:
- 参数缺失:
Table.SelectRows需要两个必传参数(目标表 + 筛选条件),但你内层的Table.SelectRows(each [SUBJECT_ID] = [SUBJECT_ID]...)只传了筛选函数,没指定要操作的表,这就是报错“传1个参数但需要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
相关产品推荐
相关产品推荐

