Visualisations
October 28, 2021

PowerBI - условное форматирование в матрице в виде гистограммы

И снова в телеграмм-чате Power BI Group RU появилась интересная задача:

Можно ли в визуальном элементе матрица задать условное форматирование в виде гистограммы, но по другому столбцу?

Стандартным функционалом - НЕТ. А вот с помощью Calculation group - ДА.

Давайте разберём как это сделать.

Для начала создадим простейший визуал матрица: в строках - Subcategory из справочника Products, а в значениях мера [Sum Ordres Qty]:

Матрица - сумма заказов по подгруппам

Теперь нам хотелось бы подсветить названия Subcategory в виде гистограммы. Но в матрице НЕЛЬЗЯ задать условное форматирование для заголовков строк и столбцов. Поэтому здесь придётся или поменять визуализацию с матрицы на таблицу, или пойти на военную хитрость и создать меру, которая будет возвращать название Subcategory:

Мера с названиями Subcategory

Решив одну проблему, мы сталкиваемся с другой - для мер, которые возвращают текст НЕ доступно условное форматирование в виде гистограммы

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

Для числовых же мер условное форматирование в виде гистограмм доступно:

Переключатель условного форматирования в виде гистограммы

Ещё один нюанс здесь в том, что даже для числовых значений мы можем задать форматирование в виде гистограммы ТОЛЬКО по значению этой же меры:

Меню условного форматирования в виде гистограммы

И вот здесь нам на помощь вновь приходит функционал Calculation group. Но, прежде чем создавать группы вычислений, давайте создадим "техническую меру" [SubcategoryH], которая будет повторять меру [Sum Orders Qty], добавим её в матрицу и настроим условное форматирование:

Матрица с "технической мерой" - SubcategoryH

А теперь перейдём в Tabular Editor и создадим Calculation group и в ней Calculation Item - Histogram.

Я не первый раз пишу о Calculation group, поэтому не буду сейчас рассказывать как установить Tabular Editor и создать CG - это можно найти в предыдущих статьях или спросить в комментариях или в телеграмм-чате, если не понятно.

Calculation Item - Histogram

В разделе Expression, то есть в вычислении, мы используем функцию SELECTEDMEASURE, так как мы не будем изменять вычисления, а будем менять только отображение.

Поэтому переходим в свойства "Format String Expression" и пишем следующее выражение:

Строка форматирования
В ходе решения задачи в телеграмм-чате, потребовалось некоторое пояснение "для чего в строке форматирования столько кавычек?" Поэтому скопирую текст своего пояснения сюда:
Результатом "Format String Expression" должна быть текстовая строка, которая затем будет интерпретироваться как формат, например: "#,0" - целые числа с разделителями разрядов или "0.0%" - процентный формат с одним знаком после запятой.
Но мы можем задавать и более сложные форматы, например заменяя числа на текст, как в моём примере или например задать такой формат: "Больше;Меньше" - тогда вместо чисел больше 0 будет слово "Больше", а вместо отрицательных "Меньше".
Но неподготовленному человеку будет не понятно, что значит "Больше" и "Меньше", более информативно будет "Больше 0" и "Меньше 0". Только вот 0 относится к зарезервированным символам и соответственно вместо ожидаемого текста "Больше 0" будет возвращать "Больше 123", то есть некое целое число, которое будет получаться, исходя из контекста. И скорее всего оно будет совсем не понятным, т.к. пробел тоже зарезервированный символ.
Чтобы избежать этой ошибки, требуется явно указать, что мы передаем целый кусок текста для этого и требуется дополнительное экранирование кавычками, чтобы получилось: ""Больше 0";"Меньше 0"". А так как я получаю строку форматирования с помощью конкатенации, то для передачи кавычек используется такая строка """"

Возвращаемся к нашей визуализации и добавляем Calculation Item в панель фильтров выбранного визуального элемента:

Фильтр по Calculation Item Histogram, чтобы применилась Calculation group

После того, как мы применили фильтр, в нашей матрице произошли изменения:

Матрица с применённием Calculation group

Теперь "как бы для текстовой" меры у нас действует условное форматирование в виде гистограммы. А всё потому, что на самом деле у нас за буквами скрываются цифры - вы же помните, что в Expression мы вычисляем текущую меру, которая у нас равна [Sum Orders Qty]. Осталось только навести красоту - убрать или скрыть лишнее:

Итоговый результат

Но внесу небольшую ложку дёгтя в бочку мёда: если вы видите текст, то сортируя этот текст вы ожидаете, что он будет сортироваться согласно алфавита. Здесь же текст - это только формат, а не значения - в значениях у нас по прежнему числа. Поэтому, чтоб отсортировать Subcategory по алфавиту придётся воспользоваться контекстным меню:

Сортировка по SubcategoryName

Посмотреть и понажимать отчёт можно ниже

Скачать файл для изучения можно по ссылке

PS Также рекомендую к просмотру видео от Станислава Салостея. Да и в целом его канал с множеством идей по визуализациям в PowerBI.