我希望SSRS报告根据报告数据集中的数据值更改发送报告订阅(电子邮件或文件共享)。
比方说,表中的最新数据中的500 rows
都带有“ Update Time= 9/19 1:40 pm
”,然后50分钟后该表被更新为将200 new rows
插入为“ Update Time=9/19 2:30pm
” 。此示例中的数据值更改是所有记录上的“更新时间”均已更改。我希望基于数据集记录中的此更改在2:30 pm触发SSRS,然后SSRS将通过电子邮件发送新的200条记录。
SSRS可以进行这种交付吗?答案是“数据驱动”吗? (在我看来,不是像数据驱动那样解决了这个问题;但是也许我只是不理解?)。快照更新可以实现此目的吗? (我认为快照也是时间驱动的吗?)。
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)
注意:我将使用RANK()窗口函数轻松实现该分组-将所有内容分组为1(200)行,2(500)行,等等。我将仅保留组1,因此所有记录都会有一个新的“更新时间”。
触发订阅处理
报表服务器使用两种事件来触发订阅 处理:时间表或广告中指定的时间驱动事件 快照更新事件。
时间驱动的触发器使用特定于报表的时间表或共享的 计划以指定订阅运行的时间。对于按需和缓存 报告,时间表是唯一的触发选项。
快照更新事件使用报告快照的计划更新 触发订阅。 您可以定义以下订阅 每当报表更新为新数据时,就会触发 在报表上设置的报表执行属性。
处理数据驱动的订阅
数据驱动的订阅可以生成许多报表实例,这些实例是 投放到多个目标。报告的布局没有变化, 但是如果传入参数值,报表中的数据可能会有所不同 来自订户结果集。投放方式会影响 呈现报告,以及报告是附加还是链接到 当值是 从行集中传入。
数据驱动的订阅可以产生大量的交付。 报表服务器为行集中的每一行创建一个交货, 从订阅查询中返回。
答案 0 :(得分:2)
据我所知,你是对的。快照更新方法将需要创建快照,并且仅按计划或由用户手动创建快照。
要使存储过程运行最简单的查询来检测是否有相关数据已发生更改,并触发订阅,这可能比数据驱动的订阅具有更少的开销。
EXEC dbo.AddEvent @EventType = 'TimedSubscription', @EventData = '00f4ecee-891d-445f-ae81-24ef62d3fb53'
事件数据是您的订阅ID(复制“编辑订阅”链接以获取ID)
当然,您必须每15分钟左右运行一次SSIS作业来执行存储过程,但我认为它比数据驱动的订阅要好。