PowerQuery:如何用多列的每个列名替换文本

PowerQuery: How to replace text with each column name for multiple columns

我正在尝试将每列中的“x”(前两列除外)替换为 table 中的列名,列数未知但至少有 2 列。

我找到了更改一列的代码,但我希望它是动态的:

#"Ersatt värde" = Table.ReplaceValue(Källa,"x", Table.ColumnNames(Källa){2},Replacer.ReplaceText,{Table.ColumnNames(Källa){2}})

有什么解决办法吗?

如果我没理解错的话,我想你可以试试下面的方法之一:

#"Ersatt värde" = 
    let
        columnsToTransform = List.Skip(Table.ColumnNames(Källa), 2),
        accumulated = List.Accumulate(columnsToTransform, Källa, (tableState as table, columnName as text) =>
            Table.ReplaceValue(tableState,"x", columnName, Replacer.ReplaceText, {columnName})
        )
    in accumulated

或:

#"Ersatt värde" = 
    let
        columnsToTransform = List.Skip(Table.ColumnNames(Källa), 2),
        transformations = List.Transform(columnsToTransform, (columnName) => {columnName, each 
         Replacer.ReplaceText(Text.From(_), "x", columnName)}),
        transformed = Table.TransformColumns(Källa, transformations)
    in transformed,

两种方式都遵循类似的方法:

  1. 找出要在哪些列中进行替换(即除了前 2 列之外的所有列)
  2. 遍历上一步中确定的列并实际进行替换。

  • 我使用了 Replacer.ReplaceText,因为那是你在问题中使用的,但我相信这将取代部分匹配和完全匹配。
  • 如果你只想替换完整匹配,我想你可以使用Replacer.ReplaceValue代替。