SSRS企业版数据驱动订阅配置:仅在有数据时发送报表
SSRS数据驱动订阅实现「有数据才发邮件」配置方案
核心思路
数据驱动订阅的触发逻辑是:如果驱动查询返回0行结果,订阅就不会执行发送操作;返回至少1行时,才会按查询返回的参数发送邮件。所以只要让驱动查询仅在存在未分配经理的新员工时,返回邮件组的配置信息即可。
1. 编写订阅驱动查询
假设你现有报表查询是SELECT * FROM NewEmployees WHERE ManagerID IS NULL,直接用以下SQL作为订阅的驱动查询:
-- 先检查是否有未分配经理的新员工 IF EXISTS (SELECT 1 FROM NewEmployees WHERE ManagerID IS NULL) BEGIN -- 有数据时返回邮件配置信息,列名要和后续订阅映射对应 SELECT '未分配经理员工提醒组' AS DisplayName, 'your-mail-group@company.com' AS ToEmail, '【提醒】存在未分配经理的新员工' AS Subject, 'HTML' AS RenderFormat -- 可根据报表需求改成PDF/Excel等 END
- 无符合条件的员工时,查询返回空结果集,订阅自动跳过发送
- 列名可自定义,但要和后续订阅设置里的字段映射一一对应
2. 配置数据驱动订阅
在SSRS报表管理器操作:
- 找到目标报表,右键选择「订阅」→「新建数据驱动订阅」
- 数据源设置:选择能执行上述驱动查询的数据源(可复用报表本身的数据源)
- 查询设置:粘贴驱动查询,点击「验证」确认逻辑正常(有数据返回1行,无数据返回0行)
- 传递设置:选择「电子邮件」,将驱动查询的列映射到邮件参数:
- 「收件人」映射到
ToEmail列 - 「主题」映射到
Subject列(也可以固定写死主题) - 「渲染格式」映射到
RenderFormat或直接选择固定格式
- 「收件人」映射到
- 报表参数:如果报表有参数,按需设置默认值或映射(你的场景大概率不需要额外参数)
- 订阅计划:设置执行频率(比如每天早8点)
3. 验证逻辑
- 测试1:手动插入一条未分配经理的新员工,等待订阅执行时间,确认邮件组收到报表
- 测试2:删除所有未分配经理的员工,确认订阅执行后无邮件发出
注意事项
- 确保SSRS服务账户有SMTP发送权限,且报表服务器已在配置管理器中完成邮件设置
- 驱动查询的数据源账户需要有读取员工表的权限
- 如需自定义邮件正文,可在驱动查询中新增
Body列,返回HTML格式内容,然后在传递设置里映射到「消息」字段
内容的提问来源于stack exchange,提问作者ziggy2561
相关产品推荐
相关产品推荐

