Crystal Reports 报表处理模型

Crystal Reports 使用三个处理环节生成报表的方法来生成报表。下图部分描述在此过程中的每一步所发生的情况。     
注意: 尽管子报表在流程图的处理环节2 中出现,但可以使用按需显示子报表,以确保主报表仍然是单处理环节报表。对于按需显示子报表,Crystal Reports 仍然需要对数据再次应用处理环节;但是,这一处理环节到向下钻取子报表时才会开始。因此,您可以使用“按需显示子报表”来改善包含子报表的报表的性能


名词解释

常量公式Constant formulas:对整个报表来说是常量值的公式
重复性公式recurring formulas:包含数据库字段、但不包含引用小计或摘要信息的公式。
已保存数据选择公式Saved data selection formulas:记录返回到报表后对数据进行过虑,与record selection formulas不同,对已保存数据选择公式的更改不会重新刷新数据库。相反,只是报表已保存的数据进行过滤。已保存数据选择公式常与可选参数配合完成报表交互。
打印时公式PrintTime formulas:包含对小计或汇总信息的引用的公式
组选择公式

预处理环节1

处理常量公式。它们对每个记录都一样。如100*30是常量公式。
常量公式在报表处理开始时求值,以后不再求值。该过程称为“BeforeReadingRecords”。如果将常量公式字段(如 100*30)放入“详细资料”部分,则结果是对于每个记录均显示 3000。

处理环节1 

“BeforeReadingRecords”过程发生后,Crystal Reports 开始读取数据库记录。在记录读取过程中做以下动作:
将可能的记录筛选和排序动作下推到数据库去完成。
重复性公式求值,该求值时间称为“WhileReadingRecords。
执行不能下推到数据库去完成的记录筛选
应用已保存数据记录选择公式。当记录返回到报表时,则通过任何现有的已保存数据选择公式对记录进行进一步过滤。
将记录进行排序、分组,然后计算每组所需的小计和汇总。
交叉表、图表和地图生成。只生成完全基于数据库字段和重复性公式的交叉表、图表和地图。如果这些对象包含运行总计和/或 打印时公式,它们将在处理环节2 中生成。
存储保存的数据。完成总计过程后,所有记录和总计都作为临时文件存储在内存中。在所有后续处理过程中,Crystal Reports 不会再次读取数据库,而是使用这些保存的数据。

预处理环节2

将报表中的组按“最前 N 个/最后 N 个”或按“层次分组”排序。该过程中不读取记录,而只是查看来自处理环节1的组实例,并取“最前 N 个”作为适当的顺序,或者根据指定的“层次分组”设置对组排序。

处理环节2

进入处理环节2,所进行的处理从数据处理变为页面格式设置。设置页面格式是按需进行的即直到用户发出请求,或为满足处理环节3 的总页数要求时,Crystal Reports 才会重新设置页面格式。 在页面格式设置过程中,Crystal Reports 进行下列工作: 
组选择公式 
运行时总计。 
打印时公式。该求值时间称为“WhilePrinting Records”。 
交叉表、图表和地图。 包含运行时总计和/或 打印时公式的交叉表、图表和地图以及基于在处理环节2 中生成的交叉表的图表。 
OLAP 网格。 
子报表。 
按需生成页。 
注意: 
如果报表有组选择公式,小计、累计和汇总可能会显得不正确。之所以会出现这种情况,是因为累计和汇总在处理环节1 中计算,但组选择公式会在处理环节2 中再次对数据进行过滤。在包含组选择公式的报表中,可以用运行时总计字段代替汇总来计算报表数据的总计。 
可以使用按需显示子报表(on-demand subreports)确保主报表仍然是单次刷新报表。对于按需显示子报表,Crystal Reports 仍然需要对数据再次应用处理环节;但是,这一处理环节到向下钻取子报表时才会开始。因此,您可以使用“按需显示子报表”来改善包含子报表的报表的性能。 

处理环节3

在处理环节3、也是最后一个处理环节中决定总页数。这一步适用于使用总页数或“第 N 页,共 M 页”等特殊字段的报表


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值