周末有学员问了这么一个问题:
老师想问一下,pbi连接了sql和onedrive的文件,但是sql是内网的,我想他只自动刷新onediver的文件可以做到吗?我配置好刷新一直报错说无法刷新sql的
按照正常方式去点击刷新肯定会出错的。手动刷新时会将全部的表和数据源都刷新一遍,只要有一个数据源缺少凭据就会失败。
并且,在这种情况下,根本无法配置计划刷新。
方案一
首先想到的方案是,在powerquery中取消“包含在报表刷新中”
但实际上这种方法是不行的,它只是控制desktop中全部刷新时忽略这张表。真正发布到云端刷新时,仍然需要配置数据源凭据。
方案二
由此,想到了另一个解决方案:异步刷新。
不清楚异步刷新概念的可以观看以下视频:
异步刷新,又叫做增强型刷新。可以对单个表甚至单个表的某个分区进行刷新,效果甚至要比增量刷新还要强大。
不过,这要求用户是【powerbi 管理员】且会配置相关内容;否则需要租户的管理员进行配置并提供相应服务。
假设存在A表(onedrive文件)和B表(内网数据库)。理论上,A表和B表之间没有任何关系的话,单独刷新A表,根本不需要涉及B表,所以即使B表没有进行数据源凭据的提供,也应该可以对A表刷新成功。
但是经过测试发现,仍然失败了:
错误提示如下:
数据源错误: {"error":{"code":"DMTS_DatasourceHasNoCredentialError","pbi.error":{"code":"DMTS_DatasourceHasNoCredentialError","details":[{"code":"Path","detail":{"type":1,"value":"d:\\onedrive\\B.xlsx"}},{"code":"ConnectionType","detail":{"type":0,"value":"File"}}],"exceptionCulprit":1}}}
从加粗内容我们可以看到,出错原因还是因为B表没有数据源凭据。但是我们要注意,咱们是对A表进行了单表刷新,这里其实根本不涉及B表和B表的数据源凭据问题,那为什么还会刷新失败呢?
原因其实就在这个无法调整的“数据源凭据”这里了,它是一个整体,虽然onedrive中的文件数据源凭据没有问题,但是数据库的数据因为没有安装网关,因此它就无法配置凭据,从而整体上这个数据源凭据失效。
而任何数据刷新,第一步都是要检测数据源凭据是否有效,因此会导致失败。
然而我们发现,其中仍然有两次单表刷新是成功的。
不过,这两次刷新并不是对A表刷新,而是对日期表C和一个手动输入数据生成的表D进行刷新。
原因其实也很简单,因为这两个表根本不涉及数据源凭据的设置问题,所以在刷新时根本不会检测数据源凭据是否正常,直接就刷新了。
方案三
以上两个猜测都失败了。
但是由此得到两个结论,第一,数据源凭据必须得配置正确,这是刷新的基础;第二,两张表需要分开,不论是什么形式的分开,就好比刚才的单表刷新,也是分开的一种形式。
数据源凭据配置正确,这就要求最终的数据集一定不能是直接从内网数据库而来,一定要有一个中间步骤,需要将数据库的数据转移到某个位置,然后再获取这个数据。
那么问题来了,转移到什么地方再进行获取呢?
我们从“获取”入手,来看PowerBI获取数据的方式,不知你有没有一眼看到答案呢?
没错,正是“PowerBI语义模型”,也就是之前的数据集。
思路就是:先将内网数据库中的数据获取到desktop中,发布到service,然后在desktop中获取这个发布的语义模型,此时你就创建了“混合模型”:
然后将这个混合模型,再次发布到云端,配置完数据源凭据,就可以正常刷新了。
总结
本文对一个特殊问题提出了三种解决方案,虽然只有第三种最终解决,但是前两种方案用在其他场景也是十分强大。
尤其是异步刷新,配合onedrive for business和powerautomate,可以实现在本地文件夹(里面本身就有许多表)放入一张新表,自动触发刷新这张新表,实现很多人梦寐以求的增量。
第三种方案混合模式更是能够解决大量其他问题,如:多张表分别单独刷新,单独计划刷新完全不受影响;多人整理多个数据集,合在一起制作报告;突破pro账号中单个数据集不允许超过1GB大小的限制;等等。
当然,还想说的是,无论是学习PowerBI还是其他技能,思考的过程很多时候远比结果重要。尤其是在这个人工智能火烈发展的时代,让AI代替你实现某些功能,又快又准确。
最近我也在语雀知识库中更新我的文章,还有大量的企业PowerBI部署方案与PowerBI应用,相信你会感兴趣的。
本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!