转置(或旋转但不聚合)name/value 列对

Transposing (or pivoting but not aggregating) a name/value column pair

我有一个从 XML 导入到 PQ/Excel 的数据集,它具有这种形式 -

Type     Name      Value
measure  name      depth
measure  svmbol    d
measure  value     Fathom
measure  name      width
measure  svmbol    w
measure  value     metre
measure  property  Length

尽管每个项目(度量)的属性数量从 3 到 5 不等,但数据形状清晰且结构化。

我想把后两列的name/value对改成table形式-

Type     Name      Symbol  Value   Property
measure  depth     d       fathom
measure  width     w       metre   Length

看起来应该很简单,但是Transpose只想转置整个table,而NamePivot column,这看起来是正确的工具,要么想要聚合(计数)数据,这对我没有用,要么如果你选择“不聚合”选项失败并出现错误“枚举中的元素太多”。

我认为我可以通过创建四个包含逻辑的自定义列来费力地实现结果,但这似乎过分了。有没有一种方法可以使用 Pivot 或其他函数来轻松完成此操作?

您需要一个唯一的计数器,每次 [Name]=name 在旋转之前都会更改

添加列..索引列

添加列..自定义列...使用公式

if [Name]="name" then [Index] else null

右键单击新的自定义列并向下填写

右键单击索引列并将其删除

单击名称列,然后单击转换...数据透视列...值列为值,在高级中选择不聚合

右键单击多余的列并将其删除

let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Added Index1" = Table.AddIndexColumn(Source, "Index", 0, 1),
#"Added Custom1" = Table.AddColumn(#"Added Index1", "Custom", each if [Name]="name" then [Index] else null),
#"Filled Down1" = Table.FillDown(#"Added Custom1",{"Custom"}),
#"Removed Columns" = Table.RemoveColumns(#"Filled Down1",{"Index"}),
#"Pivoted Column" = Table.Pivot(#"Removed Columns", List.Distinct(#"Removed Columns"[Name]), "Name", "Value")
in  #"Pivoted Column"