Forum Discussion

testyuiiop's avatar
testyuiiop
Helper I
2 years ago
Solved

Need help with power query

I'm working on hierarchial data.
My data is like below, rank represents the hierachy level.



and I want the expected outpout like below:

 

How I can achieve this in power query?



and I want my 

  • Hi testyuiiop

     

    v1 Group should be faster, but if you do not have many rows - you won't see the difference.

     

    Result

     

    v1 Group

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTJUitWJVlJwAjKNIEwFZyDbGMpWcAFyTMAcR0Mk5YbI6g1RNBhCdMQCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Name = _t, Rank = _t]),
        TrimmedText = Table.TransformColumns(Source,{{"Name", Text.Trim, type text}}),
        GroupedRows = Table.Group(TrimmedText, {"Rank"}, {{"All", each Table.ToColumns(Table.RemoveColumns(_, {"Rank"})), type table}}),
        Combined = Table.FromColumns(List.Combine(GroupedRows[All]), List.Transform(GroupedRows[Rank], Text.From))
    in
        Combined

     

     

    v2 Pivot

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTJUitWJVlJwAjKNIEwFZyDbGMpWcAFyTMAcR0Mk5YbI6g1RNBhCdMQCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Name = _t, Rank = _t]),
        TrimmedText = Table.TransformColumns(Source,{{"Name", Text.Trim, type text}}),
        PivotedColumn = Table.Pivot(Table.TransformColumnTypes(TrimmedText, {{"Rank", type text}}, "sk-SK"), List.Distinct(Table.TransformColumnTypes(TrimmedText, {{"Rank", type text}}, "sk-SK")[Rank]), "Rank", "Name", each _),
        Ad_FinalTable = Table.AddColumn(PivotedColumn, "FinalTable", each Table.FromColumns(Record.ToList(_), Table.ColumnNames(PivotedColumn)), type table),
        FinalTable = Ad_FinalTable{0}[FinalTable]
    in
        FinalTable

     

8 Replies

  • dufoq3's avatar
    dufoq3
    Community Champion

    Hi testyuiiop

     

    v1 Group should be faster, but if you do not have many rows - you won't see the difference.

     

    Result

     

    v1 Group

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTJUitWJVlJwAjKNIEwFZyDbGMpWcAFyTMAcR0Mk5YbI6g1RNBhCdMQCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Name = _t, Rank = _t]),
        TrimmedText = Table.TransformColumns(Source,{{"Name", Text.Trim, type text}}),
        GroupedRows = Table.Group(TrimmedText, {"Rank"}, {{"All", each Table.ToColumns(Table.RemoveColumns(_, {"Rank"})), type table}}),
        Combined = Table.FromColumns(List.Combine(GroupedRows[All]), List.Transform(GroupedRows[Rank], Text.From))
    in
        Combined

     

     

    v2 Pivot

     

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WclTSUTJUitWJVlJwAjKNIEwFZyDbGMpWcAFyTMAcR0Mk5YbI6g1RNBhCdMQCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Name = _t, Rank = _t]),
        TrimmedText = Table.TransformColumns(Source,{{"Name", Text.Trim, type text}}),
        PivotedColumn = Table.Pivot(Table.TransformColumnTypes(TrimmedText, {{"Rank", type text}}, "sk-SK"), List.Distinct(Table.TransformColumnTypes(TrimmedText, {{"Rank", type text}}, "sk-SK")[Rank]), "Rank", "Name", each _),
        Ad_FinalTable = Table.AddColumn(PivotedColumn, "FinalTable", each Table.FromColumns(Record.ToList(_), Table.ColumnNames(PivotedColumn)), type table),
        FinalTable = Ad_FinalTable{0}[FinalTable]
    in
        FinalTable

     

      • dufoq3's avatar
        dufoq3
        Community Champion

        You're welcome. Few seconds ago I've added v2 into prev. post.