Календарь QlikViewИзмерение времени или календарь присутствует практически в любом аналитическом приложении и очень часто используется при составлении отчетов. Например, Аналитическое приложение может содержать значения показателей за определенный период времени или отражать динамику показателей в течение определенного периода времени. И в том, и в другом случае потребуется измерение времени, чтобы задать и отображать временные интервалы.

В этом посте я расскажу об основах и особенностях создания календаря в QlikView.

Сначала познакомимся с тем, как реализовано:

  • хранение временных данных в QlikView,
  • затем создадим календарь с помощью скриптов QlikView
  • и рассмотрим возможные варианты календаря (финансовый и альтернативный календари).

Представление временных данных в QlikView

Для того чтобы лучше понимать и использовать возможности управления данными в QlikView, познакомимся (или еще раз вспомним), как хранятся данные  в приложении QlikView.

Все данные, в том числе и даты, в QlikView хранятся в виде двух представлений — числового и текстового (такой тип данных в QlikView называется dual). Данные можно отображать в различных форматах, но по умолчанию идет текстовое представление. Числовые значения дат нужны для эффективных расчетов, ведь когда все данные в измерении рассматриваются как последовательные числа, их можно легко сравнивать, сортировать, складывать и вычитать друг из друга. Для даты числовое представление определяется как количество дней, прошедших с 31 декабря 1899 года (например, дате 17 февраля 2015 года соответствует число 42052).

Создание календаря

Теперь перейдем  непосредственно к созданию календаря.

Можно сказать, что календарь (измерение времени) в приложении  —  это непрерывный диапазон уникальных значений времени. Таким образом, при создании измерения времени  необходимо указать начальную и конечную даты диапазона и сгенерировать непрерывную последовательность дат в заданных границах.

Начальная и конечная дата определяются либо, исходя из бизнес-задач аналитического приложения, либо на основании данных источника. Данные источника для создания значений измерения времени редко можно использовать без трансформации:  в источнике часто  могут отсутствовать данные за некоторый период, а в аналитическом приложении должна быть возможность работы с этим периодом. Таким образом, в скрипте QlikView необходимо выполнить формирование последовательности дат.

Для примера мы создадим в QlikView небольшое приложение для анализа продаж, включающее  календарь.  Для этого нужно создать и сохранить в  QlikView новое приложение и открыть редактор скрипта  (сочетание клавиш Ctrl+E).

Сначала в приложении напишем скрипт, создающий таблицу с данными продаж (таблицу фактов).

НА ЗАМЕТКУ!

У первого выражения LOAD нет источника данных. В таких случаях QlikView использует результат следующего выражения  LOAD как источник.  Такое использование оператора LOAD  называется  Предшествующей Загрузкой (Preceding Load). В данном скрипте  комбинация операторов LOAD позволяет загрузить  в приложение даты в нужном формате.

Затем для удобства создаем отдельную вкладку «Календарь» (меню «Вкладка»-> «Добавить Вкладку…»). На эту вкладку добавим скрипт для создания календаря, который вначале создает временную таблицу TempMinMaxDates, состояющую из  1 строки  с минимальной и максимальной датами из таблицы фактов.  Далее эти даты записываются в переменные  и используются  с оператором  AUTOGENERATE  для создания таблицы TempCalendar  с 1 столбцом,  содержащим количество строк ( $(varMaxDate) — $(varMinDate) + 1)  и включающим диапазон дат от MaxDate до MinDate. В завершении скрипта на основании диапазона дат из TempCalendar  создается основной календарь, содержащий иерархии периодов.

Иерархия в календаре

Иерархия отражает связи между различными периодами времени и  связь этих периодов с основной датой.
Иерархия периодов календаря формируется в соответствии со сложившимися отчетными периодами и с учетом периодичности поступления данных — год, квартал, месяц, неделя, день, час  и т.д.  Вот, какой календарь получился у меня:

 Источник данных для приложения QlikView

Обратите внимание на поле «Месяц» — это хороший пример представления данных в dual. Числовое представление значений поля – это числа от 1 до 12, а текстовое представление – это названия месяцев с января по декабрь. У поля «МесяцГод» — числовое представление – это число, соответствующее дате начала месяца, а текстовое представление – это краткое название месяца + год. Эти периоды были сформированы с помощью встроенных функций  QlikView для работы с датами.

Набор этих функций весьма обширен, но если вдруг не окажется нужной функции, всегда можно сформировать период с помощью функции

dual(текстовое_представление, числовое_представление)

связав даты начала  некоторого периода с названиями этих периодов, как это делается для поля  «Квартал»:

При необходимости можно создать даже такие периоды времени, как  «Полугодие», «Триместр» или «Декада».

Финансовый календарь

Используя функции QlikView можно также создать календарь, в  котором отсчет времени ведется относительно так  называемого «финансового» года,  когда началом года является, например, 1 апреля.  В этом случае  достаточно поменять разбиение временного измерения на периоды. Скрипт для формирования календаря с финансовыми периодами может быть таким:

Здесь дата начала финансового года сдвигается на 3 месяца вперед  (с 1-го месяца (января) на 4-ый месяц (апрель) ), а номер финансового периода определяется как номер обычного календарного месяца минус 3. Вот, что получится:

Источник данных для приложения QlikView

Альтернативный календарь

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

В данном скрипте календарь создается  за один шаг с использованием функции FieldValue в цикле While.  Функция FieldValue считывает по одному значению из поля «Дата», пока не будет считано последнее значение. Таким образом, поле «Дата» служит источником данных для оператора LOAD.  Данный скрипт позволяет создать календарь, выполнив меньшее количество операций, и сократить время выполнения скрипта  (что бывает важно в случае большого количества данных).

Спасибо за внимание. Ваши комментарии и предложения по работе с календарем жду здесь!  😀

СКАЧАТЬ: Приложение QlikView Calendar