DAX
September 9, 2021

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

Один из самых частых вопросов, которые встречаются при разработке dashboard:

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

Или другой очень похожий вопрос:

Как предоставить пользователю возможность выбора какие несколько мер показать в диаграмме?

На данный момент имеются два способа решить эту задачу: с помощью функции SWITCH и с помощью Calculation group.

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

Статья получается достаточно объёмной, поэтому я решил её разделить на две части. В первой части разберемся, как решить обе задачи с помощью SWITCH, а во второй посмотрим на решение с Calculation group.

Итак, у нас имеется модель данных:

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

На основе таблицы фактов созданы четыре меры:

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

Сами меры мы не можем "положить" в срез, так как он принимает только измерения, поэтому нам необходимо будет создать вспомогательную таблицу, которая будет содержать названия всех мер:

Таблица со списком мер

Создать таблицу со списком мер можно как с помощью PowerQuery, так и с помощью DAX-выражения DATATABLE, создав вычисляемую таблицу. Я предпочитаю первый способ. И, как видно на скриншоте, кроме столбца с названиями мер, в таблице имеется столбец [MeasureSort], который используется для сортировки названий в нужном порядке.

Эта вспомогательная таблица никак не будет связана с другими:

Вспомогательная таблица

Приступаем к решению первой задачи: переключение одной меры в визуализации.

Создаем срез, в который помещаем столбец SwitchMeasures[MeasureName] и настраиваем единичный выбор:

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

Но, перед тем как создавать диаграмму с переключением меры, необходимо создать специальную меру, которая будет проверять выбор на срезе и возвращать соответствующее значение. Для этого как раз воспользуемся функцией SWITCH, которая проверяет условия по порядку, пока не найдёт совпадения.

SWITCH намного удобнее и понятнее, чем множественные IF вложенные друг в друга

Функция SELECTEDVALUE возвращает значение текущего выбора в срезе и сравнивается с названием меры в кавычках. Если находится совпадение, то происходит расчёт указанной после сравнения меры, иначе проверяется следующее условие. Если совпадение не будет найдено, то возвращается пустота - BLANK().

Возьмём диаграмму График. Поместим созданную меру в значения, а на ось добавим названия месяцев.

Диаграмма с одним показателем - Количество
Диаграмма с одним показателем - Прибыль

Как видно на скриншотах, при изменении выбора среза диаграмма перестраивается - наша задача решена. Но здесь кроется один нюанс - переключимся на меру [% Profit]

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

Мера [% Profit] должна возвращать проценты, тогда как три другие меры возвращают десятичные числа. А так как мера у нас одна, то и формат мы можем задать только один. Что же делать?

Если поискать в справочнике функций, то можно найти функцию FORMAT, с помощью которой можно отформатировать значение. Модифицируем немного нашу меру:

Добавили форматирование для меры [% Profit]

Теперь, если пользователь выберет в срезе [% Profit], её значение должно быть отформатировано как процент.

На нижней диаграмме измененная мера с функцией FORMAT

Но, как видно на скриншоте, вместо процентов на диаграмме вовсе пропали данные. Это происходит потому, что функция FORMAT не просто форматирует значение, а превращает его в текст. А текст нельзя отобразить в диаграмме, но зато такой способ прекрасно работает в таблице или матрице:

FORMAT не работает в диаграмме, но работает в таблице

А как всё таки быть с диаграммой? Здесь можно значение меры, которая должна выводить проценты, просто умножить на 100, а для пользователя дополнительно указать где-то, что он смотрит на проценты.

Умножаем проценты на 100, чтобы отобразить как число
[% Profit]*100

Такой способ хорошо подходит, если вам не нужно показывать знаки после запятой. К сожалению, настроить в одной мере, созданной с помощью SWITCH, в диаграмме разные форматы чисел сейчас нет возможности.

Решение второго сценария - выбор нескольких мер в одной визуализации практически идентично первому. Поэтому отмечу только различия.

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

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

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

Диаграмма с несколькими мерами

Как и в решении с одной мерой в диаграммах с несколькими мерами мы сталкиваемся с той же проблемой форматирования значений

При использовании FORMAT в диаграмме мера [% Profit] есть в легенде, но её нет в виде графика

И ещё одно отличие - чтобы меры в таблице были в разных столбцах следует использовать визуальный элемент Матрица, в столбцы которой поместить названия мер из вспомогательной таблицы, как на скриншоте выше.

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

В следующей статье разберем как эти же сценарии решаются с помощью Calculation group. Какие есть плюсы и минусы у решения с их помощью.