技术开发 频道

SQL Server 2005报表设计:非常好的实践和指导

    数据区域

    在我们的报表中我们第一个选择就是选择数据区域类型。报表服务提供了下列数据区域类型:

    ◆表格

    表格通过一行接一行的方式表现数据。列是固定的你无法扩展,但是行可以向下展开。因此,当表格增长时,它将数据向下展开。你也可以在表格内将数据分组。

    ◆矩阵

    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() 显示日期中的月份 
Format() 格式化字符串。可以用于格式化日起和数字。
Right(), Left(), and InStr() 返回截取后字符串中的一部分。
Iif 依照评估的表达式,返回2个值中的1个。为了返回3个值中的1个,你可以嵌套Iif函数。

    你可以通过引用适当的装配件在表达式中使用.NET函数。你也可以使用自定义的装配件。如果需要此方面更详细的信息,请查看报表服务联机丛书中”Using Customer Assemblies with Reports”部分。
0
相关文章