Здравствуйте. Есть структура категорий интернет-магазина с иерархией parent/child1/child2/child3... Мне ее нужно переделать в 2 столбца, чтобы было только child/parent и в новой стуктуре удалить дубли.
К сожалению простое удаление дубликатов тут не подойдет, т.к.может быть вариант parent1/child1/child3/child4 и parent2/child1/child3/child4 или parent2/child2/child3/child4. Удалив дубликаты мы получим только одну пару child3/child4, а нужно 3 разных.
Естественно, вы же в примере показали вывод исходных cats. Тогда что должно остаться для пары предок потомок Столовые приборы FoREST, если в столбце cats три разных значения? Вы уж определите, не стесняйтесь А то ни слова, а претензии разработчику
let Source =Excel.CurrentWorkbook(){[Name ="Таблица1"]}[Content], Split =List.Buffer( List.Zip( List.Transform( Source[cats], each let a =List.Buffer({0}&Text.Split(_," // ")), b =List.Count(a) in List.Generate( ()=>0, each _ < b, each _ +1, each a{_}meta[parent =List.Range(a,1, _)] ) ) ) ), ParentChild =List.Transform({0..List.Count(Split)-2},each let tbl =Table.FromColumns(List.Range(Split, _,2),{"parent","child"}), lst =Table.ToRecords(Table.SelectRows(tbl,each[child]<>null)), ret =Table.FromRecords(List.Distinct(lst,each{Value.Metadata([child]),[child]})) in ret), Result =Table.AddColumn( Table.Combine(ParentChild), "path", eachText.Combine(Value.Metadata([child])[parent]," // ") ) in Result
// Таблица1
let
Source = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content],
Add = Table.AddColumn(Source,"Child_Parent", each let a=List.Reverse( Text.Split([cats]," // ")),b=Table.FromColumns({a, List.Skip(a) & {0}},{"child","parent"}) in Table.AddIndexColumn(b,"id")),
Expanded = Table.ExpandTableColumn(Add, "Child_Parent", {"child", "parent","id"}),
Extracted = Table.AddColumn(Expanded, "cats2", each let a=[id] in Text.BeforeDelimiter([cats], "//", {a-1, RelativePosition.FromEnd}))[[cats2],[child],[parent]]
in
Extracted