Привет! Меня зовут Яна, я администратор Data Governance в Билайне. Этот туториал будет о том, как сконнектить то, что вендор коннектить не планировал. Речь пойдет о связи QlikSense c Informatica Enterprise Data Catalog (EDC) и Informatica Axon (Axon).
EDC – это умный каталог данных, который предоставляет единое представление метаданных, а Informatica Axon объединяет знания всех пользователей, позволяя выстроить и поддерживать в актуальном состоянии систему наиболее значимых для бизнеса информационных активов.
Зачем вообще их коннектить?
В Qlik Sense есть стримы, принадлежащие дирекциям, департаментам и отделам, каждый из этих стримов содержит набор дашбордов, например: считать трафик, количество пользователей в месяц, наиболее популярные услуги и прочее.
Количество стримов и дашбордов стремительно растет. Чтобы как-то ими управлять, ребятам из Qlik team приходилось вести каталог с паспортами дашбордов вручную на корпоративном портале. На это тратилось много времени и периодически возникали ошибки заполнения.
Встала задача — вести паспорта дашбордов в общем Каталоге данных, при этом максимально автоматизировать занесение информации:
Расположение дашборда (Стрим- папка)
Используемые источники
Наборы мер и измерений
А ещё нам нужно было привязывать бизнес-термины к конкретным дашбордам для ответов на вопросы типа «А в каких дашбордах я могу посмотреть на Активную абонентскую базу?»
Дано:
- 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.