Добрый день!
Прошу подсказать возможно ли ускорить выполнение запросов в 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 по сбору больших данных, как лучше такой объем данных собирать (желательно без костылей) с наименьшим кол-вом чтения источника, опыта пока не хватает.
Спасибо.
Прошу подсказать возможно ли ускорить выполнение запросов в Power Query.
Незнаю с чего начать, но попробую описать суть проблемы. Я новичок в PQ. Заранее скажу, я уже перелопатил кучу статей, часть рекомендаций выполнена. Стало конечно быстрее, но не намного.
Исходные данные следующие:
1. Ноутбук с О365/х64. 16 Gb ОЗУ, Core i5
2. Данные получаю из исходных файлов (формат txt, гружу из папки). Изначально был формат mdb, почитал, написано текстовые быстрее, а т.к. исходные данные можно и в txt получить перешел на него. Файлов от 1 до 6, вес каждого 50-100 Мб. Суммарное кол-во строк, получаемое в итоге от выгрузки от 500 000, в зависимости от кол-ва файлов в папке). Все бы ничего, если бы файлов было 1 или два, но когда их допустим 6, ожидать выполнение можно, пожалуй, вечность. 500 к строк, 12 столбцов. Пример ниже (создан через стандартный сэмпл).
Запрос подключения | ||
|---|---|---|
|
а. Всего в файле xlsm 36 запросов, в каждом из которых выполняются определенные вычисления с исходными данными. Все эти запросы надо выгружать на лист Excel (там тоже произвел настройки согласно рекомендациям - убрал галочки с авто изменения ширины и отключил с каждого запроса Enable Background Refreshed).
б. Организовано все следующим образом - вот код что выше, это я значит обрабатываю исходные данные. Эти данные никуда не выгружаются. Следующим запросом получаю исходные данные для динамической фильтрации (использую для этого код на VBA, который в зависимости от нужд вставляется в запрос). Остальные запросы ссылаются на этот, отфильтрованный запрос. Пример основного запроса ниже. (пробовал оборачивать его в буфер, результат нулевой, даже хуже вроде бы, т.к. контейнеры эти загружаются просто в хлам сразу все).
Основной запрос | ||
|---|---|---|
|
в. Ниже приложу код некоторых запросов, прошу соориентировать в какую сторону копать для оптимизации запроса. Уверен, что вопрос лишь в нехватке знаний и практики. Вероятно был выбран неправильный подход к сбору данных.
Пример запроса | ||
|---|---|---|
|
Пример запроса | ||
|---|---|---|
|
Пример запроса | ||
|---|---|---|
|
1. Т.к. в исходных данных 12 столбцов, а каждый конкретный запрос работает только с определенными столбцами, влияет ли это на скорость вычислений (ну допустим при группировке по Col9, Описателю и Col6 из 2 примера под спойлером? Если да, то возможно ли как то обращаться к отдельным столбцам таблицы из основного запроса или лучше использовать в таком случае list.generate/accumulate? Ускорит ли это каким-то образом выполнение запроса?
2. Попробовал импортировать в PBI Desktop, там как то быстрее по ощущениям работает (CPU меньше грузит и выполняется все в теч. 5-10 мин). Но надо в Excel, т.к. доп.софт никто ставить не будет.
Как вообще, подскажите схематично, какие best practices по сбору больших данных, как лучше такой объем данных собирать (желательно без костылей) с наименьшим кол-вом чтения источника, опыта пока не хватает.
Спасибо.
Изменено: - 29.06.2022 12:58:11