Вступление
Иногда возникает необходимость предоставить пользователю возможность выбирать, какую метрику отображать на графике для детального анализа.
В Power BI такая функция может быть быстро и просто реализована с помощью создания вспомогательной таблицы, расчетной меры и обычного слайсера.
Описание задачи
Работаем с уже знакомым датасетом Sample Superstore, который содержит данные о продажах магазина в США за 2015-2018 гг.
Необходимо построить график, который, в зависимости от выбора, отображал бы динамику одного из показателей — Sales, Profit, Profit Ratio и Average Discount Rate — во времени.
Результат, который получим в итоге
Скачать pbix файл MeasureSwitchFunction можно по ссылке.

Приступим к разработке
Step 1. Создадим меры, которые можно будет выбирать в слайсере.
1_Sales =
SUM(Orders[Sales])
2_Profit =
SUM(Orders[Profit])
3_Profit Ratio =
DIVIDE(
SUM(Orders[Profit]),
SUM(Orders[Sales])
) * 100
4_Average Discount Rate =
AVERAGE(Orders[Discount]) * 100
Поскольку метрики Profit Ratio и Average Discount Rate измеряются в процентах, умножим эти величины на 100 для удобства чтения оси Y, а после в подписи этой оси добавим символ %.
Совет: используйте DIVIDE вместо оператора деления "/", так как эта функция предусматривает автоматическую обработку деления на ноль.
Step 2. Создадим вспомогательную таблицу, на основании которой после будет рассчитана мера, а также построен слайсер.
-
На панели инструментов перейдите на вкладку Home, далее выберите Enter Data.
В появившемся окне Create Table создайте таблицу из 2ух столбцов: ID — для удобства обращения к метрикам в последующих формулах, Name — для отображения названия метрик в слайсере. Далее дайте название таблице — например, Metric Name. Нажмите Load для загрузку этой таблицы в модель данных.

Step 3. Создадим меру, которая в зависимости от выбранной в слайсере метрики, будет ссылаться на одну из созданных в Step 1 мер: 1_Sales, или 2_Profit, или 3_Profit Ratio, или 4_Average Discount Rate.
Selected Measure =
SWITCH(
SELECTEDVALUE('Metric Name'[ID],1),
1, Orders[1_Sales],
2, Orders[2_Profit],
3, Orders[3_Profit Ratio],
4, Orders[4_Average Discount Rate]
)
Step 4. Создадим меру, которая динамически будет менять подпись оси Y в зависимости от выбранной в слайсере метрики.
Selected Measure Title =
IF(
OR(SELECTEDVALUE('Metric Name'[ID]) = 1, SELECTEDVALUE('Metric Name'[ID]) = 2),
SELECTEDVALUE('Metric Name'[Name]) & ", $",
SELECTEDVALUE('Metric Name'[Name]) & ", %"
)
Величины Sales и Profit измеряются в долларах, поэтому для подписи оси Y конкатенируем название метрик с символом $. Величины Profit Ratio и Average Discount Rate измеряются в процентах, поэтому для подписи оси Y конкатенируем название метрик с символом %.
Step 5. На страницу отчета добавим тип визуализации Slicer, построенный на основании поля Name из таблицы Metric Name. Выбираем горизонтальный тип в настройках Format -> General.

Подсказка: Для того, чтобы метрики в слайсере отображались не в алфавитном порядке (A-Z), а в порядке их айдишника (1-4), выберите поле Name, на панели инструментов перейдите на вкладку Column tools, в настройках Sort by Column выберите ID вместо Name.

Step 6. На страницу отчета добавим лайн чарт распределения Selected Measure по Order Date (Month, Year).

Step 7. Настроим динамическую подпись оси Y. Поскольку в Power BI нету возможности настроить подписи осей по условию, эту функцию будет выполнять Title, размещенный в левом верхнем углу относительно графика.
Выбрав лайн чарт, переходим в настройки форматирования графика, включаем Title, нажимаем на значок функции fx.

В появившемся окне в поле Format Style выбираем Field Value, а в поле Which field should we base this on? выбираем меру Selected Measure Title, рассчитанную в Step 4.

Step 8. Тестируем и валидируем реализованные выше шаги.
Step 9. Форматируем визуализации в соответствии с вкусовыми предпочтениями / брендбуком компании.
Еще больше полезной информации
Присоединяйтесь к телеграм-каналу Informed By Data, там вы найдете много полезной информации о дата аналитике, визуализации и грамотной работе с данными.
Комментарии (5)
Racheengel
01.01.2022 12:36К сожелению, в современных MS Office пподуктах такое понятие, как удобство для пользователя, снова ещё не придумано :(
13_beta2
И дальше километры костылей : ( Такой функционал должен быть из коробки, но MS так не считает. Вот и выходит, что банальная сводная будет удобнее в случае если нужно дать пользователю возможность хоть немного "крутить" самостоятельно, но лезть под капот.
Nesme_Yana Автор
Ну, не совсем костылей:)
По-моему, все логично: если не хотите делать никаких доп. преобразований с исходной таблицей (транспонирование, например, которое привело бы к другим трудностям), то создание вспомогательной таблицы с названием нужных метрик - это вполне себе решение:)