Таблица динамических периодов

Довольно часто в аналитике удобно выбирать не конкретный временной период, а относительный. Текущий месяц, прошлый месяц и т.д. Часто для этого используют флаговые поля в календаре, типа CurrentYear, CurrentMonth, или MonthsAgo. Их удобно использовать в анализе множеств. Однако, для конечных пользователей использование флаговых полей в качестве фильтра может быть непонятным.

Рабочая альтернатива — сделать дополнительную таблицу периодов, присоединенную к календарю.

Она содержит даты, относящиеся к определенному относительному периоду, и названия периода. Таким образом одно поле позволяет делать отборы по определенным дням, неделям, месяцам, кварталам, годам.

Ниже приведен код генерации таблицы. Просто замените в ней слово День на название вашего поля с датой календаря.

Периоды:
load FieldValue('День', RecNo()) as День,
dual('Сегодня',2) as [Период],
dual('День',1) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where FieldValue('День', RecNo())=today();


load FieldValue('День', RecNo()) as День,
dual('Вчера',3) as [Период],
dual('День',1) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where FieldValue('День', RecNo())=today()-1;

load FieldValue('День', RecNo()) as День,
dual('Позавчера',4) as [Период],
dual('День',1) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where FieldValue('День', RecNo())=today()-2;

load FieldValue('День', RecNo()) as День,
dual('День прошлого года',5) as [Период],
dual('День',1) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where FieldValue('День', RecNo())+1-date#('01.01.'&year(FieldValue('День', RecNo())),'M/D/YYYY')=today()+1-date#('01.01.'&year(today()),'M/D/YYYY') and year(FieldValue('День', RecNo()))=year(today())-1;


///

load FieldValue('День', RecNo()) as День,
dual('Текущая неделя',6) as [Период],
dual('Неделя',2) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where weekstart(FieldValue('День', RecNo()))=WeekStart(today());


load FieldValue('День', RecNo()) as День,
dual('Прошлая неделя',7) as [Период],
dual('Неделя',2) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where weekstart(FieldValue('День', RecNo()))=WeekStart(WeekStart(today())-1);

load FieldValue('День', RecNo()) as День,
dual('Неделя прошлого года',8) as [Период],
dual('Неделя',2) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where week(FieldValue('День', RecNo()))=Week(today()) and year(FieldValue('День', RecNo()))=year(today())-1;



////

load FieldValue('День', RecNo()) as День,
dual('Текущий месяц',9) as [Период],
dual('Месяц',3) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where monthstart(FieldValue('День', RecNo()))=monthstart(today());


load FieldValue('День', RecNo()) as День,
dual('Прошлый месяц',10) as [Период],
dual('Месяц',3) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where monthstart(FieldValue('День', RecNo()))=monthstart(monthstart(today())-1);

load FieldValue('День', RecNo()) as День,
dual('Месяц прошлого года',11) as [Период],
dual('Месяц',3) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where month(FieldValue('День', RecNo()))=month(today()) and year(FieldValue('День', RecNo()))=year(today())-1;

////

load FieldValue('День', RecNo()) as День,
dual('Текущий квартал',12) as [Период],
dual('Квартал',4) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where quarterstart(FieldValue('День', RecNo()))=quarterstart(today());


load FieldValue('День', RecNo()) as День,
dual('Прошлый квартал',13) as [Период],
dual('Квартал',4) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where quarterstart(FieldValue('День', RecNo()))=quarterstart(quarterstart(today())-1);

load FieldValue('День', RecNo()) as День,
dual('Квартал прошлого года',14) as [Период],
dual('Квартал',4) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where 
Ceil(month(FieldValue('День', RecNo()))/3)=Ceil(month(today())/3) and year(FieldValue('День', RecNo()))=year(today())-1;

////

load FieldValue('День', RecNo()) as День,
dual('Текущий год',15) as [Период],
dual('Год',5) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where year(FieldValue('День', RecNo()))=year(today());

load FieldValue('День', RecNo()) as День,
dual('Прошлый год',16) as [Период],
dual('Год',5) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where year(FieldValue('День', RecNo()))=year(today())-1;

load FieldValue('День', RecNo()) as День,
dual('Позапрошлый год',17) as [Период],
dual('Год',5) as УровеньСезона
AUTOGENERATE FieldValueCount('День') where year(FieldValue('День', RecNo()))=year(today())-2;

Как итог, вы сможете выводить пользователю компактный фильтр периодов.

Или дать возможность быстро отбирать нужный период через интеллектуальный поиск.

Добавить комментарий

Ваш адрес email не будет опубликован.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.