Картинки в Power BI, фото в DAX, изображения в Base64

Картинки в Power BI, фото в DAX, изображения в Base64

Что, если наименования товара или объекта для пользователя не достаточно и хочется качественных изображений в Power BI?  Разберем несколько способов вставить картинку в отчет, чтобы сделать вашу аналитику интуитивно понятной и красочной.

Для начала, определимся с источником данных - они могут быть:

  • Локальные (требуют установки и настройки шлюза):
    • на вашем жестком диске,
    • в директории на сервере организации.
  • Онлайн:
    • Google Drive (самый простой способ получения картинок в Power BI),
    • OneDrive (есть сложности при подключении папки в Power Query),
    • Сервис imgbb и иные порталы.

Локальные изображения в Power BI

Создайте директорию на вашем компьютере или сервере, где будут размещены фотографии. После загрузки изображений убедитесь, что каждое из них не превышает размер 450 Кб. Это важно для работы с методом преобразования Base64. Уменьшить изображения вы можете через интернет порталы без потери видимого качества.

Скопируйте путь к папке, чтобы вставить его в запрос:

В PQ создайте новый пустой запрос и с помощью расширенного редактора поместите в тело запроса этот код:

let
   //Получаем список файлов в папке
   Source = Folder.Files("C:\Users\maffa\OneDrive\Рабочий стол\Картинки"),
   //Удаляем другие столбцы
   RemoveOtherColumns = Table.SelectColumns(Source,{"Content", "Name"}),
   //Создаем функцию с длинной текста в 30 000 символов
   SplitTextFunction = Splitter.SplitTextByRepeatedLengths(30000),
   //Транспонируем таблицу в строки
   ListInput = Table.ToRows(RemoveOtherColumns),
   //Функция для конвертации картинок в бинарный текст
   ConvertOneFile = (InputRow as list) =>
       let
           BinaryIn = InputRow{0},
           FileName = InputRow{1},
           BinaryText = Binary.ToText(BinaryIn, BinaryEncoding.Base64),
           SplitUpText = SplitTextFunction(BinaryText),
           AddFileName = List.Transform(SplitUpText, each {FileName,_})
       in
           AddFileName,
   //Конвертируем все файлы по функции выше
   ConvertAllFiles = List.Transform(ListInput, each ConvertOneFile(_)),
   //Комбинируем в список
   CombineLists = List.Combine(ConvertAllFiles),
   //Конвертируем результат в таблицу
   ToTable = #table(type table[Name=text,Pic=text],CombineLists),
   //Добавляем индекс, чтобы понимать в каком порядке собирать строки в целый кусок
   AddIndexColumn = Table.AddIndexColumn(ToTable, "Index", 0, 1),
   #"Строки с примененным фильтром" = Table.SelectRows(AddIndexColumn, each ([Name] <> "Картинка - объект.xlsx"))
in
   #"Строки с примененным фильтром"

Этот запрос после подключения к источнику изображений преобразует их в Base64 строку, разбивая на несколько записей для сохранения качества картинки. Чем больше символов, тем больше пикселей на выходе.

Анонсы всех видео, статей и полезностей - в нашем Telegram🔥
Присоединяйтесь, обсуждайте и автоматизируйте!

Закрываем редактор Power Query и переходим к написанию меры, которая объединяет все строки кодировки картинки по полю имя и присоединяет к префиксу data:image/jpeg;base64. 

Display Image =
IF(
    HASONEVALUE('Запрос1'[Name]),
    "data:image/jpeg;base64, " &
    CONCATENATEX(
        'Запрос1',
        'Запрос1'[Pic],
        ,
        'Запрос1'[Index],
        ASC
     )
)

Обратите внимание: требуется установить категорию данных "URL-адрес изображения" для измерения, чтобы в визуальном элементе она отображалась не как текст:

Устанавливаем визуал Image Pro by CloudScope и вставляем измерение Display Image в поле Image url:

Чтобы сопоставить изображения со значениями вашего отчета, необходимо создать справочник. С его помощью вы сможете переключать изображения соответственно значениям вашего набора данных:

Картинки в Power BI из Google Drive, One Drive и других источников

Для подключения к адресам изображений в онлайн-источниках необходимо создать справочник сопоставления адреса изображения с объектом. Ниже мы привели скриншот уже преобразованных ссылок:

Преобразование ссылки файлов из гугл диска проходит в несколько итераций:

1. Скопируйте ссылку на объект. Для этого правой кнопкой мыши нажмите на фотографию - Получить ссылку - Копировать ссылку:

2. Поместите ссылку в справочник

3. Преобразуйте ссылку следующим образом:

Исходная ссылка: 
https://drive.google.com/file/d/1PSEQPJE6oGTaBmDL5pOyKYLD0m00229F/view?usp=share_link

Вырезаем код ссылки на картинку между последними двумя слэшами //
1PSEQPJE6oGTaBmDL5pOyKYLD0m00229F

Добавляем к нужному началу ссылки. Оно другое! Как тут:
https://drive.google.com/uc?id=1PSEQPJE6oGTaBmDL5pOyKYLD0m00229F

4. Назначаем Столбцу категорию данных "URL-адрес изображения"

Устанавливаем визуал Image Pro by CloudScope и вставляем измерение Display Image в поле Image url:

Заключение

В этой статье мы разобрали способы подключения к изображениям в Power BI, а также все нюансы для решения проблемы с разрешением.

Перед загрузкой картинок убедитесь, что вес каждого файла не превышает 450 Кб. Также, обратите внимание, что запрос на локальное подключение автоматически собирает новые объекты, а в случае с онлайн-источниками, вам придется поддерживать актуальность справочника вручную.

Комментарии