Как получить список мероприятий, фильтр по датам в QlikView?

<<< Вернуться в основной раздел “QlikView — краткий учебник”

Постановка задачи в 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;

//================ Календарь конец ==========================

Иллюстрация начальных таблиц:
get_events_in_qlikview_by_date_filter

Решение задачи и файл QlikView с решенной задачей

Алгоритм решения
1) Используем прямую таблицу (chart);
1_direct_table
2) Измерения
2_dimensions

Вычисляемое измерение (его необходимо скрыть в дальнейшем)
2_1_dimension_expression

=if([Дата старта мероприятия]<= Date(Interval(Num(Дата)),’DD.MM.YYYY’) and [Дата окончания мероприятия] >= Date(Interval(Num(Дата)),’DD.MM.YYYY’),Дата,Null())

3) Выражение
Aggr([Наименование мероприятия], [Дата старта мероприятия], [Дата окончания мероприятия])
3_expression_qlikview

4) Скрываем вычисляемое поле
4_view_chart_qlikview

5) Отфильтруем одну дату
result_qlikview_filter1

6) Отфильтруем две даты (множественный выбор делается с нажатием клавиши Ctrl)
result_qlikview_filter2

Файл QlikView с решением

Сортировка мероприятий по датам (условие if).rar

Другие советы по данной задаче

<<< Вернуться в основной раздел “QlikView — краткий учебник”


Комментарии:

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *