проблема такая, каждый день мы получаем файл Эксель с огромным количеством строк в котором несколько уровней группировки данных. Задача состоит в том чтобы получить нормализованную таблицу. Пример файла во вложении. Первый лист это исходный вариант файла, но он очень усечен т.к. объем превышает разрешенный для закачивания на этом сайте. На втором листе результат который бы хотелось получить в автоматическом режиме через PQ на ежедневной основе.
Это Вам к buchlotnik надо обращаться. Не знаю как тут относятся к публикациям ссылок на сторонние ресурсы, поэтому поищите в поисковике "Раскидываем иерархию через List.Generate". В этом видео исчерпывающий ответ на ваш вопрос.
MadNike написал: Раскидываем иерархию через List.Generate
зачем так усложнять? ТС-у нужен только 2 нижних уровня. А если учесть, что у "заголовков" отсутствуют данные в некоторых колонках, то здесь и Table.Group справится.
Table.Group
let data = Table.Skip(Excel.CurrentWorkbook(){[Name = "data_table"]}[Content], 4), cols = List.Transform({"1".."7"}, each "Column" & _), gr = Table.Group( data, {"Column1", "Column2", "Column3"}, {"x", (x) => Table.Skip(x)}, GroupKind.Local, (s, c) => Number.From(s[Column3] is null and c[Column3] is null) )[[Column1], [Column2], [x]], sel = Table.ExpandTableColumn( Table.SelectRows(gr, each not Table.IsEmpty([x])), "x", cols, {"Артикул", "Номенклатура", "Единицы", "Скидка", "Цена", "Остаток 1", "Остаток 2"} ), rc = Table.RenameColumns(sel,{{"Column1", "Артикул1"}, {"Column2", "Номенклатура1"}}) in rc
Sekonya, исходные данные в файле с решением - в поименованном диапазоне. Если будете читать внешний файл, то поменяйте код в начале. Также названия колонок скорректируйте на свое усмотрение.
Здравствуйте, спасибо огромное за уделение внимания)
мне бы хотелось понять эту конструкцию, если не трудно, сможете объяснить?
есть первый шаг в запросе: "= Table.Skip(Excel.CurrentWorkbook(){[Name = "data_table"]}[Content], 4)" откуда берется данные? по названию понятно что это "data_table", но в файле Excell я не могу найти этой таблицы.
когда я вставляю в свой файл этот запрос, он ругается что не может найти таблицу "data_table"
посмотрите на названия столбцов после первого шага в вашем файле. Сравните их с названиями тех же столбцов в моем файле. Если и после этого не придет понимание что же надо сделать, то сходите в раздел Работа - там расскажут и покажут. Или вот этот код попробуйте применить:
не зависит от названия колонок
let data = Table.Skip(Excel.CurrentWorkbook(){[Name = "data_table"]}[Content], 4), cols = List.Transform({"1".."7"}, each "Column" & _), ren_cols = Table.RenameColumns(data, List.Zip({Table.ColumnNames(data), cols})), gr = Table.Group( ren_cols, {"Column1", "Column2", "Column3"}, {"x", (x) => Table.Skip(x)}, GroupKind.Local, (s, c) => Number.From(s[Column3] is null and c[Column3] is null) )[[Column1], [Column2], [x]], sel = Table.ExpandTableColumn( Table.SelectRows(gr, each not Table.IsEmpty([x])), "x", cols, {"Артикул", "Номенклатура", "Единицы", "Скидка", "Цена", "Остаток 1", "Остаток 2"} ), rc = Table.RenameColumns(sel,{{"Column1", "Артикул1"}, {"Column2", "Номенклатура1"}}) in rc