发布到云端的报告,如果制作精良、图文并茂、细节详实,其实并没有导出的必要。
然而,在微信里将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字,限于篇幅,我们下一篇详细展开。