Power Query M中IF语句的列引用问题求助
解决Power Query M中IF语句引用其他列替换值的问题
你之前使用Table.TransformColumns的写法无法生效,核心原因是该函数中针对列的转换函数上下文仅指向当前处理的列值(即Col_1的单个值),无法直接引用整行的其他列(比如Col_2)。以下是几种可行的解决方案:
方法1:使用Table.ReplaceValue(推荐)
这个函数允许你在整行上下文里判断条件并替换目标列的值:
= Table.ReplaceValue( #"Previous step", each [Col_1], // 要替换的目标值(这里取原Col_1的值) each if [Col_2] = "ghi" then null else [Col_1], // 条件判断逻辑,可访问整行列 Replacer.ReplaceValue, // 替换规则 {"Col_1"} // 指定要应用替换的列 )
方法2:使用Table.TransformRows
通过逐行处理记录,直接操作整行数据:
= Table.FromRecords( Table.TransformRows( #"Previous step", (row) => if row[Col_2] = "ghi" then Record.TransformFields(row, {"Col_1", (x) => null}) else row ) )
这里row变量代表整行记录,可直接访问row[Col_2]和row[Col_1],修改后返回新的行记录,最后转成表格。
方法3:通过新增列替换原列
先创建包含逻辑判断的新列,再替换原列:
= Table.RenameColumns( Table.DropColumns( Table.AddColumn( #"Previous step", "Col_1_New", each if [Col_2] = "ghi" then null else [Col_1] ), {"Col_1"} ), {{"Col_1_New", "Col_1"}} )
以上三种方法都能实现你的需求:当Col_2的值为"ghi"时,将Col_1替换为null,对应示例数据可得到预期结果:
Col_1 | Col_2 0 | abc 12 | def null | ghi
内容的提问来源于stack exchange,提问作者NoSayMe
相关产品推荐
相关产品推荐

