如何在PowerBi中加载大型图片

4
我想在PowerBi中加载图片,但问题是图片的大小超过了32kb,导致只显示部分图片。是否有一种快速的方式绕过PowerBi的限制并显示整个图片呢?
我从活动目录中获取了图片,然后将二进制文件转换为文本,以设置它们为图片(使用此公式:data:image/jpeg;base64)。
3个回答

6

Chriss Webb写了一篇很棒的文章,在Power BI数据集中存储大型图片,以下是该文章的要点,以防原始文章不可用。

Chriss Webb文章中的引用

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

图列包含拆分后的文本值,每个文本值都不超过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


2

将图片直接存储在Power BI中并不是最佳选择,因为使用转换为base64的方法,您将受到32KB大小的限制。如果可能的话,最好将图像提取出来,并将它们放置在Azure Blob存储(或其他可访问的存储)中,并从那里引用它们。您可以使用数据类型Image URL在表格中显示,或使用HTML查看器自定义视觉效果通过URL显示图像。您必须使用Power BI获取Blob Storage中的图像列表,但如果图像名称相同,则可以将该表格链接到数据集。


0

这个方案很好,但是存在以下问题:

  • 图像类型是硬编码的
  • 2021-07桌面版没有ImageURL可视化。
    • 还有Card、MultiCard和两个免费的可视化工具Chiclet Browser和Image Grid,但是这些都没有显示我的PNG图像。也许是因为它不是JPEG格式?图像元数据应该是正确的。
  • 所以我设法在表格中显示了一张缩略图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接