【发布时间】:2016-04-11 20:10:22
【问题描述】:
我正在考虑使用订阅来提醒用户报告被放置在使用另一个订阅的网络位置。
如果报告不包括在内,电子邮件订阅是否会运行报告?报告很大并且需要时间来运行(因此文件共享而不是电子邮件)。
我希望它只是发送电子邮件而不让服务器再次运行查询。
【问题讨论】:
-
你检查过执行日志吗?
标签: reporting-services ssrs-2012
我正在考虑使用订阅来提醒用户报告被放置在使用另一个订阅的网络位置。
如果报告不包括在内,电子邮件订阅是否会运行报告?报告很大并且需要时间来运行(因此文件共享而不是电子邮件)。
我希望它只是发送电子邮件而不让服务器再次运行查询。
【问题讨论】:
标签: reporting-services ssrs-2012
是的,报告将被执行。整个订阅事件围绕报告的执行展开。如果报告未执行,则订阅不会运行。
您的问题的解决方案
在不重新运行报告的情况下执行电子邮件订阅的简单解决方案是使用快照运行报告。如果您在文件共享订阅之前设置了快照,则文件共享传递将基于报告的快照进行,然后将使用同一快照进行以下电子邮件传递,仅运行一次报告。
您可以在报表管理器的报表处理部分设置报表快照。
我推荐的解决方案
请注意,我没有尝试或测试过我将在此处推荐的内容,因为我在我的组织中无权这样做。但是,我过去做过类似的事情。如果您有任何问题,请发表评论,我会尽力澄清。
我会创建一个报告来查找已完成的文件共享交付订阅,并在找到成功的文件共享交付订阅后发送一封电子邮件,说明它可用。您可以轻松地在报告中配置参数以查找与特定报告相关的成功订阅,然后在设置时在电子邮件订阅中指定该参数。
下面是一个查询,它将在您的服务器上隔离具有订阅的报告。您可以对其进行微调以找到特定的订阅类型或结果。
SELECT rs.ReportID
, cat.Name AS 'ReportName'
, rs.ScheduleID AS 'SQLJobID'
, cat.Path AS 'ReportPath'
, cat.Description
, sub.LastStatus
FROM dbo.Catalog AS cat
INNER JOIN dbo.ReportSchedule AS rs ON cat.ItemID = rs.ReportID
INNER JOIN dbo.Schedule AS s ON rs.ScheduleID = s.ScheduleID
INNER JOIN dbo.Subscriptions AS sub ON sub.SubscriptionID = rs.SubscriptionID
WHERE LEN(cat.Name) > 0
AND (s.EndDate IS NULL
OR s.EndDate > GETDATE())
这应该会在您的服务器上找到所有报告。然后,您可以使用此查询作为数据集创建新报告。使用文件共享交付报告的 ReportID 作为新报告中的参数来检查您的报告是否已成功交付。然后,使用 LastStatus 确定报告的正文(即“您的报告已准备好”或“您的报告尚未准备好”)。然后,您在此新报告上设置订阅,以便根据需要运行以提醒用户您的文件共享交付成功。
我希望这会有所帮助。
【讨论】: