如果未包含在订阅中,SSRS报告是否会呈现

时间:2016-04-11 20:10:23

标签: reporting-services ssrs-2012

我在考虑使用订阅来提醒用户使用其他订阅将报告放在网络位置。

如果未包含报告,电子邮件订阅是否会运行报告?报告很大,需要时间才能运行(因此文件共享而不是电子邮件)。

我希望它只是在不让服务器再次运行查询的情况下发送电子邮件。

enter image description here

1 个答案:

答案 0 :(得分:0)

是的,报告将被执行。整个订阅事件围绕报告的执行。如果报告没有执行,则订阅不会运行。

解决您的问题

在不重新运行报告的情况下执行电子邮件订阅的简单解决方案是让报告从快照中运行。如果在文件共享订阅之前设置快照,则文件共享传递将基于报告的快照进行,然后使用相同的快照进行以下电子邮件传递,仅运行一次报告。

您可以在报表管理器的“报表处理”部分设置报表快照。

我推荐的解决方案

请注意,我还没有尝试或测试过我要推荐的内容,因为我无法在我的组织中访问。但是,我过去做过这样的事情。如果您有任何疑问,请发表评论,我将尝试澄清。

我会创建一个报告,查找已完成的文件共享投放订阅,并在找到成功的文件共享投放订阅后,发送一封电子邮件说明它可用。您可以在报告中轻松配置参数,以查找与特定报告相关的成功订阅,然后在设置时在电子邮件订阅中指定该参数。

下面是一个查询,它将隔离您的服务器上有订阅的报告。您可以对其进行微调以查找特定的订阅类型或结果。

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())

这应该可以找到您服务器上的所有报告。然后,您可以使用此查询作为数据集创建新报告。使用fileshare传递报告的ReportID作为新报告中的参数,以检查并查看您的报告是否已成功传递。然后,使用LastStatus确定报告的正文(即"您的报告已准备好"或"您的报告尚未准备好")。然后,您根据需要设置此新报告的订阅,以提醒用户您的文件共享交付成功。

我希望这会有所帮助。