Задать вопрос
@tlyubavskaya

PowerQuery эффективность применения при работе с большим к-вом файлов?

Добрый день!
Нужно экспертное мнение о применении для аналитики PoweQuery в случае, когда нужно собрать и объединить данные из 15 источников - файлы Excel. Файлы располагаются частично на сервере, частично в SharePoint.
Изначально запросы были сформированы 2 года назад. Работали быстро. Последние 1,5 года запросы обрабатываются крайне медленно. Чтобы загрузился 1 шаг, который требует правок приходится ждать до часа. Часто при этом Excel зависает. Приходится закрывать файл через диспетчер задач.
Примерно год назад при попытке закрыть Excel через диспетчер задач я стала наблюдать очень энергоемкий процесс, которого ранее не наблюдалось: Microsoft.Mashup.Container.Loader.exe. Выяснила, что это файл для корректной работы PoweQuery. В блогах прочла, что файл может быть поврежден.
Тоже самое происходит при обновлении сводных таблиц, которые настроены на тяжелый Excel файл - результат запросов PoweQuery + формулы.
Я обратилась к IT специалистам нашей компании. Они сказали, что никто такие файлы не меняет. Также у наших IT специалистов однозначное мнение о том, что ни Excel ни PoweQuery нельзя применять для аналитики. Что данные программы являются легкими приложениями для бытового использования.
Можете высказать свое мнение, действительно ли, что для работы с множеством файлов Excel в PoweQuery не лучшее решение? Или в моем случае это может быть техническая проблема, которую могут решить профессиональные IT?
Спасибо!
  • Вопрос задан
  • 122 просмотра
Подписаться 2 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Нетология
    Excel: от основ до анализа данных
    2 месяца
    Далее
  • Skillbox
    Excel + Google Таблицы с нуля до PRO
    4 месяца
    Далее
  • GB (GeekBrains)
    Excel + Google-таблицы с нуля до PRO
    4 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 2
А работа с обычными файлами лежащими на сервере не вызывает проблем? А скорости до сервера норм? А то может быть дело не в powerquery.
Ответ написан
Комментировать
zamboga
@zamboga
Аналитика данных, BI-аналитика, дашборды
Альберто Феррари и Марко Руссо (оба -- гуру Power Query / BI) не согласятся в вашими айтишниками)

Вообще, Excel -- лишь оболочка для итоговых данных, которые делаются Power Query. Да, что-то удобнее и нагляднее сделать в Power BI, что-то в Excel, а под капотом одно и тоже (Power Query). Пол мира сидит на дашбордах на Power BI, который априори завязан на Power Query так или иначе, и как то всё работает же)

Поэтому утверждать, что Excel не подходит для аналитики, Power BI не подходит для аналитики, Python не подходит для аналитики, SQL не подходит для аналитики, чтоугодноещё не подходит для аналитики — так себе, всё сильно зависит от конкретной задачи.

Что касается самого Power Query (как и любой другой платформы для ETL) — Всё очень зависит от источника данных и качества кода.

Особенности, влияющие на скорость PQ:
1. Сам источник. Наиболее быстрый источник -- модель в SSAS или обычная БД на SQL (MS SQL, PostgreSQL и тд), далее обычный текстовый файл (csv, txt), и уже потом файлы xlsx (которые, по сути, обычный архив).
Если у вас зоопарк "тяжёлых" Excel файлов по 100 столбцов и 100500 строк, которые по ночам обновляются выгрузками из 1С — тут надо менять методологию самого источника, и разворачивать БД или SSAS.
2. Правильная типизация данных (текст, число, целое число и тд). PQ с разными типом данных по разному обращается + сразу покажет ошибки. Особенно важно для даты.
3. Наличие индекса
4. Наличие лишних полей (столбцов)
5. Множество скопированных запросов, а не ссылки на них.
6. Множество джойнов (а-ля Table.NestedJoin) по таблицам, источники которых -- таблицы фактов с миллионами строк. Нужна таблица-справочник "на коленке" -- сделайте её на стороне БД, и путь обновляется ночью.
7. Отсутствие/наличие Table.Buffer, когда нужно и где не нужно. Table.Buffer полезен на больших массивах данных, но жрёт память, как не в себя, зато быстрее. Есть Table.Buffer, но мало оперативки — тормоза. Куча лишних Table.Buffer (привет, копипаст запросов) — тормоза.
8. Объем свободной оперативной памяти (рекомендую от 32, хотя бы, а лучше 64, если много работаете с Power Query)
9. Множественные each в коде в разных местах по мелочи. Надо в целом стараться избегать each — тк это заставляет пробегаться движку по всему массиву строк, физически их читая / трансформируя, или заменять разные each на групповую работу (т.е. не отдельные последовательные шаги с заменой, а один шаг с заменой по списку, например).
10. Неоптимизированный код. Тут много мелочей, начиная от порядка шагов и заканчивая самим кодом (обращение к столбцам, например, обрабатывается быстрее, чем к строкам).
Сначала максимальная чистка на верхнем уровне (удаление ненужных столбцов), потом строк (null, error), потом типизация, потом потом уже фильтры, сложная логика, трансформация. Всё, что можно объединить в один шаг (например, фильтрация) -- должно быть объединено.
11. Использование интерфейсных фич "распределение столбца", "качество столбца", "профиль столбца" — на больших массивах тормоза
12. Включаем трассировку, пишем логи, смотрим, на что уходит больше всего времени. Далее в гугл или нейронку с вопросами.

Финалим. Power Query — мощнейший инструмент, с относительно низким порогом входа. Этап ETL на нём более, чем возможен, и ничуть не уступает Python / SQL.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы