CSDN博客

img haibodotnet

水晶报表性能优化之道

发表于2003/12/2 21:55:00  3230人阅读

目录
一、在数据库服务器端执行纪录选定,只传输筛选后的数据。
1、优势
2、下推记录选定 - 示例
二、按需显示数据,仅在需要的时候获取并显示需要的数据。
1、优势
2、隐藏(深化完成)数据,按需显示……
3、利用按需分配子报表……
三、在数据库服务器端处理分组和排序
1、优势
2、在服务器上执行多数处理并只将有关详细信息推入您的计算机。
四、使用已保存在报表里的数据。
1、优势
2、已保存数据
3、将数据与报表一起保存命令
----------------------------------
一、在数据库服务器端执行纪录选定,只传输筛选后的数据。
1、优势
(1)与数据库服务器的连接时间更短。
(2)从数据库服务器到客户端传输的数据量更少。
(3)从数据库服务器到客户端的传输时间更短。
(4)处理计算机上的报表所需的内存更少。

2、下推记录选定 - 示例
本示例展示编写可以下推到数据库服务器的记录选定公式的好处。

在 Xtreme 示例数据库的订单表中,有 2192 条记录,其中订单日期在 2001 年以前的有 181 条。假设您只想对这些记录制表。一方面,可以使用下面的记录选定公式:
Year ({订单.订单日期}) < 2001

生成的 SQL 查询会将 2192 条记录全部发送至 Crystal Reports,然后记录选定公式将其减少到 181。要了解这一点,单击“数据库”菜单上的“显示 SQL 查询”,您会注意到 SQL 查询没有 WHERE 子句。这是因为 Crystal Reports 无法下推 WHERE 子句中的 Year ( ) 函数。

另一方面,下面的记录选定公式生成相同的报表:
{订单.订单日期} < #Jan 1, 1997#

上面的第二条公式可在数据库服务器上执行,因此可以下推。所生成的 SQL 查询仅将 181 条记录发送到 Crystal Reports。因此,在由 Crystal Reports 对记录选定公式求值时,无须进一步消除记录。单击“数据库”菜单上的“显示 SQL 查询”,您会注意到所生成的 SQL 查询中有 WHERE 子句。

如本示例所示,在改进记录选定公式后,报表的处理速度提高了。在本例中,两个公式生成相同的报表,但第二个公式利用了数据库服务器在处理其数据时可以使用的功能和优化。

提示:    请参阅题为“记录选定性能提示”一节,了解其他有关信息和设置记录选定请求时的限制。

若要了解更多有关编写高效的记录选定公式的信息,务请阅读本节的其余部分:使用增强的记录选定公式。

注意:    如果您不熟悉记录选定公式,可以先从“选择专家”或记录选定公式示例模板开始学起。有关更多细节以及对记录选定的介绍,请参阅选择记录。
----------------------------------
二、按需显示数据,仅在需要的时候获取并显示需要的数据。
1、优势
(1)只传输当前需要的数据。
(2)与数据库服务器的连接时间更短。
(3)从数据库服务器到客户端传输的数据量更少。
(4)从数据库服务器到客户端的传输时间更短。
(5)处理计算机上的报表所需的内存更少。

2、隐藏(深化完成)数据,按需显示……
隐藏(深化完成)结合在服务器上分组 - 示例
以下示例描述了一个典型的制表方案,对于该方案,在服务器上分组可显著减少数据库服务器的不必要的数据传输。

打开示例报表 Group.rpt(位于 Feature Examples 文件夹)。
查看 Crystal Reports 窗口的右下角,可以注意到有 269 条记录返回给此报表。

注意:    只有在“视图”菜单中选中“状态栏”选项才会看到此数字。

在“报表”菜单中,单击“节专家”打开“节专家”。
在“节”列表中,选择“详细资料”。
在“公用”选项卡中,选择“隐藏(深化完成)”。这会隐藏报表的“详细资料”节,从而在报表中仅显示组页眉。(在这种情况下,报表按“国家/地区”分组。)
单击“节专家”中的“确定”。“详细资料”记录会从报表中消失。
按 F5 键刷新报表数据(或单击工具栏中的“刷新”按钮)。
可以看到,即使从视图中隐藏“详细资料”记录,仍为报表返回了 269 条记录。

在“数据库”菜单中,单击“在服务器上执行分组”。
现在可以看到仅有 71 条记录返回给报表。(按“国家/地区”)分组已在服务器上执行完毕,这样,传输给报表的记录就更少。

双击报表对某个国家/地区进行深化。
提示:    当可以执行深化时,光标会变成一个放大镜。

Crystal Reports 将根据您的需要检索相应的“详细资料”记录。

例如,如果对澳大利亚进行深化,Crystal Reports 会迅速检索构成该组的七条记录。

通过隐藏此报表的“详细资料”记录,您已为用户创建了易于浏览的汇总报表。每个用户可先定位他或她关注的国家/地区,然后进行深化以检索有价值的详细资料。

此外,通过启用“在服务器上执行分组”选项,您已确保初始处理在数据库服务器上完成。此后,仅为报表传输必要的记录。

有关服务器端处理的更多信息,请参阅服务器端处理。

3、利用按需分配子报表……
如果报表有处理大量记录的节,则可以将该节放入按需分配子报表中。按需分配子报表在主报表中以超级链接的形式出现。在打开主报表时,不会检索按需分配子报表的任何数据,直到深化相应的超级链接为止。

例如,在设计报表显示每个雇员对于每种产品和每种产品类型的季度销售额时,可能还希望通过包含每周销售信息来跟踪每个雇员的进展情况。但是,查看该报表的很多用户可能不会对此类额外的数据感兴趣。在此类情况下,可将报表的每周销售部分提取出来,将其作为按需分配子报表附加到报表中。仅当用户在该按需分配子报表上深化时,才会从数据库检索有关每周销售情况的详细信息。

很多报表对象(如大型交叉表、OLAP 网格、高级图表和地图)都是可以包含到按需分配子报表中的理想候选对象,以使对象在深化之前不会被处理。

若要插入一个按需分配子报表,请参阅插入子报表和创建按需要显示子报表。

提示:    也可以将此类报表对象放入使用“在服务器上执行分组”选项的报表的隐藏“详细资料”部分中。这样做时,数据库服务器执行大部分处理任务,而且只将记录的子集从服务器传输到本地计算机(其他记录则在您深化到隐藏的节时检索)。
----------------------------------
三、在数据库服务器端处理分组和排序
1、优势
(1)与数据库服务器的连接时间更短。
(2)从数据库服务器到客户端传输的数据量更少。
(3)从数据库服务器到客户端的传输时间更短。
(4)处理计算机上的报表所需的内存更少。

2、在服务器上执行多数处理并只将有关详细信息推入您的计算机。
服务器端处理使您得以建立报表,以在服务器上执行多数处理并只将有关详细信息推入您的计算机。

服务器端处理是这样运作的:通过使用 SQL 传递技术将 SQL 语句发送到数据库服务器并检索初始数据集,Crystal Reports 将很多数据检索和排序工作卸载到服务器系统上,从而释放了本地内存和资源以用于更重要的任务。这就是为什么服务器端处理只处理已排序和分组的报表,如果报表没有排序和分组(例如,如果是一个简单的列表报表),则无法推入服务器进行处理。还应注意服务器端处理只处理基于 SQL 数据源的报表。

注意:
该说明仅适用于将分组和排序卸载到服务器的情况。
将分组推入到服务器进行处理时,所需的临时数据库可能会使用大量服务器资源。

请记住:若要在服务器上执行分组,报表必须符合下列条件:
启用了“在服务器上执行分组”选项(位于“选项”对话框中)。有关更多信息,请参阅启用服务器端处理。
报表使用某种分组形式。
报表至少是部分隐藏的(至少“详细资料”节一定是隐藏的)。由于服务器将处理那些隐藏的节,所以报表的可视部分越大,必须在客户端进行的处理量就越大。如果显示“详细资料”节,将无法进行服务器端处理。
有些情况下,必须在客户端处理公式字段。如果分组基于公式字段,或者如果公式用于汇总字段中,则必须将所有记录都传输到客户端后才能对公式求值。这将增加运行报表所需的时间量。因此,可能需要使用 SQL 表达式作为公式的替代物。
注意:记录选定公式是个例外,它可以被推入服务器。
为了在服务器上处理报表,出现在报表中的任何运行总计必须基于汇总字段(因为运行总计所需的数据将被拉到客户端)。
为了在服务器上处理报表,报表一定不能包含平均或非重复计数汇总。
报表不包含指定的值分组。

注意:
当深化报表中的隐藏节时,随着在服务器上进行的处理,将自动启动与服务器的连接。如果断开从客户端到服务器的连接(例如,如果将报表下载到便携式电脑中并从远程位置进行处理),则对数据的深化将因数据库不可用而产生错误。
如果使用“用报表保存数据”选项保存已在服务器上部分处理的报表,程序将只保存那些已传输到客户端的记录。换言之,如果已深化了某个隐藏节,并且在 Crystal Reports 中有用于那些数据的选项卡(表示那些数据已传输),则将用报表保存那些记录。
----------------------------------
四、使用已保存在报表里的数据。
1、优势
(1)与数据库服务器无连接。
(2)从数据库服务器到客户端无需任何数据传输。
(3)从数据库服务器到客户端无需任何传输时间。

2、已保存数据
带有已保存数据的报表用于处理不经常更新的数据。当用户浏览带有已保存数据的报表并对列或图表深化以查看细节时,他们不直接访问数据库服务器;相反,他们访问的是已保存的数据。因此,带有已保存数据的报表不仅将网络数据传输量降到最低,而且还减轻了数据库服务器的负担。

您可以从 Crystal Enterprise 内部调度这些报表,使其自动从数据库定时刷新。例如,如果销售数据库每天或每周只更新一次,那么可按相似的进度运行报表并将其与数据一同保存。这样,销售代表就总能使用当前的销售数据,而不必在每次打开报表时访问数据库。或者,您也可以根据需要来刷新带有已保存数据的报表。

若要保存带有数据的报表,首先要确保在“文件”菜单中选中“随报表保存数据”选项,然后保存报表。

3、将数据与报表一起保存命令
如果打算过一段时间再次使用所创建的报表(例如精确调整它),或者打算与无法访问原始数据的其他人共享报表,请使用“将数据与报表一起保存”命令。

通常情况下,当保存报表时,程序保存报表定义及其基础数据。报表定义包含打印报表所需的所有信息。这些数据是运行报表时原始数据的快照。如果通过“文件”菜单上的选项命令清除“将数据与报表一起保存”选项,则程序仅保存报表定义。每次运行报表时必须刷新数据。请参阅刷新报表数据命令。若要为当前报表选择该选项,请使用该命令。

在使用“将数据与报表一起保存”命令前需考虑一些事情。

如果仅保存报表定义,则需要较少的磁盘空间(仅够模板使用),但程序在打印报表前需要检索数据。
如果与报表一起保存数据,则报表需要较多的磁盘空间(足够供报表模板和数据使用),但程序在打印报表前无需检索数据。
根据需要在开或关之间切换该命令。默认情况下,该选项设置为开。若要更改默认设置,请从“文件”菜单中选择选项命令,并在“建立报表”选项卡(“选项”对话框)对话框出现后选择其中的“将数据与报表一起保存”选项。

注意:当程序将数据与报表一起保存时,会压缩数据以减少所占用的磁盘空间。打开报表时将解压缩数据。

0 0

相关博文

我的热门文章

img
取 消
img