隐藏

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

发布:2024/10/10 18:55:34作者:管理员 来源:本站 浏览次数:73

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


然而,在微信里将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字,限于篇幅,我们下一篇详细展开。