如何在PowerBi中加载大图像

时间:2019-10-31 10:07:07

标签: powerbi powerbi-desktop

我想在PowerBi中加载图片,问题是图片比32kb大,因此它只显示了图片的一部分。 是否有一些快速的方法来解决PowerBi限制并显示整个图片?

我从Activite目录中获取图片,然后将二进制文件转换为文本,以将其设置为图片(使用此公式:data:image / jpeg; base64)

3 个答案:

答案 0 :(得分:3)

克里斯·韦伯(Chriss Webb)有一篇很棒的文章,Storing Large Images In Power BI Datasets,如果没有原始文章,我将在此处复制要点。

引用克里斯·韦伯的文章

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 :(得分:2)

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

答案 2 :(得分:0)

这很有效,除了:

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