Содержание статьи: (кликните, чтобы перейти к соответствующей части статьи):
Приветствую Вас, дорогие друзья, с Вами Будуев Антон. В этой статье мы обсудим функции GENERATE, GENERATEALL и CROSSJOIN в Power BI и Power Pivot, которые способны в коде языка DAX создавать вычисляемые таблицы на основе пересечений строк других таблиц.
Давайте рассмотрим каждую из этих функций отдельно, подробно разбирая то, как они работают на примерах формул в Power BI. Так как в этой программе можно создавать таблицы в модели данных, что нам пригодится для демонстрации примеров.
В Power Pivot (Excel) функции GENERATE, GENERATEALL и CROSSJOIN также работают, только таблицы они там создают виртуально, во время вычисления самой формулы.
Итак, переходим к разбору функций.
Для Вашего удобства, рекомендую скачать «Справочник DAX функций для Power BI и Power Pivot» в PDF формате.
Если же в Ваших формулах имеются какие-то ошибки, проблемы, а результаты работы формул постоянно не те, что Вы ожидаете и Вам необходима помощь, то записывайтесь в бесплатный экспресс-курс «Быстрый старт в языке функций и формул DAX для Power BI и Power Pivot».
DAX функции GENERATE и GENERATEALL в Power BI и Power Pivot
GENERATE () и GENERATEALL () — создают таблицу из всех пересечений строк двух таблиц, входящих в параметры функций. То есть, для каждой строки первой таблицы возвращаются (по очереди вычисляются) все строки из второй.
Иногда, на просторах Интернета я встречаю, что некоторые пользователи несколько неверно прописывают имя этих функций, добавляя второе слово: generate table. Слово table здесь не нужно.
Синтаксис:
GENERATE ('Таблица 1'; 'Таблица 2') GENERATEALL ('Таблица 1'; 'Таблица 2')
Где: Таблица — исходная таблица или табличное выражение
! — Названия столбцов в обеих таблицах должны быть разными
Обе функции GENERATE и GENERATEALL работают практически одинаково, за исключением того, как они обрабатывают пустую вторую таблицу.
Давайте сначала разберемся как они обе функционируют, а затем рассмотрим различия в их работе.
Примеры формул на основе DAX функций GENERATE и GENERATEALL.
В Power BI Desktop имеются 2 исходные таблицы «Год» и «Месяц»:
Создадим при помощи функции GENERATE формулу, возвращающую календарь из пересечений строк всех годов со всеми имеющимися месяцами:
Календарь = GENERATE (‘Год’;’Месяц’)
Результатом выполнения этой формулы будет перечисление всех 3 месяцев по каждому году:
Итог будет абсолютно тем же самым, если вместо GENERATE мы пропишем DAX функцию GENERATEALL:
Календарь = GENERATEALL ('Год';'Месяц')
Теперь давайте поговорим о разнице этих 2 функций. А вся разница, как я уже писал выше, заключается в обработке пустой второй таблицы.
Рассмотрим пример, когда вторая таблица «Месяц» полностью пустая:
При тех же формулах:
Календарь = GENERATE ('Год';'Месяц') Календарь = GENERATEALL ('Год';'Месяц')
В этот раз результат будет разным.
GENERATE — возвратит вообще пустую таблицу:
А DAX функция GENERATEALL возвратит таблицу, состоящую из двух столбцов, где будут прописаны года, а месяца останутся пустыми:
Рассмотрим еще одну DAX функцию, похожую на GENERATE и GENERATEALL, которая также возвращает пересечение всех строк, только уже не двух, а многих таблиц.
DAX функция CROSSJOIN в Power BI и Power Pivot
CROSSJOIN () — создает таблицу из всех пересечений строк всех таблиц, входящих в параметры функции.
Синтаксис:
CROSSJOIN ('Таблица 1'; 'Таблица 2'; 'Таблица N')
Где: Таблица — исходная таблица или табличное выражение
! — Названия столбцов во всех таблицах должны быть разными
Рассмотрим пример формулы на основе DAX функции CROSSJOIN.
В Power BI Desktop имеются 3 исходные таблицы «Год», «Месяц», «День»:
Напишем формулу календаря из пересечения всех строк года, месяца и дня на основе функции CROSSJOIN:
Календарь = CROSSJOIN ('Год'; 'Месяц'; 'День')
Результатом выполнения этой формулы будет следующее пересечение всех строк:
Так как все эти 3 функции GENERATE, GENERATEALL и CROSSJOIN в итоге своей работы возвращают таблицы, то всех их можно легко использовать в сочетании со многими другими функциями в DAX.
Например, результаты таблицы, созданной на основе CROSSJOIN можно отфильтровать функцией FILTER. Таким образом, убрать какие-то лишние строки из того количества пересечений, которое было создано.
На этом, с функциями создания таблиц в Power BI и Power Pivot из пересечений строк, в этой статье, все.
Пожалуйста, оцените статью:
Успехов Вам, друзья!
С уважением, Будуев Антон.
Проект «BI — это просто»
Если у Вас появились какие-то вопросы по материалу данной статьи, задавайте их в комментариях ниже. Я Вам обязательно отвечу. Да и вообще, просто оставляйте там Вашу обратную связь, я буду очень рад.
Также, делитесь данной статьей со своими знакомыми в социальных сетях, возможно, этот материал кому-то будет очень полезен.
Понравился материал статьи?
Добавьте эту статью в закладки Вашего браузера, чтобы вернуться к ней еще раз. Для этого, прямо сейчас нажмите на клавиатуре комбинацию клавиш Ctrl+D