如何根据电源查询中的单元格值将行拆分为列

How to split row into column base on the cell value in power query

我有如下数据:

我想要如下输出:

我可以使用 VBA 来解决这个问题,但感谢 Power Query 解决的任何建议。你能帮忙吗?

JvdV 有正确答案。但这将 hard-code 代码所针对的列数

下面是一个动态版本,假设两列分别命名为列 1 和列 2。

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
x=Table.Group(Source, {"Column1"}, {{"combined", each Text.Combine([Column2], ","), type text}}),
y=List.Transform({1 .. List.Max(List.Transform(x[combined], each List.Count(Text.Split(_,","))))}, each "combined_"& Text.From(_)),
split = Table.SplitColumn(x, "combined", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), y)
in split

任意数量的列(第一个基列名为 Column1)的动态版本是:

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Group = Table.Group( Source, {"Column1"}, { {"data", each Table.AddIndexColumn( Table.SelectColumns( Table.Sort( Table.AddIndexColumn( Table.UnpivotOtherColumns(Table.Skip(Table.DemoteHeaders(_),1), {"Column1"}, "Attribute", "Value"), "Index", 0, 1, Int64.Type),{{"Attribute", Order.Ascending}, {"Index", Order.Ascending}}) ,{"Column1", "Value"}), "Index", 0, 1, Int64.Type) , type table}}),
#"Expanded data" = Table.ExpandTableColumn(Group, "data", {"Value", "Index"}, {"Value", "Index"}),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Expanded data", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Expanded data", {{"Index", type text}}, "en-US")[Index]), "Index", "Value")
in #"Pivoted Column"

替代排序版本:

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Group = Table.Group( Source, {"Column1"}, {{"data", each Table.AddIndexColumn(Table.SelectColumns(Table.AddIndexColumn(Table.UnpivotOtherColumns(Table.Skip(Table.DemoteHeaders(_),1), {"Column1"}, "Attribute", "Value"), "Index", 0, 1, Int64.Type),{"Column1", "Value"}), "Index", 0, 1, Int64.Type) , type table}}),
#"Expanded data" = Table.ExpandTableColumn(Group, "data", {"Value", "Index"}, {"Value", "Index"}),
#"Pivoted Column" = Table.Pivot(Table.TransformColumnTypes(#"Expanded data", {{"Index", type text}}, "en-US"), List.Distinct(Table.TransformColumnTypes(#"Expanded data", {{"Index", type text}}, "en-US")[Index]), "Index", "Value")
in #"Pivoted Column"