Освоение query folding в Power BI: переносим вычисления в источник данных
By Mirko Peters ·
При работе с Power BI мало что раздражает сильнее, чем обновление данных, которое тянется целую вечность, или, что хуже, падает с ошибкой из-за нехватки ресурсов…
Automatically translated with AI from the original post. Read the English original
При работе с Power BI мало что раздражает сильнее, чем обновление данных, которое тянется целую вечность, или, что хуже, падает с ошибкой из-за нехватки ресурсов. Если вы загружаете миллионы строк из удалённой SQL-базы, корпоративного хранилища данных или облачного сервиса, от того, как вы обрабатываете преобразования, многое зависит. Каждый шаг в Power Query может быть выполнен эффективно мощным сервером, на котором размещены ваши данные, или медленно — на вашем локальном компьютере или в памяти движка Power BI service. Именно здесь в игру вступает магия query folding.
В этой статье мы подробно разберём query folding: как он оптимизирует преобразования данных, практические приёмы, которые помогут убедиться, что ваши шаги корректно сворачиваются, распространённые ошибки, которые разрывают цепочку folding, и как можно существенно ускорить обновление отчётов. Давайте вернём работу туда, где ей место, — в источник данных.
Введение в query folding
По своей сути query folding — это механизм, с помощью которого Power Query преобразует шаги обработки данных, которые вы создаёте в пользовательском интерфейсе, в нативный язык запросов — как правило, SQL — и отправляет этот запрос обратно в исходную базу данных для выполнения. Вместо того чтобы загружать каждую строку, таблицу и столбец в память Power BI, а затем фильтровать, группировать или объединять их локально, Power BI поручает исходной базе данных тяжёлую работу.
Представьте, что вы заказываете продукты. Если вы приходите в огромный склад, берёте с полок все товары, приносите их на кухонный стол, а потом выбрасываете 90% из них, потому что они просрочены или не нужны, вы тратите огромное количество времени и сил. Именно это происходит без query folding. Когда folding включён, вы передаёте кладовщику конкретный список: «Дайте мне только яблоки весом больше фунта, сгруппированные по цвету». Кладовщик сортирует товары на складе и отдаёт вам небольшую коробку только с тем, что вы заказали. На вашей кухне остаётся порядок, а готовите вы гораздо быстрее.
Как query folding оптимизирует преобразования данных
Query folding — краеугольный камень масштабируемой архитектуры Power BI. При правильной работе он минимизирует передачу данных по сети, существенно снижает потребление памяти на этапе обновления и ускоряет процесс разработки.
Когда вы применяете преобразования, такие как фильтрация строк, удаление столбцов, сортировка или базовые агрегации, на ранних шагах применённых операций Power Query, коннектор проверяет, может ли источник данных выполнить эту операцию нативно. Если может, эти шаги объединяются в один высокооптимизированный запрос, который отправляется в источник. Движок базы данных выполняет его с помощью уже существующих индексов, поэтому он может просмотреть миллионы строк за миллисекунды.
И наоборот, если query folding прерывается, Power BI вынужден загрузить весь несжатый, неотфильтрованный набор данных по сети в движок вычисления Power Query (mashup engine). Как только данные оказываются локально, Power BI применяет фильтры и преобразования, используя процессор и оперативную память вашего компьютера или сервера. Для больших корпоративных наборов данных это верный рецепт для таймаутов шлюза, ошибок нехватки памяти и медленного обновления отчётов.
Практические приёмы, чтобы шаги корректно сворачивались
Не все шаги Power Query одинаково полезны, и не все источники данных поддерживают query folding. Реляционные базы данных, такие как SQL Server, Oracle и PostgreSQL, обладают развитыми возможностями folding, тогда как плоские файлы вроде CSV или книг Excel так не сворачиваются, поскольку у них нет собственного обработчика запросов.
Чтобы ваши шаги успешно сворачивались, нужно выстраивать применённые шаги в определённой последовательности и внимательно относиться к используемым функциям. Вот практические приёмы, которые помогут сохранить folding в ваших запросах:
- Фильтруйте как можно раньше: всегда применяйте фильтры строк (например, оставляйте только данные за последние три года или фильтруйте по статусу «активен») как можно ближе к началу применённых шагов. Чем раньше вы ограничите набор данных, тем эффективнее будет последующая трансляция в SQL.
- Удаляйте ненужные столбцы сразу: Удаление неиспользуемых столбцов на раннем этапе не даёт источнику данных тратить ресурсы на сериализацию и передачу данных, которые вам не нужны.
- Изучите поддерживаемые преобразования: Такие операции, как удаление столбцов, переименование столбцов, объединение таблиц (при определённых условиях), добавление строк и простые условные столбцы, как правило, хорошо поддерживают свёртывание. Сложные пользовательские формулы, текстовые манипуляции с поиском по индексу и пользовательские столбцы, требующие программирования, часто разрывают цепочку свёртывания.
- Проверьте опцию «Просмотреть исходный запрос»: Щёлкните правой кнопкой мыши по любому применённому шагу в редакторе Power Query. Если опция «Просмотреть исходный запрос» (View Native Query) доступна и на неё можно нажать, отлично: ваш запрос успешно свёртывается до этого шага. Если она неактивна (серая), свёртывание прервалось на этом шаге или на одном из предыдущих.
Распространённые ошибки, которые ломают свёртывание запросов
Одна из самых коварных особенностей свёртывания запросов в том, что оно хрупкое. Один безобидный шаг преобразования, поставленный не в том порядке, может полностью разорвать цепочку свёртывания, и тогда все последующие шаги будут выполняться локально, даже если база данных способна их обработать.
Рассмотрим некоторые из самых распространённых ошибок, которые ломают свёртывание запросов:
- Вставка собственного SQL, а затем преобразования: Если вы написали собственный SQL-запрос в самом начале шага источника данных, Power Query воспринимает результат как «чёрный ящик». Последующие преобразования, добавленные через интерфейс Power Query, обычно не свёртываются, поскольку Power Query не может надёжно встраивать шаги интерфейса в пользовательский блок SQL.
- Преобразования типов данных слишком рано или не в том порядке: Изменение типов данных необходимо, но если выполнить его до фильтрации или до операций, которые конфликтуют с правилами типизации базы данных, свёртывание может нарушиться. Например, если преобразовать числовой столбец в текст, а затем попытаться выполнить фильтр по числовому диапазону, база данных может не оптимизировать запрос.
- Добавление индексных столбцов или использование номеров строк: Функции, которые опираются на позицию строк, например «Добавить индексный столбец», или операции, ссылающиеся на соседние строки по абсолютному индексу, требуют загрузки всего набора данных в память, чтобы определить позиции. Это мгновенно останавливает свёртывание запросов.
- Смешивание источников данных: Если вы объединяете таблицу из базы данных SQL с таблицей из файла Excel, свёртывание прекращается на границе, где взаимодействуют два источника, потому что Excel не может нативно обрабатывать SQL-запросы.
Повышение эффективности обновления Power BI
Когда вы освоите свёртывание запросов, его эффект ощущается во всей архитектуре данных. Обновление отчётов, которое раньше занимало часы, может сократиться до минут или даже секунд. Такая эффективность не только экономит вычислительные ресурсы на облачных шлюзах или серверах, но и позволяет разработчикам быстрее итерировать.
Чтобы максимально повысить эффективность обновления, сочетайте свёртывание запросов с другими базовыми практиками моделирования. Например, убедитесь, что таблицы базы данных имеют правильные индексы по столбцам, по которым вы часто фильтруете или объединяете данные. Если в таблицах SQL нет индексов, даже свёрнутый запрос заставит движок базы данных выполнять дорогостоящие полные сканирования таблиц. Кроме того, сочетайте свёртывание запросов с чистой моделью данных «звезда», удалением избыточных столбцов и политиками инкрементного обновления для больших исторических наборов данных.
Мониторинг и устранение неполадок запросов Power BI
Нельзя исправить то, что не измеряешь. При медленных обновлениях или неожиданных сбоях запросов нужен системный подход к поиску узкого места. Начните с инструмента диагностики Power Query в Power BI Desktop. Эта функция позволяет отслеживать время выполнения каждого шага и показывает, насколько долго выполняется каждое преобразование и получаются ли данные удалённо или обрабатываются локально.
Кроме того, отслеживайте журналы шлюза и профилировщики баз данных (например, SQL Server Profiler или Extended Events), чтобы видеть точные запросы, которые Power BI отправляет источнику данных. Если вы видите огромные инструкции SELECT, которые выгружают сырые, нефильтрованные таблицы вместо целевых запросов с предложениями WHERE и GROUP BY, сразу понятно, что свёртывание запросов где-то сломалось в применённых шагах.
Чтобы разобраться в порядке выполнения, типичных ошибках и продвинутых приёмах оптимизации, обязательно послушайте связанный выпуск подкаста и ознакомьтесь с заметками по теме Power Query Folding and Execution Order in Power BI. Понимание базового порядка операций даст вам уверенность в том, что вы каждый раз будете строить надёжные и очень быстрые модели.
Заключение
Освоение query folding — один из самых полезных навыков для разработчика Power BI. Перенося вычислительную нагрузку с вашего локального компьютера или сервиса Power BI на мощные, высокооптимизированные движки источников данных, вы устраняете узкие места производительности, снижаете сетевую нагрузку и добиваетесь того, что обновление отчётов проходит плавно и надёжно. Продуманно выстраивая последовательность шагов, регулярно проверяя нативные запросы и избегая типичных ошибок, например преждевременной индексации или смешивания несовместимых источников, вы сможете раскрыть весь потенциал вашей среды бизнес-аналитики.
Чтобы глубже разобраться в этих концепциях и услышать подробный разбор того, как порядок выполнения запросов влияет на производительность рабочей области, послушайте полное обсуждение в выпуске подкаста Power Query Folding and Execution Order in Power BI. Внедряйте эти стратегии уже сегодня и наблюдайте, как производительность ваших отчётов заметно улучшится!