【问题标题】:SQL Server Reporting Services Subscription with dynamic parameters具有动态参数的 SQL Server Reporting Services 订阅
【发布时间】:2011-10-26 18:13:56
【问题描述】:

我在 SQL Server Reporting Services 中有一个自定义报告。 此报告有一些参数,例如:请求的开始日期、请求的数据到、捐赠者。

我想设置一个预定的电子邮件。 但是我想将“请求的日期开始”值分配给=(当前日期时间-1 个月) 并将“请求的日期结束”值分配给 = 当前日期时间

关于如何做到这一点的任何提示?

【问题讨论】:

    标签: sql-server-2005 reporting-services


    【解决方案1】:

    这很简单,看我的回答:

    SQL Server: calculating date ranges

    您最终要做的是将这些计算创建为数据集,然后在订阅本身中使用“使用默认值”复选框:

    【讨论】:

    • 您甚至不需要为此设置数据集。您可以在参数中提供默认值作为公式。
    • @JamieF - 没错,但使用数据集,它更加可重用和灵活。使用数据集,您可以在多个报告中重复使用此代码。
    • 我看不出使用数据集如何更灵活。它需要访问同一个数据库,而公式可以跨数据库和服务器剪切和粘贴。
    • @EricNess - 当您需要日期等参数时,我链接到的帖子比硬编码某些函数或公式更灵活。它可以处理任何类型的日期,例如(月初、月底、周开始、周结束、一年中的最后一天、一年中的第一天等等)。
    • @EricNess 默认公式对我来说看起来很棒。你能用参数中使用的公式发布答案吗?
    【解决方案2】:

    编写一个存储过程,从存储过程中的sql获取如下:

    select @FileName  as FILENAME, @PATH as PATH, 'EXCEL' as RENDER_FORMAT , 'Overwrite' as WRITEMODE, 
    'True'  as FILEEXTN , 'null' as USERNAME, 'null' as PASSWORD
    

    从订阅中调用 proc

    阿尼尔·马丹

    【讨论】:

    • 如何从订阅中调用它
    【解决方案3】:

    我遇到了类似的问题。我使用一组初始参数创建了订阅并设置了运行时间。然后我创建了一个存储过程和一个作业,以在订阅的计划运行时间之前运行存储过程。根据您的需要,您的日期数学将与我的不同。 然后我将参数设置复制到记事本,找到我需要更改的部分并将它们放在自己的行中。然后将它们放入存储过程中,如下所示。

    UPDATE ReportServer.dbo.Subscriptions
    SET Parameters = 
    (SELECT '<ParameterValues><ParameterValue><Name>Summary</Name><Value>PODETAIL</Value></ParameterValue><ParameterValue><Name>requisitioner_erp_user_id</Name><Value>51</Value></ParameterValue><ParameterValue><Name>requisitioner_erp_user_id</Name><Value>125</Value></ParameterValue><ParameterValue><Name>date_range_type</Name><Value>3</Value></ParameterValue><ParameterValue><Name>po_date_end</Name><Value>'
    +
      (SELECT FORMAT(DATEADD(wk, DATEDIFF(wk, 1, GETDATE()), -1), 'MM/dd/yyyy') AS po_date_end)
     +
     '</Value></ParameterValue><ParameterValue><Name>po_date_start</Name><Value>'
     +
      (SELECT FORMAT(DATEADD(wk, DATEDIFF(wk, 0, GETDATE()) - 1, 0), 'MM/dd/yyyy') AS po_date_start)
     +
     '</Value></ParameterValue></ParameterValues>'
    )
    WHERE ReportServer.dbo.Subscriptions.SubscriptionId IN ('B6645FD3-DE27-4551-8331-C0135305CC79')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多