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

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

« предыдущая - следующая »

Иван

января 11, 2015, 01:24:11 pm Последнее редактирование: июня 14, 2015, 03:43:04 pm от admin
Добрый день!

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

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
];

Иван

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

Иван

января 11, 2015, 03:38:33 pm #2 Последнее редактирование: января 11, 2015, 03:43:12 pm от Иван
Может как то можно создать дополнительную таблицу в которой хранить интервалы? Хотя это кажется плохим решением...

Иван

Как временное решение сделал так:
=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

января 11, 2015, 04:28:39 pm #5 Последнее редактирование: января 11, 2015, 04:30:10 pm от admin
Цитата: Иван от января 11, 2015, 01:24:11 pm
Вопрос - как отфильтровать в таблице те мероприятия, у которых дата начала меньше выбранной даты, а дата окончания мероприятия больше выбранной даты.

Т.е. при выделении даты требуется отобрать записи мероприятий которые действуют на эту дату?
Обратите внимание на функцию IntervalMatch()

Иван

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

admin

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

Иван

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


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

Иван

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


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

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

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

admin

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

Рейтинг@Mail.ru Яндекс.Метрика