自动化|Excel、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能够直接从数据库取数 , 数秒处理几万行的数据 , 不用再苦苦等着加载报表 。

说了这么多 , 还是和上面一样 , 举个例子 , 看FR是如何让报表自动化 , 让打工人摆脱报表折磨的 。 其实很简单 , 只需解决三个难题:
  • 第一步:报表如何取数
  • 第二步:报表如何自动生成 , 实现报表自动化
  • 第三步:报表完成后 , 如何自动发送
第一步:报表如何取数对于大部分公司来说 , 生产进度只能人工整理汇总Excel表格 , 数据乱且杂 , 报表人的取数工作肉眼可见的困难 。 这就是为什么大家在做日报周报的时候 , 想要的数据取不出来 , 想填的数据填不进去 , 费了半天时间整理的一堆报表只能烂在自己手里 。
但用FineReport直连数据库功能 , 就可以很好解决这个问题 。
简单来说 , 就是FineReport在数据库的支撑下搭建了一个数据中心 , 想做报表时就可以直接从库中取数;同理你也可以将其集成到OA系统、ERP系统之中 , 随时取数、找数做报表 。

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

第二步:报表如何自动生成 , 实现报表自动化解决了取数的问题后 , 我希望我只需要做一次日报 , 然后将其作为模板 , 以后再需要时可以直接调出来用 。
其实 , 利用FineReport就可实现这个功能 , 你可以将制作好的模板保存在平台中 , 再需要制作日报时就可以直接将模板调出来 , 大大减少重复制作报表的流程和时间 , 将繁琐复杂的日报变成再简单不过的取数填数 。

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