如何有条件地替换 Powerquery 中的某些选定列

How can one conditionally Replace some selected columns in Powerquery

我有一组数据,我希望替换一些包含彼此相邻的值 1、1、F 的列。 每当 powerquery 看到这些包含 1,1 的三列彼此相邻时,F respectively.I 希望它替换该组值中的列组,例如 0, 0, * 我知道如何用另一个值替换值,但是我只想在这些值出现时将其替换为集合。 有的时候我也很强烈的去解决了,但是没有用。

点击此处查看挑战:

https://ibb.co/Bf3zGRn

谢谢。

可以用复杂的公式来完成,但是做你想做的简单方法是:

添加列..自定义列..用公式来测试这 3 列

if [exammth] = 1 and [mth] =1 and  [mthgrde] ="F" then "b" else "a"

使用列顶部的箭头筛选 bs

右击将三列变换为0,0,* 对于数字,选择任何转换函数然后将公式更改为 each 0,对于 alpha 列使用 each "*"

与原始数据重新组合,过滤为as

let  Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Class", type text}, {"camth", Int64.Type}, {"exammth", Int64.Type}, {"mth", Int64.Type}, {"mthgrde", type text}, {"caecons", Int64.Type}, {"examecons", Int64.Type}, {"ecpms", Int64.Type}}),
#"Added Custom" = Table.AddColumn(#"Changed Type", "Custom", each if [exammth] = 1 and [mth] =1 and  [mthgrde] ="F" then "b" else "a"),
#"Filtered Rows" = Table.SelectRows(#"Added Custom", each ([Custom] = "b")),
Replace1 = Table.TransformColumns(#"Filtered Rows",{{"exammth", each 0, Int64.Type}}),
Replace2 = Table.TransformColumns(Replace1,{{"mth", each 0, Int64.Type}}),
Replace3 = Table.TransformColumns(Replace2,{{"mthgrde", each "*", type text}}),
combined = Replace3 &  Table.SelectRows(#"Added Custom", each ([Custom] = "a") )
in  combined

此步骤将满足指定条件的指定列的值替换为0:

= Table.ReplaceValue(#"Previous Step", each [exammth] = 1 and [mth] = 1 and [mthgrade] = "F", 0, (x,y,z)=> if y then z else x, List.Select(Table.ColumnNames(#"Previous Step"), each List.Contains({"exammth","mth","mthgrade"},_)))