Найти тему

PS PowerBI. Относительный срез дат.

Доброго времени суток, друзья. От слов сразу к делу, как говорится. В данной статье рассмотрим такое понятие как относительный срез дат.

Как выглядит обычный срез по датам:

Обычные срезы по датам
Обычные срезы по датам

Какой срез будем сегодня рассматривать:

Относительный срез по датам.
Относительный срез по датам.

Итак, как мы с Вами видим данный срез во многом удобен на отчётах/дашбордах, где важны показатели за ближайший прошедший промежуток времени. В общем, очень полезный инструмент.

Давайте же рассмотрим, как реализовать такой срез.

Для начала нам необходимо вручную сделать календарь, если его у Вас ещё конечно же нет, для этого напишем незамысловатую формулу:

Идём в Главная --> Создать таблицу

-3

Далее пишем нашу формулу:

Календарь = ADDCOLUMNS( CALENDAR("01/01/2021",DATE(year(TODAY())+1,1,1)),

"Год", YEAR([Date]),

"Месяц", MONTH([Date]),

"Квартал", FORMAT([Date],"Q"),

"День (пн = 1)", WEEKDAY([Date],2),

"День текстом", FORMAT([Date],"ddd"),

"Номер недели (неделя начинается в пн)", WEEKNUM([Date],2),

"месяц-год", FORMAT([Date],"mmm YYYY"),

"Месяц_полностью", FORMAT([Date],"mmmm"))

-4

Отлично, наш календарь создан. Вообще такой календарь нужен для более удобного построения связей, для удобной и правильной фильтрации. В общем и целом штука хорошая и нужная.

Далее снова необходимо создать пустую таблицу по предыдущей инструкции, но только вместо кода календаря нам необходимо вставить такой вот код:

Срез для главной =

var min_date_Month = MINX(FILTER('Календарь','Календарь'[Месяц]=MONTH(TODAY()) && 'Календарь'[Год]= YEAR(TODAY())),'Календарь'[Date])

var max_date_Month = MAXX(FILTER('Календарь','Календарь'[Месяц]=MONTH(TODAY()) && 'Календарь'[Год]= YEAR(TODAY())),'Календарь'[Date])

var min_date_PrevWeek = MINX(FILTER('Календарь','Календарь'[Номер недели (неделя начинается в пн)]=WEEKNUM(TODAY())-1 && 'Календарь'[Год]= YEAR(TODAY()) ),'Календарь'[Date])

var max_date_PrevWeek = MAXX(FILTER('Календарь','Календарь'[Номер недели (неделя начинается в пн)]=WEEKNUM(TODAY())-1 && 'Календарь'[Год]= YEAR(TODAY()) ) ,'Календарь'[Date])

var min_date_Week = MINX(FILTER('Календарь','Календарь'[Номер недели (неделя начинается в пн)]=WEEKNUM(TODAY()) && 'Календарь'[Год]= YEAR(TODAY()) ),'Календарь'[Date])

var max_date_Week = MAXX(FILTER('Календарь','Календарь'[Номер недели (неделя начинается в пн)]=WEEKNUM(TODAY()) && 'Календарь'[Год]= YEAR(TODAY()) ),'Календарь'[Date])

var Yesterday_ = TODAY()-1

var Today_ = TODAY()

var tabl_Month= ADDCOLUMNS(CALENDAR(min_date_Month,max_date_Month),"Период","Mесяц","Индекс",1)

var tabl_PrevWeek = ADDCOLUMNS(CALENDAR(min_date_PrevWeek,max_date_PrevWeek),"Период","Пред. Неделя","Индекс",2)

var tabl_Week = ADDCOLUMNS(CALENDAR(min_date_Week,max_date_Week),"Период","Неделя","Индекс",3)

var tabl_Ysterday = ADDCOLUMNS(CALENDAR(Yesterday_,Yesterday_),"Период","Вчера","Индекс",4)

var tabl_Today = ADDCOLUMNS(CALENDAR(Today_,Today_),"Период","Сегодня","Индекс",5)

RETURN

UNION(tabl_Month,tabl_PrevWeek,tabl_Week,tabl_Ysterday,tabl_Today)

Назвать можно как угодно, у нас так :)
Назвать можно как угодно, у нас так :)

После написания данных формул, мы узрим такую вот табличку:

-6

Если у Вас получилось так же, то круто, идём дальше.

Далее перейдём к связям. Завершающий этап практически.

Строим двунаправленную связь Многие к одному между таблицами Календарь и Срез для главной.

-7

Получилось? Прекрасно.

Теперь идём в визуализацию и выбираем так называемый Срез.

Далее из таблицы Срез для главной вставляем поле Период таким вот образом:

-8

После этого идём в формат среза, далее Ориентация --> По горизонтали:

-9

Вот и всё! Готово. Как я и говорил ранее, данный срез очень удобен в отчётах/дашбордах, где важна информация за ближайший прошедший или настоящий участок времени.

Мы очень признательны за прочтение данной статьи, надеюсь вы извлекли для себя что-то новое или же закрепили уже полученные знания.

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

Всем мир :)