Страницы: 1
RSS
Оптимизация запросов в Power Query
 
Добрый день!
Прошу подсказать возможно ли ускорить выполнение запросов в Power Query.
Незнаю с чего начать, но попробую описать суть проблемы. Я новичок в PQ. Заранее скажу, я уже перелопатил кучу статей, часть рекомендаций выполнена. Стало конечно быстрее, но не намного.
Исходные данные следующие:
1. Ноутбук с О365/х64. 16 Gb ОЗУ, Core i5
2. Данные получаю из исходных файлов (формат txt, гружу из папки). Изначально был формат mdb, почитал, написано текстовые быстрее, а т.к. исходные данные можно и в txt получить перешел на него. Файлов от 1 до 6, вес каждого 50-100 Мб. Суммарное кол-во строк, получаемое в итоге от выгрузки от 500 000, в зависимости от кол-ва файлов в папке). Все бы ничего, если бы файлов было 1 или два, но когда их допустим 6, ожидать выполнение можно, пожалуй, вечность. 500 к  строк, 12 столбцов. Пример ниже (создан через стандартный сэмпл).
Запрос подключения
3. Структура следующая:
а.  Всего в файле xlsm 36 запросов, в каждом из которых выполняются определенные вычисления с исходными данными. Все эти запросы надо выгружать на лист Excel (там тоже произвел настройки согласно рекомендациям - убрал галочки с авто изменения ширины и отключил с каждого запроса Enable Background Refreshed).
б. Организовано все следующим образом - вот код что выше, это я значит обрабатываю исходные данные. Эти данные никуда не выгружаются. Следующим запросом получаю исходные данные для динамической фильтрации (использую для этого код на VBA, который в зависимости от нужд вставляется в запрос). Остальные запросы ссылаются на этот, отфильтрованный запрос.  Пример основного запроса ниже. (пробовал оборачивать его в буфер, результат нулевой, даже хуже вроде бы, т.к. контейнеры эти загружаются просто в хлам сразу все).

Основной запрос

в. Ниже приложу код некоторых запросов, прошу соориентировать в какую сторону копать для оптимизации запроса. Уверен, что вопрос лишь в нехватке знаний и практики. Вероятно был выбран неправильный подход к сбору данных.
Пример запроса
Пример запроса
Пример запроса
Несколько примечаний:
1. Т.к. в исходных данных 12 столбцов, а каждый конкретный запрос работает только с определенными столбцами, влияет ли это на скорость вычислений (ну допустим при группировке по Col9, Описателю и Col6 из 2 примера под спойлером? Если да, то возможно ли как то обращаться к отдельным столбцам таблицы из основного запроса или лучше использовать в таком случае list.generate/accumulate? Ускорит ли это каким-то образом выполнение запроса?
2. Попробовал импортировать в PBI Desktop, там как то быстрее по ощущениям работает (CPU меньше грузит и выполняется все в теч. 5-10 мин). Но надо в Excel, т.к. доп.софт никто ставить не будет.

Как вообще, подскажите схематично, какие best practices по сбору больших данных, как лучше такой объем данных собирать (желательно без костылей) с наименьшим кол-вом чтения источника,  опыта пока не хватает.
Спасибо.
Изменено: creept - 29.06.2022 12:58:11
 
OFF
creept, спойлерам можно давать названия (чтобы было понятно, что внутри), а также вкладывать их друг в друга и много другое — подробнее в моей теме Оформление сообщения в теме (любая ветка) ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
вариант перехода на DAX не рассматриваете?
 
mechanix 85, все варианты рассматриваю с условием, что в конечном итоге (в отчете выдачи) должна получиться книга без привязки к запросам в виде плоских таблиц и данных (сейчас это делаю макросом по итогу формирования данных, который потом просто пересохраняет из шаблона в обычную книгу) . DAX вообще пока освоение не начинал даже. Но если это решение существенно выгоднее, буду переделывать.
 
Цитата
creept написал:
должна получиться книга без привязки к запросам в виде плоских таблиц

ну так не бывает, даже ваши таблицы ссылаются на запросы, а DAX использует модель данных. в любом случае, я считаю, что такое ТЗ для платной ветки
 
mechanix 85, ну для какой платной ветки, я же совета прошу, best practices, поделиться как люди такие объемы обрабатывают, может какие-то еще лайфхаки есть как ускорить обработку запросов, может что-то переустановить надо или удалить какой-нибудь компонент, мало ли с чем люди сталкивались. Я же не написал переделайте мне вот это вот все. Это же уже все работает, долго просто :)
Шаблон, в котором запросы крутятся пускай остается шаблоном (или книга, где модель находится в случае с DAX). Я написал про финальный результат. Например, я при помощи VBA могу удалить запросы в PQ или изменить (что я и делаю при формировании отчета выдачи). Может коряво конечно, но до чего докопался.  
А про DAX я просто незнаю ничего. С модели на лист данные же вытягиваются в виде сводной таблицы? У меня будет потом возможность это все в плоские таблицы преобразовать? Смогу я защитить модель при задании пароля на структуру?  Какие объемы обрабатываете сами? Почему Вы написали про DAX, он что быстрее работать точно будет?
 
Цитата
creept написал:
С модели на лист данные же вытягиваются в виде сводной таблицы? У меня будет потом возможность это все в плоские таблицы преобразовать? Смогу я защитить модель при задании пароля на структуру?  Какие объемы обрабатываете сами? Почему Вы написали про DAX, он что быстрее работать точно будет?

в виде сводных, до той детализации, которая Вам нужна
про защиту насколько знаю - нет
на данной момент мой объем порядка 8 млн строк
DAX работает на лету для вычислений как например
Код
calc_top10 = Number.Round(List.Sum(KeptRows[#"Общее кол-во"])/calcs_total,3)
 
creept, в данном случае, чтобы предложить Вам “best practices”, нужно понять Вашу потребность (выраженную немаленькие объемом текста), посмотреть данные и придумать решение. Это не быстро. Возможно, даже будет рутинно.
Вы «знаете» свои данные и понимаете необходимый результат. Мы - нет.
Подумайте, какая у нас мотивация тратить 30-90 мин на просто изучение Вашего вопроса?
Поэтому mechanix 85 правильно пишет, что это очень похоже на платное задание.

P.S. В большинстве случаев проектирование корректной модели - это от 50% времени на реализацию всей задачи. А это именно то, что Вы просите.
Изменено: surkenny - 29.06.2022 22:46:31
 
mechanix 85, спасибо большое за инфу, будем посмотреть в сторону DAX.
surkenny, проектировать ничего не надо. Я вроде про проектирование ничего не писал. Я ожидал возможно какие-то общие советы, типа "зачем вы так таблицы группируете" или "вот ссылка, тут с О365 проблемы были, помогла переустановка Фреймворка", ну к примеру.
вот тут например , и вот тут тоже, и тут, и тут например, была мотивация у людей. Да много тем подобных, ну о чем Вы уважаемый. Да, я наверное перестарался, много текста написал. Но тут как, мало напишешь - недостаточно вводных данных как же мы вам поможем, много - "да у вас тут целое ТЗ".:) В любом случае форуму и в частности Вам большое спасибо, узнаю всегда много нового. Тему давайте закроем, платные советы мне конечно же не нужны.
Страницы: 1
Наверх