繁体   English   中英

数据驱动订阅 SSRS 标准版 2008

[英]Data Driven Subscriptions SSRS Standard Edition 2008

我对 MSSQL 和 SSRS 还很陌生。

我正在尝试在执行以下操作的 MSSQL 2008 标准 SSRS 中创建数据驱动订阅。

将报告结果通过电子邮件发送到报告中找到的电子邮件地址。 每天跑步

例如:

Select full_name, email_address from users where (full_name = 'Mark Price')

这将使用 email_address 列来确定向谁发送电子邮件,这也必须适用于具有多个电子邮件地址的多个结果。

我正在考虑这样做的方式是订阅运行查询,如果没有找到结果,那么什么也不会发生。 但是,如果找到结果,则报告会更改订阅表中的行,以在下一分钟左右再次运行报告,并在结果中找到正确的电子邮件信息。 这是一个愚蠢的想法吗?

我发现了几篇博文声称这是有效的,但我无法理解他们的代码,无法知道它的作用。

那么,关于如何解决这个问题的任何建议,或者您是否可以建议一些已经在互联网上提供的简短描述?

我已经在 SQL Server Standard 上实现了这样的东西,以避免为 Enterprise 付费。 首先,我构建了一个名为“Schedule a DDR”(数据驱动报告)的报告。 该报告具有以下参数:

要计划的报告:满足数据测试时要触发的 SSRS 报告(包括文件夹)的名称。 例如“/Accounting/Report1”。

参数集:将用于查找要在报告中使用的参数的字符串。 例如“ABC”。

检查是否应运行报告的查询:将返回单个值(零或非零)的 SQL 查询。 零将被解释为“不运行此报告”

电子邮件收件人:以分号分隔的电子邮件收件人列表,这些收件人将收到报告(如果运行)。

请注意,“安排 DDR”报告是我们在此处实际运行的报告,它会将其输出发送给我; 它的作用是运行另一个报告——在本例中它是“/Accounting/Report1”,它是需要这些电子邮件地址的报告。 因此,“计划 DDR”并不是真正的报告,尽管它是按计划进行并运行的——它是一个构建和运行报告的小工具。

我在 SQL 中还有一个表定义如下:

CREATE TABLE [dbo].[ParameterSet](
            [ID] [varchar](50) NULL,
            [ParameterName] [varchar](50) NULL,
            [Value] [varchar](2000) NULL
) ON [PRIMARY]

每个参数集——在本例中为“ABC”——在表中都有一组记录。 在这种情况下,记录可能是 ABC/placecode/AA 和 ABC/year/2013,这意味着 ABC 中有两个参数:placecode 和 year,它们的值分别为“AA”和“2013”​​。

SSRS 中“安排 DDR”报告的数据集是

DDR.dbo.DDR3 @reportName, @parameterSet, @nonZeroQuery, @toEmail;

DDR3 是一个存储过程:

CREATE PROCEDURE [dbo].[DDR3] 
   @reportName            nvarchar(200),
   @parameterSet   nvarchar(200),
   @nonZeroQuery   nvarchar(2000),
   @toEmail        nvarchar(2000)
AS
BEGIN
   -- SET NOCOUNT ON added to prevent extra result sets from
   -- interfering with SELECT statements.
   SET NOCOUNT ON;

   select ddr.dbo.RunADDR(@reportName,@parameterSet,@nonZeroQuery,@toEmail) as DDRresult;

   END

RunADDR 是一个 CLR。 这是它如何工作的概述; 如果有人需要,我可以发布一些代码。

  • 设置凭据
  • 选择 ParameterSet 表中的所有参数,其中 parameterSet 字段与从 Schedule A DDR 报告传入的参数集名称匹配
  • 对于每个参数
    • 设置参数数组以保存在检索到的行中定义的参数。 (这就是您使用表格动态填充参数的方式。)
  • 结束于
  • 如果有从 Schedule A DDR 传入的“nonZeroQuery”值
    • 然后运行 ​​nonZeroQuery 并在返回零行时退出。 (这是在不满足某些条件时阻止查询执行的方法;任何返回其他零值的查询都将允许报告运行)
  • 万一
  • 现在让 SSRS 运行报告,使用我们刚刚从表中提取的参数,以及从 Schedule A DDR 传入的报告名称
  • 获取输出并将其写入本地文件
  • 将文件通过电子邮件发送到从 Schedule A DDR 传入的任何电子邮件地址

这让我回到了我的旧工作,在那里我使用 SQL Server 2005 Enterprise 开发盒上的数据驱动订阅编写了一个问题的解决方案,然后我沮丧地发现我们的客户只有标准版。

我当时为这篇文章添加了书签,它看起来非常有前途,但在我有机会实施它之前,我最终换了工作。

当然,它是针对 2005 年的,但其中一条评论似乎表明它在 2008 年也有效。

R-Tag支持 SQL Server 标准版的 SSRS 数据驱动报告

我不会创建订阅来修改订阅表,而是将该部分放在其他地方,例如在 SQL 代理中。 但想法是一样的。 一条定期运行的 SQL 可以在订阅表中添加或更改行。

一个“SSRS订阅表”的谷歌返回了一些有用的结果: 这是一篇基于2005年的文章,但2008年的原则应该是一样的: 这篇文章是针对2008年的,也非常接近您所描述的。

我只会一一查看订阅表中的字段,并确定每个字段需要什么。 尝试手动创建一行(手动插入语句)以向自己发送订阅。

您可以使用第三方解决方案 SQL-RD 来创建和运行数据驱动的计划,而无需升级到 SQL 企业。 它还带有基于事件的调度(触发事件报告,包括数据库更改、文件更改、收到的电子邮件等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM