SQL Server 2005 报告服务:将列显示为行






2.43/5 (5投票s)
本文介绍了一种使用 SQL 报表服务创建报表的解决方案,该报表将列数据显示为行;此外,这些列会为每一数据行水平重复。文章还提供了一个使用“Northwind”数据库作为数据源的示例源项目。
图 1
引言
本文介绍了一种使用 SQL 报表服务创建报表的解决方案,该报表将列数据显示为行;此外,这些列会为每一数据行水平重复。文章还提供了一个使用“Northwind”数据库作为数据源的示例源项目。
背景
问题:给定一个数据集,如何使用 SQL Server 2005 报表服务生成报表,以便为相应的数据行生成一个矩阵列。
示例
给定数据集(如图表左列所示,见下表),使用 SQL Server 2005 报表服务显示报表的解决方案,类似于下表右侧所示。
给定的数据集 |
所需的报表格式 |
|||||||||||||||||||||||||||||||||
|
» 报表 |
|
一些现有的解决方案包括:
- 使用 unpivot 关键字更改 SQL 查询以将列转换为行:(类似于矩阵转置函数)
此方法的缺点是显示的行数可能远小于转置的行数,并且 SQL 查询复杂。 - 使用 MS SQL Server 2008 tablix 控件
使用 MS SQL Server 2008 可能并非总是可行。
不清楚如何结合上述解决方案,并且找不到类似本文提出的解决方案。因此,本文旨在通过示例为特定问题提供一个简单的解决方案。
程序说明
解决方案通过一个示例进行解释。主要思想是使用一个带有汇总列分组的报表元素:矩阵。
(请参考其他地方了解使用 Visual Studio 创建报表项目的基本知识)
0. 创建报表项目
创建一个报表项目,并在项目中添加一个新报表。
1. 创建数据源
图 2 显示了示例中使用的数据源以及连接到“Northwind”示例数据库后获得的结果(数据集)。第一步是为报表创建所需的数据集。
图 2
2. 创建报表定义
下面显示的报表定义并不完全如图 1 所示。它经过轻微调整,以显示报表中嵌入的各种报表元素的区别。如图 1 所示的报表可以通过重新排列报表元素(也包含在源代码中)获得。
图 3(下文所示)显示了此示例项目中使用的报表元素。
图 3
创建以下报表的步骤
步骤 0:创建如图 2 所示的数据集。
- 将报表元素:矩阵添加到报表中(从工具栏将矩阵报表元素拖到报表上)。
(请参见图 4 以了解矩阵元素)
图 4 - 将数据集:客户 ID 添加到列组。
将“数据集”中的数据集:客户 ID 列拖到矩阵元素的“列组”中(拖到图 4 中标记为style='font-family: Verdana'>Columns 的单元格)。 - 将报表项:列表添加到“数据”单元格中(添加到图 4 中标记为Data 的单元格,列表显示在图 3 中粗栗色边框内)。
- 向在步骤 3 中添加的列表中添加四个报表元素:文本框。根据需要重新排列文本框。
(将文本框元素从工具栏拖到上面的“数据”单元格) - 将数据集:公司名称 拖到第一个文本框中。
继续将其他数据集列添加到其他文本框中。 - 将“行”的宽度设置为 0(另请参见图 3 以获取说明)。
- 复制四个文本框(在步骤 4 中添加)并将其粘贴到矩阵外部,以添加行标签(图 3 中的第一组列)。
将第一个文本框的文本更改为“客户名称”,并对其他标签进行类似更改。
现在,如果一切顺利,您的预览应该会显示如图 5 所示的报表。
图 5
现在可以重新排序报表元素,以获得类似于图 1 所示的报表。(另请参见源代码)