Меню

Отображение многострочного текста корпоративного поля Project Server в Power BI

Добрый день дорогие читатели и коллеги.
Не давно от одного из заказчиков поступил вопрос, как корректно добавить в отчет PowerBI многострочное текстовое поле проекта? Многострочное поле в БД данных ProjectServer и OData храниться как текст с HTML разметкой. Рассмотрим на примере поля карточки проекта Цель (по SMART).

Пример данных из OData

Пример данный из БД

Как мы видим при выборке из БД Project Server и OData поле содержит гипертекстовую разметку и при добавлении в отчет отображается не «красиво».

Далее мы рассмотрим 2 способа отображения корректной информации в PowerBI:

Способ 1.

Очистка поля от не нужных HTML тэгов. Для этого я буду использовать стандартную функцию «Заменить» в Power Query:

Скрипт до модификации:

let;
Источник = OData.Feed("http://epm2016/PWAMSCONF/_api/ProjectData/"),
Проекты_table = Источник{[Name="Проекты",Signature="table"]}[Data],
#"Удаленные столбцы" = Table.RemoveColumns(Проекты_table,{"ОписаниеТипаКорпоративногоПроекта", "ИдентификаторТипаКорпоративногоПроекта"}),
#"Другие удаленные столбцы" = Table.SelectColumns(#"Удаленные столбцы",{"ИДПроекта", "ИмяПроекта", "Целипроекта"}),
#"Дублированный столбец" = Table.DuplicateColumn(#"Другие удаленные столбцы", "Целипроекта", "Копия Целипроекта"),
#"Переименованные столбцы" = Table.RenameColumns(#"Дублированный столбец",{{"Копия Целипроекта", "ЦелипроектаNOHTML"}})
 
in
#"Переименованные столбцы"

Скрипт после модификации:

 

let
Источник = OData.Feed("http://epm2016/PWAMSCONF/_api/ProjectData/"),
Проекты_table = Источник{[Name="Проекты",Signature="table"]}[Data],
#"Удаленные столбцы" = Table.RemoveColumns(Проекты_table,{"ОписаниеТипаКорпоративногоПроекта", "ИдентификаторТипаКорпоративногоПроекта"}),
#"Другие удаленные столбцы" = Table.SelectColumns(#"Удаленные столбцы",{"ИДПроекта", "ИмяПроекта", "Целипроекта"}),
#"Дублированный столбец" = Table.DuplicateColumn(#"Другие удаленные столбцы", "Целипроекта", "Копия Целипроекта"),
#"Переименованные столбцы" = Table.RenameColumns(#"Дублированный столбец",{{"Копия Целипроекта", "ЦелипроектаNOHTML"}}),
#"ЗаменаHTML <p>" = Table.ReplaceValue(#"Переименованные столбцы","<p>"," ",Replacer.ReplaceText,{"ЦелипроектаNOHTML"}),
#"ЗаменаHTML </p>" = Table.ReplaceValue(#"ЗаменаHTML <p>" ,"</p>"," ",Replacer.ReplaceText,{"ЦелипроектаNOHTML"}),
#"ЗаменаHTML &#160" = Table.ReplaceValue(#"ЗаменаHTML </p>","&#160"," ",Replacer.ReplaceText,{"ЦелипроектаNOHTML"}),
#"ЗаменаHTML <ul><li>" = Table.ReplaceValue(#"ЗаменаHTML &#160","<ul><li>"," ",Replacer.ReplaceText,{"ЦелипроектаNOHTML"}),
#"ЗаменаHTML </li><li>" = Table.ReplaceValue(#"ЗаменаHTML <ul><li>","</li><li>",", ",Replacer.ReplaceText,{"ЦелипроектаNOHTML"}),
#"ЗаменаHTML </li></ul>" = Table.ReplaceValue(#"ЗаменаHTML </li><li>","</li></ul>"," ",Replacer.ReplaceText,{"ЦелипроектаNOHTML"})
in
#"ЗаменаHTML </li></ul>"

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

Способ 2.
Использование Custom Control из магазина.

Первый способ достаточно простой если нам не нужно сохранять форматирование (использование в табличных представлениях), но что делать если нам необходимо сохранить условное форматирование в отчете?
Для этого я использую визуальный компонент HTML Viewer

После добавления из магазина визуальный компонент станет доступен в панели визуализации.

Результат.

Успехов Вам в Ваших начинаниях!

Подписывайтесь на наш youtube-канал
и блог про Project и BI:
https://bastion-integrator.com/blog

Присоединяйтесь к нам в LinkedIn https://www.linkedin.com/company/bastion-integrator и в Facebook https://www.facebook.com/groups/245734269344768/