Как загрузить большие изображения в PowerBi - PullRequest
2 голосов
/ 31 октября 2019

Я хочу загрузить изображения в PowerBi, проблема в том, что изображения немного больше , чем 32 КБ, поэтому он показывает только часть изображения. Есть ли какой-нибудь быстрый способ обойти ограничение PowerBi и отобразить всю картинку?

Я выбрал изображения из каталога activite, а затем преобразовал двоичный файл в текст, чтобыустановите их как изображение (используя эту формулу: data: image / jpeg; base64)

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Есть отличная статья Крисса Уэбба, Хранение больших изображений в наборах данных Power BI , из которой я скопирую основные сведения здесь, если оригинальная статья недоступна.

Цитата из статьи Крисса Уэбба

Максимальная длина текстового значения, которое механизм Power Query может загрузить в одну ячейку в таблице в наборе данных, составляет 32766 символов - более того, и текст будет молча усечен,Чтобы обойти это, вам нужно разделить текстовое представление изображения на несколько текстовых значений меньшего размера, хранящихся в нескольких строках, каждая из которых меньше ограничения в 32766 символов, а затем собрать их в меру DAX последанные были загружены.

Разделение текста в M на самом деле не так сложно, но это трудно сделать эффективно. Вот пример запроса M, который считывает все данные из всех файлов в папке выше и возвращает таблицу:

let
    //Get list of files in folder
    Source = Folder.Files("C:\Users\Chris\Documents\PQ Pics"),
    //Remove unnecessary columns
    RemoveOtherColumns = Table.SelectColumns(Source,{"Content", "Name"}),
    //Creates Splitter function
    SplitTextFunction = Splitter.SplitTextByRepeatedLengths(30000),
    //Converts table of files to list
    ListInput = Table.ToRows(RemoveOtherColumns),
    //Function to convert binary of photo to multiple
    //text values
    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,
    //Loops over all photos and calls the above function
    ConvertAllFiles = List.Transform(ListInput, each ConvertOneFile(_)),
    //Combines lists together
    CombineLists = List.Combine(ConvertAllFiles),
    //Converts results to table
    ToTable = #table(type table[Name=text,Pic=text],CombineLists),
    //Adds index column to output table
    AddIndexColumn = Table.AddIndexColumn(ToTable, "Index", 0, 1)
in
    AddIndexColumn

Вот что возвращает запрос выше:

enter image description here

Столбец Pic содержит разделенные текстовые значения, каждое из которых меньше предела 32766 символов, поэтому при загрузке этой таблицы в Power BI усечение не происходит. Столбец индекса необходим, потому что без него мы не сможем рекомбинировать все значения разделения в правильном порядке.

Осталось только создать меру, использующую DAX ConcatenateX() функция для объединения всех фрагментов текста обратно в одно значение, например, так:

Display Image =
IF(
    HASONEVALUE('PQ Pics'[Name]),
    "data:image/jpeg;base64, " &
    CONCATENATEX(
        'PQ Pics',
        'PQ Pics'[Pic],
        ,
        'PQ Pics'[Index],
        ASC)
        )

… установить категорию данных этого показателя равной «URL изображения»:

enter image description here

… и затем отобразите значение изображения в отчете:

enter image description here

enter image description here

1 голос
/ 01 ноября 2019

Хранение изображений непосредственно в Power BI - не лучший вариант. По возможности лучше всего извлечь изображения и поместить их в хранилище BLOB-объектов Azure (или другое доступное хранилище) и сослаться на них оттуда. Вы можете использовать URL-адрес типа данных для отображения в таблице или пользовательский визуальный просмотрщик HTML для отображения изображения через URL-адрес. Вам придется использовать Power BI, чтобы получить потерянные изображения в хранилище BLOB-объектов, но если имя изображения совпадает, вы можете связать эту таблицу с вашим набором данных.

...