java复杂报表模型与实现方法


作为java程序员,大家可能都听说过,或用过birt, 据说,现在birt的东家actual,正式入驻中国市场,联想到前些天杰表.2008的推出,今年,注定是国内的报表软件市场不平静的一年。

birt的最大好处是开源,不足是水土不服,做起复杂报表来不方便,复杂报表主要说的是行上,列上有多个并列分组的交叉报表,国产报表工具大都关注复杂报表需求,而洋品牌的报表软件工具,如jasperreport,crystalreport,这方面关注不够,所以做起复杂报表来很吃力。

做什么事情必须先有观念,然后,付诸实现,做软件则更进一步,必须将这些观念结构化,即模型化。对复杂报表需求的处理,国内报表软件厂商时下,用得最多的是类excel报表模型,即以单元格为中心报表模型,最早产品化的,是用友华表,当然它不属于java阵营的,java阵营的现在有润乾,finereport,杰表4.0,类excel报表模型大家都觉得,功能很强,但最大问题是,学习起来不方便,不知道你在大学里,微积分考多少,如果你90分以下,那你最好别碰那东西。

杰表采用的复杂报表模型,相对来说,比excel模型容易得多,比如下图是一个典型的复杂报表,该报表用于按不同分类方法统计培训学员人数,该表列上存在多个分组(培训类型、累计培训时间、参加培训总人数、培训内容、渠道类型),分组之间不存在嵌套关系的,即分组是并列的。行上存在一个按学员行政级别为依据的分组。



复杂报表的复杂性在于结构复杂,比如上图报表列上存在多个并列分组,不仅如此,行上也可能存在多个并行分组;不仅有多个并列分组,也可能各并列分组的嵌套数不一样;不仅各个分组来源于同一个数据集,也可能来自多个不同的数据集。

尽管如此,我们仍然可以把复杂的交叉报表,看作下图所示的结构,表格包括A,B,C,D四部分,其中B,C是两个表格,决定了交叉表的结构。B表格非常特殊,第一,该表格向右生长的,而一般我们常见向下生长,如C 表格。第二,该表格有多个并列分组,而一般报表工具中,表格对象最外围只能有一个分组,尽管其嵌套数是可以多重的。



杰表.2008以上述结构分析为基础,引入了超级表格对象,该对象就是通过嵌入两个扩展方向不同的子表格,行头表和列头表,来完成交叉报表的结构性问题。两表均可以有任意多的并列分组,每个分组可以有层次不同的嵌套。下图(a)是设计面板中的超级表格对象,下图(b)是该对象子部件的层次关系,其中对象3就是行头表,对象4就是列头表。


上一篇 杰表报表样例三 下一篇 java报表工具中,如何可视化地设计报表参数表单