之前分享过一个PowerBI通过高德API来查询地址的经纬度等信息的案例:
利用API,轻松获取任意地点的经纬度等详细信息
这个方法很简单,不过如果你发布这个报告到PowerBI服务中,并设置自动刷新时,很可能会遇到下面这个问题:
提示说这个数据集中有某个数据源不支持刷新,点击“发现数据源”,会看到更具体的提示:
此数据集包含一个动态数据源。由于 Power Bl 服务中不刷新动态数据源,因此不会刷新此数据集。
什么是动态数据源呢?
根据微软官方文档的介绍:动态数据源是这样一种数据源,其中的部分或所有信息在 Power Query 运行查询之后才能确定是否需要连接,因为数据是在代码中生成的或从其他数据源返回的。
看完这个解释以后,是不是仍然一头雾水呢?下面直接通过实例来说明这种情况并给出一种解决方案。
动态数据源主要会出现在下面几种情况:
SQL Server 数据库的实例名称和数据库;CSV 文件的路径;Web 服务的 URL当上面的这些名称、路径或URL的文本中含有参数时,就会导致"动态数据源"问题。
前面文章通过API获取经纬度信息的案例,就是第三种情况,利用了 Web 服务的 URL,在自定义函数中,对URL设置了参数,静态的直接访问这个有参数的URL是无法访问的,所以导致了这种报错。
那么如何解决这个问题呢?不同的情况需要不同的解决方案,这里仍以调用高德API的情况为例,只需要稍微调整一下网址的写法就可以了。
选中自定义函数,打开高级编辑器:
之前在自定义函数的公式中,前面的部分是这样写的:
let 源 = (x) => let 源 = Xml.Tables( Web.Contents( "https://restapi.amap.com/v3/geocode/geo?address="&x&"&output=XML&key=你自己的key" ) ),//后面的公式省略……上面 Web.Contents函数中的URL中是含有参数的,只需要将网址部分改成下面的形式:
let 源 = (x) => let 源 = Xml.Tables( Web.Contents( "https://restapi.amap.com/v3/geocode/geo", [ Query=[ address=x, output="XML", key="你自己的key" ] ] ) ),//后面的公式省略……也就是将带参数的网址作为
Web.Contents函数的参数,改成利用Web.Contents函数的query选项,将网址中"?"后面的部分,分别用查询参数的形式来表达,并且保证Web.Contents函数第一个参数的网址是可访问的。
通过这样的调整以后,你再对这个报表设置计划刷新时,就不会再提示“动态数据源”的错误了。
当你遇到这种情况时,仔细对照上面两种写法,举一反三,对Web.Contents中的网址结构进行同样的处理,就能解决web URL动态数据源的问题了。