Как отфильтровать мероприятия по выбранной дате в Qlikview?

Автор Иван, 11 января 2015, 01:24:11

« назад - далее »

Иван

Добрый день!

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

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
[Дата, Квартал, Месяц, Год, День, Неделя, День недели];

Let ТекущаяДата = Num(Today(1));
Let ПрошедшийПериод = -10;
Let БудущийПериод = 0;

For i = $(ПрошедшийПериод) to $(БудущийПериод)
Concatenate(Календарь)
Load
Date ($(ТекущаяДата) + $(i)) as Дата,
'Q' & Ceil(Month($(ТекущаяДата) + $(i))/3) as Квартал,
Month (Date($(ТекущаяДата) + $(i))) as Месяц,
Year (Date($(ТекущаяДата) + $(i))) as Год,
Day (Date($(ТекущаяДата) + $(i))) as День,
week($(ТекущаяДата) + $(i)) as [Неделя],
weekday($(ТекущаяДата) + $(i)) as [День недели]
AutoGenerate 1
;
Next i;

Мероприятие:
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
];

Иван

#1
И совсем для гуру, как обрабатывать несколько выбранных дат (причем даты могут идти непоследовательно, например 1, 5 и 20 число месяца)? Думаю, что нужно через setExpression делать, но не втыкаю как... I need help!

Иван

#2
Может как то можно создать дополнительную таблицу в которой хранить интервалы? Хотя это кажется плохим решением...

Иван

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

У кого будут предложения, напишите, пожалуйста.

Иван

Проблему решил, во вложении приложение с решением. Надеюсь кому-то поможет, ибо сразу не додуматься.

Алгоритм следующий:
1) Используем прямую таблицу (chart);
2) Вычисляемое измерение (его необходимо скрыть)
=if([Дата старта мероприятия]<= Date(Interval(Num(Дата)),'DD.MM.YYYY') and [Дата окончания мероприятия] >= Date(Interval(Num(Дата)),'DD.MM.YYYY'),Дата,Null())
3) Выражение
Aggr([Наименование мероприятия], [Дата старта мероприятия], [Дата окончания мероприятия])

admin

#5
Цитата: Иван от 11 января  2015, 01:24:11  
Вопрос - как отфильтровать в таблице те мероприятия, у которых дата начала меньше выбранной даты, а дата окончания мероприятия больше выбранной даты.
Т.е. при выделении даты требуется отобрать записи мероприятий которые действуют на эту дату?
Обратите внимание на функцию IntervalMatch()

Иван

Да, совершенно верно. Спасибо, гляну эту функцию.

admin

И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

Иван

Цитата: admin от 11 января  2015, 04:42:23  
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

К сожалению, первый раз сталкиваюсь с календарем, поэтому делал по первому попавшемуся образцу. Спасибо! :)

Иван

Цитата: admin от 11 января  2015, 04:42:23  
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

Евгений, добрый день!

А можете пояснить, в чем недостаток цикла и в чем преимущество AUTOGENERATE при создании календаря? Либо ссылку на информацию киньте, пожалуйста.

С уважением,
Шамаев Иван.

admin

Привет, возьмите лет десять и сравните создание календарей на этот период в двух вариантах по времени и задействованным ресурсам.

Яндекс.Метрика