Как показать меры в строках матрицы?
В заголовок я вынес достаточно простой вопрос, решение которого доступно в базовом функционале визуализации, но тем не менее вызывает затруднение у новичков - тех, кто только начинает работать в #PowerBI.
Но, по мимо базовой функции, я хочу показать в статье ещё два способа решения этой задачи, которые значительно расширяют возможности визуализации в матрице, в том числе, позволяют разместить названия мер над столбцами, чего нельзя сделать простым включением переключателя.
Стандартный функционал
В модели данных созданы три меры:
Теперь создадим визуальный элемент матрица, в который добавим названия категорий товаров, месяца и три меры, которые создали.
Получилась очень длинная таблица с множеством цифр, которые сливаются друг с другом без форматирования. Хорошо что мера [% Compare] отображается в виде процентов, позволяя отделить месяца друг от друга.
Давайте поместим меры в строки и посмотрим, что получится. Для этого перейдём в свойства визуального элемента - вкладка Формат(в виде валика) - раздел Значения - и включим переключатель Отображать в строках
На скриншотах я использую старую панель визуализации, так как новая находится пока в предварительной версии и не все функции могут корректно работать, а не которые даже отсутствовать.
Только вот есть одно НО: Категории нельзя свернуть - всегда отображаются все меры. И, если вы хотели бы сконцентрироваться на одной категории, то придётся фильтровать - свернуть остальные не получится. Поэтому переходим к расширенным решениям.
Создаём единую меру
У меня есть статья о переключении мер в визуализациях. Здесь будет использоваться тот же принцип.
Для начала создадим вспомогательную таблицу, которая будет содержать названия мер и номер для их сортировки в визуализации в нужном порядке.
Эту таблицу не нужно связывать ни с какими другими. На её основе мы создадим единую меру, которая в зависимости от значения в строке, будет производить нужный расчёт.
Эту меру можно было бы написать множеством способов - тут отчасти дело эстетического вкуса: можно вместо SELECTEDVALUE использовать функцию MIN, так как обращаемся к номеру меры, а можно проверять и имя меры, чтобы потом не гадать, что такое 1,2,3. И так далее.
Создадим новую матрицу, добавив в строки столбец с названиями мер из вспомогательной таблицы, а в значения только что созданную меру:
Почему матрица пустая? Потому что на уровне категории в контексте оказываются все три строки, из-за чего функция SELECTEDVALUE возвращает пустое значение, что в свою очередь приводит к последнему аргументу функции SWITCH. Если же развернуть матрицу до следующего уровня - строк вспомогательной таблицы, то мера будет работать:
Как видите, теперь мы можем сворачивать отдельные категории. Но, чтобы не пугать пользователей "внезапным исчезновением" свёрнутой категории немного изменим нашу меру, добавив второй аргумент в функции SELECTEDVALUE.
На уровне категорий теперь всегда возвращается значение нашей базовой меры [Sum Orders Qty]. Того же самого можно было бы добиться, используя MIN вместо SELECTEDVALUE.
Но, у единой меры есть очевидный недостаток: проценты отображаются как десятичные числа, ведь для меры мы можем задать только один формат.
Пойдём на небольшую хитрость и модифицируем меру, добавив в неё форматирование с помощью функции FORMAT
Больше об использовании форматов можно прочитать в моей статье Пользовательский формат данных
Теперь каждая строка с мерой имеет соответствующий формат, но появилась новая проблема - почему-то отображается категория Components, хотя все её значения пустые. На самом деле, использовав функцию FORMAT, мы превратили все наши значения в текст, в том числе и пустые.
Чтобы избавиться от "пустых" строк придётся вновь изменить меру, добавив проверку:
Таким образом, мы можем сворачивать и разворачивать категории, показывать и сортировать меры в нужном нам порядке. Внутри SWITCH можно настраивать и более сложные условия для отображения мер. Например, можно проверять название категории и для каждой из них показывать свой набор мер.
Бонусом, как я и говорил, можно названия мер поместить не в строки, а в столбцы, разместив их над другими измерениями:
Главным недостатком такой меры будет то, что её можно использовать ТОЛЬКО в матрице, таблице или карточке, так как она возвращает текст, а диаграммы не могут в значениях содержать текст - только числа. Поэтому более продвинутым решением, но похожим на единую меру будет создание Calculation group.
Работаем с Calculation group
Для создания Calculation group(CG) понадобится Tabular editor (версии 2 будет достаточно - она бесплатна, версия 3 более продвинутая, но платная).
Итак, создаём CG и добавляем в неё три Calculation item, которые соответствуют трём мерам.
В качестве Expression для Calculation item Sum Orders Qty будем использовать функцию SELECTEDMEASURE, которая возвращает значение меры находящейся в визуализации. А строку форматирования Format String Expression оставим пустой, соответственно формат будет браться из форматирования меры.
В качестве Expression для Calculation item Sum Orders Qty LM я использовал функцию, хотя мог бы сослаться на уже существующую меру [Sum Order Qty LM] и тогда оставить строку форматирования пустой, используя форматирование из меры, но могу и изменить формат, задав его в виде текстовой строки.
Здесь я вновь создаю функцию в Expression, но уже ссылаясь внутри неё на существующие меры. А раз создаём функцию, то необходимо задать форматирование.
Добавляем в строки столбец Name из нашей CG, а в значения нашу базовую меру. Как видим, по умолчанию, т.к. нет контекста или фильтра по calculation items возвращается значение базовой меры [Sum Orders Qty], в отличии единой меры, когда у нас всё исчезло.
Если же развернуть любую категорию, то каждая мера будет отформатирована согласно значению в Format String Expression.
Только вот в отличии от единой меры, если развернута хотя бы одна категория, для остальных свернутых значение становится пустым. Но, я уверен, вы сами сможете придумать, как обработать эту "ошибку"))
Итак, вы увидели три разных подхода к решению одной задачи. Каждое решение имеет свои плюсы и минусы. И то, какое из них использовать, решать только вам, исходя из потребностей и стоящих задач.
Как всегда файл с примером можно найти по ссылке, а в комментариях можно задавать вопросы.