我正在尝试实现在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)
为什么?
答案 0 :(得分:3)
实现这一目标的最简单方法是首先编写您的查询,然后像这样提取结果。
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)
添加Matrix数据区域。将Total
列拖放到DATA
。
创建GROUP ON
Text
类型的参数,并提供值
1) Weekly
2) Monthly
现在在ROW GROUPS
窗格的下方,右键单击唯一可见的行组并转到GROUP PROPERTIES
在GROUP 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)中所描述的那样工作。以下是一些具有特定语法的示例: