DAX + Calculation Groups: переключатель мер Power BI

DAX + Calculation Groups: переключатель мер Power BI

При работе с Power BI мы часто сталкиваемся с задачей быстрого переключения показателей на визуальном элементе. Сейчас нам нужны клики, а через минуту - уже расходы. Место в отчёте не бесконечно, да и выбирать меру в отдельном фильтре - довольно удобно.

Можно переключать меры с помощью персонализации Power BI, но персонализация - не самый удобный способ для пользователей отчёта. Для эффективной персонализации пользователь должен знать внутреннюю структуру отчёта и понимать какие меры в каком месте можно использовать.

Список мер в фильтре - гораздо удобнее в применении и не загружает пользователя лишней информацией. Давайте разберемся как сделать переключатель меры в фильтре с помощью формул IF ( ), Switch ( ), а также Calculation groups и Параметра Поля. 

IF() в DAX для создания переключателя мер

Начнем погружение с самого древнего способа - с помощью оператора IF ( ). Для этого нужно создать справочник названий всех мер, с которыми будет работать заказчик. Через пункт меню "Введите данные" заполняем левый столбец наименованиями, а правый нам нужен для упрощения работы с мерой - его мы просто заполняем цифрами от 1 до N:

Далее создаем меру, которая будет выдавать селективный результат в зависимости от фильтра. Суть измерения проста: если выбрано 1-е значение - считаем 1-й результат, иначе если выбрано 2-е значение - считаем 2-й результат и так далее:

IF переключатель = 
IF(
    SELECTEDVALUE('Таблица значений'[№])=1,
    SUM('Факты продаж'[Выручка]),
    IF(
        SELECTEDVALUE('Таблица значений'[№])=2,
        SUM('Факты продаж'[Прибыль]),
        DIVIDE(
            SUM('Факты продаж'[Прибыль]),
            SUM('Факты продаж'[Выручка])
        )
    )
)

Помещаем вычисление в значение графика, а список значений в Срез. Теперь мы можем изменять суть графика в зависимости от выбора на срезе. Однако, такой способ не оптимален, так как каждый раз при применении фильтра выполняется каждый шаг алгоритма сравнения - для каждого IF.

SWITCH() в DAX и его преимущества

Переключатель для графиков и таблиц с помощью Switch ( ) оператора работает в разы быстрее IF ( ) из-за сравнения со списком значений, а не шаговым выполнением запроса. При этом код выглядит более удобным для понимания и контроля:

Switch переключатель = 
SWITCH(
    SELECTEDVALUE('Таблица значений'[№]),
    1, SUM('Факты продаж'[Выручка]),
    2, SUM('Факты продаж'[Прибыль]),
    3, DIVIDE(SUM('Факты продаж'[Выручка]),SUM('Факты продаж'[Прибыль]))
)

Основное отличие от оператора IF ( ) заключается в множественном выборе показателей для вывода на график. Для отображения вам нужно поместить в условные обозначения гистограммы значения из нашей таблицы - переключателя:
 

Параметр Поля в Power BI

В новых релизах от Майкрософт (май 2022 и позднее) появилась функция создания переключателя с помощью интерфейсных кнопок. Теперь для создания переключателя вычисляемых значений вы можете перейти на вкладку "Моделирование" и создать параметр "Поля":

В открывшемся окне перетащите меры, которые вы планируете переключать между собой, в левую часть формы:

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

Параметр = {
    ("Выручка", NAMEOF('!KEY_MEASURE'[Выручка]), 0),
    ("Прибыль", NAMEOF('!KEY_MEASURE'[Прибыль]), 1),
    ("% Рентабельности", NAMEOF('!KEY_MEASURE'[% Рентабельности]), 2)
}

Этот столбец вы можете помещать как в срез, так и в график - условные обозначения также будут отображаться корректно:

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

Tabular Editor и Calculation Groups

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

Затем, в Calculation Group создайте новый элемент Calculation Item:

Для примера, мы будем использовать оператор TOTALMTD ( ) для подсчета итогов вычисления за месяц. Обратите внимание на структуру меры - первым аргументом оператора мы выставляем SELECTEDVALUE ( ) для подстановки в расчет любого значения:

TOTALMTD( SELECTEDMEASURE( ) , 'Даты заказов'[Дата] )

После создания сохраните его и перейдите в Power BI, нажмите «Обновить», и появится ваша новая таблица. Теперь всё, что вам нужно сделать, это использовать на холсте отчета визуальный элемент по вашему выбору. В данном примере мы добавили обычную меру "Выручка", чтобы она отображалась на визуальном элементе:

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

Заключение

Мы рассмотрели 4 способа создания переключателей меры в Power BI при помощи DAX: IF(), SWITCH(), Параметр Поля, Calculation groups.

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

А для особо прокаченных пользователей - просто включите персонализацию 😊. 
Это позволит им вносить любые изменения в отчёт, а вам не придётся париться над фильтрами переключения мер;) 

Комментарии