首先,数据文件放在onedrive的一个文件夹中:
我们按照常规思路,获取数据-从文件夹:
导航到所要选择的文件夹,加载:
整个过程的PQ底层逻辑很清楚,使用一个示例文件作为函数,然后用这个函数遍历文件夹中的所有文件,最终将结果合并到一张表中:
发布到云端,还是遇到相同的问题,需要安装并打开网关:
相同的疑问:onedrive文件夹本质上是网络位置,不该走gateway的,所以gateway完全多余。之所以必须通过gateway,原因就是导入的本质还是本地文件夹,并不是真实的onedrive网络位置。
解决思路:
仔细查看PowerQuery导入文件夹的整个过程用到的所有代码,其实你会发现,问题只有在源的位置:
很明显,后面的路径是绝对的本地路径。这正是Folder.Files能够识别的内容,而不能识别网络位置:
因此,接下来我们的任务就很清楚了,要准备两个内容:
1.获取onedrive文件夹的真实网络位置,将本地路径替换掉;
2.找出能识别onedrive真实网络位置的函数,将Folder.Files替换掉。
同样还是前一篇文章中的“打开文件-信息-打开文件位置-复制路径”:
只不过这次我们应该复制到账号名的位置(即根目录)即可。
https://xueqianpbi-my.sharepoint.cn/personal/admin_xueqianpbi_partner_onmschina_cn/
你也可以点击打开:
然后登录onedrive,截取网址的前半部分:
至于为什么不直接截取全部的路径,我们一会再说。
解决了路径问题,接下来,我们要选取替换Folder.Files的函数了。
由于onedrive的网址是SharePoint域名,所以我们搜一下与SharePoint相关的函数:
一共有三个,我们分别看一下微软文档中简介和从以上路径获取的信息:
1.SharePoint.Files
SharePoint.Files获取的是文件,根目录下和子文件夹下的所有文件:
2.SharePoint.Tables
SharePoint.Tables获取的是list item,并不是文件和文件夹,这些东西很明显不是我们想要的:
3.SharePoint.Contents
SharePoint.Contents获取的是根目录下的所有文件夹和文件:
Onedrive的全部文件都在documents里,可以导航获取文件夹中的内容:
很显然,这符合我们的要求。
由此,我们可以得出结论:
SharePoint.Contents是我们所需的函数。
解决了上面两个问题,我们就可以使用SharePoint.Contents函数和获取的链接进行操作了:
获取了Onedrive中的所有文件夹,接下来导航到自己想要的文件夹,然后合并文件即可:
这样就得到了合并的文件内容:
发布报告,我们再次到云端查看,网关是关闭状态的,编辑一下数据源权限,即可手动刷新和计划刷新了。
这个问题到这就基本解决完毕了。
以下解释一下几个细节问题:
1.为什么一定要使用根目录呢?原因是我在测试过程中,PQ出现的一个错误给的提示:
所以,要直接获取文件就填写实体的url,要获取文件夹就使用根目录url。
不过,直接使用根目录其实还有一个隐藏的好处。正如在这篇文章中说的:
如果将所有的excel文件都放在onedrive中(强烈建议这么做),那么之后我们再想往模型中添加excel文件,只需要点击最近使用的源,再根据实际情况导航选择即可:
2.还有一个bug就是,有些时候,你按照以上步骤操作时,可能会得到一个空表:
测试了多次,世纪互联版的onedrive链接经常会出现这样的情况,不过国际版没出现过,也没有找到具体什么原因。后续抽空再研究研究。
本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!