cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Sang Frequent Visitor
Frequent Visitor

Fast Power Query Code for getting the lowest level children in Parent/Child Hierarchy

I am in search of m query that adds a column to display all Children at level 0 in a table with Parent/Child relation. I am already using a function but its painfully slow.

****fnParChAllChildren****

let
    Source = (ParChTable as table, ChildKey as text, ParentKey as text) as table =>
let
    AllChildren = Table.AddColumn(ParChTable, "AllChildren", each 
        List.Skip(
             List.Generate(()=>
             [Children={Record.Field(_, ChildKey)}],     // (List of) records as start values
             each List.Count([Children]) > 0,            // condition under which the next loop is execute
             each [ Children= List.Buffer(fnRecColumnAsList(
                                        Table.SelectRows(ParChTable, (ParChTable) => List.Contains([Children], Record.Field(ParChTable, ParentKey))) 
                                        , ChildKey))],   // Executable action
             each [Children])                            // (Selection of) return
         ,1)),                                           // Skip first element in list which is it's own key 
    LstAllChildren = Table.AddColumn(AllChildren, "LstAllChildren", each List.Combine([AllChildren])),
    Level = Table.Buffer(Table.AddColumn(LstAllChildren, "Level", each List.Count([AllChildren]))),
    Indent = Table.AddColumn(Level, "Indent", each List.Max(Level[Level])*4-[Level]*4),
    JustLevel0 = List.Buffer(fnRecColumnAsList(Table.SelectRows(Indent, each [Level]=0), ChildKey)),
    AllChildrenJustLevel0 = Table.AddColumn(Indent, "ChildrenJustLevel0", each List.Intersect({[LstAllChildren], JustLevel0}))
in
    AllChildrenJustLevel0
in
    Source
****fnRecColumnAsList*****

let
    Source = (Table as table, ColumnName as text) as list =>
 Table.ToColumns(Table.SelectColumns(Table, ColumnName)){0}
in
    Source

I forgot where I got it from but it works and I use column AllChildrenJustLevel0 generated by it. Only bad thing is its painfully slow.

1 ACCEPTED SOLUTION

Accepted Solutions
Sang Frequent Visitor
Frequent Visitor

Re: Fast Power Query Code for getting the lowest level children in Parent/Child Hierarchy

I got it to work faster by putting Table.Buffer step just before calling it.

View solution in original post

1 REPLY 1
Sang Frequent Visitor
Frequent Visitor

Re: Fast Power Query Code for getting the lowest level children in Parent/Child Hierarchy

I got it to work faster by putting Table.Buffer step just before calling it.

View solution in original post

Helpful resources

Announcements
New Ranks and Rank Icons in 2020

New Ranks and Rank Icons in 2020

Read the announcement for more information!

New Kudos Given Badges Coming

New Kudos Given Badges Coming

We're rolling out new Kudos Given badges. Find out how many Kudos you've given.

November 2019 Community Highlights

November 2019 Community Highlights

Get an overview of the events and great community content from November.

Power Platform World Tour

Power Platform World Tour

Find out where you can attend!

Top Solution Authors
Top Kudoed Authors (Last 30 Days)