Power Query - 列作为单独的不相关列表(来自未透视数据)

问题描述 投票:0回答:2

如果我有一个像这样的简单的未透视列表:

名字 科目
约翰 英语
山姆 艺术
弗雷德 生物学
约翰 生物学
艾玛 艺术
迈克 生物学

如何创建这样的列表,其中行彼此不相关,并且每列几乎都是一个单独的列表?旋转不起作用 - 这可能吗?

艺术 生物学 英语
艾玛 弗雷德 约翰
山姆 约翰
迈克

谢谢

excel powerbi powerquery powerbi-desktop m
2个回答
6
投票

您需要在旋转之前分组并添加索引。

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Names", type text}, {"Subjects", type text}}),
    #"Grouped Rows" = Table.Group(#"Changed Type", {"Subjects"}, {{"All", each _, type table [Names=nullable text, Subjects=nullable text]}}),
    #"Added Custom" = Table.AddColumn(#"Grouped Rows", "Custom", each Table.AddIndexColumn([All], "Index")),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"All"}),
    #"Expanded Custom" = Table.ExpandTableColumn(#"Removed Columns", "Custom", {"Names", "Index"}, {"Names", "Index"}),
    #"Pivoted Column" = Table.Pivot(#"Expanded Custom", List.Distinct(#"Expanded Custom"[Subjects]), "Subjects", "Names"),
    #"Removed Columns1" = Table.RemoveColumns(#"Pivoted Column",{"Index"})
in
    #"Removed Columns1"

3
投票

仅作为练习,不分组:

let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    Ans = let s1=Table.Column(Source, "Subjects"), 
              s2=List.Sort(List.Distinct(s1)), 
              n1=Table.Column(Source, "Names"), 
              x=List.Numbers(0,List.Count(n1)), 
              n2=List.Transform(s2,(y)=>List.Accumulate(x,{},(s,c)=>if s1{c}=y then List.Combine({s,{n1{c}}}) else s)),
              m=List.Numbers(0,List.Max(List.Transform(n2,(z)=>List.Count(z)))),
              r1=List.Transform(m,(q)=>Record.FromList(List.Accumulate(s2,{},(s,c)=>List.Combine({s,{try n2{List.PositionOf(s2,c)}{q} otherwise null}})),s2)),
              t1=Table.FromRecords(r1)
          in t1
in
    Ans

© www.soinside.com 2019 - 2024. All rights reserved.