Sql server 2008 停止在SSRS 2008 R2数据驱动订阅中发送空报告
我正在使用SSRS 2008 R2中的数据驱动订阅来安排一些报告 无论生成的报告是否为空,报告仍会发送给收件人。这是一个很长时间以来普遍存在的问题,老实说,我在论坛上看到的建议并没有完全奏效 我尝试过的其中一个建议是,我创建了一个隐藏参数,并将其设置为“默认值”选项卡中主数据集的一个字段。如果报表为空,则抛出错误;如果报表设计器中有一些数据要显示,则生成报表。但是,当我计划此报告时,它会要求我提供默认值,如果不提供该值,我将无法完成计划程序向导。如果我提供任何默认值,空报告仍然会被发送。但与此不同的是,应该为空报告抛出一个错误,并且不应该发送它们 以前有人用过这种方法吗?如果是这样的话,你能告诉我这里缺少什么吗 我只是想知道你们是否有解决这个问题的理想方案 非常感谢你的帮助Sql server 2008 停止在SSRS 2008 R2数据驱动订阅中发送空报告,sql-server-2008,reporting-services,ssrs-2008,Sql Server 2008,Reporting Services,Ssrs 2008,我正在使用SSRS 2008 R2中的数据驱动订阅来安排一些报告 无论生成的报告是否为空,报告仍会发送给收件人。这是一个很长时间以来普遍存在的问题,老实说,我在论坛上看到的建议并没有完全奏效 我尝试过的其中一个建议是,我创建了一个隐藏参数,并将其设置为“默认值”选项卡中主数据集的一个字段。如果报表为空,则抛出错误;如果报表设计器中有一些数据要显示,则生成报表。但是,当我计划此报告时,它会要求我提供默认值,如果不提供该值,我将无法完成计划程序向导。如果我提供任何默认值,空报告仍然会被发送。但与此不
关于这里是我的解决方法:通过存储过程检索数据,并将以下代码放在最后
IF @@ROWCOUNT = 0 RAISERROR('No data', 16, 1)
查看更多详细信息。令我惊讶的是,已经过去6年了,MS却无法找到解决方案:3种方法可以实现这一点。根据查询结果很容易更改订阅的行为。只需查询您的数据库以了解情况,例如在进程日志中,或者只需从您必须运行的过程返回状态,并使用if语句 例如:
请使用如下脚本停止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
我发现一个很容易实现的方法是在查询中包含一个额外的字段,该字段除以行数。如果计数为零,则您会得到一个除以零的错误,并且不会发送电子邮件;如果计数至少为1,则报告运行正常,电子邮件发出
SELECT
[table].[id]
,(1/COUNT(id))
FROM [table]
WHERE [table].[id] > @Parameter
关于这项技术的一个注意事项是,它确实增加了一些额外的开销,因此,如果你认为可能会有非常大的数据集,那么它可能不合适。这里的亡灵巫术,但是Wayne的回答非常有助于为我指出正确的方向,因此我不得不添加此调整,它仅在每日数据刷新后运行报告。数据刷新过程不在我的控制范围内,但我可以读取其成功/失败状态
DECLARE @processSuccess TINYINT = 0;
SET @processSuccess =
(
SELECT TOP 1 1
FROM processesTrackerTable
WHERE ID = 25
AND State = 'Success'
AND CAST(RunEndDtm AS DATE) = CAST(GETDATE() AS DATE)
ORDER BY RunID DESC
)
然后将此行添加到常规查询的WHERE子句中:
AND 1 = 1/COALESCE(@processSuccess, 0)
这将直接从SSRS查询强制报告失败,这样用户就不会得到陈旧或空白的报告
AND 1 = 1/COALESCE(@processSuccess, 0)