Зачастую хранение больших объёмов данных предполагает использование OLAP технологий. Это может касаться как внутри-корпоративных хранилищ данных, так и внешних сервисов, к примеру веб-аналитики.
Использование подобных источников при создании отчётности в Power BI приводит к тому, что на входе мы получаем выгруженные данные в табличном виде. И, как правило, эти выгрузки имеют формат сводных таблиц.
На практике это выглядит следующим образом:
Данные, которые я выгрузил из Яндекс.Метрики сведены по полю “Дата визита”, меры при этом находятся в полях (столбцах). Конечно, такой вид представления очень удобен для визуального чтения информации.
Теперь предположим, что нам необходимо создать отчётность на подобной выгрузке из Яндекс.Метрики.
Для этого возьмём XLS файл в качестве источника и создадим отчёт “в лоб”.
Я вынужден использовать отдельные визуализации-диаграммы для каждой из мер. 5 мер – 5 диаграмм, 100 мер – 100 диаграмм. Это серьезно снижает “читабельность” отчётности.
Да, конечно, можно попробовать реализовать всё сразу на одной диаграмме, раскинув меры по рядам. К сожалению, если мер много и их значения между собой не сопоставимы (просмотры, отказы, длительность), это сделает наш отчёт вообще не читаемым.
Было бы здорово иметь одну визуализацию-диаграмму, на которой можно на выбор выводить различные метрики (меры). Реализовать такую задумку на текущей таблице напрямую нельзя.
К счастью, у нас есть два варианта решения задачи. Хорошие новости в том, что нет необходимости предобрабатывать источник до загрузки в модель. Все необходимые преобразования мы будем прямо в Power BI.
В целом оба варианта довольно схожи. Первый чуть проще и подойдёт новичкам, его можно реализовать с помощью нескольких кликов мыши. Второй вариант реализуется быстрее, но потребует написания короткого выражения DAX.
Вариант 1
Данный способ подойдёт новичкам, не знакомым с выражениями DAX
Для реализации отчёта первым способом нам необходимо изменить запросы. Идём в редактор запросов.
Выбираем наш источник – таблицу. После этого выделяем мышкой столбцы, в которых расположены интересующие нас меры. Кликаем правой кнопкой мыши на заголовок любого из выделенных столбцов и выбираем в контекстном меню – “Отменить свёртывание столбцов”.
Получим новую таблицу в таком виде:
После этого необходимо у поля “Значение” сменить тип данных на Десятичное число.
Теперь у нас есть поле с названием наших мер и поле со значениями этих самых мер.
Далее нам необходимо создать справочник мер. Будем делать его вручную, так как количество мер и их имена известны:
Получим короткую таблицу.
Следующим действием установим связь справочника и нашей развёрнутой таблицы. Создадим однонаправленную связь “Многие к 1”.
В конструкторе отчётов создадим срез из нашего справочника мер и сделаем одну диаграмму на основе развёрнутой таблицы. В оси поставим Дату визита. В условные обозначения – Метрику, а в значения – Значения мер.
Таким образом сейчас переключая меры на срезе Метрики автоматически будут меняться ряды на диаграмме.
Дополнительно можно подключить нашу исходную таблицу к развёрнутой, чтобы при клике на столбики диаграммы выводить другие метрики в многострочной карточке по выбранной дате.
Вариант 2
Данный способ лично мне кажется проще и красивее.
Для этого нам НЕ потребуется преобразовывать исходную таблицу в новую.
Достаточно создать справочник мер, как и в первом способе
После чего в исходной таблице необходимо добавить новую вычисляемую меру:
Значение меры = IF ( HASONEVALUE ( 'Метрики'[Метрика] ); SWITCH ( VALUES ( 'Метрики'[Метрика] ); "Визиты"; MIN ( 'Отчет'[Визиты] ); "Посетители"; MIN ( 'Отчет'[Посетители] ); "Просмотры"; MIN ( 'Отчет'[Просмотры] ); "Доля новых посетителей"; MIN ( 'Отчет'[Доля новых посетителей] ); "Отказы"; MIN ( 'Отчет'[Отказы] ); "Глубина просмотра"; MIN ( 'Отчет'[Глубина просмотра] ); "Время на сайте"; MIN ( 'Отчет'[Время на сайте] ) ); BLANK () )
Она работает следующим образом:
Проверяет, если в нашем срезе выбрано только одно значение, то на основании этого значения возвращается определённая мера. Для “сырых” (фактов) мер необходимо использовать статистическое выражение MIN, MAX, AVERAGE
и т.д. В случае, если мы уже используем вычисляемую меру, то статистическое выражение не потребуется.
Теперь нам необходимо добавить срез на основании справочника метрик и создать диаграмму со следующими параметрами:
В целом, визуально у нас получится решение, абсолютно идентичное первому способу.
Но у данного варианта есть ряд преимуществ:
1. Всё делается в рамках одной таблицы.
2. Реализация происходит значительно быстрее.
3. На больших объёмах данных производительность не будет падать, в отличие от первого способа.
Подробнее остановлюсь на последнем пункте.
Дело в том, что реализация первым способом предполагает многократное увеличение количества записей в таблице. Точнее, количество записей увеличится ровно во столько раз, сколько мер мы хотим развернуть. На больших объёмах данных первый способ может существенно снизить производительность отчётности.
К примеру, если у нас 1.000.000 записей в исходной сведённой таблице, то при использовании 20 мер, которые мы развернём в одном столбце, на выходе получим таблицу, у которой будет уже 20.000.000 записей.
Реализация вторым способом не окажет на исходную таблицу дополнительной нагрузки, так как будет лишь определять, какую из мер нужно задействовать.