В сегодняшней статье я хочу рассказать о разработанном мной инструменте, призванном помогать архитекторам/PM/разработчикам лучше понимать архитектуру и структуру развернутого решения (проекта) QlikView. Ведь лучшее понимание проекта — это путь к более эффективному его управлению, снижению рисков, повышению качества конечных продуктов.

01Название инструмента — Lineage-Dependency Analyzer. Это приложение QlikView,  назначение которого — визуализировать решение QlikView как Систему взаимосвязанных элементов (слово Система с большой буквы — чтобы подчеркнуть, что речь идет о «множестве элементов, находящихся в отношениях и связях друг с другом, которое образует определённую целостность, единство»).

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

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

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

Что такое «решение QlikView«?

Давайте вначале определим, что собственно представляет собой развернутое решение QlikView, и почему говорим о взаимосвязях.

По большому счету, решение (проект) QlikView — это два блока элементов (иногда еще называют забавным словом «артефакты»):

1) набор файлов QVW/QVD, структурированный с помощью многоуровневой системы папок:

02

2) набор регламентных заданий (Tasks) по обновлению QVW, настроенный в QlikView Management Console:

03

В рамках данной статьи мы сфокусируемся на элементах из первого блока — файлы QVW (собственно документы QlikView со скриптами, моделью данных и пользовательским интерфейсом) и QVD (таблицы данных, сохраненные в проприетарном формате).

Связи между элементами

Очевидно, что элементы решения не живут обособленно, а взаимодействуют друг с другом.

Взаимодействие между приложениями QVW и таблицами QVD можно охарактеризовать так:

  • Каждый отдельный QVW, как правило, загружает данные из одного и более QVD, и/или/и возможно — сохраняет данные в один или более QVD.04
  • Каждый отдельный QVD создается как минимум одним QVW, и используется одним или более QVW.05

Иными словами между QVW и QVD существуют явные прямые взаимосвязи.

Явные они потому, что информация о них достаточно легко извлекается либо автоматически (с помощью чтения мета-данных файлов qvw\qvd), либо вручную путем чтения конструкций LOAD From в скрипте.

Но мы также знаем, что в BI-проектах уровнем выше простейшего, используется архитектура ETL — Extraction/Transformation/Loading, и как следствие, конечные приложения QVW загружают данные из QVD, созданных в результате трансформаций исходных данных техническими приложениями QVW — «трансформерами».

06

В такой схеме между QVW и QVD возникают неявные косвенные взаимосвязи (обозначены пунктиром на рисунке).

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

Чем полезна информация о косвенных взаимосвязях между QVW и QVD, и что такое Lineage и Dependency analysis?

Имея под рукой информацию о косвенных взаимосвязях, можно ответить на следующие два общих вопроса, которые в тех или иных вариациях встают перед разработчиком/менеджером при работе на проекте QlikView:

  • Я смотрю на конкретный элемент, и хочу понять — от каких прочих элементов он так или иначе зависит?
  • Если я внесу изменения в некоторый элемент, на каких прочих элементах, так или иначе зависящих от данного, эти изменения могут сказаться?

Общепринятые английские термины индустрии Business Intelligence для обозначения этих вопросов  — Lineage analysis  (все что происходит «выше по течению», хронологически раньше рассматриваемой точки) и Dependency analysis  («ниже по течению», хронологически позже точки).

Что предлагает Qlik и другие вендоры для анализа косвенных взаимосвязей в системах

Qlik к сожалению не предлагает ничего внятного. Governance Dashboard покажет лишь прямые взаимосвязи для выбранного элемента. Expressor малопопулярен, а с октября 2015 и вовсе выведен из продуктовой линейки. Решения партнеров, рекомендованные Qlik — Alteryx и Lavastorm — содержат собственный ETL-механизм, и на уже развернутых «обычных» решениях QlikView никак не помогут.

В то же время, другие BI и RDBMS системы такую функциональность содержат, предоставляя информацию о прямых и косвенных взаимосвязях, начиная с иерархических списков, заканчивая наглядной визуализацией. Несколько примеров — Microsoft SQL Server Integration Services, SAP HANA, SAP BW.

07

08

09

10

Таким образом, в QlikView налицо некоторая брешь в функциональности, которую я и решил закрыть, разработав собственное приложение.

Ну и теперь — все о нем.

Lineage-Dependency Analyzer: Основные возможности

  • 11Автоматически выявляет взаимосвязи между приложениями QlikView, таблицами QVD, плоскими файлами;
  • С помощью наглядной визуализации показывает свойства Системы: цель, входы/выходы элементов, прямые и косвенные взаимосвязи;
  • Позволяет выполнять ассоциативный поиск для акцентирования и детального изучения отдельных свойств;
  • Дает единый взгляд на модели данных в приложениях и таблицах QVD для понимания сходств и различий, контроля единства и следования стандартам.

Lineage-Dependency Analyzer: Решаемые задачи

Задача 1. Показать все сущности и потоки данных на графе

Граф позволяет увидеть системные взаимосвязи между элементами решения QlikView. Сущности показаны на графе в виде кружков, а их взаимосвязи — через потоки данных в виде стрелок.

Граф однонаправленный, читается «слева направо». Левее всего — элементы, с которых все начинается (экстракторы, плоские файлы), правее всего — конечные приложения.

Приемы работы:

  • щелкнуть на точку, чтобы увидеть название сущности и подсветить все прямо или косвенно связанные с ней. Посмотреть названия связанных элементов можно наведя курсор или щелкнув на них;
  • навести курсор на точку и «анимировать» прямо связанные с ней сущности.

Как и на любом другом чарте, можно делать выделения сразу нескольких элементов с помощью drag-n-drop.

12

Задача 2. Показать структурные взаимоотношения и связи

Диаграммы отношений «родитель-потомок» и матрицы позволяют взглянуть на то, как связаны друг с другом поля, таблицы, источники, приложения.

Например:

  • Какие таблицы и поля входят модель данных каждого из приложений/источников;
  • Какие источники используются для каждого из приложений; каковы наиболее часто используемые;
  • Какие поля/таблицы/источники используются многократно, т.е. более чем в одном приложении.

13

Задача 3. Показать статистику по каждой сущности, таблице и полю

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

  • Количество потоков данных, где участвует сущность;
  • Количество связанных сущностей (прямо или косвенно);
  • Количество таблиц/полей в модели данных;
  • Количество источников для приложения;
  • Количество приложений, где используется источник;
  • Количество сущностей, в модели которых присутствует таблица/поле.

14

Задача 4. Показать свойства системных взаимосвязей

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

Например:

  • Номер шага в схеме потоков данных;
  • Список связанных сущностей (прямо или косвенно);
  • Список потоков данных, в которых участвует сущность;
  • Направление связи (предшественник-потомок).

15

LineageDependency Analyzer: Для кого будет полезно

В своей практике я использую инструмент вот уже около полутора лет (естественно периодически дорабатывая его по мере обнаружения дефектов и возникновения новых идей и потребностей).

Вспомнив свои роли за это время и соответствующие задачи, решать которые помогло приложение, у меня получилась вот такая табличка-резюме с «бенефициарами»:

Позиция

Задачи, решаемые Lineage-Dependency Analyzer

Архитектор решений QlikView
  • контроль соответствия плановой и фактической архитектуры/структуры проекта;
  • выявление точек риска и неэффективности;

    («забытые» или непрозрачные QVW/QVD, QVD созданные «непонятными» или двумя и более QVW, неверифицированные/дублирующиеся источники данных…)

Менеджер/Руководитель проектов
  • отслеживание реального состава проектных артефактов, текущей степени реализации проекта;
Разработчик QlikView
  • наличие четкой картины взаимосвязей системы и понимание, как в них будет встроен разрабатываемый элемент;
  • автоматизация документирования разработанных элементов;

 

Администратор QlikView, специалист по поддержке QlikView
  • наличие четкой картины взаимосвязей системы и быстрая локализация точек для воздействия, а также понимание возможных последствий изменений.

LineageDependency Analyzer: Попробовать в действии

Как говорится в любимом слогане Qlik, «Seeing Is Believing».  Скачайте и попробуйте приложение в действии! Возможно, вы найдете его полезным и решите обогатить им свою практику, сделав работу более эффективной, а ее результат – более качественным.

________________________

*Upd: приложение обновлено, стало бесплатным

LineageDependency Analyzer: Реальные кейсы

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

Friesland Campina, один из лидеров российского рынка по производству и продаже молочных продуктов: Крупнейшая розничная сеть по торговле детскими товарами и игрушками: Один из крупнейших онлайн гипермаркетов по торговле продуктами питания:
 Campina  Retail  Mall
~6 уровней/150 цепочек потоков данных~20 сервисных, ~3 конечных приложений QVW

~80 исходных и промежуточных источников данных (QVD, XLS, CSV, DB…)

 

~6 уровней/250 звеньев цепочек потоков данных~40 сервисных, ~20 конечных приложений QVW

~80 исходных и промежуточных источников данных (QVD, XLS, DB…)

 

~3 уровня/70 звеньев цепочек потоков данных~20 сервисных, ~2 конечных приложений QVW

~30 исходных и промежуточных источников данных (QVD, XLS, DB…)