2013-05-03 78 views
0

我有一个以纯模式运行的SSRS 2008服务器。我试图弄清楚以下是否可能,如果是的话,如何做到这一点。我希望有一个预定的订阅,只有在某些条件满足时才会生成报告。对于我来说,表达条件的最自然的方式是如果特定的查询返回数据。这可能吗?SSRS中的条件报告

所以基本上我会定期检查数据库,如果有一些数据(如在错误日志中)发送一封关于它的电子邮件。

经过一些研究,我发现这个链接: http://blogs.msdn.com/b/bimusings/archive/2005/07/29/445080.aspx 其中评论人提供了下面的技巧:

IF NOT EXISTS (SELECT * FROM ....) 

RAISEERROR('no records found,'16,1 

ELSE 

SELECT * FROM .... 

我可以用这要么产生一个电子邮件发送或抛出一个错误。问题是我的报告包装在存储过程中,并且不能使用IF NOT EXISTS与存储过程。有没有人建议如何检查存储过程是否返回行而不将其放入临时表或执行查看@@ rowcout?最后一个不适合我,因为我不能让程序的输出与电子邮件一起返回。

+0

您可以在存储过程中使用IF NOT EXISTS。 – ShellNinja 2013-11-27 20:39:11

回答

0

您正在寻找Data-Driven Subscriptions。从该MSDN文档:

Reporting Services提供数据驱动的订阅,以便您可以基于动态订户数据自定义报告的分发。数据驱动的订阅适用于以下几种情况:

•将报表分发给其成员可能从一个发行版更改为下一个发行版的大型收件人池。例如,向所有当前客户分发月度报告。

•根据预定义的标准将报告分发给特定的收件人组。例如,向组织中的前十名销售经理发送销售业绩报告。

并非所有版本的SSRS都支持数据驱动订阅,因此请务必检查您的版本是否有效。

我没有太多的工作,但AFAIK它应该满足您的要求。从related/relvant MSDN page

使用数据驱动订阅在运行时自定义报告输出,传递选项和报告参数设置。订阅使用查询在运行时从数据源获取输入值。您可以使用数据驱动的订阅来执行邮件合并操作,该操作会将报表发送到订阅处理时确定的订阅者列表。

看来,这是你所追求的。

+0

表面上是的,但我仍然在寻找一种方法,在满足某些条件时不实际发送报告。 – stas 2013-05-03 14:24:55

0

您实际上可以使用TSQL命令触发SSRS报告。我有一个计划定期运行的脚本,并执行一些SQL来决定是否应该运行特定的SSRS报告。这应该为你做的伎俩。你所做的就是报告的id,然后像任何其他工作一样执行它 - 我建议你查看一个预定的SSRS报告,看看在DB中的参数是什么样的,以便你可以正确地调用它。

+0

我想避免服务器端脚本。一旦我开始这样做,我可以绕过使用SSRS,并在脚本发现异常时发送电子邮件。 – stas 2013-05-03 16:36:16