Попробуйте, не обязательно правильно, пожалуйста, проверьте его. У кого-нибудь еще есть лучшее решение?
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
Top = Table.SelectRows(Source, each ([Parent] = null)),
Path = Table.AddColumn(Top, "Path", each #table({"Name","ID"},{{[Name],[ID]}})),
Loop = Table.Combine(List.Generate(()=>
Path,
each not Table.IsEmpty(_),
each [
a = Table.NestedJoin(Source,{"Parent"},_,{"ID"},"join",JoinKind.Inner),
b = Table.ExpandTableColumn(a, "join", {"Path"}, {"Pre_Path"}),
c = Table.AddColumn(b,"Path", each [Pre_Path]&Table.Group([Pre_Path],"Name",{"ID",(x)=>[ID]})&#table({"Name","ID"},{{[Name],[ID]}}))
][c]
)),
Result = Table.Distinct(Table.Combine(Loop[Path])),
Sort = Table.Buffer(Table.Sort(Result,{{"Name",0}, {"ID",0}}))
in
Sort
Power Pivot намного проще, вы можете использовать PATH для решения проблемы иерархии родитель-потомок,