Reporting services SSRS电子邮件订阅事件触发器-数据值已更改(非定时订阅)

Reporting services SSRS电子邮件订阅事件触发器-数据值已更改(非定时订阅),reporting-services,ssrs-2016,Reporting Services,Ssrs 2016,我希望SSRS报告根据报告数据集中的数据值更改发送报告订阅(电子邮件或文件共享) 假设表中最新数据的500行都有“updatetime=9/19 1:40 pm”,然后50分钟后,该表更新为插入200行新数据,其中“updatetime=9/19 2:30 pm”。本例中的数据值更改是所有记录上的“更新时间”已更改。我希望在下午2:30根据数据集记录中的更改触发SSRS,然后SSRS将通过电子邮件发送新的200条记录 SSR可以进行这种交付吗?“数据驱动”是答案吗?(在我看来,数据驱动解决不了这

我希望SSRS报告根据报告数据集中的数据值更改发送报告订阅(电子邮件或文件共享)

假设表中最新数据的
500行
都有“
updatetime=9/19 1:40 pm
”,然后50分钟后,该表更新为插入
200行新数据,其中“
updatetime=9/19 2:30 pm
”。本例中的数据值更改是所有记录上的“更新时间”已更改。我希望在下午2:30根据数据集记录中的更改触发SSRS,然后SSRS将通过电子邮件发送新的200条记录

SSR可以进行这种交付吗?“数据驱动”是答案吗?(在我看来,数据驱动解决不了这个问题;但也许我只是不理解?)。快照更新是否实现了这一点?(我以为快照也是时间驱动的?)

SQL版本:

Microsoft SQL Server 2016 (SP2-CU2) (KB4340355) - 13.0.5153.0 (X64) 
    Jun 28 2018 17:24:28 
    Copyright (c) Microsoft Corporation
    Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2012 R2 Datacenter 6.3 <X64> (Build 9600: ) (Hypervisor)
Microsoft SQL Server 2016(SP2-CU2)(KB4340355)-13.0.5153.0(X64)
2018年6月28日17:24:28
版权所有(c)微软公司
企业版:Windows Server 2012 R2数据中心6.3(版本9600:)上基于核心的许可(64位)(虚拟机监控程序)
注意:我将使用RANK()窗口函数非常容易地实现分组——它将所有内容分组为1(200)行、2(500)行等。我将只保留组1,因此所有记录都将有一个新的“更新时间”

触发订阅处理

报表服务器使用两种事件触发订阅 处理:时间表或流程中指定的时间驱动的事件 快照更新事件

时间驱动触发器使用特定于报告的计划或共享 计划以指定订阅运行的时间。用于按需和缓存 报告、计划是唯一的触发选项

快照更新事件使用报表快照的计划更新 触发订阅您可以定义一个 每当使用新数据更新报告时触发,基于 在报表上设置的报表执行属性。

处理数据驱动订阅

数据驱动订阅可以生成许多 发送到多个目的地。报告布局不变, 但如果传入参数值,报表中的数据可能会有所不同 来自订阅服务器结果集。影响交付方式的交付选项 报告是否呈现以及报告是否附加或链接到 当值为 从行集合中传入

数据驱动订阅可以产生大量的传递。 报表服务器为该行集中的每一行创建一个传递 从订阅查询返回


就我看来,你是对的。快照更新方法需要创建快照,并且快照只能按计划或由用户手动创建

与数据驱动订阅相比,开销可能更小的是使用一个存储过程,该存储过程运行最简单的查询来检测是否有任何相关数据发生了更改,如果有,则触发订阅

EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = '00f4ecee-891d-445f-ae81-24ef62d3fb53'
其中,事件数据是您的订阅ID(复制编辑订阅链接以获取ID)


当然,您必须每隔15分钟左右运行一次SSIS作业来执行存储过程,但我认为这比数据驱动订阅要好。

据我所知,您是正确的。快照更新方法需要创建快照,并且快照只能按计划或由用户手动创建

EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = '00f4ecee-891d-445f-ae81-24ef62d3fb53'
与数据驱动订阅相比,开销可能更小的是使用一个存储过程,该存储过程运行最简单的查询来检测是否有任何相关数据发生了更改,如果有,则触发订阅

EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = '00f4ecee-891d-445f-ae81-24ef62d3fb53'
其中,事件数据是您的订阅ID(复制编辑订阅链接以获取ID)


当然,您必须每隔15分钟左右运行一次SSIS作业来执行存储过程,但我认为这比数据驱动订阅要好。

非常感谢您的建议!这听起来很可行!是的,我想我在编辑订阅时确实在URL中看到了订阅ID。我将研究这个解决方案,稍后会更新。您的回复让我看到了一篇非常有趣的文章。我已请求dbo。[AddEvent]存储过程的
EXEC权限,但在获得权限之前,我无法尝试这些脚本。我想我在让SP生成订阅时确实遇到了这种情况。如果在发送之前需要更新任何参数,请查看-。它用于文件共享,因此某些字段与电子邮件不同。您将在何处保存执行此命令的用户存储过程(usp)?在[ReportServer]数据库上?关于一个新的数据库(什么是好名字)?@SherlockSpreadsheets-我在ReportServer数据库中有我的存储过程。非常感谢你的建议!这听起来很可行!是的,我想我在编辑订阅时确实在URL中看到了订阅ID。我将研究这个解决方案,稍后会更新。您的回复让我看到了一篇非常有趣的文章。我已请求dbo。[AddEvent]存储过程的
EXEC权限,但在获得权限之前,我无法尝试这些脚本。我想我在让SP生成订阅时确实遇到了这种情况。如果在发送之前需要更新任何参数,请查看-。它用于文件共享,因此某些字段与电子邮件不同。您将在何处保存执行此命令的用户存储过程(usp)?在[ReportServer]数据库上?在一个新的数据库上(什么是好名字)?@SherlockSpreadsheets-我在ReportSer中有我的存储过程
EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = '00f4ecee-891d-445f-ae81-24ef62d3fb53'