Привет! Меня зовут Яна, я администратор 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. 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 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,,,, Теперь, когда описание готово, мы можем проверить насколько верно и согласованно все выполнено с помощью утилиты валидации. Возможно, результат будет выглядеть так, и нужно будет исправить ошибки: Но в итоге отчет станет таким: 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 (на скриншоте часть файла). Здесь описаны классы и родительские связи между объектами.  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.