Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Декабрь 18, 2017, 07:34:54 pm

Автор Тема: Как отфильтровать мероприятия по выбранной дате в Qlikview?  (Прочитано 3105 раз)

Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика 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
[Дата, Квартал, Месяц, Год, День, Неделя, День недели];

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
];
Бизнес-анализ, http://iiba.ru
Теория и практика QlikView, http://ivan-shamaev.ru/qlikview-theory-and-practic

Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика QlikView
И совсем для гуру, как обрабатывать несколько выбранных дат (причем даты могут идти непоследовательно, например 1, 5 и 20 число месяца)? Думаю, что нужно через setExpression делать, но не втыкаю как... I need help!
Бизнес-анализ, http://iiba.ru
Теория и практика QlikView, http://ivan-shamaev.ru/qlikview-theory-and-practic

Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика QlikView
Может как то можно создать дополнительную таблицу в которой хранить интервалы? Хотя это кажется плохим решением...
Бизнес-анализ, http://iiba.ru
Теория и практика QlikView, http://ivan-shamaev.ru/qlikview-theory-and-practic

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


Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика QlikView
Как временное решение сделал так:
=if([Дата старта мероприятия]<= Date(Interval(Num(Дата)),'DD.MM.YYYY') and [Дата окончания мероприятия] >= Date(Interval(Num(Дата)),'DD.MM.YYYY'),Дата,Null())

У кого будут предложения, напишите, пожалуйста.
Бизнес-анализ, http://iiba.ru
Теория и практика QlikView, http://ivan-shamaev.ru/qlikview-theory-and-practic

Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика QlikView
Проблему решил, во вложении приложение с решением. Надеюсь кому-то поможет, ибо сразу не додуматься.

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

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Вопрос - как отфильтровать в таблице те мероприятия, у которых дата начала меньше выбранной даты, а дата окончания мероприятия больше выбранной даты.
Т.е. при выделении даты требуется отобрать записи мероприятий которые действуют на эту дату?
Обратите внимание на функцию IntervalMatch()

Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика QlikView
Да, совершенно верно. Спасибо, гляну эту функцию.
Бизнес-анализ, http://iiba.ru
Теория и практика QlikView, http://ivan-shamaev.ru/qlikview-theory-and-practic

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


Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика QlikView
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

К сожалению, первый раз сталкиваюсь с календарем, поэтому делал по первому попавшемуся образцу. Спасибо! :)
Бизнес-анализ, http://iiba.ru
Теория и практика QlikView, http://ivan-shamaev.ru/qlikview-theory-and-practic

Оффлайн Иван

  • Наставник
  • **
  • Сообщений: 62
  • Страна: ru
  • Рейтинг: +13/-0
    • Просмотр профиля
    • Теория и практика QlikView
И по поводу календаря, зачем создавать циклом когда есть AUTOGENERATE?

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

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

С уважением,
Шамаев Иван.
Бизнес-анализ, http://iiba.ru
Теория и практика QlikView, http://ivan-shamaev.ru/qlikview-theory-and-practic

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1005
  • Страна: ru
  • Рейтинг: +103/-0
    • Просмотр профиля
Привет, возьмите лет десять и сравните создание календарей на этот период в двух вариантах по времени и задействованным ресурсам.