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

Posted

技术标签:

【中文标题】您将如何转换具有可变 ID 位置数量的表,以使位置成为列?【英文标题】:How would you transform a table with a variable number of locations for an ID so that locations become columns? 【发布时间】:2020-01-06 19:25:21 【问题描述】:

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

源表ID、位置 A栋,走廊 B栋,后走廊 B栋,前厅 C栋1楼 C栋2楼 C栋3楼

目标表ID、Location1、Location2、Location3 A栋,走廊,, B楼,后走廊,前走廊, Bldg C,1楼,2楼,3楼

我已尝试转置和旋转/取消旋转,但无法获得我想要的结果。

【问题讨论】:

【参考方案1】:

假设 Table1 有两列 ID 和 Location

选择表并加载到 powerquery 数据...从表范围... [x] 表有标题

选择/单击 ID 列 右键单击 Group By... [basic] ... Group By:ID ... 新列名称:Data ... Operation:All Rows ... Column:blank

这会将每个 ID 的所有数据聚合到自己列中的表中

添加列..自定义列.... 新列名:自定义...公式:=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"

【讨论】:

非常感谢!完美运行。我一辈子都看不到它。哈!!!

以上是关于您将如何转换具有可变 ID 位置数量的表,以使位置成为列?的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL 查询将数据插入到具有可变列数的表中

具有可变大小变量列表的 MySQL 准备语句

如何将 3D 模型添加到场景中以使它们具有特定的 XYZ 位置?

如何为表单创建可变数量的输入?

UITableViewCell 中可变数量的对象

Laravel:通过另一个表从具有关联表的表中检索记录