Неофициальный форум пользователей Qlik Sense & Qlikview

Для разработчиков => Вопросы по Qlik Sense & QlikView => Тема начата: Иван от 11 января 2015, 01:24:11

Название: Как отфильтровать мероприятия по выбранной дате в 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
];
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: Иван от 11 января 2015, 03:12:48
И совсем для гуру, как обрабатывать несколько выбранных дат (причем даты могут идти непоследовательно, например 1, 5 и 20 число месяца)? Думаю, что нужно через setExpression делать, но не втыкаю как... I need help!
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: Иван от 11 января 2015, 03:38:33
Может как то можно создать дополнительную таблицу в которой хранить интервалы? Хотя это кажется плохим решением...
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: Иван от 11 января 2015, 03:53:33
Как временное решение сделал так:
=if([Дата старта мероприятия]<= Date(Interval(Num(Дата)),'DD.MM.YYYY') and [Дата окончания мероприятия] >= Date(Interval(Num(Дата)),'DD.MM.YYYY'),Дата,Null())

У кого будут предложения, напишите, пожалуйста.
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: Иван от 11 января 2015, 04:24:11
Проблему решил, во вложении приложение с решением. Надеюсь кому-то поможет, ибо сразу не додуматься.

Алгоритм следующий:
1) Используем прямую таблицу (chart);
2) Вычисляемое измерение (его необходимо скрыть)
=if([Дата старта мероприятия]<= Date(Interval(Num(Дата)),'DD.MM.YYYY') and [Дата окончания мероприятия] >= Date(Interval(Num(Дата)),'DD.MM.YYYY'),Дата,Null())
3) Выражение
Aggr([Наименование мероприятия], [Дата старта мероприятия], [Дата окончания мероприятия])
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: admin от 11 января 2015, 04:28:39
Цитата: Иван от 11 января  2015, 01:24:11  
Вопрос - как отфильтровать в таблице те мероприятия, у которых дата начала меньше выбранной даты, а дата окончания мероприятия больше выбранной даты.
Т.е. при выделении даты требуется отобрать записи мероприятий которые действуют на эту дату?
Обратите внимание на функцию IntervalMatch()
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: Иван от 11 января 2015, 04:36:05
Да, совершенно верно. Спасибо, гляну эту функцию.
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: admin от 11 января 2015, 04:42:23
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: Иван от 11 января 2015, 04:59:25
Цитата: admin от 11 января  2015, 04:42:23  
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

К сожалению, первый раз сталкиваюсь с календарем, поэтому делал по первому попавшемуся образцу. Спасибо! :)
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: Иван от 12 января 2015, 02:07:02
Цитата: admin от 11 января  2015, 04:42:23  
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

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

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

С уважением,
Шамаев Иван.
Название: Re: Как отфильтровать мероприятия по выбранной дате?
Отправлено: admin от 12 января 2015, 05:28:17
Привет, возьмите лет десять и сравните создание календарей на этот период в двух вариантах по времени и задействованным ресурсам.