由于公司财政能力有限,在分批次购买了几十个世纪互联Power BI的PRO账号后,恰逢遇到了疫情,而K12线下教培行业受冲击还比较严重,大老板暂时不再松口了,所以只能让后续想使用报表的同学们先使用试用版了,也是不得已的办法。
这时候就面临一些问题了:
当然,这些问题,在后续探索中逐个解决了:
我以为就没有什么大问题了,谁知,更艰难的其实在后头:
我们知道,Power BI如果想借助于网关进行刷新,需要将每一个数据源都设置凭证,尤其是标准网关,更是需要每一个数据源都输入密码,对于本地的文件,更是要求每个文件输入一次计算机登录名和密码。
这时候我才意识到,那么多数据源都是本地excel文件是多么的恐怖。以上截图只是少部分而已……
而幸运的是,其实有一半的查询是直接来自于MySQL的同一个数据库,而这几十张表只需要一次验证即可。
我光是输入账号和密码就用了俩小时。
所以衷心地建议刚开始搭建模型的同学:
尽量要从数据库导入数据!
尽量不要从excel导入数据!
所以这两天,我马上将报告中用到excel表的查询,挨个转移到MySQL中,基本转移得差不多了。
有同学会问了,如果我的数据来源就是excel表,而且更新频率比较高,那我每次更新excel到SQL也需要很长时间啊,得不偿失啊。
面对这个问题,我只能嘿嘿一笑:
定时用Python把excel文件导入MySQL中,再刷新不就完事儿嘛,还是前文介绍的pymysql库的使用,不多说了,内事不决问一下度娘即可。
当然,在转移的过程当中,自然也会发生一些不开心的小事情,比如:
这张图在各种场景,各种方式导入到Power BI 中会发生的错误,尤其是对于很多新手来说,遇到这样的错误,往往很困惑。今天这篇文章的后半部分就来说一下这个问题出现的原因以及解决措施。
我们导入一个包含三张sheet表的excel文件,
选中sheet1加载数据,它直接呈现了最终的结果:
但是这个过程是怎么发生的呢?其实还是有几个步骤的:
当你连接数据源的时候,不论是excel表还是SQL的数据库,其中一半会有多个sheet或者table,导航会自动加载到列表中:
而如果你打开高级编辑器,查看全部的M代码:
重点说一下第二行,这个比较有意思,像不像DAX中的筛选器,用item=sheet1和kind=sheet确定sheet1那一行,然后再确定data那一列,选中后返回值,由于值是一个table,所以返回的结果是一张表。
如果此时我们将sheet1改一下名(这是经常会出现的场景,有些时候是移动了文件到其他位置):
刷新一下,列表仍然会显示:
但是这时候由于kind=sheet和item=sheet1这两个组合的筛选器筛选不出来结果,因为没有item=sheet1这一项,所以只能返回:
两个解决办法:
当然,其实我们可以看到kind=sheet和item=sheet1这两个组合起来选data列和单纯使用item=sheet1来筛选data列结果是相同的。
而且这样做还有个好处,就是如果你将excel文件保存为xlsb或者更改数据源从mysql中获取,查询会继续正常工作。
好了,希望各位同学以后遇到相似问题时能够快速解决。
参考文档:
https://blog.crossjoin.co.uk/2020/04/06/understanding-the-the-key-didnt-match-any-rows-in-the-table-error-in-power-query-in-power-bi-or-excel/
本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!