前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >慎用SharePoint.Files,在Power BI中更快地刷新Excel文件

慎用SharePoint.Files,在Power BI中更快地刷新Excel文件

作者头像
陈学谦
发布2021-12-01 18:41:08
5.2K0
发布2021-12-01 18:41:08
举报
文章被收录于专栏:学谦数据运营学谦数据运营

引子

最近在修改很久之前做的一个模型,发现仅仅只有3个excel文件,却刷新了1分21秒:

很明显不正常,参照其他报告,二十多张十几万行数据的表刷新也就才需要1分钟。

于是决定探究一番。

挨个表刷新了一下,发现罪魁祸首竟然是SharePoint.Files,这个从Onedrive for Business中获取文件的链接器。

于是我决定使用诊断来检查一下,在pq的工具里:

果不其然,这张表在本地刷新也是90多秒:

一开始我还以为是这张表有问题,但是我换了张表,还是用SharePoint.Files的方式获取文件,时间也差不多。

因此,问题肯定是出在SharePoint.Files链接器上了。

正文

还记得我们在这篇文章中说过SharePoint链接器除了SharePoint.Files,还有SharePoint.Contents:

PowerBI从Onedrive文件夹中获取多个文件,依然不使用网关

接下来我分别用SharePoint.Contents和Web.Contents进行获取试试,结果:

非常明显,使用SharePoint.Contents只需要2秒,而Web.Contents仅需要0.08秒,速度超级快。

我们来分析一下这个过程:

Web.Contents中的url是文件的直接路径,点对点获取,不涉及到任何其他的信息

代码语言:javascript
复制
Excel.Workbook(Web.Contents("https://xxxxxxxxx-my.sharepoint.com/personal/xxxxxxxxx_onmicrosoft_com/Documents/OA/学生表.xlsx"), null, true)

因此速度自然是最快的。

而SharePoint.Contents使用的是onedrive的根目录,获取的是根目录下所有的文件和文件夹:

代码语言:javascript
复制
SharePoint.Contents("https://xxxxxxxxx-my.sharepoint.com/personal/xxxxxxxxx_onmicrosoft_com/",[ApiVersion="AUTO"])

然后进行下一步的文件夹导航一直找到文件,在这个过程中,由于需要获取每一层的文件夹和文件信息,必然要比Web.Contents多花费一些时间。

然而SharePoint.Files,是直接列出所有的onedrive中的文件,包括根目录和任何子目录中的文件,再进行筛选。

代码语言:javascript
复制
SharePoint.Files("https://xxxxxxxxx-my.sharepoint.com/personal/xxxxxxxxx_onmicrosoft_com/",[ApiVersion="AUTO"])

也就是说,引擎需要将onedrive中所有的文件名和信息都过滤一遍,如果onedrive中的文件比较多,像我,有31137个文件:

那么可想而知,再强大的引擎也需要刷一段时间了。

然而有些时候我们却不得不使用SharePoint.Files,比如同一批不同部门的文件放在不同的文件夹中保存,而获取的时候想要同时进行跨文件夹获取,就需要这个链接器了。

尤其是当需要获取上百个文件时,你会发现获取这么多的文件和获取两三个文件的时间也差不多,因为大部分的时间都用在了扫描文件名上了,powerbi的引擎处理文件时还是很有效率的。

比较

单纯从效率的角度来说:Web.Contents>SharePoint.Contents>SharePoint.Files,那是不是大部分场景下我们都应该使用Web.Contents呢?

并不是,经过这几年的摸索,绝大部分场景中,我们模型中使用的是SharePoint.Contents。

因为当你真正从onedrive中获取多个文件制作报告,并发布到云端时,需要进行一步数据源凭据的编辑工作。如果你使用Web.Contents,就会发现,每一个文件都要进行一步授权设置,因为每一个文件的url都是不同的。

而SharePoint.Contents的url是根目录,因此不管有多少文件,在云端只需要设置一次数据源凭据授权即可。而且即便将来不断地向模型添加文件,云端也不需要进行任何数据源凭据的更新。当然,前提是所有文件都来自于同一个账号。

结论

经过本文的介绍,你是否知道应当如何获取onedrive中的文件了呢?

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档