我想在PowerBi中加载图片,但问题是图片的大小超过了32kb,导致只显示部分图片。是否有一种快速的方式绕过PowerBi的限制并显示整个图片呢?
我从活动目录中获取了图片,然后将二进制文件转换为文本,以设置它们为图片(使用此公式:data:image/jpeg;base64)。
我从活动目录中获取了图片,然后将二进制文件转换为文本,以设置它们为图片(使用此公式:data:image/jpeg;base64)。
Chriss Webb写了一篇很棒的文章,在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
以上查询返回的结果如下:
图列包含拆分后的文本值,每个文本值都不超过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”:
然后在报表中显示图像的值:
将图片直接存储在Power BI中并不是最佳选择,因为使用转换为base64的方法,您将受到32KB大小的限制。如果可能的话,最好将图像提取出来,并将它们放置在Azure Blob存储(或其他可访问的存储)中,并从那里引用它们。您可以使用数据类型Image URL在表格中显示,或使用HTML查看器自定义视觉效果通过URL显示图像。您必须使用Power BI获取Blob Storage中的图像列表,但如果图像名称相同,则可以将该表格链接到数据集。
这个方案很好,但是存在以下问题: