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

如何用Power Query展开转置后列并避免重复数据?

Power Query 批量展开列且避免重复数据方案

问题根源

转置后的每一列均为嵌套表,直接批量展开会触发笛卡尔积匹配,导致数据重复。要实现逐列展开且行对齐无重复,需通过循环逐列处理并按行索引合并。

修改后的M代码

let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],
    #"Renamed Columns" = Table.RenameColumns(Source,{{"instrument_key", "Symbol1"}}),
    #"Invoked Custom Function" = Table.AddColumn(#"Renamed Columns", "Symbol.1", each Symbol([Symbol1])),
    #"Removed Columns" = Table.RemoveColumns(#"Invoked Custom Function",{"symbol", "year", "W/M", "Strike", "Option", "Symbol1", "tradingsymbol", "Lot"}),
    #"Transposed Table" = Table.Transpose(#"Removed Columns"),
    // 获取转置后的所有列名
    ColumnNames = Table.ColumnNames(#"Transposed Table"),
    // 循环逐列展开并按索引合并
    #"Expanded All Columns" = List.Accumulate(ColumnNames, #table({}, {}), (state, current) =>
        let
            CurrentColumn = Table.SelectColumns(#"Transposed Table", {current}),
            ExpandedCurrent = Table.ExpandTableColumn(CurrentColumn, current, Table.ColumnNames(CurrentColumn{0}[current])),
            // 添加索引确保行对齐
            AddedIndex = Table.AddIndexColumn(ExpandedCurrent, "Index", 0, 1, Int64.Type),
            // 首次处理直接用当前展开表,后续按索引合并
            Merged = if state = #table({}, {}) then AddedIndex else Table.Join(state, "Index", AddedIndex, "Index")
        in
            Merged
    ),
    // 移除临时索引列
    #"Removed Index Column" = Table.RemoveColumns(#"Expanded All Columns", {"Index"})
in
    #"Removed Index Column"

关键逻辑说明

  • List.Accumulate循环:遍历所有列,逐个展开嵌套表,避免同时展开触发的交叉重复。
  • 索引列对齐:给每列的展开结果添加索引,确保合并时是同一行数据匹配,而非全量交叉。
  • 渐进式合并:从空表开始,逐步将每一列的展开结果合并到最终表中,保证数据结构与目标效果一致。

内容的提问来源于stack exchange,提问作者Sameer Wasnikar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:00:23