根据参数显示按周或按月分组的SSRS报告数据

时间:2014-08-22 19:11:26

标签: sql sql-server reporting-services

我正在尝试实现在SSRS报告上显示的适当分组,该报告由SSRS中定义的'每周'或'每月'参数驱动(不是sproc的参数)。为此,我在名为“Date”的字段的类别组表达式中使用了以下格式(格式为'2014-03-01'作为示例):

=IIF(
  Parameters!date_range.value="Weekly", 
  DATEPART("week", Fields!Date.Value),  
  DATEPART("month", Fields!Date.Value)
)

这会导致以下异常:

  

“Date”字段的Value表达式包含错误:Argument   'DateValue'无法转换为'Date'类型。   (rsRuntimeErrorInExpression)。报告期间发生错误   处理。 (rsProcessingAborted)

为什么?

4 个答案:

答案 0 :(得分:3)

实现这一目标的最简单方法是首先编写您的查询,然后像这样提取结果。

SQL Server查询

SELECT  DATEPART(MONTH, Date_Column) AS [Monthly]
       ,DATEPART(WEEK,  Date_Column) AS [Weekly]
       ,SUM(Some_Column)             AS Total
FROM Table_Name
GROUP BY DATEPART(MONTH, Date_Column) 
        ,DATEPART(WEEK,  Date_Column)

SSRS报告

添加Matrix数据区域。将Total列拖放到DATA

创建GROUP ON Text类型的参数,并提供值

1) Weekly
2) Monthly

现在在ROW GROUPS窗格的下方,右键单击唯一可见的行组并转到GROUP PROPERTIESGROUP ON部分中放入以下表达式。

=IIF(Parameters!Groupby.Value = "Monthly", Fields!Monthly.Value, Fields!Weekly.Value)

在数据区域ROWS部分使用完全相同的表达式。

对于列名,您可以使用以下表达式...

=IIF(Parameters!Groupby.Value = "Monthly", "Monthly", "Weekly")

你很高兴。

重要提示

SSRS是一种很酷的数据表示工具,在数据处理方面并不那么酷,为了获得更好的性能,可以更接近源(数据库,SQL Server)进行各种数据处理。

所有演示文稿都应在SSRS上处理。

答案 1 :(得分:0)

尝试类似:

Format(Fields!date.Value,"yyyy-MM-dd")

这是SQL Server 2014吗?

Link 在SQL Server 2014中,DATEPART隐式地将字符串文字转换为datetime2类型。这意味着当日期作为字符串传递时,DATEPART不支持格式YDM。您必须将字符串显式转换为datetime或smalldatetime类型才能使用YDM格式。

答案 2 :(得分:0)

所以关注@nshah建议将表达式转换为:

=IIF(
  Parameters!date_range.value="Weekly", 
  DATEPART("week", format(Fields!Date.Value,"yyyy-MM-dd")),  
  DATEPART("month", format(Fields!Date.Value,"yyyy-MM-dd"))
)

答案 3 :(得分:0)

我建议使用DATEPART,但我发现自己SSRS中的DATEPART并不总是像DATEPART (SSIS Expression)中所描述的那样工作。以下是一些具有特定语法的示例:

  • = DATEPART(“yyyy”,Fields!Date.Value)一年。
  • = DATEPART(“m”,Fields!Date.Value)月份。
  • = DATEPART(“ww”,Fields!Request_Date.Value)一周。