Есть отличная статья Крисса Уэбба, Хранение больших изображений в наборах данных 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
Вот что возвращает запрос выше:
Столбец 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 изображения»:
… и затем отобразите значение изображения в отчете: