Reporting Services 提供了一种基于服务器的新型报表平台,它可以对报表实行集中存储,并且通过缓存和快照等方式来降低对数据库服务器的压力,提高报表服务器的性能。
但是在运行大型报表时,由于大多数浏览器都不能处理超大型文档。例如,几乎可以肯定,在浏览器的一页中不能显示包含 5,000 行数据的报表。所以我们在设计和配置报表的时候,必须设计报表的分页,让报表服务器每次发送一页报表。否则不论是报表的呈现和网络传输都会出现问题。
一般我们可以通过设置分页符来完成分页,也可以设置报表页的大小,让Reporting Service在呈现时自动设置分页符。
但是在运行大型报表时,由于大多数浏览器都不能处理超大型文档。例如,几乎可以肯定,在浏览器的一页中不能显示包含 5,000 行数据的报表。所以我们在设计和配置报表的时候,必须设计报表的分页,让报表服务器每次发送一页报表。否则不论是报表的呈现和网络传输都会出现问题。
一般我们可以通过设置分页符来完成分页,也可以设置报表页的大小,让Reporting Service在呈现时自动设置分页符。
我们可以在矩形框、表、矩阵、列表、图表或组的起始位置或结束位置添加分页符。默认情况下,报表项没有分页符。要在项的起始位置或结束位置添加分页符,可以更改项的 PageBreakAtEnd 或 PageBreakAtStart 属性。
一般的,如果我们想得到大小比较一致的页,我们可以通过让Reporting Services自动分页或者根据记录条数来分页。
设置自动分页非常方便,只须要在“报表”菜单上,单击“报表属性”(如果“报表”菜单不可用,请在报表设计区域内单击后再试。)。然后在“布局”选项卡上,键入页的宽度和高度。宽度和高度的默认单位是根据用户的区域设置来指定的。如果要指定其他单位,请在数字值后面键入一个物理单位指示符,例如 cm、mm、pt 或 pc。
这样当数据内容超过报表页大小时,报表会自动分页。要注意的是,如果要让表头或者其它一些元素在每页都显示的话,请设置这些元素的 RepeatOnNewPage 属性。
有时候,每条记录呈现的高度不一致,我们又希望让每页呈现的记录条数一致,那么我们可以通过记录条数来分页。在通过记录条数分页时,通常是根据记录条数来分组,然后在组的结束位置添加分页符。
我们可以在表、矩阵或者列表中添加一个组,然后在分组表达式中输入=(RowNumber('ContainerName') - 1) / PageSize ( PageSize 用每页所包含的记录条数替代,ContainerName用包含这个组的表、矩阵或者列表的名称替代)。这个表达式是用记录的行号整除分页大小,也就是记录所在的页码数。最后选中“在结尾处分页”,在每个组实例的结尾处放置分页符。
有时候,每条记录呈现的高度不一致,我们又希望让每页呈现的记录条数一致,那么我们可以通过记录条数来分页。在通过记录条数分页时,通常是根据记录条数来分组,然后在组的结束位置添加分页符。
我们可以在表、矩阵或者列表中添加一个组,然后在分组表达式中输入=(RowNumber('ContainerName') - 1) / PageSize ( PageSize 用每页所包含的记录条数替代,ContainerName用包含这个组的表、矩阵或者列表的名称替代)。这个表达式是用记录的行号整除分页大小,也就是记录所在的页码数。最后选中“在结尾处分页”,在每个组实例的结尾处放置分页符。
在分页时我们往往希望显示当前的页数和总共的页数。我们可以利用 Globals 集合的 PageNumber 和 TotalPages 成员。在“报表”菜单上,单击“页眉”或“页脚”,或者在“布局”视图中右键单击设计图面的外部,然后单击“页眉”或“页脚”。然后在页眉或者页脚上放置一个文本框,在文本框的内容中键入这样的表达式:=”第” & Globals.PageNumber & '页 共' & Globals.TotalPages & “页”。
在设计大型报表的时候,虽然我们可以通过使用分页符在呈现报表和查看报表时提高报表性能,但是配置报表时,我们还应该注意,尽量配置报表作为报表执行快照运行。不要为执行报表设置超时值。使用计划确定刷新报表数据的时间,让报表在高峰期以外的其他时间运行。一般不要让大型报表按需运行,因为大型报表执行一般需要较长的时间。而且要注意控制报表的管理权限和浏览权限,以避免用户在报表管理器中运行该报表。如果希望进一步提高大型报表的性能,我们还可以使用订阅使用邮件或者文件共享来传递报表,但是要注意的是,一旦将报表用邮件发出或者放入文件共享区,它就不再受 Reporting Services 的控制和保护。
在设计大型报表的时候,虽然我们可以通过使用分页符在呈现报表和查看报表时提高报表性能,但是配置报表时,我们还应该注意,尽量配置报表作为报表执行快照运行。不要为执行报表设置超时值。使用计划确定刷新报表数据的时间,让报表在高峰期以外的其他时间运行。一般不要让大型报表按需运行,因为大型报表执行一般需要较长的时间。而且要注意控制报表的管理权限和浏览权限,以避免用户在报表管理器中运行该报表。如果希望进一步提高大型报表的性能,我们还可以使用订阅使用邮件或者文件共享来传递报表,但是要注意的是,一旦将报表用邮件发出或者放入文件共享区,它就不再受 Reporting Services 的控制和保护。