Привет! Меня зовут Яна, я администратор Data Governance в Билайне. Этот туториал будет о том, как сконнектить то, что вендор коннектить не планировал. Речь пойдет о связи QlikSense c Informatica Enterprise Data Catalog (EDC) и Informatica Axon (Axon).

EDC – это умный каталог данных, который предоставляет единое представление метаданных, а Informatica Axon объединяет знания всех пользователей, позволяя выстроить и поддерживать в актуальном состоянии систему наиболее значимых для бизнеса информационных активов.

Зачем вообще их коннектить?

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

Количество стримов и дашбордов стремительно растет. Чтобы как-то ими управлять, ребятам из Qlik team приходилось вести каталог с паспортами дашбордов вручную на корпоративном портале. На это тратилось много времени и периодически возникали ошибки заполнения.

Встала задача — вести паспорта дашбордов в общем Каталоге данных, при этом максимально автоматизировать занесение информации: 

  1. Расположение дашборда (Стрим- папка)

  2. Используемые источники

  3. Наборы мер и измерений

А ещё нам нужно было привязывать бизнес-термины к конкретным дашбордам для ответов на вопросы типа «А в каких дашбордах я могу посмотреть на Активную абонентскую базу

Дано:

- QlikSense v14.5.7

- Informatica Enterprise Data Catalog v10.4.1

- Informatica Axon v7.1

Прежде, чем начать: про технику

Мы создали шаблон паспорта дашборда в каталоге, нарезали поля для автоматического заполнения, поля для заполнения пользователями вручную, пропустили шаблон через Qlik team и начали автоматизировать.

Ход процесса

Встроенный коннектор EDC предполагает поддержку версии QlikSense только 2019 года, а на дворе у нас был февраль 2021. Вариант с даунгрейдом не рассматривался, доработка от вендора заняла бы непрогнозируемое количество времени. EDC предлагает возможность разработать коннектор к системам самостоятельно. 

Вот наши шаги.

1. Первое, что понадобится — это создать custom model, которая отображала бы всю структуру, взаимосвязи между объектами, классы и их описание. У нас она выглядит так (часть модели):

Вот так

  <Package>

<deprecated>false</deprecated>

<associations>

<association>

<name>ApplicationMeasures</name>

<fromClass>bi.qlik.Application</fromClass>

<toClass>bi.qlik.Measures</toClass>

<fromLabel>Application</fromLabel>

<toLabel>Measures</toLabel>

<associationKinds>

<associationKind>core.ParentChild</associationKind>

</associationKinds>

<deprecated>false</deprecated>

<unidirectional>false</unidirectional>

<aggregate>false</aggregate>

</association>

<classes>

<class>

<name>Chart</name>

<label>Chart</label>

<isFirstClass>false</isFirstClass>

<boost>LOW</boost>

<superClasses>

<superClass>com.infa.ldm.bi.Visualization</superClass>

</superClasses>

<deprecated>true</deprecated>

<attribute>

<name>sheetsUsed</name>

<label>sheetsUsed</label>

<dataType>core.String</dataType>

<searchable>false</searchable>

<facetable>false</facetable>

<boost>LOW</boost>

<description>LOW</description>

<multivalued>false</multivalued>

<suggestable>false</suggestable>

<sortable>false</sortable>

<visible>true</visible>

<deprecated>false</deprecated>

<derived>false</derived>

<fuzzy>false</fuzzy>

<data>false</data>

</attribute>

</attributes>

<packageName>bi.qlik</packageName>

</Package>

В данном случае модель основана на двух интегрированных системных моделях: Core и BI (Business intelligence)

2. Теперь нужно создать и загрузить модель в каталог

Экспортировать шаблон файлов links.csv (связи метаданных внутри ресурса) и objects.csv (атрибуты для всех классов) и заполнить согласно структуре qlik.

Файл Links.csv

association,fromObjectIdentity,toObjectIdentity

core.ResourceParentChild,,qlik_beeline_ru

bi.qlik.HubStream,qlik_beeline_ru,qlik_beeline_ru/001 Unified KPI [TECH]

bi.qlik.StreamApplication,qlik_beeline_ru/001 Unified KPI [TECH],qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month

bi.qlik.ApplicationSheet,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)

bi.qlik.ApplicationTable,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/TBL_REP_REV_M_end

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/Total Revenue B2B over time

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/ARPU Vizlib

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/4f5ceb4b-ec13-4ab6-b518-2b54ef97e148

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/Total Revenue by market segment

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/2a29b7b2-581d-4281-b691-5223251172bf

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/5361730d-0f48-4063-aa13-4a4377f36077

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/a0213872-db28-4037-99b5-e6f1952ff2e8

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/SRapyTC

bi.qlik.SheetChart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/MJajU

bi.qlik.TableColumn,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/TBL_REP_REV_M_end,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/TBL_REP_REV_M_end/market_key

Файл Objects.csv

class,identity,core.name,core.description,bi.qlik.Name,bi.qlik.Definition,bi.qlik.Expression,bi.qlik.LastModificationTime,bi.qlik.sheetsUsed

bi.qlik.Hub,qlik_beeline_ru,qlik,,qlik,,,,

bi.qlik.Stream,qlik_beeline_ru/001 Unified KPI [TECH],001 Unified KPI [TECH],Stream,001 Unified KPI [TECH],,,,

bi.qlik.Application,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month,Revenue Month,Dashboards,Revenue Month,,,09.08.2021 14:17,

bi.qlik.Table,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/TBL_REP_REV_M_end,TBL_REP_REV_M_end,SourceTable,TBL_REP_REV_M_end,,,,

bi.qlik.Sheet,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars),Revenue month (Vertical bars),Dashboard,Revenue month (Vertical bars),,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/Total Revenue B2B over time,Total Revenue B2B over time,Linechart Total Revenue,Total Revenue B2B over time,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/ARPU Vizlib,ARPU Vizlib,ARPU Linechart,ARPU Vizlib,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/4f5ceb4b-ec13-4ab6-b518-2b54ef97e148,4f5ceb4b-ec13-4ab6-b518-2b54ef97e148,Total Revenue by Regions,4f5ceb4b-ec13-4ab6-b518-2b54ef97e148,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/Total Revenue by market segment,Total Revenue by market segment,Barchart Total Revenue by market segment,Total Revenue by market segment,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/2a29b7b2-581d-4281-b691-5223251172bf,2a29b7b2-581d-4281-b691-5223251172bf,Barchart Total Revenue by service,2a29b7b2-581d-4281-b691-5223251172bf,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/5361730d-0f48-4063-aa13-4a4377f36077,5361730d-0f48-4063-aa13-4a4377f36077,Barchart Total Revenue by stream,5361730d-0f48-4063-aa13-4a4377f36077,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/a0213872-db28-4037-99b5-e6f1952ff2e8,a0213872-db28-4037-99b5-e6f1952ff2e8,Barchart Commercial KPIs,a0213872-db28-4037-99b5-e6f1952ff2e8,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/SRapyTC,SRapyTC,Barchart Total Revenue by product stream,SRapyTC,,,,

bi.qlik.Chart,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/Revenue month (Vertical bars)/MJajU,MJajU,Barchart Total Revenue factor analysis,MJajU,,,,

bi.qlik.Column,qlik_beeline_ru/001 Unified KPI [TECH]/Revenue Month/TBL_REP_REV_M_end/market_key,market_key,Column,market_key,,,,

Теперь, когда описание готово, мы можем проверить насколько верно и согласованно все выполнено с помощью утилиты валидации. Возможно, результат будет выглядеть так, и нужно будет исправить ошибки:

validate.sh --model "/tmp/val/qlik1.zip" --metadata "/tmp/val/metadata.zip" --mem low

Но в итоге отчет станет таким:

All Validations Passed Successfully.You can now upload the files.

Cheers. 

3. Cоздать custom resource в каталоге, куда нужно сложить модель и мету (links+objects).

Переходим в EDC LDMAdmin-New-Resource, создаем ресурс с именем Custom_Qlik, прикрепляем архив с нашими заполненными csv-файлами

Жмякаем save and run, и через некоторое время видим, что сканирование ресурса завершено успешно.

Проверяем в EDC Ldmcatalog, что у нас получилось, вводим в строке поиска qlik и видим, что наш дашборд Revenue Month появился, а также отображается кастомный ресурс Custom_Qlik, и все это собрано в глоссарий GlossaryforQlik.

Проваливаемся в глоссарий, где видим структуру, которая описана в модели.

4. Так как поля в модели кастомные и в Axon их не существует, нужно их туда пронести с помощью файла custom_edc_fields.yml (на скриншоте часть файла). Здесь описаны классы и родительские связи между объектами.

custom_edc_fields.yml

EDC_FIELDS :

    Measures :

        classType : "bi.qlik.Measures"

        label : "Measures"

        parentClassType : "bi.qlik.Application"

        parentIconFileName: "dbcolumn"

    SourceTable :

        classType : "bi.qlik.SourceTable"

        label : "ApplicationSourceTable"

        parentClassType : "bi.qlik.Application"

        parentIconFileName: "dbcolumn"

    Dimension :

        classType : "com.infa.ldm.bi.Dimension"

        label : "Dimension"

        parentClassType : "bi.qlik.Application"

        parentIconFileName: "dbcolumn"

    Table :

        classType : "bi.qlik.Table"

        label : "Table"

        parentClassType : "bi.qlik.Application"

        parentIconFileName: "dbcolumn"

    Hub :

        classType : "bi.qlik.Stream"

        label : "Hub"

        parentClassType : "bi.qlik.Hub"

        parentIconFileName: "general"

    Measure :

        classType : "com.infa.ldm.bi.Measure"

        label : "Measure"

        parentClassType : "bi.qlik.Application"

        parentIconFileName: "dbcolumn"    

    Sheet :

        classType : "bi.qlik.Sheet"

        label : "Sheet"

        parentClassType : "bi.qlik.Application"

        parentIconFileName: "dbcolumn"

    Stream :

        classType : "bi.qlik.Application"

        label : "Stream"

        parentClassType : "bi.qlik.Stream"

        parentIconFileName: "dbcolumn"

    Story :

        classType : "bi.qlik.Story"

        label : "Story"

        parentClassType : "bi.qlik.Application"

        parentIconFileName: "dbcolumn"

    Chart :

        classType : "bi.qlik.Chart"

        label : "Chart"

        parentClassType : "bi.qlik.Sheet"

        parentIconFileName: "dbcolumn"

    Application :

        classType : "bi.qlik.Application"

        label : "Application"

        parentClassType : "bi.qlik.Stream"

        parentIconFileName: ""

    Column :

        classType : "bi.qlik.Column"

        label : "Column"

        parentClassType : "bi.qlik.Table"

        parentIconFileName: "dbcolumn"

Файл нужно положить на сервер, применить изменения и проверить, появились ли эти объекты в Axon. Переходим в Поиск-Создать-Управление ссылками каталога, выбираем тип ресурса Custom_Qlik (как назван в EDC) и видим, что все наши объекты, отражающие структуру дашборда и описанные в модели, появились в Axon.

Благодаря этим упражнениям мы смогли создать и наполнить бизнес-смыслом описание для стримов и дашбордов в Каталоге данных и сделать поиск в клике для пользователей проще, удобнее и быстрее. Теперь в паспорте мы видим, какие меры и измерения в нем содержатся, ответственного за стрим/дашборд, у нас есть ссылка стрим и ссылка для запроса доступа.  

Стоит сказать, что похожие кейсы в зарубежных источниках нам не удалось найти, поэтому вот метка для гугла: how to create custom model and custom resource in Informatica EDC.

Комментарии (0)