Превращаем громоздкие отчёты в эффективные и компактные.

12595
Превращаем громоздкие отчёты в эффективные и компактные.

Зачастую хранение больших объёмов данных предполагает использование 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 записей.

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

Всем привет. Меня зовут Бикаев Альберт. Уже более 13 лет я успешно занимаюсь Business Intelligence, Data Minig, Data Science, OLAP, и т.д. Являюсь основателем магазина кастомных визуализаций для Power BI, а также исполнительным директором компании myBI.