Search code examples
powerbidatasetpowerquery

data horizontally power query


I have the following example of a data set, I want to have them horizontally. I tried grouping by "sol_ped", "pos", and "name" , then creating a custom column with Table.Column but it only lets me add one field for example "prec" and I need two or more fields. Any idea how I can do?

sample dataset

sol_ped pos name prec cat
11 1 one 11.01 a
11 1 one 14.00 b
11 1 one 7.00 c
11 2 two 8.12 d

desired result

sol_ped pos name prec1 cat1 prec2 cat2 prec3 cat3 prec4 cat4
11 1 one 11.01 a 14.00 b 7.00 c 0.00 na
11 2 two 18.02 d 18.12 na na na na na

Solution

  • In powerquery you can try

    let  Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(Source, {"sol_ped", "pos", "name"}, "Attribute", "Value"),
    #"Grouped Rows" = Table.Group(#"Unpivoted Other Columns", {"sol_ped", "pos", "name"}, {
        {"data", each     
            Table.AddColumn(
                Table.AddColumn(
                    Table.AddIndexColumn(_, "Index", 0, 1, Int64.Type)
                , "Count", each Number.IntegerDivide([Index], 2), Int64.Type)
            ,"MergeName", each [Attribute]&Text.From([Count]+1 ))
    , type table }}),
    #"Expanded data" = Table.ExpandTableColumn(#"Grouped Rows", "data", {"Value", "MergeName"}, {"Value", "MergeName"}),
    #"Pivoted Column" = Table.Pivot(#"Expanded data", List.Distinct(#"Expanded data"[MergeName]), "MergeName", "Value"),
    #"Change Type"= Table.TransformColumnTypes(#"Pivoted Column",List.Transform(List.Select(Table.ColumnNames(#"Pivoted Column"), each Text.StartsWith(_,"prec")),each {_, type number}))
    in #"Change Type"
    

    enter image description here