【问题标题】:How do I reference a SSRS report parameter in an aggregate function in SQL如何在 SQL 的聚合函数中引用 SSRS 报告参数
【发布时间】:2015-03-18 15:39:49
【问题描述】:

我有一份 SSRS 报告,它汇总了指定日期范围内的数据集。

我想使用报告参数为查询中的聚合函数提供日期范围。这甚至可能吗?

我有使用变量的聚合函数,但我想更改它,以便用户可以在报告运行之前选择日期范围。

下面是原始的工作聚合函数(在整个查询的上下文中 - 我已经删除了查询的不相关部分以避免混淆)。

注意@MonthNum 和@ReportYear 变量被用作COUNT() 函数的标准。我想更改这些变量以报告参数值,但无法解决。

DECLARE @MonthNum int;
DECLARE @ReportYear int;

SET @MonthNum = CASE WHEN (MONTH(GETDATE())=1) THEN 12 ELSE MONTH(GETDATE()) - 1 END;
SET @ReportYear = CASE WHEN (MONTH(GETDATE())=1) THEN 
YEAR(GETDATE())-1 ELSE YEAR(GETDATE()) END;

SELECT
COUNT(CASE WHEN (MONTH(tblInvoices.fldDeliveredDate) = @MonthNum AND
(YEAR(tblInvoices.fldDeliveredDate)) = @ReportYear) THEN tblSessions.fldStudioNo END) 
AS MonthVolume

FROM tblInvoices INNER JOIN
tblSessions ON tblInvoices.fldSesID = tblSessions.fldSesID INNER JOIN
tblSessionCustom ON tblSessions.fldSesID = tblSessionCustom.fldSessionCustomID 
INNER JOIN
tblCompInfo ON tblSessions.fldStudioNo = tblCompInfo.fldStudioNo

GROUP BY tblSessions.fldStudioNo, tblCompInfo.fldCompName
HAVING (NOT (tblSessions.fldStudioNo LIKE '999'))

提前感谢您提供的任何帮助或指导。非常感谢。

戴夫

【问题讨论】:

  • 您需要在报告参数窗口中为您的日期创建 2 个参数,并使用数据集属性窗口将该参数传递给您的查询。

标签: sql reporting-services parameters sql-server-2012 aggregate-functions


【解决方案1】:

我相信您需要类似以下的内容,您需要在 SSRS 中创建参数 @StartDate 和 @EndDate 以便它们输入到查询中:

DECLARE @MonthNum int;
DECLARE @ReportYear int,
    @StartDate date,
    @EndDate date

SET @MonthNum = CASE WHEN (MONTH(GETDATE())=1) THEN 12 ELSE MONTH(GETDATE()) - 1 END;
SET @ReportYear = CASE WHEN (MONTH(GETDATE())=1) THEN 
YEAR(GETDATE())-1 ELSE YEAR(GETDATE()) END;

SELECT
COUNT(CASE WHEN (MONTH(tblInvoices.fldDeliveredDate) = @MonthNum AND
(YEAR(tblInvoices.fldDeliveredDate)) = @ReportYear) THEN tblSessions.fldStudioNo END) 
AS MonthVolume

FROM tblInvoices INNER JOIN
tblSessions ON tblInvoices.fldSesID = tblSessions.fldSesID INNER JOIN
tblSessionCustom ON tblSessions.fldSesID = tblSessionCustom.fldSessionCustomID 
INNER JOIN
tblCompInfo ON tblSessions.fldStudioNo = tblCompInfo.fldStudioNo
Where tblInvoices.fldDeliveredDate between @StartDate and @EndDate

GROUP BY tblSessions.fldStudioNo, tblCompInfo.fldCompName
HAVING (NOT (tblSessions.fldStudioNo LIKE '999'))

【讨论】:

  • 太棒了,这很有意义。谢谢你,我会试一试,让你知道我的进展。
  • 再次感谢克里斯蒂安,这解决了我的问题。传奇! :)
  • 没问题@DaveC 如果您对答案感到满意,那么您可以接受它:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-09
相关资源
最近更新 更多