实现交叉报表
较为复杂的报表需求是交叉报表和子报表。
交叉报表是国内数据统计报表最常使用的形式之一。通常用于将在数据库中记录的数据字段按不同分类水平汇总显示。有两种实现方式:1.用交叉查询形成交叉结果集,最终用简单报表实现;2.使用iReport的交叉报表直接实现。
并非所有数据库都支持交叉查询,Oracle10g中通过sum和decode函数可以实现交叉查询,汇总使用函数sum(decode(key,KEY1,value,0)) as Field1、sum(decode(key,KEY2,value,0)) as Field2,等等,将具有(…key,value…)形式的简单结果集汇总为有(…Feild1,Field2,…),其中Field1是按key值为KEY1汇总值, Field2按key值为KEY2汇总值,依次类推。iReport可将该交叉结果集当做普通结果集处理形成交叉报表形式。
使用iReport的交叉报表工具,可以制作更为丰富的交叉报表,过程较复杂。要点是,在主报表的Detail栏目插入crosstable,需要编辑交叉报表属性决定交叉报表内容,交叉报表设计决定报表的外观。
在主报表中定义SQL查询语句,将结果集传递给交叉报表。这样就只需要进行一次数据库查询操作,不过也只能支持一个交叉报表,且不能自动绘图,因为交叉报表会将结果集的游标指向尾部,这样可满足单一交叉报表需要。为实现上述要求,在交叉报表属性中点选“use a dataset to fill the crosstable”,选择并命名一个subdataset,并且在连接数据源表达式中输入系统参数“$P{REPORT_DATA_SOURCE}”。定义行列分组和Measure。Measure就是交叉报表需要进行汇总的目标字段。行列分组写入分组需要依据的字段,类似交叉查询汇总的key字段,可支持嵌套多重分组,适用多级树型管理分别需要统计的情况。属性设置完毕,就可以使用报表设计,可视化进行报表外观设计,每个字段或汇总字段的长度、颜色、线条等,可以做出相当专业的交叉报表。