【问题标题】:do not send report if there is no data in the table for specified report date如果指定报告日期的表格中没有数据,则不发送报告
【发布时间】:2019-03-27 13:39:33
【问题描述】:

我创建了一个 SSRS 报告,还创建了一个订阅以在电子邮件中附加该报告。这工作得很好。

我必须在报告中传递报告日期参数才能捕获任何数据。对于该特定日期,如果有记录则发送报告,否则不发送报告。

我已经尝试过数据驱动订阅,并在编辑数据集中给出了以下查询,并将其作为 TO 电子邮件 ID 字段传递。

select 'aaa.bbb@xxx.com' EmailID
where 1<=(select count(1) records from dbo.table)

在参数字段中,我正在传递日期参数。

我关注了这个视频 https://www.youtube.com/watch?v=TOdKNWVes5g

如果该指定日期有任何行,则它会发送到上述电子邮件 ID,否则不应发送,因为没有检索到数据。 然而,在这两种情况下,电子邮件都会与报告一起发送。如果有数据,则报告有数据,否则报告为空。

如果没有该日期的数据,我根本不想发送报告。

我在这里缺少什么? 任何帮助表示赞赏!

【问题讨论】:

    标签: reporting-services ssrs-2012


    【解决方案1】:

    这里你必须对数据驱动订阅的查询进行更改

    DECLARE @Date AS DATETIME = '2018-01-01'
    
    select 'aaa.bbb@xxx.com' EmailID
    where (select count(*) from dbo.table 
    WHERE [DateColumn] >= @Date) > 0
    

    where子句中的查询需要和你绑定报表时使用的报表数据集一致。

    您必须在订阅的 ToEmail 部分使用此数据集值。

    【讨论】:

    • 这不起作用..我仍然收到附有报告的电子邮件,但没有记录时没有记录。如果有记录,则数据在报告中
    • 如果我特别给出没有记录的日期,那么我不会收到任何电子邮件。 select 'aaa.bbb@xxx.com' EmailID where 1
    • 您也必须将@Date 作为报告的日期参数传递。所以理想情况下,您的报告参数也将来自数据集值。
    • 在订阅数据集中,您必须编写在报告中使用过的相同 SQL 查询,但您只需要获取记录数而不是列。因此,您必须在订阅数据集查询中声明日期过滤器值,并且您必须将日期过滤器作为参数传递给 SSRS 报告。
    【解决方案2】:

    你需要为你的数据驱动订阅数据集做这样的事情:

        DECLARE @Date AS DATETIME = '2018-01-01'
    
    
        if not exists(
        select top 1 *
        from dbo.table 
        WHERE [DateColumn] >= @Date) 
    
     raiserror ('Subscription need not run!',16,1)
    
     else
        select 'aaa.bbb@xxx.com' EmailID
        from dbo.table 
        WHERE [DateColumn] >= @Date
    

    如果没有任何内容并且订阅失败,这基本上不会返回任何数据.. 没有生成电子邮件.. 如果 if 条件通过,那么其他一切都会按照您的计划运行。

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多