Как стать автором
Обновить

Особенности SUMMARIZECOLUMNS в DAX

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров381

Привет, Хабр! В аналитическом языке DAX одной из важных функций является SUMMARIZECOLUMNS. Эта функция готовит данные для дашбордов, также реализует декартово произведение полей группировки (если поля группировки из разных таблиц). Для понимания DAX полезно ознакомиться с особенностями SUMMARIZECOLUMNS, интересующимся деталями SUMMARIZECOLUMNS — добро пожаловать под кат :)

Функция SUMMARIZECOLUMNS из Power BI до сих пор развивается и дорабатывается Microsoft. Например, в 2024 году добавлено использование SUMMARIZECOLUMNS в мерах в Power BI. Синтаксис SUMMARIZECOLUMNS выглядит следующим образом:

Назначение параметров для группировки, фильтрации и выражений может быть интуитивно понятно, особенность SUMMARIZECOLUMNS заключается в декартовом произведении полей группировки. Для иллюстрации рассмотрим данные в таблице sales с полями productId, customerId и amount:

img3png

Для полей группировки из одной таблицы sales[productId] и sales[cusomerId] декартового произведения нет: 

img1png

Для полей группировки из разных таблиц products[productId] и customers[customerId] в результатах появляется декартовое произведение:

img2png

Это одна из главных особенностей SUMMARIZECOLUMNS.

Есть также вторая особенность, связанная с декартовым произведением, — постраничный просмотр результатов SUMMARIZECOLUMNS. Например, рассмотрим 100000 записей в таблице products и 100000 записей в customers и простейший дашборд-матрицу.

Декартово произведение products[productId] на customers[cusatomerId] дает 100000 x 100000 записей, но благодаря постраничному просмотру результаты такой размерности благополучно отображаются в Power BI, и, конечно, нигде не хранятся 100000 x 100000 записей, а получаются постранично. Часть DAX для приведенного дашборда — это SUMMARIZECOLUMNS с размерностью результата 100000 х 100000

Видно, что Power BI в случае размерности 100000 х 100000 для SUMMARIZECOLUMNS разбивает результаты на страницы, условно по аналогии с действиями с разреженной матрицей, и не пытается хранить результат 100000 х 100000, что было бы неоптимально.

Естественно, что функционал, в чем-то аналогичный SUMMARIZECOLUMNS из аналитического языка DAX, может быть в большей или меньшей степени реализован на разных языках, например на C# (например, в NuGet пакете DaxSharp) или на других языках.

Надеюсь, приведенные особенности могут быть полезными, успешных дашбордов :)

Теги:
Хабы:
+1
Комментарии0

Публикации

Ближайшие события