您将如何转换具有可变 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 位置数量的表,以使位置成为列?的主要内容,如果未能解决你的问题,请参考以下文章