#PowerBI: как сравнить прошлый и текущий год?
Наверное, самый частый приём аналитика - сравнение текущего значения со значением предыдущего периода. Это позволяет понять динамику - в ту ли мы сторону идём и предпринять соответствующие действия.
Для работы с датами в языке #DAX используются функции серии Time intelligence, а также специальная таблица-справочник "Календарь". Я написал серию статей "Биг Дата" (1, 2, 3) о том, как правильно работать с датами. Советую прочитать сначала их, если вы только начинаете работать в #PowerBI.
В этот раз хочу разобрать работу одной функции, которую я использую наиболее часто для сравнения периодов - DATEADD.
Возьмём уже знакомый dataset о продажах:
Dataset содержит информацию о продажах с 01.01.2015 по 30.06.2017 года. Создадим визуализацию с информацией о сумме продаж с разбивкой по годам:
Далее создадим меру, которая вернёт сумму продаж за предыдущий год:
Функция DATEADD принимает три аргумента: 1. Ссылка на столбец дат в таблице Календарь; 2. На сколько периодов сдвинуть вперёд или назад (со знаком минус); 3. Какой тип периода использовать (Год - Year, Квартал - Quarter, Месяц - Month, День - Day).
Так как на странице пока нет никаких фильтров, то к мере применяется только контекст вычисления текущей строки визуализации - номер года. Поэтому при сдвиге дат по календарю мы получаем даты за полный год.
Чтобы это проверить, создадим две меры, которые будут возвращать максимальную (последнюю) дату в текущем контексте.
Напомню, что данные о продажах содержат информацию только до 30.06.2017, то есть мы видим положительную динамику 2017 года относительно 2016 года, но на самом деле сравниваем продажи за полгода с продажами за целый год, а значит рост относительно предыдущего года, если сравнить с аналогичным периодом, будет ещё более весомым. Для наглядности создадим меру сравнения и добавим срез по дате на страницу.
Сравнение аналогичных периодов показывает кратный рост продаж, а не "всего лишь" +25%, если сравнивать с полным годом.
Но фильтр по срезу создал "проблему" - исчезли продажи за 2015 и 2016 год.
Конечно, можно создать ещё одну меру, которая будет возвращать продажи со сдвигом на 2 года:
Затем ещё одну меру, которая сравнивает продажи за прошлый и позапрошлый год между собой. А если будет необходимо вывести 3, 5, 10 лет? Плодить столько мер совсем не хочется - в них очень просто будет запутаться. Гораздо проще сделать дополнительную разметку в таблице Календарь.
Для этого создадим вычисляемый столбец:
В переменной _today я использовал конкретную дату, так как продажи заканчиваются в 2017 году, а так можно воспользоваться функцией TODAY.
В переменной _Date используем год даты текущей строки, а месяц и день берём из "сегодня".
Остаётся только сравнить дату текущей строки с полученным значением. Дополнительно я использую функцию INT, которая превращает результат логического выражения True или False в 1 или 0 соответственно, так как #PowerBI не позволяет использовать бинарные значения в боковой панели фильтров.
Удалим срез по дате со страницы и добавим срез по созданному столбцу:
Как видно на скриншоте - теперь присутствуют все года, что позволяет сравнивать аналогичные периоды, не перегружая модель мерами или сложными расчётами.
Также прикладываю ссылку на файл.