Рвав-рвав, сегодня я – собака-задремака!
Перед вами 8-я заметка из нашего цикла "Мелкие радости", и сегодня мы рассмотрим такую проблему, как ручная разметка периодов, дабы "по нажатию одной кнопки" получать необходимый результат.
Ну и, буду честен, постоянно отвечать на вопрос: "А как получить текущий месяц?" и тому подобное, порядком поднадоело.
Вообще, в Power BI все это решается при помощи элемента визуализации "Срез", работающего в относительном режиме, но вот, например, на промежутке "неделя" он работает не совсем корректно. К тому же, подобные вещи часто используются в расчетах.
В общем, собравшись с силами, собака Смайл решил написать маленькую заметку, чтобы потом кидаться ссылками.
Имеется таблица, содержащая один столбец, в котором находится случайный список дат:

Задача:
Получить при помощи группы расчетных столбцов диапазон дат, размеченный определенным образом.
Решение:
- Формула столбца "Метка года" может выглядеть следующим образом:
Метка года =
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 ()…).
- В результате создания описанных расчетных столбцов будет сформирована таблица следующего вида:

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