Различия
Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| product:api:integration_examples:aw [12.04.2024 14:37] – создано Белугин Александр | product:api:integration_examples:aw [07.08.2024 05:55] (текущий) – [1)Сформировать в ADVANTA LINQ-запросы] ekaterina.menkhuzina | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== AW ====== | + | ====== |
| + | [[https:// | ||
| + | |||
| + | Ниже приведена подробная пошаговая инструкция по организации процесса обмена данными между двумя системами. Для реализации обмена у вас должен быть доступ к по крайней мере к демо-версиям данных продуктов. | ||
| + | |||
| + | ==== 1) Сформировать в ADVANTA LINQ-запросы ==== | ||
| + | |||
| + | Интеграция с Analytic Workspace организована с использованием [[corporative: | ||
| + | |||
| + | === Пример LINQ-запроса данных по проектам === | ||
| + | |||
| + | <code csharp> | ||
| + | /* 1. перечень всех проектов (2 типа объектов - ИТ-проект и Организационный проект) | ||
| + | с UID и всеми системными реквизитами (сроки начала/ | ||
| + | - объект-родитель (название) | ||
| + | и пользовательскими реквизитами: | ||
| + | - жизненный цикл проекта | ||
| + | - описание | ||
| + | - масштаб проекта (текстовое значение) | ||
| + | - эффект | ||
| + | - последняя запись из справочника " | ||
| + | - активная запись из справочника " | ||
| + | */ | ||
| + | |||
| + | var projects = dataContext.Projects | ||
| + | .Where(p => p is IT_proekt_d46b6d || p is Organizacionnij_proekt_a3e2fb) | ||
| + | .OrderBy(p => p.CreationDate) | ||
| + | .Select(p => new { p.Id, | ||
| + | p.Name, ParentName = p.Parent.Name, | ||
| + | LifeCycleName = p.Fields.Zhiznennij_cikl_proekta_b07f57.Name, | ||
| + | p.SystemStartDate, | ||
| + | p.BaselinePlanStartDate, | ||
| + | BossFIO = String.Concat( p.Owner.LastName, | ||
| + | Description = p.Fields.Opisanie_caaaaa, | ||
| + | ProjectScaleName = p.Fields.Masshtab_proekta_04412f.Name, | ||
| + | ProjectGainName = p.Fields.Effekt_b6c145.Name, | ||
| + | StatusReport_Date = p.GetChildren< | ||
| + | StatusReport_Chto_sdelano_problemi_riski = p.GetChildren< | ||
| + | StatusReport_Prichina_problemi = p.GetChildren< | ||
| + | StatusReport_StatusName = p.GetChildren< | ||
| + | BudjetSum = p.GetChildren< | ||
| + | }); | ||
| + | return projects; | ||
| + | |||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | === Пример LINQ-запроса данных по контрольным точкам === | ||
| + | |||
| + | |||
| + | <code csharp> | ||
| + | /* | ||
| + | 2. перечень всех контрольных точек (1 тип объекта - КТ0) | ||
| + | с UID и всеми системными реквизитами (как и у проекта), | ||
| + | - UID - проекта-родителя (непрямой родитель) | ||
| + | и пользовательские поля: | ||
| + | - описание (текст) | ||
| + | - результат (текст) | ||
| + | - последняя запись из справочника " | ||
| + | */ | ||
| + | var projects = dataContext.KT0_1ff431_List | ||
| + | .Select(p => new { | ||
| + | p.Id, | ||
| + | p.Name, | ||
| + | ProjectId = (Guid? | ||
| + | // ProjectName = p.GetParentHierarchy< | ||
| + | p.SystemStartDate, | ||
| + | p.BaselinePlanStartDate, | ||
| + | BossFIO = String.Concat( p.Owner.LastName, | ||
| + | Description = p.Opisanie_caaaaa, | ||
| + | Result = p.Rezuljtat_8e716f, | ||
| + | StatusReport_Date = p.GetChildren< | ||
| + | StatusReport_Chto_sdelano_problemi_riski = p.GetChildren< | ||
| + | StatusReport_Prichina_problemi = p.GetChildren< | ||
| + | StatusReport_StatusName = p.GetChildren< | ||
| + | }); | ||
| + | return projects; | ||
| + | |||
| + | </ | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | \\ | ||
| + | ==== 2) Создать шаблоны таблиц данных в формате .xlsx ==== | ||
| + | |||
| + | Данные шаблоны необходимы для формирования структуры хранения данных в AW в соответствии со структурой получаемых их ADVANTA данных. | ||
| + | |||
| + | Для создания шаблона необходимо **выполнить созданный LINQ-запрос** в ADVANTA, скопировать шапку полученной таблицы в Excel и сохранить файл в формате .xlsx. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | === Пример шаблона для источника данных по проектам === | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | === Пример шаблона для источника данных по контрольным точкам === | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | Загрузите данные шаблоны в Analytic Workspace, в раздел «Источники данных» — здесь необходимо **создать источник, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | ==== 3) Создать модель в Analytic Workspace и сформировать скрипт в ETL-редакторе ==== | ||
| + | |||
| + | После создания источника необходимо в соответствующем разделе Analytic Workspace **создать модель**, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | Сразу после создания необходимо перейти в режим редактирования модели и зайти в **ETL-редактор**. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | В открывшемся редакторе необходимо ввести скрипт для обработки получаемых из ADVANTA данных. Скрипт написан на Python. | ||
| + | |||
| + | \\ | ||
| + | === Пример скрипта для проектов === | ||
| + | |||
| + | <code csharp> | ||
| + | # ----------------------------------------------------------------------------------- | ||
| + | # Cкрипт для обработки модели * * * | ||
| + | # ----------------------------------------------------------------------------------- | ||
| + | |||
| + | import requests | ||
| + | import datetime | ||
| + | from pyspark.sql import Row | ||
| + | |||
| + | # python - m pip install requests, matplotlib, pandas | ||
| + | |||
| + | from pandas import json_normalize | ||
| + | |||
| + | def after_all(df, | ||
| + | print(df.schema) | ||
| + | |||
| + | LOGIN = '* * *' | ||
| + | PASSWORD = '* * *' | ||
| + | DOMAIN = ' | ||
| + | |||
| + | AUTH = { | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | |||
| + | session = requests.Session() | ||
| + | # cookies = session.cookies.get_dict() # {} | ||
| + | |||
| + | # авторизация | ||
| + | response = session.post(url=DOMAIN+'/ | ||
| + | |||
| + | cookies = session.cookies.get_dict() | ||
| + | |||
| + | # print(cookies) | ||
| + | |||
| + | # получение LINQ-запроса | ||
| + | LINQ = { | ||
| + | ' | ||
| + | # нужен другой запрос для перечня проектов в модель list1 | ||
| + | # ' | ||
| + | # и еще один для перечня КТ из этих проектов в модель list1_ywrq | ||
| + | # ' | ||
| + | ' | ||
| + | } | ||
| + | |||
| + | r = session.post(url=DOMAIN+'/ | ||
| + | |||
| + | if not r.ok: | ||
| + | raise Exception(f' | ||
| + | |||
| + | data = r.json() | ||
| + | |||
| + | # | ||
| + | rows = [] | ||
| + | for line in data: | ||
| + | rows.append(Row( | ||
| + | id=line[' | ||
| + | name=line[' | ||
| + | parentname=line[' | ||
| + | lifecyclename=line[' | ||
| + | # systemstartdate=str(datetime.datetime.fromisoformat(line[' | ||
| + | # systemenddate=str(datetime.datetime.fromisoformat(line[' | ||
| + | # actualstartdate=str(datetime.datetime.fromisoformat(line[' | ||
| + | # actualenddate=str(datetime.datetime.fromisoformat(line[' | ||
| + | # baselineplanstartdate=str(datetime.datetime.fromisoformat(line[' | ||
| + | # baselineplanenddate=str(datetime.datetime.fromisoformat(line[' | ||
| + | |||
| + | systemstartdate=line[' | ||
| + | systemenddate=line[' | ||
| + | actualstartdate=line[' | ||
| + | actualenddate=line[' | ||
| + | baselineplanstartdate=line[' | ||
| + | baselineplanenddate=line[' | ||
| + | |||
| + | bossfio=line[' | ||
| + | rpfio=line[' | ||
| + | description=line[' | ||
| + | projectscalename=line[' | ||
| + | projectgainname=line[' | ||
| + | |||
| + | # statusreport_date=str(datetime.datetime.fromisoformat(line[' | ||
| + | statusreport_date=line[' | ||
| + | |||
| + | statusreport_chto_sdelano_problemi_riski=line[' | ||
| + | statusreport_prichina_problemi=line[' | ||
| + | statusreport_statusname=line[' | ||
| + | budjetsum=line[' | ||
| + | )) | ||
| + | |||
| + | return spark.createDataFrame(rows) | ||
| + | </ | ||
| + | |||
| + | \\ | ||
| + | === Пример скрипта для контрольных точек === | ||
| + | |||
| + | <code csharp> | ||
| + | # # ----------------------------------------------------------------------------------- | ||
| + | # Cкрипт для обработки модели * * * | ||
| + | # ----------------------------------------------------------------------------------- | ||
| + | |||
| + | import requests | ||
| + | import datetime | ||
| + | from pyspark.sql import Row | ||
| + | from pandas import json_normalize | ||
| + | |||
| + | def after_all(df, | ||
| + | |||
| + | LOGIN = '* * *' | ||
| + | PASSWORD = '* * *' | ||
| + | DOMAIN = ' | ||
| + | |||
| + | AUTH = { | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | |||
| + | session = requests.Session() | ||
| + | # cookies = session.cookies.get_dict() # {} | ||
| + | |||
| + | # авторизация | ||
| + | response = session.post(url=DOMAIN+'/ | ||
| + | |||
| + | cookies = session.cookies.get_dict() | ||
| + | |||
| + | # print(cookies) | ||
| + | |||
| + | # получение LINQ-запроса | ||
| + | LINQ = { | ||
| + | ' | ||
| + | ' | ||
| + | } | ||
| + | |||
| + | r = session.post(url=DOMAIN+'/ | ||
| + | |||
| + | if not r.ok: | ||
| + | raise Exception(f' | ||
| + | |||
| + | data = r.json() | ||
| + | |||
| + | # | ||
| + | rows = [] | ||
| + | for line in data: | ||
| + | print(line) | ||
| + | rows.append(Row( | ||
| + | id=line[' | ||
| + | name=line[' | ||
| + | projectid=line[' | ||
| + | systemstartdate=line[' | ||
| + | systemenddate=line[' | ||
| + | actualstartdate=line[' | ||
| + | actualenddate=line[' | ||
| + | baselineplanstartdate=line[' | ||
| + | baselineplanenddate=line[' | ||
| + | bossfio=line[' | ||
| + | rpfio=line[' | ||
| + | description=line[' | ||
| + | result=line[' | ||
| + | statusreport_date=line[' | ||
| + | statusreport_chto_sdelano_problemi_riski=line[' | ||
| + | statusreport_prichina_problemi=line[' | ||
| + | statusreport_statusname=line[' | ||
| + | )) | ||
| + | |||
| + | return spark.createDataFrame(rows) | ||
| + | </ | ||
| + | |||
| + | <callout type=" | ||
| + | |||
| + | Затем необходимо опубликовать скрипт и обновить модель. После обновления данные из ADVANTA автоматически загрузятся в модель. | ||
| + | |||
| + | \\ | ||
| + | === Пример модели === | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | ==== 4) Создать виджеты для отображения данных и дашборды из виджетов ==== | ||
| + | |||
| + | Для реализации этих шагов необходимо ознакомиться с возможностями системы Analytic Workspace. В этом вам помогут [[https:// | ||
| + | |||
| + | === Пример дашборда «Здоровье портфеля» в Analytic Workspace на основе данных, | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | \\ | ||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||