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

如何使用PowerQuery批量将表格扁平化为指定顺序的单行结构?

Power Query 批量表扁平化解决方案

单表转换核心逻辑(解决列顺序问题)

按以下步骤处理单表即可保证输出列顺序符合先遍历单个Aspect的所有CAT,再遍历下一个Aspect的规则:

  • 导入单表后先给两类列标记固定顺序:
    1. 提取所有CAT列(CAT1~CAT5)按你需要的拼接顺序生成带索引的顺序表,索引从1开始递增
    2. 提取所有Aspect列按你需要的拼接顺序生成带索引的顺序表,索引从1开始递增
  • 选中所有CAT列执行「逆透视其他列」操作,得到包含CAT列名、Aspect列名、对应值的三行结构
  • 给每行匹配CAT顺序、Aspect顺序的索引值
  • 新增自定义列拼接新列名,公式为[Aspect列名] & ":" & [CAT列名]
  • 先按Aspect顺序升序排序,再按CAT顺序升序排序,保证后续转置后列顺序符合要求
  • 仅保留新列名、值两列,执行转置、提升首行作为表头操作,即可得到顺序正确的单行结果

批量处理50个工作表代码模板

直接套用以下M代码即可实现全量自动化处理,按需替换标注的自定义参数即可:

let
    // 读取当前工作簿所有工作表
    Source = Excel.CurrentWorkbook(),
    // 筛选仅保留Table1到Table50的工作表
    FilterTargetTables = Table.SelectRows(Source, each 
        Text.StartsWith([Name], "Table") 
        and Value.FromText(Text.AfterDelimiter([Name], "Table")) >=1 
        and Value.FromText(Text.AfterDelimiter([Name], "Table")) <=50
    ),
    // 单表处理自定义函数
    ProcessSingleTable = (InputTable as table) as table =>
    let
        // ---------- 此处修改为你实际的CAT列名,顺序按你需要的拼接顺序排列 ----------
        CATList = {"CAT1","CAT2","CAT3","CAT4","CAT5"},
        // 生成CAT顺序索引
        CATOrderTable = Table.AddIndexColumn(Table.FromList(CATList, Splitter.SplitByNothing(), {"CAT名称"}), "CAT顺序", 1, 1),
        // 自动提取所有Aspect列(除CAT列外的所有列)
        AspectList = List.RemoveItems(Table.ColumnNames(InputTable), CATList),
        // 生成Aspect顺序索引,顺序和原表Aspect列从左到右顺序一致
        AspectOrderTable = Table.AddIndexColumn(Table.FromList(AspectList, Splitter.SplitByNothing(), {"Aspect名称"}), "Aspect顺序", 1, 1),
        // 逆透视得到行列对应关系
        UnpivotAspect = Table.UnpivotOtherColumns(InputTable, CATList, "Aspect名称", "Aspect值"),
        UnpivotCAT = Table.UnpivotColumns(UnpivotAspect, CATList, "CAT名称", "最终值"),
        // 关联顺序索引
        MergeCATOrder = Table.NestedJoin(UnpivotCAT, {"CAT名称"}, CATOrderTable, {"CAT名称"}, "CAT索引", JoinKind.LeftOuter),
        ExpandCATOrder = Table.ExpandTableColumn(MergeCATOrder, "CAT索引", {"CAT顺序"}, {"CAT顺序"}),
        MergeAspectOrder = Table.NestedJoin(ExpandCATOrder, {"Aspect名称"}, AspectOrderTable, {"Aspect名称"}, "Aspect索引", JoinKind.LeftOuter),
        ExpandAspectOrder = Table.ExpandTableColumn(MergeAspectOrder, "Aspect索引", {"Aspect顺序"}, {"Aspect顺序"}),
        // 生成新列名并排序
        AddNewColumnName = Table.AddColumn(ExpandAspectOrder, "新列名", each [Aspect名称] & ":" & [CAT名称]),
        SortByRule = Table.Sort(AddNewColumnName,{{"Aspect顺序", Order.Ascending}, {"CAT顺序", Order.Ascending}}),
        // 转置生成单行结果
        KeepNeededColumns = Table.SelectColumns(SortByRule,{"新列名", "最终值"}),
        TransposeTable = Table.Transpose(KeepNeededColumns),
        PromoteHeader = Table.PromoteHeaders(TransposeTable, [PromoteAllScalars=true])
    in
        PromoteHeader,
    // 批量应用转换规则
    AddProcessResult = Table.AddColumn(FilterTargetTables, "处理结果", each ProcessSingleTable([Data])),
    // 合并所有表的处理结果
    CombineAllResults = Table.Combine(AddProcessResult[处理结果])
in
    CombineAllResults

内容的提问来源于stack exchange,提问作者Nicolás Lope de Barrios

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:15:03