反正每天都要改变电子邮件订阅的正文吗?

时间:2014-01-08 20:28:05

标签: reporting-services ssrs-2008 report reporting

老实说,我不认为这是可能的,但我想至少尝试一下。我每天都会生成一份报告,该报告每天生成,并根据我在专有程序中执行的交易通过SSRS电子邮件订阅发送给各个人。有些日子实际上没有交易,所以它发送一个空白的Excel文件。我不认为它是原生支持的,所以如果excel文件中没有数据,那么在电子邮件正文中如此骇人地添加消息“今天没有交易”?并且在日子里会说“附加Excel文件中的交易”

有人可以确认一下。这可能吗?还是不?

1 个答案:

答案 0 :(得分:3)

实际上,这本身就是可能的,而且非常棒!您正在寻找的是数据驱动的订阅。您可以通过转到报告管理页面下的订阅选项卡来创建一个。有两种选择:创建订阅和创建数据驱动的订阅。单击Create Data-Driven Subscription。

我为这里的长度道歉,但关于这些事情还有很多话要说!

我无法详细说明这里的所有步骤,因为它可以像你想要的那样深入地设置一个过程;有很多选择! Here是有关数据驱动订阅的MSDN文章,但您会发现它对我们的帮助很小。 Here是关于如何创建一个的TechNet教程,但我认为你会发现它并没有像你想要的那样深入。我只是通过反复试验来学习所有东西。

关于这些问题有很多话要说,但基本上你编写了一个SQL查询来评估数据中的某些内容,因此,为不同的变量赋予订阅不同的值,例如“Comments”(正文)用html编写的电子邮件),“包含报告”(真/假)和“渲染格式”等等。

请务必注意,对于查询返回的每一行,都会发送一封电子邮件。因此,如果您想发送三封交易报告电子邮件,您可能希望确保您的查询返回包含所有相应数据的三行。

对于您自己的启发,这是我的一个驱动报告的查询的编辑副本。您会注意到注释字段很长,因为它需要用html编写。但是只要你能正确地表达它们,SQL就可以处理很长的字符串。

因此,在您的情况下,您可能希望在没有事务时使Include_Report为false,然后将注释更改为关于没有附加报告的原因的正确消息。

此查询的目的是查找服务器问题,如果发现问题,请发送一封电子邮件(不附带报告),告知最终用户将在以后发布。 (我不负责服务器性能以及经常无法及时解决问题的人员。)

您会注意到我为SSRS订阅中的每个输入变量都有一个字段。通过这种方式,我可以根据我梦寐以求的任何脚本控制报告的电子邮件发送方式。它还使设置更容易一些。我还快速构建了一个测试订阅的方法,这样我就可以在没有最终用户的情况下使用它并将其更改为最终用户需要几秒钟。

/*********************************************************/
/*     Change @Testing to 'TEST' to have all emails      */
/*               sent to Christopher Brown               */
/*********************************************************/
/*     Change @Testing to 'PROD' to have all emails      */
/*             sent to normal recipients.                */
/*********************************************************/

Declare @Testing varchar(4) = 'TEST';

With Problems as (

/*Script that looks for hardware failures or anything that would
 cripple the accuracy of the report.*/

)

Select Case
        When @Testing = 'TEST'
        Then 'Just.Me@work.com'
            When @Testing = 'PROD'
            Then 'End.Users@work.com'
        Else 'Just.Me@work.com' 
        End as 'To'
    , Case
        When @Testing = 'TEST'
        Then 'Just.Me@work.com'
            When @Testing = 'PROD'
            Then 'IT.Group@work.com'
        Else 'Just.Me@work.com' 
        End as 'CC'
    , '' as 'BCC'
    , 'Just.Me@work.com' as 'Reply-To'
    , Case
        When @Testing = 'TEST'
            Then '***TEST***'
            Else ''
        End +
        Case
        When /*Problems Indicated*/
            Then '@ReportName - Report Delayed'
            Else '@ReportName for ' + CONVERT(varchar(10),getdate(),101)
        End as 'Subject'
    , 'Normal' as 'Priority'
    , Case
        When /*Problems Indicated*/
            Then 'False'
            Else 'True'
        End as 'Include_Report'
    , 'PDF' as 'Render_Format'
    , Case
        When /*Problems Indicated*/
            Then 'High'
            Else 'Normal'
        End as Priority
    , 'false' as 'Include_Link'
    , Case 
        When /*Problems Indicated*/
            Then '<html><Body><Font Face="Constantia","Times New Roman"><p>This Report could not be created at this time. We will send out an updated Report once the server issues have been resolved. If you have questions, please contact us.</p></Font></body></html>'
            Else '<html><Body><Font Face="Constantia","Times New Roman"><p>Attached is the Report. When the report is run on a Monday, it does one thing.</p><p>Every other weekday, the report does something slightly different. Please note that the report is scheduled to run every weekday, Monday through Friday, regardless of holiday schedules.</p><p>If you have questions about the report, please contact us.</p><p>If the attached report is empty or missing vital information, click <a href="mailto:IT.Group@work.com?Subject=Problem%20with%20Report">here</a> to notify us.</p></Font></body></html>'
        End as 'Comment'

From Problems