Страницы: 1
RSS
Сгрупировать структуру категорий PQ
 
Здравствуйте, есть таблица состоящая из 2 столбцов, родительская категория и подчиненная. Задача преобразовать ее из 2-х мерной в n-мерную, чтобы было видно полные цепочки подчиненности. Пример прилагаю.
 
Вот здесь очень подробно разбирался ваш вопрос и было предложено готовое решение. Попробуйте применить к вашему случаю.
Изменено: PooHkrd - 27.11.2019 15:18:01
Вот горшок пустой, он предмет простой...
 
Спасибо, просмотрел примеры и не совсем понял как вывести дерево.
Изменено: Oleksiy Babenko - 27.11.2019 17:57:17
 
вариант с рекурсией
Код
let
    fn = (t,optional depth)=>
        let 
            depth=if depth=null then 1 else depth, 
            t=Table.AddColumn(t, "x", each
                let 
                    Childs  = Table.SelectRows(Source,(r)=>r[parent_id]=[parent])[category_id],
                    ToTable = Table.FromColumns({Childs},{"parent"}),
                    Dummy   = #table({"parent","x"},{})
                in if List.Count(Childs)>0 then @fn(ToTable,depth+1) else Dummy
            ),
            AllColumns    = Table.ColumnNames(t[x]{0}),
            NeededColumns = List.RemoveMatchingItems(AllColumns,{"x"}),
            NewColumns    = {"child"&Text.From(depth)}&List.RemoveMatchingItems(AllColumns,{"parent","x"})
        in Table.ExpandTableColumn(t,"x",NeededColumns,NewColumns),
    Source   = Table.Buffer(Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content]),
    TopLevel = Table.FromColumns({List.Difference(List.Distinct(Source[parent_id]),Source[category_id])},{"parent"}),
    Chains   = fn(TopLevel)
in
    Chains
Изменено: Андрей Лящук - 27.11.2019 22:04:36
 
Спасибо, Андрей Лящук, то что нужно.
Страницы: 1
Наверх