Power BI云端报告导出数据的几种方法探讨

December 17, 2023
测试
测试
测试
测试
2 分钟阅读

发布到云端的报告,如果制作精良、图文并茂、细节详实,其实并没有导出的必要。

然而,在微信里将Excel甩来甩去依然是相当一部分企业内平时工作交流沟通的“良好”习惯。

因此,很多时候,我们仍然需要做一些数据分析建模过程中的返祖行为:导出数据表。

数据导出有多种办法,我们展开讨论。

01

可视化对象内置导出

对于发布到云端的报告来说,导出数据表是一件比较容易的事:

可以选择导出具有当前布局的数据,默认Excel格式,最多15万行:

也可以导出汇总数据,可以选择xlsx格式或csv格式:

同时,基础数据也可以通过设置直接进行下载:

以上数据的下载权限可以由管理员在报表设置中进行选择:

经过多个步骤并且还有选项的过程,会让最终用户感到困惑,并在选择下载哪类数据时徘徊不定,求助与指导毕竟也要花费不少时间。再就是今天教了明天又忘,时有发生。

最主要的问题是,对于大部分报表可视化来说,本不应该提供给用户导出数据的功能,仅仅是某几个表可能需要而已,而报表本身无法仅为特定的表或者视觉对象提供数据导出功能。

还有一个问题是,可视化对象无论是图或者是表,往往含有大量的信息,尤其是Power BI 上制作的中国式报表,往往包含十几列甚至几十列数据,而用户真正想要下载的可能只是某一列或者几列。他们往往在导出数据之后,再删除冗余的列:

02

Power Automate提供下载

基于以上的分析,可视化对象内置的数据导出功能并不完美。

同时,我们对完美提出了如下要求:

  • 报告整体不提供数据下载功能,仅对个别可视化对象的某些字段提供;
  • 无需经过繁琐的步骤选择操作,通过点击一个按钮即可实现;

本节标题已经给出了答案。

Power Automate

过程比较简单:

一、在desktop中添加PA可视化对象:

拖入想要下载的字段,这个千万别忘了:

可视化对象右上角三个点,选择编辑:

耐心等待几分钟……

二、创建流

在显示的页面中左上角点击新建,即时云端流:

添加下一步:

创建CSV文件,数据源选择最后一个Power BI表。注意,如果之前没有选择添加字段,那么此处不会显示这一项。

保存到onedrive for business中,并取一个能够区分的文件名:

保存并应用即可:

三、可视化调整

适当调整一下可视化对象的外观即可:

四、效果:

运行了4次,看一下结果:

很好!运行非常高效,基本上都在3秒内结束工作:

不过此时,疑问来了,如果是提供给最终用户下载使用,那么不同的用户在点击该按钮时,都会生成文件并保存在这个onedrive中,他们也收不到啊。

没错。

所以,我们还需将flow再修改一下:

这样,只要用户点击按钮,他的邮箱中就会收到一封带着附件的邮件:

完事。

问题讨论与结论

对于需要手动导出数据的报表,本文简单介绍了以上两种办法。

总体来说,内置的导出比较生硬,一方面最终用户操作繁琐,另一方面可能由于数据保密性而不允许导出,从而无法使用。而Power Automate几乎完美地解决了以上两点,但是需要报表的管理员具有PA背景与能力,而且如果报表中需要多处设置导出,也需要花费一些时间进行添加。

不过Power Automate导出数据也并非没有缺点,比如导出的CSV格式用Excel打开是乱码的:

当然,这个也不是没有办法解决,我们可以通过发送txt格式的文件或者写一个更加复杂的flow将csv格式按行写入Excel中,再通过附件发出来。

另外,Power Automate只能获取前1000行的数据,也就是说,如果数据超过了1000行,则只能截取前1000行返回:

那么,这种办法还是存在着巨大的隐患。

另一个可能出现的隐患是:导出的数据未必是当前最新的数据,仔细观察下图:

原因之前讨论过,就是由于背后的数据集已经刷新,但是台前可视化对象此时并没有得到刷新:

而无论是内置的导出数据还是通过Power Automate导出都是获取的可视化对象中显示的台前的数据,因此导出的数据只能和数据未更新之前的可视化对象保持一致。

当然,大部分时候这并不是什么大问题。如果能保持一个良好的习惯,在导出数据前先刷新报表页面,也就无碍了。

因此,两种方法都不尽如人意。大家可以择优选择,并根据上思路使用Power Automate创建出更多玩法。

03

自动化解决方案预告

有这么一个案例:

团队正在使用一个项目开发进度的软件(如Trello或Teambition ),记录着每一个子公司每一个项目的开展进度,每天软件自动或者项目管理人员手动更新进度,比如昨天是32%,今天是35%。

Power BI可以通过API获取这些数据,但是这些数据永远是最新的,而之前的进度就没有了。

那么如何获取每天的进度趋势,以为将来的分析需要呢?

这是一个非常现实的问题。

而且此类案例还不少,比如通过powerquery获取每日的疫情数据,但是每次更新时,之前的历史数据就不存在了。有一种办法是用powerquery实现数据库回写,历史文章参考:

【重磅来袭】在Power BI 中使用Python(4)——PQ数据导出&写回SQL

Power BI数据回写SQL Server(1)没有中间商赚差价

Power BI数据回写SQL Server(2)——存储过程一步到位

PowerBI借”第三方“将度量值回写SQL与天猫总裁的两个88年女人

但是,并不是每一个数据库都允许你回写的,比如此类软件你怎么回写?

所以还是得想别的办法。

办法倒是也挺多,比如每天定个闹钟手动下载……,比如:

通过ssms连高级工作区数据集,写dax或者mdx将数据自动回写sqlserver数据库,然后将过程用sql server代理建定时任务 那就最简单点,直接excel连数据集,获取数据后存在excel,用windows计划任务加简单vba就行了 李永峰老师

最佳方案一定得包含一条:无需开机。

因此,排除以上的方法。

在2021年8月,powerbi 博客更新了一个新的功能:使用API进行DAX查询

https://powerbi.microsoft.com/en-us/blog/announcing-the-public-preview-of-power-bi-rest-api-support-for-dax-queries/

通过API链接将查询语句POST到数据集中,直接返回查询结果。

这正是我们想要的。

对于结果,写入数据库,存入SharePoint List或是直接导出Excel表,那就看需要了。

而且,出于无需开机考虑,我们想到了使用Power Automate:

本文到这已经3k字,限于篇幅,我们下一篇详细展开。

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多