【问题标题】:PowerQuery: How to replace text with each column name for multiple columnsPowerQuery:如何用多列的每列名称替换文本
【发布时间】:2020-09-10 13:57:21
【问题描述】:

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

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

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

关于如何解决它的任何想法?

【问题讨论】:

    标签: list replace foreach powerquery columnname


    【解决方案1】:

    如果我理解正确,我认为您可以尝试以下任一方法:

    #"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

    【讨论】:

    • 非常感谢。它完美地工作!下次我会考虑 ReplaceValue。在这种情况下,除了空单元格或包含 x 的单元格之外,将没有任何其他内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多