一、什么是报表自动化

日常业务部门在出报告的过程中经常会涉及到大量的手工操作,为了减少工作量,把一些重复性的工作交给程序处理,将这部分人工操作的工作通过工具或者代码替代的过程成为报表自动化。

二、报表自动化的适合条件

并不是所有内容都适合用报表自动化,在数据化运营实践中,日报,周报,这种频率性很强的东西,就需要自动化;而那些不同活动的效果数据,每次都不一样,这样的做自动化就没有太大意义。

三、如何实现报表自动化

我们以实际业务场景来举例,比如销售大区长想要知道他所管辖内每天新车、二手车销量中,每款车型、车系、车型的日销量以及累计销量是多少时,业务运营人员就需要每天通过去系统取数、整理、并进行透视计算才能完成所需数据的规整,而其实通过工具或者程序,就可以比较快速的实现报表自动化,并通过邮件的方式将销量日报发送到大区长邮箱中,本篇我们将通过Kettle、Python等工具来具体介绍该简单例子的实现方式。无论是Kettle 还是 python实现报表自动化的思路大致如下:

第一步:梳理工作流程,从数据获取开始,到最后将报告交付出去,包括数据源获取、整合源数据,制作成所需的报表;将报表通过邮件发送出去。

第二步:报表自动化可以分成两个模块:模块一:报表制作模块,负责整合源数据,生成最终的报告数据;模块二:邮件发送模块,负责将报表通过邮件发送出去。模块三:定时触发模块,负责定时开启工具或运行脚本程序,实现前两个模块自动

第三步:通过工具或程序进行自动化过程实现,将第二步的三个模块集成到代码或工具作业中,代替业务人员的手工操作。

四、Kettle报表自动化

简单介绍下kettle,Kettle是一款国外开源的ETL工具,Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出。那如何通过kettle实现邮件发送销量日报呢,包括三个部分:

1、转换:准备统计数据输入与报表输出

2、作业:发送邮件

3、计划任务:定时执行作业

流程详解:

1、转换:准备统计数据输入与报表输出

(1)表输入-执行数据库查询结果输入

(2)Microsoft Excel输出 将查询结果输出到指定路径

2、作业:发送邮件

(1)收发邮件、服务器、附件配置

(2)搭建作业(Job)

3、计划任务:定时执行作业

至此,流程说明完毕.结果如下:

四、Python报表自动化

同样,我们使用Python也可以实现以上操作,那如何通过Python实现邮件发送销量日报呢,也包括三个部分:

1、数据获取与报表输出

2、发送邮件

3、计划任务:定时执行脚本程序

流程详解:

1、数据获取与报表输出

#导入包

import pymysql

import pandas as pd

import numpy as np

# 连接数据库

conn = pymysql.connect(

host="rm-wz9bop3ly3b9nh2l1jo.mysql.rds.aliyuncs.com", user="xxdata", passwd="data*****",

db="ads", port=3306,charset="utf8")

print("连接成功")

# 创建游标对象

cursor = conn.cursor()

# 梳理业务数据逻辑

sql ="SELECT DATE(NOW()) AS '统计日期' ,t4.*,t5.累计销量 FROM (SELECT FClassify AS '车辆分类',FBrand AS'品牌',series AS '品名',FModel AS '车型',FCarGuidPrice AS '指导价',count(FContract) AS '销量' FROM (SELECT * FROM (SELECT FContract,FClassify,FBrand,series,SUBSTR(FModel,1,IF(LOCATE('、',FModel)=0,100,LOCATE('、',FModel))-1) AS FModel FROM ads_car_return WHERE LEFT(FContractTime,10)=date_add(curdate(), interval -1 day)) t1 LEFT JOIN (SELECT FContract, SUBSTR(car_model,1,IF(LOCATE('、',car_model)=0,100,LOCATE('、',car_model))-1) car_model,FCarGuidPrice FROM ads_finance_lease_big_screen_detail2)t2 USING(FContract))t3 GROUP BY FClassify,series,SUBSTR(FModel,1,IF(LOCATE('、',FModel)=0,100,LOCATE('、',FModel))-1) )t4 LEFT JOIN(SELECT FClassify AS '车辆分类',series AS '品名',SUBSTR(FModel,1,IF(LOCATE('、',FModel)=0,100,LOCATE('、',FModel))-1) AS '车型',count(FContract) AS '累计销量' FROM ads_car_return WHERE FContractTime > '2020-11-25' GROUP BY FClassify,series,SUBSTR(FModel,1,IF(LOCATE('、',FModel)=0,100,LOCATE('、',FModel))-1) )t5 ON t4.车辆分类=t5.车辆分类 AND t4.品名=t5.品名 AND t4.车型 = t5.车型 ORDER BY 车辆分类 DESC,销量 DESC;"

# 使用execute()方法执行SQL代码

cursor.execute(sql)

results=cursor.fetchall()

cols = cursor.description

# 解决mysql直接导出结果无列明的问题,先创建一个空列表以存放列名

col = []

for v in cols:

col.append(v[0])

dfsql = pd.DataFrame(list(results),columns=col)

if dfsql.empty:

print('empty set')

else:

display(dfsql)

# 将数据保存至本地

dfsql.to_excel(r'C:\Users\86186\Desktop\data-integration\文件转换\结果数据\每日销量数据.xlsx')

# 关闭数据库连接

cur.close()

2、发送邮件

# 通过企业阿里邮箱发件

import smtplib

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

from email.header import Header

from email.mime.application import MIMEApplication

smtpserver = 'xx@xxfqc.com' #发件人邮箱地址

username = 'xx@xxfqc.com' #发件人邮箱地址

password ='****************' #发件人邮箱密码

sender ='xx@xxfqc.com' #发件人邮箱地址

receiver = 'xx@qq.com'

#设置邮件主题

subject = 'Python自动化邮件测试'

msg = MIMEMultipart('mixed')

msg['Subject'] = subject

msg['From'] = ''

msg['To'] = ";".join(receiver)

#添加邮件正文

text = "Dears:\n附件请查收,有问题联系,谢谢!\n\nName"

text_plain = MIMEText(text,'plain', 'utf-8')

msg.attach(text_plain)

#添加邮件正文

text = "Dears:\n附件请查收,有问题联系,谢谢!\n\nNAME"

text_plain = MIMEText(text,'plain', 'utf-8')

msg.attach(text_plain)

#添加附件

excelFile = r'C:\Users\86186\Desktop\data-integration\文件转换\结果数据\融租每日销量数据.xlsx' #附件所在位置

excelApart = MIMEApplication(open(excelFile, 'rb').read(), _subtype='base64',_charset='utf-8')

excelApart.add_header('Content-Disposition', 'attachment', filename='mothsales') #filename用附件名称代替

msg.attach(excelApart)

#发送邮件

smtp = smtplib.SMTP()

smtp.connect('smtp.xxfqc.com')#替换成自己的邮件服务器

print('链接成功')

smtp.login(username, password)

print('登录成功')

smtp.sendmail(sender, receiver, msg.as_string())

print('邮件发送成功')

smtp.quit()

3、计划任务:定时执行脚本程序

与上述操作步骤3类似,不过多介绍,结果如下:

kettle能否自动建表_Kettle、Python实现报表自动化相关推荐

  1. hibernate mysql 自动建表_配置hibernate根据实体类自动建表功能

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码update upda ...

  2. Activiti+oracle 启动项目时不能自动建表或更新表的问题分析及解决办法

    现象描述:按照正常配置,第一次启动时不能自动建表 关键配置片段如下: <bean id="processEngineConfiguration" class="or ...

  3. 配置hibernate根据实体类自动建表功能

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...

  4. [NewLife.XCode]反向工程(自动建表建库大杀器)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  5. Springboot 之 Hibernate自动建表(Mysql)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 引入Maven依赖包 <dependency><groupId>org.sp ...

  6. 打包jar文件后的spring部署及hibernate自动建表经验总结

    楔子 用spring+hibernate做一个服务器运行程序,在部署到服务器时(打包成jar,在window server2008下运行),出现了以下两个纠结问题: 1. 加载不了Spring容器 2 ...

  7. Hibernate无法自动建表的缘故

    说一下我的缘故:根本原因是建表的SQL语句错误,不同的版本的hibernate-core包下的不同的Dialect使用的SQL是不一样的,我开启了show-sql后,控制台打印如下: Hibernat ...

  8. hibernate自动建表到数据库及spring下自动建表到数据库

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...

  9. 【SSH】——Hibernate实现简单的自动建表

    转载:http://blog.csdn.net/u010066934/article/details/49078445 [与ORM] Object Relational Mapping,对象关系映射, ...

  10. xcode修改时间后就要重新编译_[NewLife.XCode]反向工程(自动建表建库大杀器)

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

最新文章

  1. mac下appium启动
  2. 【转】Scrum角色及其职责介绍
  3. C# ini文件读写函数
  4. python pip清华源安装库
  5. matlab 神经网络工具箱的实用
  6. SIP Trunk / SIP 中继服务
  7. unity3d改变物体的中心位置_Unity3d粒子特效:制作火焰效果
  8. DWF是个什么格式,要怎么进行相应的格式转换?
  9. 【自考】-计算机网络原理
  10. 多元有序logistic回归分析_多元logistics回归分析
  11. 多旋翼无人机动力系统发展历程
  12. 苹果系统计算机常用英语,Mac电脑自带拼音输入法的常用技巧
  13. Ios常用第三方动画框架(三)
  14. 暗影精灵双系统(win10和Ubuntu16.04)安装+Cuda和tensorflow安装-深度学习环境配置
  15. Web前端优化最佳实践及工具集锦(如减少页面加载时间)
  16. 遥信、遥测、遥脉和数字量的区别
  17. 最新猫眼电影反爬虫解密
  18. W ndoWs7重启按F11没用,windows7系统开不开机,按F11以后怎么em一键还原/em-win7 一键还原,w...
  19. 微生物组基因分析流程shotgene安装与nextflow初探
  20. 人工智能机器人的可操作性应用法则

热门文章

  1. 根据地址获取经纬度 -- 腾讯地图(PHP后台)
  2. Bluedroid 函数分析:BTA_GATTC_Open
  3. java微信公众号上传永久素材_微信开放平台永久素材视频文件上传
  4. 蓝桥杯--算法提高 字符串跳步
  5. SpringBoot 获取 Yml 配置 信息 Environment
  6. linux数字版权管理,数字版权管理系统 DRM
  7. 用Qt实现一个桌面弹幕程序(六)-- -- 桌面客户端实现②
  8. Fabric 1.0源代码分析(39) policy(背书策略)
  9. 实战一:给定一段音频,请提取12维MFCC特征,阅读代码预加重、分帧、加窗部分,完善作业代码中fbank和mfcc部分,并给出最终的Fbank和MFCC特征,用默认的配置参数,无需进行修改
  10. Image data cannot be converted to float