在PowerBI中加载图片 -- 存储法

上一篇blog介绍了在Power BI中通过引用图片地址的方式在报表中加载图片。这种方式优点是操作简单方便,只要提供有效URL就可以将图片显示出来。缺点是图片来自于外部网络,一旦地址失效,图片就无法在Power BI的报表中显示。

在早期版本Excel的Power Pivot中有一种图片加载方式,即将图片作为一种Web Content引入到Pivot表当中,然后作为一种Binary文件存储在表单中。这种图片形式的Binary文件可以在Power View中进行加载,并且由于图片已经存储在了表格中,即使Web Content中记录的图片原始地址已经失效,也不会影响图片的加载。具体方法可以参考https://www.kasperonbi.com/loading-an-image-into-the-model-using-power-query/ 这篇文章。

但是最新的Excel 2016已经没有了该功能,应该是微软修改了Power Query处理图片类型Binary的逻辑,是其存储结果无法直接识别。要解决该问题,微软的Power BI工程师介绍了一种方法,可以将图片文件做Base64的编码处理,然后将得到的编码存储到Power BI表单中即可。

参考方法是找一个做图片Base64编码处理的在线工具,例如:http://tool.oschina.net/encrypt?type=4,将要存储的图片传到在线工具是获取Base64编码。
这里写图片描述
修改原始文件,添加一个新的列存储图片的Base64编码。注意:复制Base65编码要包含data:img/jpg;base64这个前缀。
这里写图片描述
添加完全部的图片Base64编码之后就可以在Power BI中刷新数据,将编码加载进来。之后,跟常规ULR加载图片的方法一样,将存储图片Base64编码列的分类改为URL。之后就可以在Report页面看的图片了。
这里写图片描述

当然,上面这种一个一个手动查找添加图片Base64编码的方法比较麻烦,要想简化图片转换的过程,可以利用Power Query Function Language中的BinaryEncoding.Base64方法写一个将图片转换成Base64编码的自定义函数。具体方法可以参考MS MVP Gerhard提供的如下脚本

let
    UrlToPbiImage = (ImageUrl as text) as text =>
let
    BinaryContent = Web.Contents(ImageUrl),
    Base64 = "data:image/jpeg;base64, " & Binary.ToText(BinaryContent, BinaryEncoding.Base64)
in
    Base64 
in
    UrlToPbiImage

有了这个自定义函数之后,选择Invoke Custom Function,调用这个自定义函数去处理之前引入过得Flag列。将图片转换为Base64代码。

这里写图片描述

转换成功后,还是修改一下column的category,改成URL,之后就可以在Report页面上使用这个列显示图片了。

这里写图片描述

有了这两个以Base64形式存储的图片列之后,麻麻再也不用担心我得Report在断网情况下会裸奔的跑出来了。

猜你喜欢

转载自blog.csdn.net/jessica_seiya/article/details/80963792