【问题标题】:Create multiple report rows from single row of data从单行数据创建多个报表行
【发布时间】:2012-03-06 22:48:47
【问题描述】:

有人要求我创建一个报表,该报表按 SQL 数据库中单行的多列中的值分组。例如

Employee Name | Type1Column1 | Type1Column2 | Type2Column1 | Type2Column2
John Doe      | 0.00         | 10.00        | 20.00        | 20.00

Report Output

Name          | Type      | Total
John Doe      | Type1     | 10.00
              | Type2     | 40.00

我希望你明白这个想法,不,我没有设计表格,不,我不能改变它,但我可能能够调整产生输出的存储过程......

我尝试了一些想法,但不知所措;我觉得需要某种经过计算的东西来分组,但我以前从未遇到过这种情况,因为我一直自己设计数据仓库和多维数据集。

有谁知道我如何在 SSRS 2008R2 中实现这一点?

提前致谢。

【问题讨论】:

  • 每种类型的列是否总是固定的,类型是否提前知道? IE。在您的示例中,数据集是否总是有Type1Column1Type1Column2Type2Column1Type2Column2?如果是这样,那么您不需要对这些进行分组,您只需在报告中添加另一个详细信息行并将报告中的字段相加即可。
  • 数据列的数量始终相同 (5 x 7),而且您知道它们提前存在。我还是不太明白你的意思?您的意思是在每个详细信息行(每种类型一个)中重复 John Doe 列,然后隐藏没有数据的行吗?即该类型的总数为零?

标签: tsql reporting-services ssrs-2008 ssrs-grouping


【解决方案1】:

您能否将 UNPIVOT 运算符应用于返回该输出的查询?

select
EmployeeName, 
case
    when Type like 'Type1%'
    then 'Type1'
    else 'Type2'
end TypeCol,
Total 
from (select EmployeeName, Type1Column1, Type1Column2, Type2Column1, Type2Column2
     from storedprocdata ) as f
unpivot (Total for Type in (Type1Column1, Type1Column2, Type2Column1, Type2Column2)
) as u

请注意,派生表 f 正在从名为 storedprocdata 的表中获取数据。此外,主 select 语句中的 case 语句允许按您想要的不同类型显式地对您拥有的列进行分组。

然后,您可以对 SSRS 报告中的“总计”列进行汇总。

【讨论】:

  • 有趣的想法;我听说过 UnPivot 语句,但从未使用过;我相信你会明白,在现实生活中,数据集比我的例子复杂得多,但我会试一试,看看我能不能让它工作——谢谢。
【解决方案2】:

unpivot 运算符应该更灵活,但是(扩展 Jamie F 对问题的评论)可以通过设置 5 个详细信息行(每种类型一个)并将 Total 列的表达式设置为就像:

=Fields!Type1Column1.Value+ Fields!Type1Column2.Value+ Fields!Type1Column3.Value+
 Fields!Type1Column4.Value+ Fields!Type1Column5.Value+ Fields!Type1Column6.Value+
 Fields!Type1Column7.Value

- 用于 Type 1 详细信息行,随后的每个 Type 详细信息行都有类似的表达式。

【讨论】:

  • 听起来很愚蠢,但我怎么能让报告看起来像上面那样;如果我添加 5 条详细信息行,标题(即 John Doe)和详细信息行之间会有一个小“步骤”。我想我可以在每个详细信息行上重复名称,然后隐藏总添加为 0 的任何行。抱歉 - 我正在输入,而我正在思考!
  • @JohnKattenhorn:不要在员工姓名上包含组标题行 - 相反,将员工姓名放在五个详细信息行中的第一行(并将其他四个详细信息行单元格保留为列名称空)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多