最近单位一个项目需要做很多报表,于是在网上找了很多报表下来试用,看看能否找到一个好的解决方法。在试用了国内外数十种主要报表工具后,有一些不得不说的心里话,希望能和大家分享。
第一部分
最近单位一个项目需要做很多报表,于是在网上找了很多报表下来试用,看看能否找到一个好的解决方法。由于自己一直在使用的.net平台,自然也就首选看看能否在.net平台上找到些好的工具。
第一个想到的就是水晶报表,这个工具几年前就已经试用过了,名气也比较大,以为内置在vs中,也很容易找到。第二个想到的就是SQL Server Reporting Services,第三个就是Devexpress公司的报表组件,还有一个记不起名字了,因为没有试用版,在网上也没找到注册码等方面的破解信息,所以懒得去试用了。
在试用后,都感觉不是很满意,哪些地方不满意,后面会有说明。
在没有发现更好的.net平台的报表工具后,我只好有找了下java平台的报表工具,其中就包括开源的IReport。
第二部分
这些东西总的试用下来后,发现模式上都差不多,对于一张报表来说,一般就是3个部分。
数据源-------------------》数据组织-----------------------》呈现
没有什么很大的不同,这些工具都支持不同的数据源,对于所有这些工具来说,因为采用通用的数据访问技术。例如ADO.net访问数据,自然对于不同的数据源支持问题不大。在呈现上,也大部分支持Form和Web呈现,支持导出到pdf,word,excel等。呈现方面碰到的问题主要是中文支持以及Web呈现时的变形。
我个人觉得这些报表所有的问题不是在于图表的展现功能方面,而是数据的组织方面。
对于试用下来的感觉做个总结吧:
1、这些基本都是国外的公司开发报表工具,所有的模式都是按照:header band ,detail band,footer band这种模式来时组织报表。这些工具基本都不缺乏各种图形呈现控件,缺的是强大的表格控件,对于中国的报表来说,最多的是表格式报表,而非图表式。这是个很大的差别。所以在设计复杂表头的时候问题很大,对于那种上面表头复杂的也许还好解决点,因为可以采用线头控件画出来,一般这个表头就放在header band里面,但是这样画出来的表头,调整起来比较麻烦,而且对于下面内容宽度自动变化的列,很难自动适应。尤其对于右边有表头的表,就更加困难。
2、所有这些工具都支持表达式语法,对数据进行运算,可是让我很奇怪的是,却都不支持在公司里引用报表里其他控件。这对于很多情况是很麻烦的事情。例如下面这张表:
col1 | col2 | col3 |
a | b | c |
假如col3需要根据col2中的值不同而进行不同的显示,我发现这些报表工具中的表达式里都没有对其他单元格引用的功能。最对就是对数据集的列进行引用,可是遇过col1,col2来自数据集ds1 ,col3 来自数据集 ds2,就没有办法进行了。
这2个问题绝对不是个小问题,我一直在纳闷,为什么所有的报表一定就要是header band,detail band,footer band这种从上到下划分band的形式,怎么就不能变成上下左右都有band的形式,这样的话,就可以在上表头,左表头的设计上拥有很大的灵活性。
另外一个很大的问题就是为什么不提供对于对个数据集进行关联的功能。形成这样的格式:
(ds1,ds2,…dsn)------------->关联公式-------------->输出
例如:
ds1:
部门表(部门编号,部门名称)
01 | 部门1 |
02 | 部门2 |
03 | 部门3 |
04 | 部门4 |
ds2:业绩表(部门编号,销售额)
01 | 2345 |
02 | 1234 |
设计表格的时候绑定这连个数据集:
部门编号 | 部门名称 | 销售额 |
ds1.部门编号 | ds1.部门名称 | ds2.销售额 |
这个时候应该提供一种机制管理ds2.销售额和ds1.部门编号,也就是在ds2中去查找对应行的部门编号。
但是这种关联,我发现在这些工具中都非常难做。