Время прочтения: 15 мин.

Предположим, нужно настроить обновление данных в приложении QlikSense по определенным ИНН, чтобы в таблицах и графиках отображались нужные данные. Для этого в QlikSense есть инструмент variableinput (представлен на рисунке ниже и находится в ‘пользовательских объектах’) – в поле вводится нужный ИНН и данные обновляются. Минусом данного инструмента является то, что можно ввести только одно значение. Но что, если хочется отобразить данные по нескольким ИНН?

Если данных очень много, грузить их в одно приложение будет нецелесообразно, так как загрузка займет большое количество времени и оборудование может не иметь возможности обработать весь массив данных (например, когда загружаемые данные не помещаются в оперативную память и сложность расчетов в приложении ‘убивает’ интерактивность). Лучшим решением будет разбить эти данные на несколько приложений, но как связать их, чтобы при наложении фильтров или изменении одного приложения, другие приложения также обновлялись, при этом сохранив за пользователем возможности самому выбирать с какой частью данных ему нужно работать? Именно для этих целей разработчиками QlikSense был придуман ODAG (ondemand app generation). Этот инструмент похож на поход в магазин – пользователь сам наполняет приложение-шаблон необходимым блоками данных: определенным периодом времени, сегментом покупателей, ассортиментом, географией и т.д, а затем этот набор данных загружается в оперативную память и пользователь ведет привычную аналитику в QlikSense.

Генерация приложений по требованию (ODAG) — это подход, представленный в QlikSense 3.0 для создания приложений для очень больших или часто меняющихся наборов данных.

1-получаем данные для selection app из базы; 2- выбор нужных данных пользователем; 3- передача условий фильтрации из Selection app серверу QlikSense; 4 – получаем данные для template app из базы на основе наложенных фильтров; 5- получаем analysis app; 6- пользователь может проводить анализ с нужными данными

Метод ODAG обеспечивает простой способ создания приложений, содержащих фрагменты данных из очень большого набора, без необходимости загружать всю информацию в память в QlikSense. После того, как пользователь сделал свой выбор и отфильтровал данные до более приемлемого размера, указанного Qlik developers / IT, пользователю разрешается создать приложение по требованию. Результирующие “подробные“ или “дочерние” (template app) приложения перезагружаются, пока пользователь ожидает предоставления полного набора данных по ограниченному набору строк.

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

Основными компонентами ODAG являются:

  • Selection app;
  • Навигационные ссылки;
  • Template app;
  • Приложение on-demand

Расскажу о структуре ODAG подробнее:

  • приложение selection app — это доступ к хранилищу, обычно содержащему агрегированные данные. Пользователи могут фильтровать большой набор данных в подмножество данных более компактного размера. Selection app может генерировать одно или несколько шаблонных приложений;
  • в дополнение к указанию того, какое приложение-шаблон использовать, навигационные ссылки используются для управления критериями, которым должен соответствовать пользователь, прежде чем он сможет создавать приложения по запросу. Например, определение максимального количества строк в подмножестве данных или указание выбора в заданном поле является обязательным;
  • каждое приложение-шаблон (template app) содержит предопределенные сценарии для загрузки данных и информационные панели для визуализации этого подмножества данных. Когда пользователь создает приложение по запросу, Qlik дублирует приложение-шаблон и проходит через критерии выбора. Критерии выбора используются для создания предложения WHERE для фильтрации хранилища больших данных в меньшем подмножестве данных
  • приложение on-demand полностью управляется администраторами Qlik. Можно решить, где будут публиковаться приложения on-demand после их создания, и установить соответствующий срок хранения, если это необходимо

После первого представления об ODAG расскажу, как создавать данное приложение на примере выполнения задачи по миграции данных сотрудников организации на платформу Greenplum, с последующей визуализацией на QlikSense. При реализации миграции было создано несколько отдельных таблиц на GreenPlum c данными по разным сферам деятельности сотрудников:

— описание дисциплинарных взысканий,

— кредитов,

— транзакций,

— переводов,

Если все данные сохранять в одну таблицу, то при их загрузке в QlikSense будет затрачено много времени на их обработку и загрузку. Также, при попытке создать отдельные приложения по каждому разделу, столкнулся с той же проблемой, так как данных по транзакциям и переводам много, их отдельная загрузка займет много времени и ресурсов. Поэтому для создания пользовательского интерфейса на QlikSense для данной задачи было принято решение использовать возможности ODAG-приложений. 

Создание интерфейса для работы с данными по сотрудникам организации при помощи ODAG-приложения

Для начала работы с ODAG, необходимо его включить в QMC (Qlik Management Console).

  1. Войти в QlikSense и перейти в QMC – для этого нужно в поисковой строке вместо https://qliksense/hub/ нужно ввести https://qliksense/qmc/

2. В разделе УПРАВЛЕНИЕ РЕСУРСАМИ (MANAGE RESOURCES), найти опцию включения службы приложений по требованию

3. Нажать галочку напротив поля Enable on-demand app service. Также здесь можно настроить количество одновременно генерируемых приложений, количество дней до очистки ‘исторических данных’ и т.д.

После настройки QlikSense перехожу к созданию приложения. Для этого нужно выполнить следующие шаги:

Шаг 1 – создание selection app

Для начала работы с ODAG первым делом было создано основное приложение или приложение для фильтрации:

Приложение для фильтрации (Selection App): это приложение наполняется данными измерений и объектами визуализации, обеспечивающими работу с данными на высоком уровне агрегирования. В этом приложении пользователи выбирают данные для последующего углубленного анализа. И сразу совет по пользовательскому интерфейсу – в приложении нужно предусмотреть поля (счетчики записей), позволяющие оценивать объем данных, загружаемый в приложение (благодаря этому вы сможете установить лимит на количество строк данных загружаемых в приложение)

Создание нового приложения начинается из рабочей области пользователя при нажатии на кнопку “Создать новое приложение”, после чего откроется окно, где нужно ввести название и нажать кнопку создать. Обычно, в названии приложения ODAG ставится пометка о том, какое это приложение – selection app или template app.

После успешного создания приложения пользователь попадает на страницу для загрузки данных. Если информация для selection app берется из QVD (формат хранения данных для QlikSense) или Excel-файла, то они загружаются через “Диспетчер данных”. В моем случае происходит подключение к базе данных, поэтому нужно использовать “Редактор загрузки данных”.

Далее при создании selection app я провел стандартное подключение к базе (PostgreSQL – в правой части рисунка), выбрал нужную мне схему, таблицу и загрузил данные в созданное приложение – для этого нужно “Вставить скрипт” и нажать кнопку “Загрузить данные”. Стоит уточнить, что предварительно на GreenPlum была создана сводная таблица по данным для удобной фильтрации и дальнейшей генерации template-приложений. Данная таблица включает 12 тысяч записей и содержит основные данные по сотрудникам организации, которые могут пригодиться для фильтрации. Это единственная таблица, которая загружается полностью, поэтому нужно учитывать, какое количество данных в ней содержится.

Далее я создал обычное приложение для визуализации – для этого перешел на вкладку “ЛИСТ”.

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

Также можно отдельно вывести количество строк, чтобы при наложении фильтров следить сколько данных остается. Это может пригодиться, если ставить лимит на количество данных в template-приложении (для моей задачи это не понадобилось). Для этого нужно воспользоваться инструментом ‘Ключевой показатель’, в котором прописывается формула подсчета количества строк.

На рисунке ниже представлен пример таблицы, фильтров и ключевого показателя.

Шаг 2 – создание template приложения/ий

Шаблон приложения для анализа данных (App Template): в нём размещается предварительно подготовленный сценарий загрузки (скрипт), в который автоматически попадут отборы данных пользователя, сделанные им в приложении Selections App. В целом, при загрузке данных для template приложения нужно повторить те же шаги, как и для selection app. К дизайну приложения никаких комментариев тут нет – необходимо делать все, как обычно, чтобы пользователям было удобно работать с аналитикой.

В моей задаче необходимо было создать отдельное template приложение по транзакциям сотрудников организации. Грузить все данные из таблицы по транзакциям на GreenPlum, а их порядка 240 млн, нецелесообразно. Но какое-либо количество данных загрузить необходимо, чтобы проверить правильность работы ODAG-приложения, поэтому в редакторе загрузки данных изначально прописал limit 1000. Загрузка таблицы из базы на GreenPlum проводится также, как и для selection app, отличие только в ограничении кол-ва загружаемых строк. После первичной загрузки я закомментировал ограничение на кол-во загружаемых строк.

# Объявление переменных
Set vTabNum = $(odag_tab_num);
Set vInn = $(odag_inn);
# Подключение к базе
LIB CONNECT TO ‘PostgreSQL_your_server_name’;
# Скрипт для загрузки данных template приложения
Select “hemployee”,
“epkid”,
“epkid_enddate”,
“fullname”,
“datebirth”,
“replace_status”,
“agrmnt_acc_nmb”,
“source_system”
From schema_name.table_name                 #Добавляем условие where
//limit 1000
Where “hemployee” in ($(vTabNum)) and “inn” in ($(vINN))

Важным условием при загрузке данных для template app является условие where – по данному условию данные будут отфильтровываться и загружаться только нужные (рисунок выше). В моем приложении фильтрация проводилась по табельному номеру сотрудника tab_num. Для связи selection app и template app была создана переменная vTabNum, которая по сути принимает в себя все выбранные значения в виде списка из selection app. Стоит уточнить, что синтаксис для связывающей переменной следующий:

Set – функция создания переменной;

vTabNum – название переменной;

$ — обозначение ссылки на данные;

          odag_ — указание, что переменная используется в ODAG- приложении;

          tab_num – название поля, по которому проводится фильтрация, т.е. это название колонки в selection app. Если бы в основном приложении поле называлось num_tab, тогда в template app нужно было бы прописать $(odag_num_tab).

Созданную переменную я использовал в условии where, таким образом выбранные в selection app табельные номера подставляются на место этой переменной и происходит загрузка данных в template приложение на основе заданного условия.

Также отмечу, что можно создавать несколько связующих переменных, например, если бы нужно было проводить фильтрацию по ИНН сотрудников, то можно создать еще одну переменную и добавить её в условие where.

set vTabNum = $(odag_tab_num);
set vInn = $(odag_inn);
From Название таблицы
// limit 1000
where «hemployee» in ($(vTabNum)) and «inn» in ($(vINN));

Шаг 3 – настройка связи между selection app и template app.

После создания нужных приложений остается только связать их. Для этого я вновь перешел в основное приложение. Нужен был функционал ‘ссылки навигации приложения’, который находится в левом окне при нажатии кнопки ‘изменить лист’.

При нажатии кнопки создать, мне открылось следующее окно:

Подробно пройдусь по каждому полю в данном окне:

Имя – это название вашего ODAG-приложения;

Приложение шаблона – в ней, в выпадающем окне можно увидеть созданные template приложения, необходимо выбрать нужное, в моем случае оно называлось Транзакции (template app);

Выражение – действие, которое нужно выполнять при создании приложения, в моем случае, я считал количество строк, которые попадают в template приложение;

Максимальное количество – можно указать сколько template приложений можно создать по данному разделу;

Срок хранения – можно указать сколько по времени будут храниться analysis приложения, можно выбрать дни или часы;

Представление при открытии по умолчанию –  в каком виде будет представлено приложение при открытии;

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

При заполнении всех полей настройки сохраняются и можно увидеть слева появившуюся ссылку на template приложение (можно увидеть на рисунке выше).

Затем в режиме изменения листа в selection app переносим появившуюся ссылку на лист, таким образом появится template приложение и связь будет налажена.

Шаг 4 – использование приложения

Использование приложения начинается с selection app. В нем выбираем необходимые данные при помощи фильтров. Допустим, что поставили фильтры по количеству действующих кредитов у сотрудника, получил 5 строк, подходящих под данные условия и я хочу посмотреть по ним данные по транзакциям или переводам.

Для этого внизу есть ссылки на создание template приложений, я нажимаю на нужное мне, в данном случае транзакции. Уточню, что если template приложение готово к созданию, то оно будет гореть зеленым, если нет, то возможно, что на данное приложение наложены определенные правила создания, например, нужно выбрать фильтр по определенному полю, либо кол-во строк превышает установленный лимит (разработчик приложения поставил ограничение в 100000 строк, однако у пользователя при наложении фильтров получилось больше).

При выборе нужного template приложения открывается следующее окно, в котором нужно нажать кнопку “создать новое приложение”, в это время выполняется скрипт, написанный в template приложении и данные загружаются, вместо 240 млн будут загружены нужные 5 строк:

Далее можно увидеть, что template приложение создано и перейти в него для дальнейшего анализа, нажав на 3 точки или ‘окна’. Также новое template приложение появляется в рабочей области или потоке, в зависимости от настройки.

Таким образом строятся ODAG-приложения. Если мне или другому пользователю требуется любой другой срез данных или другие приложения, то он просто повторяет шаги 2-5.

 Особенности построения selection app

Скрипт приложения для отбора данных (Selection App) должен загружать достаточно данных, чтобы пользователи могли делать выборки в требуемых им полях и при этом понимать, сколько данных они получат в сгенерированном (детальном) приложении.

Таким образом, с точки зрения интерфейса вам нужны лишь объекты, позволяющие «отфильтровать» требуемые данные и индикатор, который показывает, сколько еще строк данных пользователь может выбрать, чтобы сгенерировать приложение по ODAG (и не выйти при этом за ограничения по объему данных).

При этом ограничения на объем данных в сгенерированном по ODAG приложении можно выставлять очень гибко. Так, можно наложить условие на количество выборок, например, разрешать пользователям выбирать до 5 продуктовых категорий.

Заключение

В заключении расскажу о преимуществах и особенностях, которые выделил при создании и пользовании приложением ODAG.

 Плюсы:

  • ODAG – приложения позволяют пользователям в интерактивном режиме искать подмножество данных, которые им необходимо проанализировать;
  • Большим плюсом для меня явилась возможность обновления данных при выборе нескольких полей – своеобразная замена инструмента variable input;
  • ODAG позволяет анализировать большие наборы данных, в которых нет поля с надежной датой / уникальным номером записи, без выполнения дополнительных перезагрузок и возможностью не загружать все данные целиком;
  • Также данные приложения позволяют IT-отделу управлять данными и приложениями; объемами данных; периодом хранения; публикацией приложений по требованию, при этом перезагрузка происходит в многоузловых средах, и поддерживать безопасность на уровне строк и столбцов;
  • Генерация скриптов «На лету», легкость и гибкость при изменении template или selection приложений, можно настроить новые ссылки на template приложения или удалить старые;
  • ODAG проводит загрузку всех необходимых пользователю данных в оперативную память, что даёт возможность использования уникальных принципов работы со множествами данных (в Direct Discovery, например, все данные находятся не в памяти, а в источнике данных до момента непосредственного доступа к ним и поэтому к ним неприменимы ни, например, поиск, ни операции над множествами данных);
  • Создание и объем приложений прозрачно контролируется с точки зрения ИТ – есть специальная серверная служба On-demand apps service, которая позволяет, например, настроить объем и количество приложений, а также определить количество приложений, генерируемых одновременно и т.д.

Особенности ODAG:

  •  Ограничьте количество строк в основном приложении на QlikSense до около 100000-200000 строк для ускорения загрузки. Предоставьте подробные инструкции по использованию приложения для новых пользователей, включая рекомендации по выбору полей и количеству строк;
  •  Обеспечьте схожий внешний вид и навигацию между приложениями выбора ODAG и детализации, чтобы пользователи видели их связь.;
  •  Оптимизируйте источники данных ODAG для более эффективных запросов, используя индексы и ключи.;
  •  Убедитесь, что приложения для выбора ODAG и детализации имеют схожий внешний вид, а также навигацию. Пользователь должен иметь возможность видеть, что приложения связаны и что приложение template фактически является его собственной копией шаблона, загруженного только с запрошенными им данными;
  • Поддержка и обслуживание могут быть сложными из-за необходимости настройки обновлений данных в GreenPlum или QlikSense (например, ручное обновление при смене названия колонок);
  • визуальная загруженность основного selection приложения (из-за использования большого кол-ва фильтров)

Итак, ODAG помогает оптимизировать работу с данными путем уменьшения загружаемых данных. Также он удобен для работы с большим объемом данных, визуализации и анализа нужных разделов данных и выборочного извлечения данных по различным признакам.