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

Довольно часто в аналитике удобно выбирать не конкретный временной период, а относительный. Текущий месяц, прошлый месяц и т.д. Часто для этого используют флаговые поля в календаре, типа 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 не будет опубликован. Обязательные поля помечены *