Image

Полное руководство по агрегациям Power BI: повышение производительности и улучшение отчетности

Агрегации — одна из самых мощных функций Power BI. Узнайте, как использовать эту функцию для повышения производительности вашего решения Power BI.

Делиться

f82d70b9b85582d6375b15180728c4e5

Если вы когда-либо использовали функцию «Композитная модель» в Power BI, вы, возможно, уже слышали о другой чрезвычайно важной и мощной концепции — агрегации! Дело в том, что во многих сценариях, особенно в моделях корпоративного масштаба, агрегации являются естественным «ингредиентом» композитной модели.

Однако, поскольку возможности составных моделей можно использовать и без использования агрегаций, я посчитал, что имеет смысл объяснить концепцию агрегаций в отдельной статье.

Прежде чем объяснить, как работают агрегаты в Power BI, и рассмотреть некоторые конкретные варианты их использования, давайте сначала ответим на следующие вопросы:

Зачем вообще нужны агрегации? В чём преимущество наличия двух таблиц с идентичными данными в модели?

Прежде чем прояснить эти два момента, важно помнить, что в Power BI существует два разных типа агрегаций.

  • До недавнего времени пользовательские агрегации были единственным типом агрегации в Power BI. Здесь вы отвечаете за определение и управление агрегациями, хотя Power BI впоследствии автоматически идентифицирует их при выполнении запроса.
  • Автоматические агрегации — одна из новейших функций Power BI. Включив эту функцию, вы можете выпить чашечку кофе, расслабиться и посмотреть, как алгоритмы машинного обучения соберут данные о наиболее часто выполняемых запросах в ваших отчётах и автоматически построят агрегации для их поддержки.

Важное различие между этими двумя типами, помимо того, что при использовании автоматических агрегаций вам не нужно ничего делать, кроме включения этой функции в вашем клиенте, заключается в лицензионных ограничениях. Пользовательские агрегации будут работать как с Premium, так и с Pro, а для автоматических агрегаций на данный момент требуется лицензия Premium.

С этого момента мы будем говорить только о пользовательских агрегациях, просто помните об этом.

Итак, вот краткое объяснение агрегаций и того, как они работают в Power BI. Допустим, у вас есть большая, очень большая таблица фактов, которая может содержать сотни миллионов, а то и миллиарды строк. Как же обрабатывать аналитические запросы к такому огромному объёму данных?

956ec8a113655d146f39a0da18fe65d3

Вы просто создаёте агрегированные таблицы! На самом деле, это очень редкая ситуация, или, скажем так, скорее исключение, чем правило, когда аналитические требования заключаются в том, чтобы рассматривать отдельную транзакцию или отдельную запись как самый низкий уровень детализации. В большинстве случаев вам нужно выполнить анализ обобщённых данных: например, какой доход был у нас в определённый день? Или какова была общая сумма продаж товара X? И далее, сколько в общей сложности потратил клиент X?

Кроме того, вы можете агрегировать данные по нескольким атрибутам, что обычно и происходит, и суммировать показатели по конкретной дате, клиенту и продукту.

7231e581ae0b0e459a11fc686e9b1e75

Если вам интересно, в чем смысл агрегации данных… Ну, конечная цель — сократить количество строк и, следовательно, уменьшить общий размер модели данных за счет предварительной подготовки данных.

Таким образом, если мне нужно узнать общую сумму продаж, потраченную клиентом X на продукт Y в первом квартале года, я могу воспользоваться тем, что эти данные уже обобщены заранее.

Ключевой «ингредиент» — сделайте так, чтобы Power BI «знал» об агрегациях!

Хорошо, это одна сторона медали. Теперь начинается самое интересное. Для ускорения отчётов Power BI одного лишь создания агрегатов недостаточно — необходимо, чтобы Power BI учитывал их!

Прежде чем мы продолжим, одно замечание: агрегация будет работать только в том случае, если исходная таблица фактов использует режим хранения DirectQuery. Скоро мы объясним, как проектировать и управлять агрегациями, а также как настроить правильный режим хранения таблиц. Пока просто помните, что исходная таблица фактов должна использовать режим хранения DirectQuery.

Давайте начнем строить наши агрегаты!

af21bef91f055d9e6ca8463d521c08a0

Как видно на иллюстрации выше, наша модель довольно проста: она состоит из одной таблицы фактов (FactOnlineSales) и трёх измерений (DimDate, DimStore и DimProduct). Все таблицы в настоящее время используют режим хранения DirectQuery.

Давайте создадим две дополнительные таблицы, которые будем использовать как агрегированные: первая будет группировать данные по дате и продукту, а другая будет использовать для группировки дату и магазин:

/*Таблица 1: Агрегированные данные по дате и продукту */ SELECT DateKey ,ProductKey ,SUM(SalesAmount) AS SalesAmount ,SUM(SalesQuantity) AS SalesQuantity FROM FactOnlineSales GROUP BY DateKey ,ProductKey /*Таблица 2: Агрегированные данные по дате и магазину */ SELECT DateKey ,StoreKey ,SUM(SalesAmount) AS SalesAmount ,SUM(SalesQuantity) AS SalesQuantity FROM FactOnlineSales GROUP BY DateKey ,StoreKey

ca073237f875230d0c28192b0ab32a2c

Я переименовал эти запросы в Sales Product Agg и Sales Store Agg соответственно и закрыл редактор Power Query.

Поскольку мы хотим добиться максимально возможной производительности для большинства наших запросов (запросов, которые извлекают данные, обобщенные по дате и/или продукту/магазину), я изменю режим хранения вновь созданных агрегированных таблиц с DirectQuery на Import:

60a5bd5042acbd70c31e647a084219f5

Теперь эти таблицы загружены в кэш-память, но они всё ещё не связаны с нашими существующими таблицами измерений. Давайте создадим связи между измерениями и агрегированными таблицами:

f049911de74bc93e0edad6c839dcacde

Прежде чем мы продолжим, позвольте мне на мгновение остановиться и объяснить, что произошло при создании связей. Если вы помните нашу предыдущую статью, я упоминал, что в Power BI существует два типа связей: обычные и ограниченные. Это важно: любая связь между таблицами из разных исходных групп (режим импорта — одна исходная группа, DirectQuery — другая) будет ограниченной! Со всеми присущими ей ограничениями.

Но у меня для вас хорошие новости! Если я переключу режим хранения моих таблиц измерений на Dual, это означает, что они также будут загружены в кэш-память, и в зависимости от того, какая таблица фактов предоставляет данные во время запроса, таблица измерений будет вести себя либо как в режиме импорта (если запрос обращается к таблицам фактов в режиме импорта), либо как в DirectQuery (если запрос извлекает данные из исходной таблицы фактов в DirectQuery):

b124779a936f8c5207f73f71b33c23ee

Как вы могли заметить, больше нет никаких ограниченных отношений, и это здорово!

Итак, подведем итоги. Наша модель настроена следующим образом:

  • Исходная таблица FactOnlineSales (со всеми подробными данными) – DirectQuery
  • Таблицы измерений (DimDate, DimProduct, DimStore) – Двойные
  • Агрегированные таблицы (Продажи Продукт Аггрег и Продажи Магазин Аггрег) – Импорт

Отлично! Теперь у нас есть агрегированные таблицы, и запросы должны выполняться быстрее, верно? Пип! Неправильно!

629621b93c5b1349263b3d8d2149859a

Визуальная таблица содержит именно те столбцы, которые мы предварительно агрегировали в нашей таблице Sales Product Agg. Так почему же Power BI выполняет DirectQuery вместо того, чтобы получить данные из импортированной таблицы? Вполне резонный вопрос!

Помните, я говорил вам в начале, что нам нужно предоставить Power BI информацию об агрегированной таблице, чтобы ее можно было использовать в запросах?

Давайте вернемся в Power BI Desktop и сделаем следующее:

5460592485c29bf1fde45643d38f30ec

Щелкните правой кнопкой мыши таблицу Sales Product Agg и выберите опцию Manage aggregations:

c124fccf76c389b00bda59abb6cb4c3a

Несколько важных замечаний: для корректной работы агрегации типы данных в столбцах исходной таблицы фактов и агрегированной таблицы должны совпадать! В моём случае мне пришлось изменить тип данных столбца SalesAmount в агрегированной таблице с «Десятичное число» на «Фиксированное десятичное число».

Кроме того, вы видите сообщение, написанное красным: это означает, что после создания агрегированной таблицы она будет скрыта от конечного пользователя! Я применил точно такие же действия для своей второй агрегированной таблицы (Store), и теперь эти таблицы скрыты:

eff97f23e24a8a9c103cf93246d4744e

Давайте вернемся и обновим страницу нашего отчета, чтобы посмотреть, изменилось ли что-нибудь:

f13571978f8aaef7becab699ab94ecf5

Отлично! На этот раз без DirectQuery, и вместо почти двух секунд, необходимых для отрисовки этого изображения, на этот раз потребовалось всего 58 миллисекунд! Более того, если я возьму запрос и перейду в DAX Studio, чтобы проверить, что происходит…

6b8ea17f491d2be2c442f3be8eed1d83

Как видите, исходный запрос был сопоставлен с агрегированной таблицей из режима импорта, и сообщение «Найдено совпадение» ясно указывает на то, что данные для визуализации взяты из таблицы Sales Product Agg! Хотя наш пользователь даже не подозревает о существовании этой таблицы в модели!

Разница в производительности, даже на этом относительно небольшом наборе данных, колоссальна!

Несколько агрегированных таблиц

Теперь вы, вероятно, задаетесь вопросом, зачем я создал две разные агрегированные таблицы. Допустим, у меня есть запрос, который отображает данные по разным магазинам, также сгруппированные по дате. Вместо того, чтобы сканировать 12,6 миллиона строк в режиме DirectQuery, движок может легко выдать данные из кэша, из таблицы, содержащей всего несколько тысяч строк!

По сути, вы можете создать несколько агрегированных таблиц в модели данных — не просто объединяя два группирующих атрибута (как в случае с Date+Product или Date+Store), но и включая дополнительные атрибуты (например, включая Date, Product и Store в одну агрегированную таблицу). Таким образом, вы увеличите степень детализации таблицы, но если вашей визуализации потребуется отображать данные и по Product, и по Store, вы сможете извлечь результаты только из кэша!

В нашем примере, поскольку у меня нет предварительно агрегированных данных на уровне, включающем как продукт, так и магазин, если я включу магазин в таблицу, я потеряю преимущество наличия агрегированных таблиц:

be427c959ec37f98b682d396677516ed

Таким образом, чтобы использовать агрегации, вам необходимо определить их на том же уровне зернистости, который требуется для визуального представления!

Приоритет агрегации

При работе с агрегатами важно понимать ещё одно важное свойство — приоритет! В диалоговом окне «Управление агрегатами» можно задать приоритет агрегации:

3075ad16051fa870bb79d3a9fa8c949a

Это значение «указывает» Power BI, какую агрегированную таблицу использовать, если запрос может быть выполнен с помощью нескольких различных агрегаций! По умолчанию оно равно 0, но вы можете изменить это значение. Чем больше число, тем выше приоритет данной агрегации.

Почему это важно? Представьте себе ситуацию: у вас есть основная таблица фактов с миллиардом строк. И вы создаёте несколько агрегированных таблиц с разной степенью детализации:

  1. Агрегированная таблица 1: группирует данные по дате – содержит ~ 2000 строк (5 лет дат)
  2. Агрегированная таблица 2: группирует данные по дате и уровню продукта – содержит ~ 100 000 строк (5 лет дат x 50 продуктов)
  3. Агрегированная таблица 3: группирует данные по дате, продукту и уровню магазина – содержит ~ 5 000 000 строк (100 000 из предыдущего зерна x 50 магазинов)

Теперь предположим, что в отчёте отображаются агрегированные данные только на уровне даты. Как вы думаете, какую таблицу лучше сканировать: Таблицу 1 (2000 строк) или Таблицу 3 (5 миллионов строк)? Думаю, вы знаете ответ 🙂 Теоретически запрос можно выполнить из обеих таблиц, так зачем же полагаться на произвольный выбор Power BI?!

Вместо этого при создании нескольких агрегированных таблиц с разным уровнем детализации обязательно задайте значение приоритета таким образом, чтобы таблицы с более низким уровнем детализации получали приоритет!

Заключение

Агрегации — одна из самых мощных функций Power BI, особенно в сценариях с большими наборами данных! Несмотря на то, что и составные модели, и агрегации можно использовать независимо друг от друга, обычно они используются совместно, обеспечивая оптимальный баланс между производительностью и доступностью всех деталей данных!

Спасибо за прочтение!

Источник: towardsdatascience.com

✅ Найденные теги: новости, Полное

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых