Добрый день дорогие читатели и коллеги.
Не давно от одного из заказчиков поступил вопрос, как корректно добавить в отчет 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  " = Table.ReplaceValue(#"ЗаменаHTML </p>"," "," ",Replacer.ReplaceText,{"ЦелипроектаNOHTML"}),
#"ЗаменаHTML <ul><li>" = Table.ReplaceValue(#"ЗаменаHTML  ","<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/