Страницы: 1
RSS
Сбор данных из таблиц с разными шапками и количеством столбцов в шапке (PQ)
 
Добрый день!
Есть задача собрать и обработать данные из нескольких выгрузок 1С. Проблема заключается в том, что от месяца к месяцу в этих отчетах разное количество столбцов. Среди приемов есть алгоритм для сбора данных при одинаковом количестве столбцов. К сожалению, адаптировать к разным по размеру шапкам у меня не выходит.
Что я делал:
1. В первой итерации я просто взял один из файлов как пример, настроил преобразование в нем - и резонно получил ошибку во всех остальных файлах (количество столбцов отличается, просто ругался что нет, условно, Column220)
2. В текущей итерации собрал все варианты шапки в одном файле-примере, настроил преобразование по нему - и снова получил ошибку по всех остальных файлах по той же причине (нет столбца "Такой-то")
С учетом своего опыта единственным вариантом вижу сбор через PQ отдельного листа в каждом файле, который будет преобразовывать конкретную таблицу этого файла, а в сборе уже просто собирать эти таблицы, но это настройка 12 крайне похожих (но все-таки разных) запросов PQ. Хотелось бы все-таки делать это в одном общем запросе, а не в тринадцати (12 запросов в файлах, один запрос на сбор данных этих запросов).
Прошу помощи в решение этой задачи - создании одного общего запроса. Пример по последней итерации приложил в архиве (папка с файлами данных+файл сбора).
Заранее благодарю)
Программный код, как и яды, лучше тестировать по капельке
Люблю изобретать велосипеды с колесами произвольной формы
 
Собрать данные с таблиц с изменяющимися столбцами в PowerQuery
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, спасибо, буду вдумчиво пробовать.  
Программный код, как и яды, лучше тестировать по капельке
Люблю изобретать велосипеды с колесами произвольной формы
 
let
   f=(x)=>[a=Table.PromoteHeaders( Table.Skip(Excel.Workbook(x)[Data]{0},(x)=>x[Column1]<>"Организация")),
           nms=List.Buffer(List.Select(Table.ColumnNames(a),(x)=>not Text.Contains(x,"Column"))),
           t=Table.SelectRows( Table.SelectColumns(a,nms),(x)=>x[Организация]<>"Итого" and x[Организация]<>null)][t],

   from = Folder.Files("........\Данные"), //ВАШ ПУТЬ К ПАПКЕ

   sel = Table.SelectColumns(Table.SelectRows(from,(x)=>x[Extension]=".xlsx" and not Text.Contains(x[Name],"~")),{"Content", "Name"}),
   tr=Table.TransformColumns(sel,{"Content",f}),
   nms=List.Distinct(List.Combine(List.Transform(tr[Content],Table.ColumnNames))),
   to=Table.ExpandTableColumn(tr, "Content", nms)
in
   to
Изменено: Helenazov - 14.01.2026 15:32:19
 
Helenazov, ругается "Недопустимый идентификатор" на ®. Когда исправил на (FFF) (это же название переменной, верно?), стал выдавать "Импорт r не соответствует ни одному из экспортов" на строчку [r[Column1]<>"Организация"]
Программный код, как и яды, лучше тестировать по капельке
Люблю изобретать велосипеды с колесами произвольной формы
 
Цитата
написал:
а ®.
код поменяла r на x. сорян правила оформления надо было изучить)). а в мейл фвйл не получили ?
 
Helenazov, к почте еще часика 3 доступа не будет( Поэтому затрудняюсь с ответом.
Ваш вариант мне нравится гораздо больше: сохранился порядок начальных неизменных столбцов, да и не надо таблицы делать умными. Единственный минус: "ушли" два столбца, у которых были объединенные заголовки. Но это я поправлю уже в изначальных файлах (может быть, если данные будут нужны).
Программный код, как и яды, лучше тестировать по капельке
Люблю изобретать велосипеды с колесами произвольной формы
Страницы: 1
Читают тему
Наверх