日期:2013-02-03 浏览次数:20660 次
本文包含了Microsoft® SQL Server™报表服务报表设计的技巧和最佳实践。本文提供一些基本的设计问题和一些报表服务的功用。
关于这篇文档
从使用数据控件,到使用什么格式,到如何分发报表,报表制造者面对着很多种选择。Microsoft® SQL Server™ 报表服务提供了丰富的报表设计和格式的支持,从基于纸介质表格报表到带有图片和钻取功用的交互式报表
这篇文档包括了报表制造和设计中的指点、建议和技巧。本文档的目的在于解释普通性的问题并对初学者提供指点建议。报表服务联机丛书提供了报表的制造和设计的丰富资源,并且详细的描述了报表的设置和可用功用及参数。
本文适用于初学者和有一些经验的报表制造者。报表制造的初学者也可以从报表设计章节中得到协助。
其他信息来源
本文不包含全部的报表服务的信息。如果希望获取详细的产品信息,请查看产品文档和在http://www.microsoft.com/sql/reporting/ 中可用的在线资源。
产品版本
虽然本文基于Microsoft t® SQL Server™ 2005报表服务,报表设计的相关信息也适用于晚期版本的报表服务。
简介
Microsoft® SQL Server™ 报表服务是一种完整的报表工具。在使用报表服务中,你可以设计和发布多种款式的报表,从简单表格到带有图形和交互式连接的在线自在表单。报表服务可以将报表渲染成用户指定的多种格式,包括HTML、PDF、Excel和图像格式。
对于各种设置和选择对于报表制造者在选择报表规划是需求处理的问题。这篇文章提供了一些指点方针是用户在做选择是愈加容易并解答了一些常见的问题。
制造工具和RDL
报表服务提供了多种制造报表的方法。SQL Server 和Microsoft® Visual Studio® 2005 都包括了图形化的报表设计工具。SQL Server 2005报表服务提供了Report Builder工具协助业务人员设计报表。也有其他的开发工具可以创建报表服务的报表格式。
无论我们使用哪一种制造环境,所有的报表定义都是用报表定义言语(RDL)格式存储,RDL是一种地下的XML定义报表的格式。这样可以直接编写RDL或者创建自定义工具生成相应格式。报表制造者可以使用图形化的制造工具编辑已存在的RDL文件。
在样例中展现特殊的技术时,文章提取了实现该功用的部分RDL。
在报表服务的网站上http://www.microsoft.com/sql/reporting/可以获取完整的RDL规范。
报表设计概念
本节描述了影响报表设计和规划的关键要素。如果你是刚刚接触报表服务,这里的内容会对你有协助。所有的这些话题在SQL Server 联机丛书中都有详尽的描述。
在设计报表服务中的报表时,你定义了数据并制定在页面上的陈列。虽然这个过程听起来很基础,报表服务还是提供了下列特性:
◆支持4种不同的数据区域:列表,表格,矩阵和图表。
◆提供了例如文本框,图片,连接,矩形和子报表等一些列控件。
◆用户可以通过参数,条件过滤,用户端排序,钻取和文档结构图来实现交互功用。
◆报表可以被渲染成各种格式,包括HTML,Excel,PDF,图像,XML和逗号分隔符 (CSV) 。
你做的关于每一个关键区域的决策都会影响最重的显示效果和报表功用。接下来的章节将提供影响设计和规划效果的要素。
数据区域
在我们的报表中我们第一个选择就是选择数据区域类型。报表服务提供了下列数据区域类型:
◆表格
表格通过一行接一行的方式表现数据。列是固定的你无法扩展,但是行可以向下展开。因此,当表格增长时,它将数据向下展开。你也可以在表格内将数据分组。
◆矩阵
A矩阵或者叫交叉表类似于表格,但是行和列都是可以扩展并填充数据的。矩阵可以向外和向下添加其他报表对象。你可以在矩阵中外行和列中嵌套分组。
◆列表
列表适用于创建表单的自在表单数据区域。你可以通过嵌套列表来分组数据。
◆图表
图表是数据的图形表达方式。报表服务提供了多种图表的格式。
你选择的数据区域可能依赖于你使用的数据类型、你希望报表的外观和如何展现报表。例如,要以Microsoft® Excel®方式呈递的报表使用表格比使用列表更适合。
报表项的位置和尺寸
报表有3个次要的区域组成:页眉,页脚和注释。报表服务支持将报表中任意放置报表项。数据区域可以和其它区域并行或通过分组来嵌套。
当设计报表时,理解当报表项增长时如何处理是非常重要的。报表项可以水平或垂直的增长,依赖于反复的片断,内容的尺寸和诸如字体等报表渲染的要素。
当报表项增长时,例如一个表格,它会生成很多相关的报表项。这些报表项会在同一个父容器中。有如下2种方法来控制报表项的挪动:
◆每个报表项为了维护与上边报表项间的最小距离会向下挪动。
◆每个报表项为了维护与左侧报表项间的最小距离会向右挪动。
如果一个报表项增长,它会扩展包含它的容器的边界,容器会顺应所包容的报表项变化尺寸。
如果报表项和其他的报表项堆叠,报表定义中的ZIndex元素决定哪个元素在顶层。ZIndex值高的报表项会置于上层。
这些是一些你可以用来控制报表项的增长和挪动方法的技术。如果需求使用矩形和报表项的分组的信息,请参考本文后面“实用的报表设计技巧”部分。
分页
对于场报表来说关键问题在于如何控制页面的分割。页面通过2个要素控制分割:
◆页面尺寸
◆用户指定对象前后页面分割
页面尺寸
为了控制页面的尺寸,可以通过下列指点设置页面的高度和宽度属性:
◆可以通过报表的PageHeight和PageWidth属性设置渲染后的物理页面格式。
◆例如HTML这样的交互式渲染格式不能渲染物理页面分割。而使用 InteractiveHeight 和 InteractiveWidth 属性创建逻辑的页面分割。
◆有一些渲染格式,例如Excel,不支持页面尺寸。对于这些报表,你将不得不使用页面分割符将报表分割成多个页面。
留意,如果报表的本身宽度比页面宽度大,报表将在水平方向上交叉于多个页面。
页面分割
你可以在矩形,表格,矩阵,列表,图表和分组中的开始或结尾处添加分页符。报表服务会尝试将所有报表项和数据分组保持在同一个页面上。
可以使用报表项中的PageBreakAtEnd和PageBreakAtStart属性指定在报表项之前或之后插入分页符。
子报表
子报表是在报表项中指向另外一个报表。任何报表可以被用于一个子报表,并且你可以设置父报表将要传递到子报表的参数。
但是用子报表时你要留意下列前提:
◆子报表无法和父报表共享数据。报表服务器为分割的报表处理每一个子报表实例,但是这会影响功用。
◆子报表的页眉和页脚会被忽略。
子报表在下列环境中十分有用:
◆当你需求在一个数据区域中从不同数据源嵌套分组。
◆当报表有多个一对多关系的部分。
◆当你需求在多个父报表中重用子报表。
◆当你需求在其他报表内部嵌入一个标准的,独立的报表。
如果报表共享数据,类似表格,矩阵,列表和图表这样的数据区域提供了与子报表同样的功用。然而,它们提供更好的功用。数据区域在并行的规划中提供了比子报表更好的任务方式。
表达式和函数
报表制造者可以在报表中使用表达式数据的外观,更改报表项的属性或控制数据的获取。本文的技巧章节提供了一些使用表达式的设计样例。
你可以在表达式中使用Microsoft® Visual Basic®函数。在表1中显示了一些常用的函数。
表1
Visual Basic 函数 | 结果 |
Today() | 前往当前日期。 |
DateAdd() | 基于单一参数提供一段日期。 |
Year() | 显示指定日期中的年份。使用它分组日期或做为一系列日期的标签。 |
Month() | <