前言
每个月1号为十个分公司的运维经理点对点推送每个分公司的故障统计Excel报表。如何实现自动化处理?
需求
上一个案例“Excel表格的自动化处理和推送(一)-自动报表推送”中,实现了每月1号向一个指定分公司维护部经理自动推送统计数据和故障清单。如果要为多个分公司的维护经理点对点推送每个分公司的Excel报表,应该如何实现?
本文为您介绍利用EasySQLMAIL的"点对点信息分发"功能来实现上述需求。本案例中的方法不仅可以通过电子邮件推送,也可以通过企业微信或钉钉进行推送。
解决方案
1、按文档“Excel表格的自动化处理和推送(一)-自动报表推送”中的方法配置一个分发任务,测试并确保任务能够正常推送报表。
2、准备一个收件人清单表格:
本例中的人员清单放在Excel表格文件“收件人清单.xlsx”中。实际使用时也可以将人员清单放在数据库的表中。
3、启用任务的“按指定条件循环执行任务”选项:
4、上传准备好的收件人列表:
5、修改附件模板的查询语句
将语句中原来的查询条件
WHERE 分公司 = '青阳公司'
修改为
WHERE 分公司 = #[@@loopdata(分公司)]#
新的语句中,#[@@loopdata(分公司)]#表示每次执行任务时使用Excel表格"收件人清单.xlsx"中的"分公司"字段的值作为查询条件。每个语句都要修改。修改后的语句如下:
--1、查询上月分公司故障统计数据SELECT 分公司,to_char(发生时间,'yyyymm') AS 月份,COUNT(1) AS 故障数量 FROM t_stat1 WHERE 分公司 = #[@@loopdata(分公司)]#AND to_char(发生时间,'yyyymm') = to_char(add_months(SYSDATE,-1),'yyyymm')GROUP BY 分公司,to_char(发生时间,'yyyymm')
--2、查询处理完成(处理时间非空)的故障数量SELECT count(1) as 处理完成量 FROM t_stat1 WHERE 分公司 = #[@@loopdata(分公司)]#AND to_char(发生时间,'yyyymm') = to_char(add_months(SYSDATE,-1),'yyyymm')AND 处理时间 IS NOT NULL;
--3、询故障清单SELECT 区域,设备地址,故障类型,发生时间,处理时间FROM t_stat1WHERE 分公司 = #[@@loopdata(分公司)]# AND to_char(发生时间,'yyyymm') = to_char(add_months(SYSDATE,-1),'yyyymm')ORDER BY 发生时间
5、修改任务收件人
设置好后的任务收件人信息如下:
任务修改完成后,保存任务配置。
运行效果
任务运行时,会为Excel表格中的每个分公司单独启动一个子任务,在子任务中查询每个分公司的统计数据并点对点推送给对应分公司的运维经理。
通过企业微信推送
如果要通过企业微信或钉钉推送,可以按如下方式修改配置:
1、在"收件人清单.xlsx"中添加一列“企业微信帐号”,填写每个收件人的企业微信帐号:
2、修改任务的收件人:
3、设置好后的收件人信息如下:
设置完成后任务执行时会通过指定的消息通道把查询到的Excel表格通过企业微信点对点发送给分公司指定人员。
需要注意的问题
1、实际使用时,需要先将收件人的邮件地址添加到系统地址簿中,否则任务运行时会因为收件人地址不合法而拒绝推送邮件。
2、如果修改了邮件地址或人员列表,只需要重新上传“收件人清单.xlsx”表格即可:
3、任务默认是单进程串行运行的。如果确认SQL语句不会发生并发冲突(例如语句中使用了临时表,如果同时查多个分公司的数据可能会出现数据错误),可以启用任务的以下选项提高运行速度: