Calculation Group
September 9, 2021

Переключение/включение мер в визуализации. Часть 2.

Это вторая часть статьи, в которой я расскажу как решить данную задачу с помощью Calculation group. Первую часть статьи, о решении с помощью функции SWITCH можно прочитать по ссылке.

Напомню два сценария, которые мы постараемся решить:

Как на диаграмме или в таблице сделать переключение мер, чтобы пользователь мог выбирать какую меру смотреть, например: Объем, Оборот, или Прибыль?
Как предоставить пользователю возможность выбора какие несколько мер показать в диаграмме?

Ещё раз посмотрим на модель данных:

Данные о продажах по территориям и товарам

И созданные меры:

Количество, Сумма, Прибыль и Процент прибыли

В предыдущем решении с помощью функции SWITCH нам необходимо было создать вспомогательную таблицу и специальную меру. Решение с Calculation group очень похоже. И даже, когда мы создаём CG, за кулисами движка по сути тоже создается вспомогательная таблица. Она конечно отличается от простой таблицы, которую мы создавали в PowerQuery, но выглядеть будет очень похоже.

Для создания CG открываем Tabular Editor

Если ещё не работаете с ним, то можно скачать по ссылке
Вкладка Внешние инструменты

Нажимаем ALT+7 для создания CG или правой клавишей мыши по папке Table

Создание Calculation group

Затем создаём Calculation Items, которые и будут отвечать за переключение мер:

Создание Calculation Items

Так как меры у нас четыре, то и Items нам необходимо будет создать четыре.

Для SUM Order Qty будем использовать функцию SELECTEDMEASURE (),которая возвращает значение меры находящейся в контексте, так как именно мера с таким названием будет у нас в визуализации в значениях.

Вычисление Количества в CG

Для всех остальных Items мы укажем соответствующие им меры, которые уже имеются у нас в модели.

Мера [SUMX Order Amount] = SUMX(Sales,Sales[OrderQty]*Sales[UnitPrice])

Для меры [% Profit] дополнительно ещё задаём параметр "Format String Expression" вида "0%", чтобы отформатировать меру в виде процентов.

CG [% Profit] с изменённым типом форматирования

Обратите также внимание на выделенный параметр Ordinal. Данный параметр отвечает за порядок ваших Calculation Items. По умолчанию он равен -1, то есть сортировка отсутствует и в визуальных элементах будет осуществляться по алфавиту. Но, мы можем задать этот порядок принудительно просто указав для каждого Items этот параметр начиная с 0. Либо просто перетаскивая мышкой Items и переставляя их в Tabular Editor.

После того, как создали все необходимые Items и задали все необходимые параметры - сохраняем изменения в модели

Не забудьте сохранить изменения

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

Таблица созданная Calculation group
Вспомогательные таблицы

Переходим к созданию визуализаций.

Сначала создадим срез с единичным выбором.

Срез на основе Calculation group

Далее создаем график и помещаем на ось месяцы, а в значения меру [SUM Order Qty]

Диаграмма с одним показателем Количество
Диаграмма с одним показателем Сумма

Как видно на скриншоте, при переключении показателя график изменился, хотя в поле "Значения" у нас находится обычная мера

[SUM Order Qty] = SUM(Sales[OrderQty])

И главное отличие решения с Calculation group от SWITCH - при выборе меры [% Profit] на графике показываются значения и они отформатированы как проценты, благодаря тому, что для данного Items мы задали собственный формат в параметре Format String Expression

Диаграмма с одним показателем % Прибыли

Точно также меняется и значение в таблице. Но, если внимательно посмотреть на подписи в диаграмме и в таблице, то можно увидеть, что там у нас по прежнему написано [SUM Order Qty], то есть название той меры, которую мы поместили в значения.

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

Матрица с одним показателем

Для изменения названия диаграммы придётся создать дополнительную меру и использовать её в условном форматировании

Мера для динамического изменения названия диаграммы

Я использую функцию CONCATENATEX, которая соединяет все выбранные значения через запятую, чтобы затем использовать её также и для второго сценария.

Дополнительно нам понадобится модифицировать Calculation Items, чтобы при переключении выбранной меры, мера [Headers] всегда считалась по своему сценарию, так как Calculation group влияют на все меры визуализации.

Проверяем, если название меры в контексте "Headers", то вывести её результат, иначе изменить расчёт

Проверяем получившийся результат

Динамическое название диаграммы [% Profit]
Динамическое название диаграммы SUMX Order Amount

Первый сценарий успешно решён, переходим ко второму.

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

Срез с множественным выбором

Если мы добавим в диаграмму и таблицу все наши меры, то при множественном выборе Calculation group всё равно будет показывать все меры и в диаграмме и в таблице:

Множественный выбор и несколько мер в визуализации

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

Единичный выбор и несколько мер в визуализации

Поэтому изменим наши визуализации. В диаграмму добавим условные обозначения, а таблицу заменим на матрицу, где в столбцах будут названия мер из таблицы созданной Calculation group. И оставим в визуализациях только одну меру [SUM Order Qty]:

Визуализации с множественным выбором мер

Обратите внимание на название нижней диаграммы. Выбранные показатели перечисляются в ней через запятую, благодаря ранее созданной мере [Headers].

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

Во всех текущих проектах я стараюсь использовать решение с Calculation group. Так как оно более гибкое в плане форматирования.

Но, если вам надо переключать показатели, которые всегда в одном формате, или вы используете старую версию PowerBI

Такое часто встречается у тех, кто использует версию Report Server. Так как ИТ службы бывают очень консервативны и по долгу не обновляют версии. А поддержка редактирования с помощью Tabular Editor в PowerBI Report Server появилась только с версии январь'2021.

Или вы хотите сделать переключение мер с помощью среза в модели Power Pivot в Excel, тогда вы можете использовать решение с помощью SWITCH из первой части данной статьи.