【问题标题】:SSRS : Embed a @Year parameter in a querySSRS:在查询中嵌入 @Year 参数
【发布时间】:2014-02-11 01:05:38
【问题描述】:

我有一个使用 @Year 参数的 SSRS 报告,该参数由用户在运行时选择。

到目前为止,很好,但是 Data set Properties 部分中的 SQL 包含硬编码的日期 '2010-08-31' ,但是,它的年份部分需要与 @Year 参数相同用户选择。换句话说,如果您在 2010 年运行该报告,结果将是正确的,但如果您现在(在 2014 年)运行它则不是。

目前的 SQL 是(最低要求):

SELECT  DateDiff(Year, birth_dt, '2010-08-31')
--Date of Start of Academic Term
FROM    table99
WHERE  acad_period = @Year

...所以我的问题是,用@Year 值代替“2010”的正确语法是什么?

编辑:请注意,该年的实际格式是(例如)12/13、13/14

【问题讨论】:

标签: sql sql-server reporting-services


【解决方案1】:

你可以换行

SELECT DateDiff(Year, birth_dt, '2010-08-31')

SELECT DateDiff(Year, birth_dt, @Year+'-08-31')

对当前日期做同样的事情

SELECT DateDiff(Year, birth_dt, DATEPART(yyyy, getdate())+'-' + DATEPART(mm, getdate()) +'-'+DATEPART(dd, getdate()))

【讨论】:

    【解决方案2】:

    根据您在评论中的澄清,如果您传入“12/13”,您的查询将是这样的。

    SELECT DATEDIFF(Year, birth_dt, '20'+LEFT(@Year,2) + '-08-31')
    FROM    table99
    WHERE  acad_period = @Year
    

    【讨论】:

      【解决方案3】:

      由于您的年份参数不是一个简单的年份值,而是一个类似“13/14”的字符串,大概意思是 2013/2014 学年,我肯定会在查询之外处理它。

      使用以下公式将计算得到的 @TermStart 参数添加到数据集:

      =DateSerial(2000 + CInt(Split(Parameters!Year.Value,"/")(0)),8,31)

      (当然,只要您不希望有任何日期早于 2000 年)

      然后您可以像这样在查询中使用@Year 和@TermStart 参数:

      SELECT  DateDiff(Year, birth_dt, @TermStart)
      --Date of Start of Academic Term
      FROM    table99
      WHERE  acad_period = @Year
      

      但正如我在上面的评论中提到的,这不是计算年龄的正确方法。有几种方法可以做到这一点。我最喜欢的是这个:

      SELECT  datediff(hour,birth_dt,@TermStart)/8766
      --Date of Start of Academic Term
      FROM    table99
      WHERE  acad_period = @Year
      

      【讨论】:

      • 感谢您的回答,但这不起作用。 @Year 参数实际上是一个字符串,例如 12/13、13/14 等。我很抱歉——我的错——我应该在最初的帖子中说明这一点。
      • 在这种情况下,公式为=DateSerial(CInt(Parameters!Year.Value),8,31)。在任何情况下,在查询中连接都可以正常工作。我尽量避免更改查询中的参数,因为我觉得这会使它更难理解。更改单独的参数可以让我用参数名称传达更改的含义。
      • 哦,我现在看到 year 参数实际上不仅仅是一年。我会更新我的答案。
      • 再次感谢,但我不确定如何添加计算参数(我是新手)...可以在 SQL 中使用,类似于您最初的 SELECT 语句已发布?)再次感谢!
      • 您可以根据需要将其添加为报告参数。只需将其标记为隐藏和内部,这样就不会提示用户。确保它位于列表中的 @Year 参数下方。将表达式放在参数的默认值中。并像任何其他参数一样在查询中使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      相关资源
      最近更新 更多