Переключение/включение мер в визуализации. Часть 1.
Один из самых частых вопросов, которые встречаются при разработке dashboard:
Как на диаграмме или в таблице сделать переключение мер, чтобы пользователь мог выбирать какую меру смотреть, например: Объем, Оборот, или Прибыль?
Или другой очень похожий вопрос:
Как предоставить пользователю возможность выбора какие несколько мер показать в диаграмме?
На данный момент имеются два способа решить эту задачу: с помощью функции SWITCH и с помощью Calculation group.
На самом деле есть ещё третий способ - закладки, но он наименее удобный и я его не использую в новых проектах.
Статья получается достаточно объёмной, поэтому я решил её разделить на две части. В первой части разберемся, как решить обе задачи с помощью SWITCH, а во второй посмотрим на решение с Calculation group.
Итак, у нас имеется модель данных:
На основе таблицы фактов созданы четыре меры:
Сами меры мы не можем "положить" в срез, так как он принимает только измерения, поэтому нам необходимо будет создать вспомогательную таблицу, которая будет содержать названия всех мер:
Создать таблицу со списком мер можно как с помощью PowerQuery, так и с помощью DAX-выражения DATATABLE, создав вычисляемую таблицу. Я предпочитаю первый способ. И, как видно на скриншоте, кроме столбца с названиями мер, в таблице имеется столбец [MeasureSort], который используется для сортировки названий в нужном порядке.
Эта вспомогательная таблица никак не будет связана с другими:
Приступаем к решению первой задачи: переключение одной меры в визуализации.
Создаем срез, в который помещаем столбец SwitchMeasures[MeasureName] и настраиваем единичный выбор:
Но, перед тем как создавать диаграмму с переключением меры, необходимо создать специальную меру, которая будет проверять выбор на срезе и возвращать соответствующее значение. Для этого как раз воспользуемся функцией SWITCH, которая проверяет условия по порядку, пока не найдёт совпадения.
Функция SELECTEDVALUE возвращает значение текущего выбора в срезе и сравнивается с названием меры в кавычках. Если находится совпадение, то происходит расчёт указанной после сравнения меры, иначе проверяется следующее условие. Если совпадение не будет найдено, то возвращается пустота - BLANK().
Возьмём диаграмму График. Поместим созданную меру в значения, а на ось добавим названия месяцев.
Как видно на скриншотах, при изменении выбора среза диаграмма перестраивается - наша задача решена. Но здесь кроется один нюанс - переключимся на меру [% Profit]
Мера [% Profit] должна возвращать проценты, тогда как три другие меры возвращают десятичные числа. А так как мера у нас одна, то и формат мы можем задать только один. Что же делать?
Если поискать в справочнике функций, то можно найти функцию FORMAT, с помощью которой можно отформатировать значение. Модифицируем немного нашу меру:
Теперь, если пользователь выберет в срезе [% Profit], её значение должно быть отформатировано как процент.
Но, как видно на скриншоте, вместо процентов на диаграмме вовсе пропали данные. Это происходит потому, что функция FORMAT не просто форматирует значение, а превращает его в текст. А текст нельзя отобразить в диаграмме, но зато такой способ прекрасно работает в таблице или матрице:
А как всё таки быть с диаграммой? Здесь можно значение меры, которая должна выводить проценты, просто умножить на 100, а для пользователя дополнительно указать где-то, что он смотрит на проценты.
Такой способ хорошо подходит, если вам не нужно показывать знаки после запятой. К сожалению, настроить в одной мере, созданной с помощью SWITCH, в диаграмме разные форматы чисел сейчас нет возможности.
Решение второго сценария - выбор нескольких мер в одной визуализации практически идентично первому. Поэтому отмечу только различия.
Настроим срез с выбором мер. В этот раз необходимо будет отключить множественный выбор с помощью CTRL, чтобы пользователю было удобнее осуществлять выбор просто проставляя галочки.
Также в диаграмму добавим в условные обозначения названия мер из вспомогательной таблицы:
Как и в решении с одной мерой в диаграммах с несколькими мерами мы сталкиваемся с той же проблемой форматирования значений
И ещё одно отличие - чтобы меры в таблице были в разных столбцах следует использовать визуальный элемент Матрица, в столбцы которой поместить названия мер из вспомогательной таблицы, как на скриншоте выше.
Там же обратите внимание на столбец Всего в матрице - его значения пустые, так как функция SELECTEDVALUE, которую мы используем для определения выбранной меры, работает только с одним значение, иначе возвращает пустоту, если не указан второй аргумент. Поэтому отталкиваясь от своего сценария, либо отключите столбец итогов, либо предусмотрите иное вычисление для столбца.
В следующей статье разберем как эти же сценарии решаются с помощью Calculation group. Какие есть плюсы и минусы у решения с их помощью.