如何在Power Query中动态批量合并多组列(无需硬编码列名)
Power Query批量合并员工出勤列(动态适配员工变动)
核心实现逻辑
用List.Accumulate遍历你已有的List_of_Pairs,对每一组列对执行合并操作,同时动态生成带员工首字母的列名,无需手动修改适配员工变动。
具体M代码
假设重排后的表格是Custom1,替换原有单个合并列的步骤,直接用以下代码:
= List.Accumulate( List_of_Pairs, Custom1, (currentTable, columnPair) => let // 提取员工首字母(列对的第一个元素) empInitial = Text.From(columnPair{0}), // 动态生成要合并的两列名 colsToCombine = {empInitial, "Patterns." & empInitial}, // 合并列并设置有意义的新列名 mergedTable = Table.CombineColumns( currentTable, colsToCombine, Combiner.CombineTextByDelimiter(" ", QuoteStyle.None), empInitial & "_出勤状态" // 可自定义后缀,比如直接用empInitial也可 ) in mergedTable
代码说明
List.Accumulate:按顺序遍历List_of_Pairs里的每一组列对,逐步完成批量合并操作empInitial = Text.From(columnPair{0}):从列对中提取员工首字母,确保格式为文本colsToCombine:自动生成当前要合并的两列名称(员工首字母列 + Patterns.首字母列)- 新列名
empInitial & "_出勤状态":直接关联员工首字母,替代默认的"MMK.1"这类无意义命名,清晰对应到具体员工
注意事项
- 确保
List_of_Pairs里的元素是文本格式的列名,比如{"MMK", "Patterns.MMK"},而非直接引用列对象,否则Text.From会报错 - 如果不需要后缀,直接将新列名设为
empInitial,合并后原两列会被自动删除,新列直接替代原员工首字母列
内容的提问来源于stack exchange,提问作者Violet
相关产品推荐
相关产品推荐

