SSRS 订阅日期从 table

SSRS Subscription date from table

我有一份报告必须在每个月的第 2 个工作日发送,因此如果 1 号有假期,则它会在 3 号发出。

我正在考虑用该月的第 2 个工作日填充 table 和来自此 table 的报告 运行。

我如何获得关于下面 table 中日期值的报告 运行,而不是每天创建一个订阅。

  Run Date
  _________
  9/2/2015
  10/2/2015
  11/3/2015
  12/2/2015
  1/4/2016

根据您的描述,Data Driven Subscriptions 听起来是可行的方法。这使您可以控制报告何时发送、发送给谁以及指定通过在数据库中填充 table 所需的任何参数值。但是,此 Reporting Services 功能仅适用于 SQL Server 的企业版。

如果您没有企业版,您可能需要考虑使用自定义应用程序或使用 RS.exe 实用程序编写一些 VB 脚本。

  1. 创建 Table 或视图以确定每个月的第二个工作日。

  2. 每天订阅您的报告 运行。

  3. 接下来使用以下查询识别订阅。

查询取自here

SELECT cat.Name AS ReportName,
        rs.ScheduleID AS JOB_NAME,
        sub.[Description],
        sub.LastStatus,
        sub.LastRunTime
    FROM ReportServer.dbo.[Catalog] cat
        JOIN ReportServer.dbo.Subscriptions sub
            ON cat.ItemID = sub.Report_OID
        JOIN ReportServer.dbo.ReportSchedule rs
            ON cat.ItemID = rs.ReportID
               AND rs.SubscriptionID = sub.SubscriptionID
 WHERE cat.name = 'YourReportName'
  1. 转到 SQL 服务器代理作业并找到与 JOB_NAME

  2. 同名的订阅
  3. 要查看订阅右键单击和 select 属性。

  4. 点击步骤页面

  5. 单击作业步骤列表的编辑按钮

  6. 编辑 exec 命令并将 if exists 条件添加到 运行,仅当它是每月的第一个工作日时。


 IF EXISTS ( SELECT *
                 FROM dbo.SecondBusDayTbl
                 WHERE BusDay = DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) )
 BEGIN
     EXEC ReportServer.dbo.AddEvent @EventType = 'TimedSubscription'....
 END
  1. (可选)您还可以做一件事,而不是每天 运行ning。通过在订阅 sql 代理作业的计划步骤中创建 5 或 7 个不同的计划,仅在每月的前 5 或 7 天编辑计划和 运行。