时间:2015-09-17 20:48:47

标签: tsql reporting-services ssrs-2008-r2 subscription

我有一份报告必须在当月的第二个工作日发出,所以如果1日有假期,那么它会在3日发出。

我正在考虑使用该月的第二个工作日填充表格并运行此表格中的报告。

如何让报告在下表中的日期值上运行,而不是每天创建一个订阅。

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

2 个答案:

答案 0 :(得分:1)

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

  2. 创建报告订阅以便每天运行。

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

  4. 查询来自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 Server代理作业并找到与JOB_NAME同名的订阅

    2. 要查看订阅,请右键单击并选择属性。

    3. 点击步骤页面

    4. 点击Job-Step list

    5. 的编辑按钮
    6. 编辑exec命令并添加if exists条件,以便仅在该月的第一个工作日运行。


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

答案 1 :(得分:0)

根据您所描述的内容,Data Driven Subscriptions听起来就像是要走的路。这允许您控制何时发送报告,向谁报告以及通过填充数据库中的表来指定所需的任何参数值。但是,此Reporting Services功能仅适用于SQL Server企业版。

如果您没有Enterprise Edition,则可能需要考虑自定义应用程序或使用RS.exe实用程序执行一些VB脚本。