Excel、Python靠边站,这才是最快实现报表自动化的路径

文 | 商业智能BI相关文章 阅读次数:2,165 次浏览
2022-08-12 9:33:19

最近在跟隔壁部门闲聊的时候,我发现会有这样的情况。他们跟我吐槽说,每天需要花很多时间做报表,但我发现其实他们80%的报表都是机械、重复式的手工操作,最夸张的一张报表需要花两个小时才能更新完。作为报表老油条,我就问他们为什么要用双手累死累活更新表格,却不考虑去学报表自动化?

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

为了搞清楚这个原因,我观察了很久,得出了三点主要原因:

问题1:不知道原来报表还可以自动化

问题2:不清楚什么样的报表,适合用自动化

问题3:不了解用什么工具,能实现报表自动化

问题1:不知道原来报表还可以实现自动化

用Excel手工做报表,其实弊端很多。①工作效率低下,一张每天都需要更新数据的表格,如果需要人工操作,就得每天花上2、3个小时一个个更新单元格 ②人为干预环节太多,这就意味着准确率无法保证,出错率极高。

所以不管是从提升效率,还是减少报表出错的角度来说,我们都应该减少手工操作,把这些机械、重复的工作交给技术去做。

现在问题来了,你会说,我现在知道了,原来报表也可以实现自动化,那什么样的报表才适合用自动化?总不能我所有报表都用自动化吧。这就到了问题2

问题2:什么样的报表,适合用报表自动化?

我们可以把报表分成两类,做个简单的数学题来看看,自动化是不是真的方便。

第一类是一次性的报表,这种报表要花15分钟做,且只做一次,而做自动化要30分钟,这样算下来,如果做自动化的话会亏15分钟,必然不划算。

第二类是常规性的报表,每个月要做4次。这种报表做一次要30分钟,用自动化要60分钟,开发完成后,每次做要5分钟。以三个月为时间段计算的话,按照原来的流程,要在这份报表上花30*12=360分钟,但用自动化后,只要花60+5*11=115分钟,节省了68%的时间。并且时间跨度越大,节省时间越多。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

其实说白了,就是重复性高、内容固定的报表,最适合用来做报表自动化。

现在你肯定又会想问,好,我现在知道报表自动化的好处了,那到底要怎样才能实现?会不会很难学?我学不会怎么办?

问题3:不知道什么工具是实现报表自动化的路径

实现报表自动化的路径其实有很多,但一般来说,最常用的有3种。

一、精通Excel,就写VBA来实现报表自动化

优点:①Excel自带,无需下载,与Excel之间的交互很友好;②易分享,可以把做好的模板分享给同事,不是每个人的电脑上都会装python,但是每个人的电脑上都有Excel

缺点:①入门难:VBA代码太不友好了,很容易就从入门到放弃 ②数据处理量有限:一旦数据量到十几万行的话,Excel就撑不住了,可能你花了三天三夜做好的报表,就直接卡到打不开了。

二、掌握Python,就写代码来实现报表自动化

优点:能够实现很多自动化设计,从读取数据到输出数据都可以完成

缺点:①需要操作者学会写代码,学习成本比较高。②数据处理量有限:如果说企业数据量涉及千万上亿条数据,一年可能要做上千张报表,python加载数据就会极其卡顿,影响工作。③一些复杂的报表,尤其是非数据类的报表用Python开发也不适合,比如下方打印货单的凭证、发票套打。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

说了这么多,还是举个例子来实践一下吧

一次自动化的报表制作,通常需要经历这样几个步骤:

连接并操作数据库

数据处理+自动化报表

设置定时邮件发送给相关人员

1、连接并操作数据库

利用Python可以连接并操作数据库,包括Oracle、PostgreSQL、MySQL、SQL Server 等等。不同的数据库,需要安装不同的第三方模块,比如说,要操作Oracle,那么通常需要先安装 cx_Oracle:

pip install cx_Oracle

在开始操作数据库之前,需要先创建一个数据库引擎,然后再连接数据库:

from sqlalchemy import create_engine

# 创建数据库引擎engine = create_engine(‘oracle://user:password@ip_address:1521/orcl’)

# 连接数据库con = engine.connect()

如果你有数据库账号拥有创建表的权限,那么就可以对数据库进行增删改查的操作。

# 增

con.execute(“insert into usr(id, name) values(1, ‘Jim’)”)

con.execute(“insert into usr(id, name) values(2, ‘Joe’)”)

# 删

con.execute(‘delete from usr where id = 1’)

# 改

con.execute(“update usr set name = ‘Jack’ where id = 2”)

# 查

sql = ‘select id, name from usr where id = :id’

import pandas as pd

df = pd.read_sql(sa.text(sql), engine, params={‘id’: 2})

df

另外,利用Python去执行各种SQL 语句,自动完成更加复杂的数据库操作。

2、数据处理+自动化报表

在Python执行SQL后,取出原始数据

想要实现的报表如下,这张日报表是用来监控每一天的销售、发货和用户反馈情况

代码如下(非完整版):

3、设置定时邮件发送给相关人员

以上就是一个典型的日报表,源数据不变,报表格式不变,就可以通过这段脚本自动生成,生成的报表也可以实现推送,利用Python实现自动化发送邮件。

三、学会简单SQL,用报表工具一步实现报表自动化

刚刚举了Excel和Python的例子,但其实这两个方法各有各的优缺点,那有没有一种工具能融合两个方法的优点,又同时能避开它们的缺点?其实市面上已经有很多成熟的报表工具,可以解决这个问题,我拿知名度较高的报表工具FineReport举例吧。

相比较Python,在都能一步取数、输出数据的前提下,FR不需要写几百行的复杂代码,只需要学会简单的SQL语言,就能取数设计报表,绝大多数没有代码基础的人也能上手,且因为用的是类Excel的操作界面,使用习惯也不会有太大的改变。再相较Excel,FR能够直接从数据库取数,数秒处理几万行的数据,不用再苦苦等着加载报表。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

说了这么多,还是和上面一样,举个例子,看FR是如何让报表自动化,让打工人摆脱报表折磨的。其实很简单,只需解决三个难题:

第一步:报表如何取数

第二步:报表如何自动生成,实现报表自动化

第三步:报表完成后,如何自动发送

第一步:报表如何取数

对于大部分公司来说,生产进度只能人工整理汇总Excel表格,数据乱且杂,报表人的取数工作肉眼可见的困难。这就是为什么大家在做日报周报的时候,想要的数据取不出来,想填的数据填不进去,费了半天时间整理的一堆报表只能烂在自己手里。

但用FineReport直连数据库功能,就可以很好解决这个问题。

简单来说,就是FineReport在数据库的支撑下搭建了一个数据中心,想做报表时就可以直接从库中取数;同理你也可以将其集成到OA系统、ERP系统之中,随时取数、找数做报表。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

除此之外,FineReport还拥有填报功能,数据部门可以根据业务人员提的需求来设计填报模板。业务人员通过设计好的模板录入数据,数据就会同步到数据库中。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

第二步:报表如何自动生成,实现报表自动化

解决了取数的问题后,我希望我只需要做一次日报,然后将其作为模板,以后再需要时可以直接调出来用。

其实,利用FineReport就可实现这个功能,你可以将制作好的模板保存在平台中,再需要制作日报时就可以直接将模板调出来,大大减少重复制作报表的流程和时间,将繁琐复杂的日报变成再简单不过的取数填数。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

同时对于不同的报表适用对象,你可以用FineReport设计出不同类型的模板,比如总部一个模板,分厂一个模板,不同的班组有不同的模板,通过在几个模板之间设置钻取关系后就可以实现对企业报表数据的分级把控,需要时就直接调用。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

同时,我们做日报周报的时候不免要涉及很多数据和项目进展情况,这时候直白枯燥的数字很难直接反映数据情况,而这时候就可以通过FineReport的仪表板、进度条等功能,用图表来反映生产进度的健康情况,同样只需要调用模板填数就可以。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

有了模板,很多人还是会有一个问题,有的业务人员不想用系统录入数据,还是习惯用excel填报,这种情况该怎么实现报表自动化呢?

很简单,FineReport有多种方式来确保在基层的生产数据的录入,既可以支持固定样式模板的填报报表,也支持excel一键导入模板。

比如,IT人员可以根本业务人员的需要设计填报模板,业务人员只要定期打开模板填报生产计划或者生产结果即可;或者IT人员也可以为业务人员设计基于固定EXCEL表格的一键导入模板,只需设计好数据库与模板的表结构,业务人员即可一键导入模板日常工作中在excel中的数据。

第三步:报表完成后如何自动发送

一般情况下企业每天的报表需要按时发给领导,但是每次都需要手动上交报表,一旦临时有事,还要麻烦其他同事帮自己交报表。

这个问题可以用FineReport的定时调度功能解决,在系统设置好定时任务,它会自动按时将做好的报表发送邮件或者短信给查看报表的人。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

总结

我们刚刚讲了那么多,最后我们再回到报表本身看。其实对于大多数企业来说,报表是需要定期制作、发布的,这就导致我们不得不定期去制作相同的报表。但这样低效率、高人力成本的做表方式早就被淘汰了。

相反,自动化报表流程不仅可以减少人力、时间成本,还可以让企业把主要精力放在数据分析上,真正把数据的价值用到位,让数据推动业务,辅助管理者进行决策,而不是仅仅让数据的价值停留在手机和邮箱里

比如,目前主流的软件——finereport,它小到填报、查询、部署、集成,大到可视化大屏、dashboard驾驶舱,应有尽有,功能很强大。最重要的是,因为这个工具,整个公司的数据架构都可以变得规范,下一步就是构建企业的大数据平台了。而且它是java编写的,支持二次开发,类Excel的设计器,无论是IT还是业务,上手都很简单:编辑sql优化、数据集复用简直都是小case,大大降低了报表开发的门槛。在企业中被关注最多的数据安全方面,FineReport支持多人同时开发同一套报表,并通过模板加锁功能防止编辑冲突;通过数据分析权限控制,保障数据安全。

实现报表自动化的路径,连接并操作数据库,利用Python,一键导入模板

报表产品更多介绍: www.finereport.com

产品体验

相关内容

目录
立即体验 立即体验

商务咨询

在线咨询
专业顾问帮您解答问题

电话咨询

技术问题

投诉入口

微信咨询

返回顶部