Мы создаем отчеты в Pbi для контекстной рекламы, и добавляем в них различные функции по запросу маркетолога или клиента. И часто бывает, что функционала базовых визуализаций становится недостаточно.

Например, как уместить все необходимые показатели на один график, чтобы можно было смотреть динамику, например, по расходу и доходу, а также по расходу и количеству покупок, расходу и ROI на одном графике?

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

Возьмем простой дата-сет для примера

Период

Категория

Показатель 1

Показатель 2

1

Категория 1

100

9

1

Категория 2

15

2

1

Категория 3

50

6

2

Категория 1

105

10

2

Категория 2

20

4

2

Категория 3

60

5

3

Категория 1

95

8

3

Категория 2

25

3

3

Категория 3

50

6

4

Категория 1

100

9

4

Категория 2

10

2

4

Категория 3

55

7

5

Категория 1

110

11

5

Категория 2

15

3

5

Категория 3

65

4


На основе этой таблицы делаем простой визуал (страница “Базовый визуал” в отчете)

Рассчитаем “Показатель 3” в качестве меры по формуле:

Показатель 3 = DIVIDE (

    sum ('Таблица' [Показатель 2]),

    sum ('Таблица' [Показатель 1]),

    0 ) 

Базовое решение

Задача: сделать удобный график с возможностью отображения всех трех показателей.

В этом случае невозможно переоценить комбинацию функций SELECTEDVALUE и SWITCH для расширения базового управления визуализациями. Чтобы создать необходимый для выбора отображаемого показателя слайсер создадим таблицу с помощью функции DATATABLE. Я пользуюсь именно функцией для создания таблицы потому, что в случае добавления дополнительного показателя таблицу можно легко расширить не нарушая связи с формулами и визуализациями. Итак:

Простой слайсер = DATATABLE (

    "Выбор показателя", STRING,

    { { "Показатель 1" }, { "Показатель 2" }, { "Показатель 3" } } )

В итоге получается таблица вида:

Выбор показателя

Показатель 1

Показатель 2

Показатель 3


И срез “Выбор показателя”

Теперь воспользуемся функциями SWITCH и SELECTEDVALUE для создания меры, которая будет сменять выводимые на график значения в соответствии с выбором на срезе “Выбор показателя”:

Вывод показателя на график = SWITCH (

    SELECTEDVALUE ('Простой слайсер' [Выбор показателя]),

    "Показатель 1", sum ('Таблица' [Показатель 1]),

    "Показатель 2", sum ('Таблица' [Показатель 2]),

    "Показатель 3", 'Таблица' [Показатель 3])

Мера возвращает сумму по показателю 1 и показателю 2 или значение меры “Показатель 3” в соответствии со значением SELECTEDVALUE. Добавляем меру на график в качестве единственного значения и получаем возможность менять выводимый показатель. 

В качестве приятного дополнения можно сделать динамическое название, заведя специальную меру:

Динамическое название = CONCATENATE (SELECTEDVALUE ('Простой слайсер' [Выбор показателя]), " в динамике")

и визуализировав ее с помощью карточки или многострочной карточки.

Задача с удобным динамичным отображением разных показателей решена, но этот способ имеет ряд ограничений:

  1. Разноформатные значения унифицируются. 

В нашем примере “Показатель 3” мера, которая считает долю показателя 2 в показателе 1 - её логично выводить в процентном виде. Но на графике она будет выглядеть как десятичная дробь.

Можно попробовать навязать формат, но применение функции FORMAT в таком виде: 

Вывод показателя на график = SWITCH (

    SELECTEDVALUE ('Простой слайсер'[Выбор показателя]),

    "Показатель 1", FORMAT (sum ('Таблица'[Показатель 1]), "General Number"),

    "Показатель 2", FORMAT (sum ('Таблица'[Показатель 2]), "General Number"),

    "Показатель 3", FORMAT ('Таблица'[Показатель 3], "Percent")) 

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

  1.  Выбор нескольких показателей сразу функцией SELECTEDVALUE воспринимается, как “не выбрано ничего”

В таком случае, лучше ограничивать срез “Выбор показателя” единичным выбором. 

Наша доработка базового решения

Для решения задачи с мультивыбором потребуется совершенно иная логика. Нам нужен инструмент, который будет проверять выбрано ли среди прочих конкретный показатель и возвращать логическое true или false соответственно.

Как мы уже успели убедиться, функция SELECTEDVALUE не умеет работать с мультивыбором. Основная проблема заключается в том, что значение столбца “Выбор показателя” текстовое, с ним нельзя проводить никаких операций кроме соотнесения с таким же текстовым значением. К тому же мультивыбор показателей подразумевает работу с динамическим массивом значений - тут напрашивается матричная структура:

Отобразить на графике

Показатель 1

Показатель 2

Показатель 3

Показатель 1

1

0

0

Показатель 2

0

1

0

Показатель 3

0

0

1

Построенный по столбцу “Отобразить на графике” срез будет фильтровать эту таблицу по всем возможным сочетаниям выбора показателей, а, например, в сумме по столбцу “Показатель 1” вернет единицу только в случае выбора значения “Показатель 1” в слайсере.

Такую таблицу, как и в первом примере, лучше заводить с помощью функции DATATABLE:

Сложный слайсер = DATATABLE (

"Выбор показателя",    STRING, 

"Показатель 1",             INTEGER, 

"Показатель 2",             INTEGER, 

"Показатель 3",             INTEGER, 

    {

        { "Показатель 1"          ,1,0,0},

        { "Показатель 2"          ,0,1,0},

        { "Показатель 3"          ,0,0,1}

    })

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

Показатель 1 на графике = if (

    sum ('Сложный слайсер' [Показатель 1]) = 1, 

    sum ('Таблица' [Показатель 1]),

    "")Показатель 2 на графике = if (

    sum ('Сложный слайсер' [Показатель 2]) = 1, 

    sum ('Таблица' [Показатель 2]),

    "")

Показатель 3 на графике = if (

    sum ('Сложный слайсер' [Показатель 3]) = 1, 

    'Таблица' [Показатель 3],

    "")

Важно в случае, если логическое выражение принимает значение false, возвращать именно “” - пустое значение, а не 0. Иначе, если какой-то показатель не будет выбран, то на графике отобраться нулевые значения. 

Выводим на график все три новые меры.

 Заметим, что для меры “Показатель 3 на графике” можно присвоить процентный формат. Однако, если выводить его с другими показателями ось унифицирует значения.

Это можно исправить, если включить отображение вспомогательной оси и добавить “Показатель 3” в качестве вспомогательного значения. Теперь динамику числового и процентного показателей можно изучить на одном графике. 

Однако осталась еще одна проблема - если снять выбор с фильтра, то отобразятся все три графика.

Сложный слайсер = DATATABLE (

"Выбор показателя",    STRING, 

"Показатель 1",             INTEGER, 

"Показатель 2",             INTEGER, 

"Показатель 3",             INTEGER, 

    {

        { "Показатель 1"          ,1,0,0},

        { "Показатель 2"          ,0,1,0},

        { "Показатель 3"          ,0,0,1},

        { "Проверка"                ,1,1,1}

    })

Теперь, если не выбран ни один параметр на срезе, сумма по любому столбцу будет равна 2, и логический тест, например, “sum ('Сложный слайсер' [Показатель 1]) = 1” вернет false

А для того, чтобы строка “Проверка” не мешала в слайсере, можно убрать её фильтром на уровне визуального элемента

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

Комментарии (0)