您将如何转换具有可变数量的 ID 位置的 table,以便位置成为列?

How would you transform a table with a variable number of locations for an ID so that locations become columns?

我有一个包含列 ID 和位置的 table。一个 ID 可以有多个(比方说 5 个)位置。如何将源 Table 转换为目标 Table?

来源Table
ID,位置
A 楼走廊
B 栋,后走廊
B 楼前走廊
C栋一楼
C栋2楼
C 栋 3 楼

目标Table
ID、位置 1、位置 2、位置 3
Bldg A,走廊,
B 栋,后走廊,前走廊,
C栋1楼2楼3楼

我试过转置 pivot/unpivot 但我得不到我想要的结果。

假设 Table1 有两列 ID 和 Location

Select table 并加载到 powerquery 数据...从 Table 范围...[x] table 有 headers

Select/Click ID 列 right-click 分组依据...[基本] ... 分组 By:ID ... 新列 Name:Data ... Operation:All 行 ... Column:blank

这会将每个 ID 的所有数据汇总到一个 table 的列中

添加列..自定义列....
新列名称:自定义 ... 公式:=Table.Column([Data],"Location")

这将为每个仅包含位置的 ID 创建一个列表

单击自定义列顶部的 -><- 箭头,提取值,带逗号

这会将 Location 的所有唯一值与 , 结合起来以将它们分开

最终代码(您也可以使用 Advanced...粘贴)

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Grouped Rows" = Table.Group(Source, {"ID"}, {{"Data", each _, type table}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.Column([Data],"Location")),
#"Extracted Values" = Table.TransformColumns(#"Added Custom", {"Custom", each Text.Combine(List.Transform(_, Text.From), ","), type text})
in #"Extracted Values"

以上的好处是更容易理解,并且可以使用界面完成。如果你想变得花哨,你可以使用下面...一个单一的步骤来聚合 ID 并组合位置。使用高级编辑器粘贴

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Grouped Rows" = Table.Group(Source, {"ID"}, {{"Custom", each Text.Combine(List.Transform([Location], Text.From), ","), type text}})
in #"Grouped Rows"