Pull to refresh

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

Доброго времени суток, друзья. Мой первый пост на Хабре. Не так давно начал карьеру аналитика данных и заметил, что на просторах очень мало статей именно по PowerBI. Захотелось время от времени постить интересные статейки по данной теме, основанные на личном опыте. Ну и от слов сразу к делу, как говорится.

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

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

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

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

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

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

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

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

Календарь = 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"))

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

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

Срез для главной =
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)

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

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

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

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

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

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

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

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

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

Буду рад любым видам обратной связи. Всем мир :)

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.