<<< Вернуться в основной раздел «QlikView — краткий учебник»
Contents
Постановка задачи в QlikView — фильтр по датам
Возникла задача в QlikView, для упрощения создал ограниченный пример. Есть мероприятия, у каждого мероприятия есть дата начала и дата окончания. Есть календарь. В календаре выбирается одна или несколько дат.
Вопрос — как отфильтровать в таблице те мероприятия, у которых дата начала меньше выбранной даты (выбранных дат), а дата окончания мероприятия больше выбранной даты.
Код загрузки данных:
SET ThousandSep=’ ‘;
SET DecimalSep=’,’;
SET MoneyThousandSep=’ ‘;
SET MoneyDecimalSep=’,’;
SET MoneyFormat=’# ##0,00р.;-# ##0,00р.’;
SET TimeFormat=’h:mm:ss’;
SET DateFormat=’DD.MM.YYYY’;
SET TimestampFormat=’DD.MM.YYYY h:mm:ss[.fff]’;
SET MonthNames=’янв;фев;мар;апр;май;июн;июл;авг;сен;окт;ноя;дек’;
SET DayNames=’Пн;Вт;Ср;Чт;Пт;Сб;Вс’;Мероприятие:
Load * inline [
Дата старта мероприятия, Дата окончания мероприятия, Наименование мероприятия
01.01.2015, 05.01.2015, Мероприятие 1
01.01.2015, 03.01.2015, Мероприятие 2
02.01.2015, 06.01.2015, Мероприятие 3
02.01.2015, 04.01.2015, Мероприятие 4
03.01.2015, 03.01.2015, Мероприятие 5
03.01.2015, 05.01.2015, Мероприятие 6
04.01.2015, 05.01.2015, Мероприятие 7
05.01.2015, 10.01.2015, Мероприятие 8
06.01.2015, 11.01.2015, Мероприятие 9
];//================ Календарь начало ==========================
MinMaxDates:
LOAD Distinct
Floor(num(Min(date(«Дата старта мероприятия»)))) AS MinDate,
Floor(num(Max(date(«Дата окончания мероприятия»)))) AS MaxDate
RESIDENT [Мероприятие];LET vMinDate = FieldValue(‘MinDate’, 1);
LET vMaxDate = FieldValue(‘MaxDate’, 1);DROP Table MinMaxDates;
// КАЛЕНДАРЬ
TempCalendar:
LOAD
rowno() as «НомерСтроки»,
$(vMinDate) + rowno() — 1 AS DateNumber,
date ($(vMinDate) + rowno() — 1) AS TempDate
AUTOGENERATE
$(vMaxDate) — $(vMinDate) + 1;//*************Master Calendar************
Календарь:
LOAD
TempDate AS Дата,
Year (TempDate) AS Год,
‘Кв ‘ & Ceil(Month (TempDate)/3) AS Квартал,
Month (TempDate) AS Месяц,
week(TempDate) as [Неделя],
weekday(TempDate) as [День недели],
Day (TempDate) as День,
Date( Monthstart (TempDate), ‘MMM-YYYY’) AS Месяц_ГодResident TempCalendar
Order by TempDate ASC;Drop Table TempCalendar;
//================ Календарь конец ==========================
Решение задачи и файл QlikView с решенной задачей
Алгоритм решения
1) Используем прямую таблицу (chart);
2) Измерения
Вычисляемое измерение (его необходимо скрыть в дальнейшем)
=if([Дата старта мероприятия]<= Date(Interval(Num(Дата)),’DD.MM.YYYY’) and [Дата окончания мероприятия] >= Date(Interval(Num(Дата)),’DD.MM.YYYY’),Дата,Null())
3) Выражение
Aggr([Наименование мероприятия], [Дата старта мероприятия], [Дата окончания мероприятия])
6) Отфильтруем две даты (множественный выбор делается с нажатием клавиши Ctrl)
Файл QlikView с решением
Сортировка мероприятий по датам (условие if).rar
Другие советы по данной задаче
<<< Вернуться в основной раздел «QlikView — краткий учебник»
Leave a Reply