转袁永福:数据报表
首先分析中国国内的打印报表市场。有人研究了国内报表工具的市场容量(具体见 http://runqian.blog.com.cn/archives/2005/164956.shtml ),应该有20亿元。只是开发商竞争激烈,很多无自主开发的核心技术,而且中国信息化水平不高,是的实际市场缩水,但需求是一直存在的。在未来非常长的时间内,办公无纸化不会普及,打印时刻进行,而且工作量不小,打印模板占整个信息化系统的很大一块,甚至是关键的模块,而且国内打印格式千百万化,用户需求经常改变,因此若没有良好的打印模板工具,实施打印模块的难度是超出想象的,因此信息系统开发商是非常需要良好的打印工具。
国内已经存在的不少打印工具提供商,在此对其主要的几个厂商进行分析
水晶报表(Crystal Reports)是加拿大Crystal Decisions公司出品报表分析与生成软件,历史比较长,使用的比较广泛,原先是作为微软OEM绑定到VB中,但现在微软放弃了她的绑定,而且其产品有点跟不上时代,因此有人评价她有点江河日下。
Style Report(中文网址 http://www.inetsoft.com.cn/ ),源自国外的纯JAVA的报表系统,报表设计器的操作演示没看到,在她的学习中心只看到几张模糊的图片,她的设计器是拖拽控件的设计模式,数据源的定义还是基于SQL语句查询数据库的,和其他的设计器没什么本质区别。她的报表的HTML输出质量很好,非常适合Web环境。
Developer Express 公司(网址http://www.devexpress.com/ ),是一个相当有名的第三方软件厂商,制造了大量的优良的图形化软件,其中针对打印的有 XtraReports 控件,其中包括一个打印模板设计器,根据其官方网站介绍的情况和本人亲自下载试用的体验,对其打印控件的了解如下
1.功能强大,支持的报表元素类型不多,报表样式控制不错
2.设计器界面比较专业
3.在一个大部分报表工具都存在的问题,数据源设计不完善,还需要编写程序向打印控件提供数据
4.计器中的打印的元素都是一个个Windows控件,因此当报表的包含的元素很多,结构复杂时,无论设计还是运行报表都是耗费大量的计算机系统资源的,而且影响运行速度,因为单个的Windows控件要占用不少的系统资源。
5.该报表工具在国内应用不多。
FastReport(网址 http://www.fast-report.com/ ),是一个俄国人开发的报表系统,报表设计器的图形化用户界面做得非常精致,她是典型的控件拖放的设计模式。报表分为几个大块(Band),这些块区分为页眉,表身和页脚,其中只有一个页眉和页脚,可以有多个表身。而所有的报表元素分布在这些块上面,因此这种报表的页面模型是两层,对于复杂的报表则可能过于简单。她支持的页面元素类型比较多,报表数据源还是普通的基于SQL查询的二维表格方式。
FastReport提供一个版本FreeReport,她是FastReport的旧的低级的版本,但提供所有源代码,因此很多公司借助她来进行Web报表的开发。一般的做法为首先使用其提供的报表设计器设计报表,文件保存到Web服务器,然后后台页面程序(例如ASP或JSP)查询数据库获得数据,然后拼凑JavaScript或VBScript等客户端脚本代码文本随着HTML代码发送到客户端,客户端的IE页面嵌入FreeReport控件,而客户端脚本代码向该控件填充数据,然后控制它进行打印。这种报表开发模式非常麻烦,当用户需求经常改变,程序员们只有疲于奔命的修改后台程序。
国内比较先进的报表系统,个人认为是润乾报表,她是北京润乾软件技术有限公司(网址 http://www.runqian.com.cn/ )开发的报表系统,全部采用Java开发,她的设计器采用类似Excel样式的表格设计方式,她的报表模型比较先进,包括报表排版模型,报表参数和宏定义等概念。演示效果不错。她的数据源的定义有内建数据集,相当于在报表系统中建了一个小型关系型数据库,保存表结构和数据。报表样式设计器比较不错,样式控制丰富,自主开发达到这种水平不容易。
杰创网络报表是杭州杰创软件有限公司(http://www.jatools.com/)的主打产品,它一般简称为杰表。它技术比较先进,完全用Java实现,兼容j2ee平台。它的报表设计器是用Java写的,它的设计模式总体上是基于控件拖放,它没有Band的概念,报表设计界面直接分为页眉,主体和页脚,用户可以在在界面上拖放操作放置表格控件,但表格控件内部却是类似Excel 的电子表格设计模式,因此它的设计器的设计模式实际上是控件拖放和电子表格的结合。杰表作为Web报表,可以输出比较好的HTML页面,它的图表输出用Flash来展现,它还实现了数据钻取(在报表中点击某个链接可以显示另外一张相关的报表)。
中创软件(网址 http://www.inforbus.com/ ),是一个中间件厂商,其中报表工具是其一个重要产品。她是针对B/S环境下的报表工具,看看一些报表模板编制的演示,她是采用类似Excel的排版方式。数据源的定义采用普通的数据集,使用SQL语句查询数据库获得二维表格,对多数据源则使用某些字段进行关联。
Grid++Report 报表设计器是仁龙软件(http://www.rubylong.cn/index.asp)出品。她的设计器是传统的带状报表设计器,数据源是采用一条SQL语句通过ADO查询数据所得,因此数据源只是一个二维表格, GUI设计器比较专业,支持的报表元素类型不多。设计器提供了比较完整的编程模型,好像还不错的样子。
上海炎鼎软件(网址 http://www.maxrpt.com/ )的数巨报表,核心的报表设计器是基于俄国的FastReport开源版本FressReport,数据源定义还是基于SQL查询的二维表格,和其他厂商没什么本质区别。
深圳明宇科技(网址 http://www.soft2web.com/ )旗下有如意报表,和炎鼎的数巨报表同质化严重,因为他们两个的核心设计器是基于俄国的FastReport,同时运行如意报表设计器和FastReport的报表设计器,可以发现两者无论是用户界面还是操作方法都惊人的相似。数据源的定义和运行环境都和数巨报表没什么本质区别。
微软报表服务是新出的产品,它背靠强大的微软和SQLServer服务器而在报表市场中异军突起,来势汹汹。本人首先进入微软的MSDN网络图书馆 MSDN Library > Servers and Enterprise Development > SQL Server > Reporting Services 的目录下面,这是报表服务的用户手册,本人英语不好,勉强看了它的几篇介绍文章,往后就看不下去。本人还下载了报表服务评估版下载安装了其中的客户端。由于它的服务器端需要SQLServer2000Spa,本人机子只有MSDE2000,装不了服务器端,再说本人暂时对报表设计器和报表原理感兴趣,所以没装服务器端程序。
整个报表服务概念非常庞大,覆盖了整个报表的生命周期,包括了报表设计,安全,管理和运行。在此只重点说说报表的运行原理和报表设计器。
实际生产运行中,报表服务系统需要配置一个报表Web服务器,将报表定义文件放好,数据库连接配好,然后用户就可以在客户端的IE地址栏中敲入报表页面URL就可访问报表了,因此报表服务算是一个纯粹的Web报表解决方案了,非常适合B/S系统。但目前不知如何在C/S系统中使用报表服务。
报表定义文件是一个扩展名为RDL的XML文档。它保存了报表的样式定义和数据源的定义,是微软自己定义的一种描述报表定义的XML文档,结构是公开的,因此第三方厂商可以编写兼容报表服务的报表设计器。微软使用自己的VS.NET集成开发环境来设计报表,相信绝大部分人还是用VS.NET来设计报表。
微软提供的报表设计器是基于VS.NET的,因此若要设计报表则必须安装昂贵的VS.NET集成开发环境,对报表设计器的广泛应用有所限制。其实私底下用用盗版的也没什么风险,若在公司里大量使用盗版的则微软迟早会找上门。微软做的软件向来好用,它的报表设计器也相当专业,它采用控件拖拽的设计模式,但表格内部则采用类似Excel的编辑方式。目前的报表设计器支持文本框,线条,表,矩阵,矩形,列表,图像,子报表和图表。好像不支持条形码。文本框也不支持行间距和字符间距。但报表元素所有的属性都支持表达式。矩阵实际上是交叉报表,是处理复杂的中国式报表的基础,但具体怎么使用则不清楚。
报表设计器的程序文件安装在 C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer ,其中 Microsoft.ReportingServices.Designer.dll 是报表设计器的主程序。使用Reflector查看它的反编译代码,可以看到,其实所有的报表元素都是一个个Windows控件,这点和DeveloperExpress的XtraReports一样。在报表设计器中使用Windows控件来实现页面元素有些性能问题。大家都知道Windows控件是很消耗系统资源的,因为其中涉及到了窗体句柄这种重量级的句柄。当报表复杂,里面存在数百个页面元素时,报表设计器需要动态的加载数百个控件,如此启动和操作都比较慢,而且占用大量内存(这种事我以前干过,有体会)。而俄国的FastReport等类似报表工具则是自己绘制报表元素的,因此没有这种问题,加载和编辑复杂报表不会很慢。
在数据源定义方面,根据微软提供的RDL的XML样式定义,一个报表存在若干个DataSet的节点,DataSet节点提供一个Query,其中定义了一个SQL语句,DataSet还提供若干个字段,这些字段和Query的SQL查询结果的字段一一对应。因此个人看来DataSet实际只是定义了一个源自数据库的二维表格,一个报表内可以定义多个DataSet,当这些二维表格之间发生关联时如何处理我这个初学者就猜不出来了。本人觉得报表服务和其他报告工具类似,是基于SQL查询的,数据源结构是两层。这在报表设计器设计数据源的操作上体现出来了。它的数据源设计界面实际上是一个SQL查询设计器,无论如何操作,最终结果都是一个SQL查询语句,包括普通SQL查询语句,表查询和存储过程三种类型。SQL查询语句执行的结果肯定是一个二维表格。
报表设计器使用拖拽操作来简化数据源的绑定,一般的旁边有个字段窗体,列出了所有的DataSet的字段。将某个字段拖拽到某个报表页面元素上面,若这个页面元素为文本框则设置它的文本值使之绑定到指定的字段,否则会在拖拽的位置新增一个文本框并绑定到指定字段。
此外还有一些其他的报表厂商,由于应用不广泛或本人不了解,在此不再说明。
以上说明的这些厂商分为国外厂商和国内厂商。两类有着各自的特点。国外厂商本身实力强大,技术先进而成熟,都具有自主知识产权,但有某些地方不大适应中国国情,但这个问题国外厂商迟早会解决的。而国内厂商实力弱小,技术相对有些落后;而没有自主知识产权的厂商则更视为草根公司。因此总体上国外厂商在市场中处于强势地位,占据了大部分市场。国内厂商迫切需要发展,而且急需比较先进的自主知识产权。
以上厂商提供的报表设计器按照操作模式可以分为两类:基于控件拖放的设计模式和基于类似Excel电子表格的设计模式。基于控件拖放的设计模式实现起来比较方便,技术成熟,但不适应类似中国式的复杂报表,因为这需要进行精细的对齐操作,生成的报表输出为HTML或Excel文档时比较难于处理。而Excel电子表格的设计模式实现起来比较复杂,但能处理中国式的复杂报表,能比较方便的生成HTML或Excel文档,技术好的还能直接和Excel交换数据。因此一般认为类似Excel电子表格的报表设计器比较先进,符合中国国情。
一些报表设计器的下载地址
http://www.rubylong.cn/Download/Grid++Report3.6cn.zip
http://www.rubylong.cn/Download/grdesigner.zip
http://www.ccsw.com.cn/download/MaxReports_Flash.rar
http://www.ccsw.com.cn/download/MaxreportsV2.0.chm
http://www.ccsw.com.cn/download/MaxWebReport2.0Trial.zip
如意报表2006评估版 http://www.soft2web.com/Download/openfile.asp?id=109&filename=RooyeeReport2006Eval.zip
http://www.fast-report.com/pbc_download/fr_studio_demo.exe
http://www.fast-report.com/pbc_download/fr233.zip