2011-12-19 135 views
4

我正在使用SSRS 2008 R2中的数据驱动订阅调度一些报表。停止在SSRS 2008 R2数据驱动的订阅中发送空报表

无论生成的报告是否为空,报告仍会发送给收件人。这是一个长期以来的常见问题,老实说,我在论坛上看到的建议并没有完全解决。

我试过的一个建议是我创建了一个隐藏参数并将其设置为默认值选项卡中主数据集上的一个字段。如果报表为空,则报告错误,如果报表设计器中显示了某些数据,则生成报表。但是,当我安排此报告时,它会要求我提供默认值,并且如果不提供它,我无法完成调度程序向导。如果我提供任何默认值,则仍会发送空的报告。但与此不同的是,应该为空报告引发错误,并且不应发送错误报告。

有没有人使用过这种方法?如果是的话,你能告诉我我在这里失踪了吗?

我只是想知道你们是否有这个问题的理想解决方案。

非常感谢您的帮助。

问候

回答

5

这里是我的解决办法:通过存储过程检索数据,并把下面的代码到底

IF @@ROWCOUNT = 0 RAISERROR('No data', 16, 1) 

检查Russell Christopher's article and comments了解更多详情。有什么让我惊讶的是已经有6年了,MS不能为此提出解决方案:3

0

许多方法可以实现这一点。根据查询结果很容易改变订阅的行为。只需查询数据库以找出情况(例如在流程日志中 - 或者只是从必须运行的过程中返回状态),然后使用if语句。

如:

DECLARE @SomeVariable INT = 0; -- 0 means good 

EXEC @SomeVariable = reports.sp_some_proc; -- Returns 1 if something is bad 

IF @NoData = 0 -- everything is fine send report 

SELECT 
    mail_to = 'email1; email2; email3,... important people.....', 
    mail_subject = 'Whatever subject', 
    mail_comment = 'Whatever comment', 
    include_report = 'True' 

ELSE -- the world is a dark place, variable is probably 1 or something. bad... 

SELECT 
    mail_to = 'someone you don''t like', 
    mail_subject = 'something is bad' + LEFT(CONVERT(VARCHAR(25), GETDATE(), 20),16), 
    mail_comment = 'like i said, something is bad', 
    include_report = 'False' 
0

请使用如下脚本在SSRS停止空白调度报告:

BEGIN 


Select @PN=Count(ParameterName) from setup where 

@SAPProcessedDate<>parametervalue and parametername='CommunicatorLastRun' 

IF @PN = 0 

    Select 1/0 

Else 

Select 'Communicator Not Running' AS ParameterName 


END 
0

东西我已经找到了工作,这是非常容易实现的是简单地包括查询中按行数划分的额外字段。如果计数为零,则会得到一个除零错误,并且不发送电子邮件;如果计数至少为1,那么报告运行正常,并且电子邮件发送出去。关于这项技术的

SELECT 
    [table].[id] 
    ,(1/COUNT(id)) 
FROM [table] 
WHERE [table].[id] > @Parameter 

注意的一点是它确实增加了一些额外的开销,所以如果你希望非常大的数据集的可能性,它可能并不合适。