Расширенная разметка периодов в Power BI
Сегодня мы рассмотрим такую проблему, как ручная разметка периодов даты, которая позволит «по нажатию одной кнопки» получать необходимый результат.
Вообще, в Power BI все это решается при помощи элемента визуализации “Slicer” (“Срез”), работающего в относительном режиме, но вот, например, на промежутке «недели» он работает не совсем корректно. К тому же, подобные атрибуты часто используются в дальнейших расчетах, потому необходимо предварительно обработать столбец даты.
Пример:
В качестве исходных данных имеется набор, содержащий всего один столбец “Дата”, данные, содержащиеся в столбце – это просто случайный список дат:
Задача:
Получить при помощи группы расчетных столбцов диапазон дат, размеченный определенным образом в разрезе лет, кварталов, месяцев, недель и дней.
Процесс обработки:
Метка года =
VAR _StartingPoint =
TODAY ()
VAR _CurrentYear =
YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
VAR _LastYear =
YEAR ( 'Список дат'[Дата] )
= YEAR ( _StartingPoint ) - 1
VAR _FutureYear =
YEAR ( 'Список дат'[Дата] )
= YEAR ( _StartingPoint ) + 1
RETURN
SWITCH (
TRUE (),
_CurrentYear, "Текущий год",
_LastYear, "Прошлый год",
_FutureYear, "Следующий год",
"Прочее"
)
Данный столбец будет содержать в себе распределение даты по категориям в разрезе лет.
Метка квартала =
VAR _StartingPoint =
TODAY ()
VAR _CurrentYear =
YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
VAR _CurrentQuarter =
QUARTER ( 'Список дат'[Дата] ) = QUARTER ( _StartingPoint )
&& _CurrentYear = TRUE ()
VAR _LastQuarter =
QUARTER ( 'Список дат'[Дата] )
= QUARTER ( _StartingPoint ) - 1
&& _CurrentYear = TRUE ()
VAR _FutureQuarter =
QUARTER ( 'Список дат'[Дата] )
= QUARTER ( _StartingPoint ) + 1
&& _CurrentYear = TRUE ()
RETURN
SWITCH (
TRUE (),
_CurrentQuarter, "Текущий квартал",
_LastQuarter, "Прошлый квартал",
_FutureQuarter, "Следующий квартал",
"Прочее"
)
Метка месяца =
VAR _StartingPoint =
TODAY ()
VAR _Today = 'Список дат'[Дата] = _StartingPoint
VAR _CurrentYear =
YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
VAR _CurrentMonth =
MONTH ( 'Список дат'[Дата] ) = MONTH ( _StartingPoint )
&& _CurrentYear = TRUE ()
VAR _LastMonth =
MONTH ( 'Список дат'[Дата] )
= MONTH ( _StartingPoint ) - 1
&& _CurrentYear = TRUE ()
VAR _FutureMonth =
MONTH ( 'Список дат'[Дата] )
= MONTH ( _StartingPoint ) + 1
&& _CurrentYear = TRUE ()
RETURN
SWITCH (
TRUE (),
_CurrentMonth, "Текущий месяц",
_LastMonth, "Прошлый месяц",
_FutureMonth, "Следующий месяц",
"Прочее"
)
Метка недели =
VAR _StartingPoint =
TODAY ()
VAR _CurrentYear =
YEAR ( 'Список дат'[Дата] ) = YEAR ( _StartingPoint )
VAR _CurrentWeek =
WEEKNUM ( 'Список дат'[Дата], 2 ) = WEEKNUM ( _StartingPoint, 2 )
&& _CurrentYear = TRUE ()
VAR _LastWeek =
WEEKNUM ( 'Список дат'[Дата], 2 )
= WEEKNUM ( _StartingPoint, 2 ) - 1
&& _CurrentYear = TRUE ()
VAR _FutureWeek =
WEEKNUM ( 'Список дат'[Дата], 2 )
= WEEKNUM ( _StartingPoint, 2 ) + 1
&& _CurrentYear = TRUE ()
RETURN
SWITCH (
TRUE (),
_CurrentWeek, "Текущая неделя",
_LastWeek, "Прошлая неделя",
_FutureWeek, "Следующая неделя",
"Прочее"
)
Помните, что при реализации данного расчета во избежание ошибок необходимо явным образом указать день начала недели.
Метка дня =
VAR _StartingPoint =
TODAY ()
RETURN
SWITCH (
'Список дат'[Дата] - _StartingPoint,
0, "Текущий день",
-1, "Прошлый день",
1, "Следующий день",
"Прочее"
)
Как вы, возможно, заметили, формулы, приведенные ранее, были построены по одному шаблону, но решений может быть несколько, поэтому выше была продемонстрирована конструкция SWITCH, а не SWITCH ( TRUE ()…).
В результате создания описанных расчетных столбцов будет сформирована таблица следующего вида:
Вот таким нехитрым образом можно собирать заранее определенные выборки по периодам, так же, формулы можно комбинировать (например, создать кнопку, показывающую данные за текущий месяц, но до вчерашнего дня).