【问题标题】:SSRS Parameter for "pay period"“支付周期”的 SSRS 参数
【发布时间】:2016-10-19 13:14:17
【问题描述】:

有没有办法在 SSRS 中设置一个名为“Pay Period”的参数,只允许选择特定的日期范围?例如,仅允许 09/19/2016 到 09/25/2016,不允许 09/20/2016 到 09/26/2016。任何周一到周日的组合都可以,否则就不行了。

我正在考虑提供这些范围的下拉列表(而不是两个不同的参数),但不确定如何实现。

【问题讨论】:

  • 我认为您可以设置两个参数让用户选择日期范围,但设置隐藏的两个附加参数以验证日期范围并将其传递给您的查询。
  • 我想我以前也这样做过。只是觉得如果你可以对两个日期都做一个参数会很好,但不确定是否可能。
  • 这是可能的,但是您必须创建一个返回每个范围的查询并使用它来填充参数,并且在查询中传递您需要处理值以进行转换的参数在两个带有开始日期和结束日期的 SQL 参数中。
  • 您可以在一个参数中执行此操作的唯一方法是使用带有 09/19/2016 - 09/25/2016 之类的值的数据驱动参数,然后您可以在数据集中相应地处理该参数。
  • 如果您对您的业务有特定的日期定义,即支付周期,那么您应该将它们保存到一个表中并从那里使用它们。因此,您将有一个表格,其中每个支付期有一条记录,其中包含开始日期、结束日期和标签。您从此表中选择以填充您的下拉列表。您在报表查询中加入此表并对其进行过滤。这让人们不必记住特定的日期(并可能把它们搞砸)

标签: sql-server sql-server-2008 reporting-services


【解决方案1】:

我将使用单个参数作为开始日期,并将结束日期计算为过去 6 天(如果需要)。

对于参数,我将为标签创建一个字段,同时为数据使用单个开始日期字段。

参数查询:

DECLARE @START_DATE DATE = '01/01/2016' 
DECLARE @END_DATE  DATE  = '10/31/2016'

;WITH GETDATES AS  
    (  
        SELECT @START_DATE AS THEDATE
        UNION ALL  
        SELECT DATEADD(DAY, 1, THEDATE) FROM GETDATES  
        WHERE THEDATE < @END_DATE  
)

SELECT THEDATE, CONVERT(VARCHAR(10), THEDATE, 101) + ' - ' + CONVERT(VARCHAR(10), DATEADD(D, 6, THEDATE), 101) AS PAYPERIOD
FROM GETDATES 
WHERE DATEPART(WEEKDAY, THEDATE) = 2
OPTION (maxrecursion 0)

这将让用户看到日期范围,但仅将开始日期传递给报告以根据需要使用。

DATE        PAYPERIOD

2016-01-04  01/04/2016 - 01/10/2016

2016-01-11  01/11/2016 - 01/17/2016 

2016-01-18  01/18/2016 - 01/24/2016

【讨论】:

    【解决方案2】:

    我一直使用 2 个参数作为日期范围。您必须确保您的查询考虑到这些参数。我通常使用@StartDate 和@EndDate

    WHERE <columnName> BETWEEN @StartDate AND @EndDate
    

    只要在查询中声明这两个参数就可以了。当您在参数中使用日期/时间数据类型时,您将获得一个不错的日期选择器来使用。这至少每次都对我有用。

    【讨论】:

    • 是的,我之前也完成了基本的开始和结束日期。我正在尝试确定是否可以通过仅接受星期一到星期日的组合来完成,可能通过一对日期参数以外的其他方式。
    猜你喜欢
    • 1970-01-01
    • 2022-07-12
    • 2015-04-21
    • 2013-09-06
    • 1970-01-01
    • 2014-10-09
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多