PowerBI - условное форматирование в матрице в виде гистограммы
И снова в телеграмм-чате Power BI Group RU появилась интересная задача:
Можно ли в визуальном элементе матрица задать условное форматирование в виде гистограммы, но по другому столбцу?
Стандартным функционалом - НЕТ. А вот с помощью Calculation group - ДА.
Давайте разберём как это сделать.
Для начала создадим простейший визуал матрица: в строках - Subcategory из справочника Products, а в значениях мера [Sum Ordres Qty]:
Теперь нам хотелось бы подсветить названия Subcategory в виде гистограммы. Но в матрице НЕЛЬЗЯ задать условное форматирование для заголовков строк и столбцов. Поэтому здесь придётся или поменять визуализацию с матрицы на таблицу, или пойти на военную хитрость и создать меру, которая будет возвращать название Subcategory:
Решив одну проблему, мы сталкиваемся с другой - для мер, которые возвращают текст НЕ доступно условное форматирование в виде гистограммы
Те, кто читает мои статьи наверное помнят, что с таким же ограничением - невозможность использовать меры возвращающие текст, мы сталкиваемся, когда создаём "единую меру" с помощью SWITCH и FORMAT. Об этом я писал в статье "Переключение/включение мер в визуализации"
Для числовых же мер условное форматирование в виде гистограмм доступно:
Ещё один нюанс здесь в том, что даже для числовых значений мы можем задать форматирование в виде гистограммы ТОЛЬКО по значению этой же меры:
И вот здесь нам на помощь вновь приходит функционал Calculation group. Но, прежде чем создавать группы вычислений, давайте создадим "техническую меру" [SubcategoryH], которая будет повторять меру [Sum Orders Qty], добавим её в матрицу и настроим условное форматирование:
А теперь перейдём в Tabular Editor и создадим Calculation group и в ней Calculation Item - Histogram.
Я не первый раз пишу о Calculation group, поэтому не буду сейчас рассказывать как установить Tabular Editor и создать CG - это можно найти в предыдущих статьях или спросить в комментариях или в телеграмм-чате, если не понятно.
В разделе Expression, то есть в вычислении, мы используем функцию SELECTEDMEASURE, так как мы не будем изменять вычисления, а будем менять только отображение.
Поэтому переходим в свойства "Format String Expression" и пишем следующее выражение:
В ходе решения задачи в телеграмм-чате, потребовалось некоторое пояснение "для чего в строке форматирования столько кавычек?" Поэтому скопирую текст своего пояснения сюда:
Результатом "Format String Expression" должна быть текстовая строка, которая затем будет интерпретироваться как формат, например: "#,0" - целые числа с разделителями разрядов или "0.0%" - процентный формат с одним знаком после запятой.
Но мы можем задавать и более сложные форматы, например заменяя числа на текст, как в моём примере или например задать такой формат: "Больше;Меньше" - тогда вместо чисел больше 0 будет слово "Больше", а вместо отрицательных "Меньше".
Но неподготовленному человеку будет не понятно, что значит "Больше" и "Меньше", более информативно будет "Больше 0" и "Меньше 0". Только вот 0 относится к зарезервированным символам и соответственно вместо ожидаемого текста "Больше 0" будет возвращать "Больше 123", то есть некое целое число, которое будет получаться, исходя из контекста. И скорее всего оно будет совсем не понятным, т.к. пробел тоже зарезервированный символ.
Чтобы избежать этой ошибки, требуется явно указать, что мы передаем целый кусок текста для этого и требуется дополнительное экранирование кавычками, чтобы получилось: ""Больше 0";"Меньше 0"". А так как я получаю строку форматирования с помощью конкатенации, то для передачи кавычек используется такая строка """"
Возвращаемся к нашей визуализации и добавляем Calculation Item в панель фильтров выбранного визуального элемента:
После того, как мы применили фильтр, в нашей матрице произошли изменения:
Теперь "как бы для текстовой" меры у нас действует условное форматирование в виде гистограммы. А всё потому, что на самом деле у нас за буквами скрываются цифры - вы же помните, что в Expression мы вычисляем текущую меру, которая у нас равна [Sum Orders Qty]. Осталось только навести красоту - убрать или скрыть лишнее:
Но внесу небольшую ложку дёгтя в бочку мёда: если вы видите текст, то сортируя этот текст вы ожидаете, что он будет сортироваться согласно алфавита. Здесь же текст - это только формат, а не значения - в значениях у нас по прежнему числа. Поэтому, чтоб отсортировать Subcategory по алфавиту придётся воспользоваться контекстным меню:
Посмотреть и понажимать отчёт можно ниже
Скачать файл для изучения можно по ссылке
PS Также рекомендую к просмотру видео от Станислава Салостея. Да и в целом его канал с множеством идей по визуализациям в PowerBI.