在《Excel表格的自动化处理和推送》一文中,为您介绍了如何使用EasySQLMAIL自动填写Excel报表,并把报表推送给指定分公司的运维经理。如果需要为10个分公司的运维经理每个人点对点推送分公司的运维报表,应该如何实现呢?本文向您介绍批量点对点报表推送的配置方法。
本文将在《Excel表格的自动化处理和推送》中配置的任务上进行修改,以实现点对点分发功能。
需求:每月1号从故障处理系统中查询每个分公司上月的统计数据和故障清单生成Excel报表后,点对点发送给每个分公司维护部经理。
1、准备一个收件人清单表格。本例中的人员清单放在Excel表格文件“收件人清单.xlsx”中。实际使用时也可以将人员清单放在数据库的表中。
2、启用任务的“按指定条件循环执行任务”选项。
3、上传准备好的收件人列表。(如果收件人列表存放在数据库中,可以略过这一步)
4、修改附件模板的查询语句。
将语句中原来的查询条件
WHERE 分公司 = '青阳公司'
修改为
WHERE 分公司 = #[@@loopdata(分公司)]#
新的语句中,#[@@loopdata(分公司)]#表示每次执行任务时使用Excel表格"收件人清单.xlsx"中的"分公司"字段的值作为查询条件。每个语句都要修改。修改后的语句如下:
第一个SQL语句:
--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');
第二个SQL语句:
--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;
第三个SQL语句:
--3、询故障清单
SELECT 区域,
设备地址,
故障类型,
发生时间,
处理时间
FROM t_stat1
WHERE 分公司 = # [@@loopdata(分公司)] #
AND To_char(发生时间, 'yyyymm') =
To_char(Add_months(sysdate, -1), 'yyyymm')
ORDER BY 发生时间
5、修改任务收件人。使用变量@@LoopData(邮件地址)作为邮件的收件人。
设置好后的任务收件人信息如下:
任务修改完成后,保存任务配置。
任务运行时,会为Excel表格中的每个分公司单独启动一个子任务,在子任务中查询每个分公司的统计数据并点对点推送给对应分公司的运维经理。
如果要通过企业微信或钉钉点对点推送,可以按如下方式修改配置(以企业微信为例):
1、在"收件人清单.xlsx"中添加一列“企业微信帐号”,填写每个收件人的企业微信帐号:
2、修改任务的收件人。在企业微信收件人中使用变量@@LoopData(企业微信帐号)作为收件人。
3、设置好后的收件人信息如下:
设置完成后任务执行时会通过指定的消息通道把查询到的Excel表格通过企业微信点对点发送给分公司指定人员。
1、实际使用时,需要先将收件人的邮件地址添加到系统地址簿中,否则任务运行时会因为收件人地址不合法而拒绝推送邮件。
2、如果修改了邮件地址或人员列表,只需要重新上传“收件人清单.xlsx”表格即可:
3、任务默认是单进程串行运行的。如果确认SQL语句不会发生并发冲突(例如语句中使用了临时表,如果同时查多个分公司的数据可能会出现数据错误),可以启用任务的以下选项提高运行速度:
相关链接: