You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Power Query中实现类似批量添加列的批量重复列简化操作?

问题分析

你的问题出在**Table.DuplicateColumn是表级操作**,而你在each上下文(逐行处理)里调用它,导致每个记录里存储的是整个表的副本(执行Table.DuplicateColumn后的完整表),而不是你想要的单个列的值。展开这样的记录列,自然会把整个表嵌套到每一行里,而不是新增目标列。

解决方案:两种简化批量重复列的方法

批量重复列本质就是批量添加新列,新列的值直接引用原列,完全可以复用你之前批量添加列的思路,或者用更直接的表操作累加器来实现。

方法1:复用「添加记录列+展开」的思路

既然复制列=新增列+值取自原列,那我们可以在记录里直接引用当前行的原列值,而不是调用表级的复制命令:

let
    // 假设你的上游步骤是 #"Expanded record"
    Source = #"Expanded record",
    // 添加存储重复列值的记录列
    #"Added Duplicate Record" = Table.AddColumn(Source, "Duplicates", each [
        #"Custom.1 - Copy" = [Custom.1],  // 直接引用当前行的Custom.1值
        #"Custom.3 - Copy" = [Custom.3]   // 直接引用当前行的Custom.3值
        // 可以继续添加更多需要复制的列对
    ]),
    // 展开记录列得到新的重复列
    #"Expanded Duplicates" = Table.ExpandRecordColumn(#"Added Duplicate Record", "Duplicates", {"Custom.1 - Copy", "Custom.3 - Copy"})
in
    #"Expanded Duplicates"

如果需要批量处理大量列,还可以动态生成记录字段,不用手动写每一行:

let
    Source = #"Expanded record",
    // 定义要复制的列映射:{原列名, 新列名}
    ColumnsToDuplicate = {
        {"Custom.1", "Custom.1 - Copy"},
        {"Custom.3", "Custom.3 - Copy"},
        {"Custom.9", "Custom.9 - Copy"}
        // 按需添加更多列对
    },
    // 动态生成记录:每个新列对应原列的值
    #"Added Duplicate Record" = Table.AddColumn(Source, "Duplicates", each 
        Record.FromList(
            List.Transform(ColumnsToDuplicate, each Record.Field(_, _{0})),  // 取原列值的列表
            List.Transform(ColumnsToDuplicate, each _{1})                   // 新列名的列表
        )
    ),
    // 动态展开所有新列
    #"Expanded Duplicates" = Table.ExpandRecordColumn(#"Added Duplicate Record", "Duplicates", List.Transform(ColumnsToDuplicate, each _{1}))
in
    #"Expanded Duplicates"

方法2:用List.Accumulate批量执行Table.DuplicateColumn

如果你更习惯直接用Table.DuplicateColumn命令,也可以用列表累加器遍历所有要复制的列,自动执行多次复制操作,避免手动写重复代码:

let
    Source = #"Expanded record",
    // 定义要复制的列映射
    ColumnsToDuplicate = {
        {"Custom.1", "Custom.1 - Copy"},
        {"Custom.3", "Custom.3 - Copy"}
    },
    // 逐个执行复制列操作
    #"Duplicated Columns" = List.Accumulate(ColumnsToDuplicate, Source, (currentTable, columnPair) => 
        Table.DuplicateColumn(currentTable, columnPair{0}, columnPair{1})
    )
in
    #"Duplicated Columns"

这个方法更直观,本质是把你手动写10次Table.DuplicateColumn的操作,交给循环自动完成。

总结

两种方法都能实现批量重复列的简化操作:

  • 方法1复用了你熟悉的「记录列+展开」逻辑,适合和其他自定义列逻辑结合;
  • 方法2更贴近原生的复制列操作,代码更简洁直接。

内容的提问来源于stack exchange,提问作者Radosław Poprawski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 23:14:07