【问题标题】:Show data on SSRS report grouped week or month based on parameter在 SSRS 报告上显示数据,根据参数按周或月分组
【发布时间】:2014-08-22 19:11:25
【问题描述】:

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

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

这会导致以下异常:

“日期”字段的值表达式包含错误:参数 “DateValue”无法转换为“Date”类型。 (rsRuntimeErrorInExpression)。报告过程中发生错误 加工。 (rsProcessingAborted)

为什么?

【问题讨论】:

  • 您有 dateValue 字段作为日期时间数据类型吗?你能转换成日期时间类型再试一次吗?

标签: sql sql-server reporting-services


【解决方案1】:

实现这一点的最简单方法是首先编写您的查询,该查询会像这样提取结果。

SQL 服务器查询

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 报告

添加一个矩阵数据区域。将Total 列拖放到DATA

创建一个GROUP ONText类型的参数,并提供值

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 上处理。

【讨论】:

  • 由于我使用 SSRS 的经验现在大约有 2 周,如果我可以将您的建议应用于图表,我不会完全遵循,我的意思是看起来该解决方案实际上可以提供帮助,但我没有将矩阵作为表示类型?除非我错过了什么……
  • 你用的是什么图表?
  • Line type中的第一个
【解决方案2】:

因此,根据@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 个带有 3 个 sproc 的图表,其中 1 个 SP 不接受 date_range 参数,但返回日期列,我正在强制 SSRS 通过一周或一个月。这就是我对第二张图表的意图,其中第三张图表使用实际接受 @date_range 作为参数的 SP(默认为在 SP 中定义的“每周”)?
【解决方案3】:

尝试类似:

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

这是 SQL Server 2014 吗?

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多