Archive for 12月, 2008

好用的java开发工具

12.28.2008 by web报表 - 5 Comments - 0
Posted in java报表相关

“本人学java编程时感觉到十分的不方便,特别是想建立窗体时,要添加什么控件都要自己写。有没有一个开发工具像VB6.0那样可以直接添加控件而不用用语言添加的啊?”

最近在国内知名搜索上看到这样一篇求助的帖子(http://zhidao.baidu.com/question/26587710.html)。很快的,帖子得到了热心人的回答,最佳答案长达30多行,列举了包括Eclipse在内的近10种java开发工具。但是仔细查看来不难发现:对于原帖的问题,“最佳答案”其实并没有给出一个真正的答复。

那么,到底有没有这样一种开发工具,可以把java的基于浏览器(B/S)网络程序开发,变成类似VB那样基于客户端(C/S)图形化的编程呢?甚至需要写的代码量比VB还要少?著名的编程工具Eclipse是这样一种工具么?

熟悉Eclipse开发的程序员都知道,这个开发工具并不是一个很好的界面设计工具。Eclipse结合Java的各种架构的开发模式,给开发人员提供了灵活性的同时,也提高了复杂性和学习成本。

我们看一个典型的开发项目-项目A。这个项目的目标是用Java做一个基于网页和数据库的企业管理信息系统(MIS系统),大部分的页面都用来做数据库增删改查操作。按照一般的项目模式实现这个项目,就要请美工来设计各个页面的html界面,请系统架构师来选择各种架构(struts、spring、habernate…)搭建应用程序的基本框架,请熟悉java性能优化的工程师构建底层性能控制部件…

即使负责项目A的你有相当可观的预算和时间搞定了这些,你的程序员真正编程的时候,还是要还是花很多时间学习这些架构,并准备好在项目维护阶段搞定这些复杂架构出现的各种复杂问题…

实际上,你和我样,还有更好的选择:让一个免费的开发工具―“快逸报表”来搞定这些实现层面的问题!

试想一下,如果项目组成员可以专心致志的去和最终用户讨论他的业务需求,了解他想存取那些数据,这些数据怎么建表,输入的数据要做怎样的合法检查,数据库中的数据要做怎样的展现和查询…然后,用“快逸报表”快速的实现这些需求和功能。这样的场景对于项目负责人、程序员和最终用户,都是如此的美妙!

如果项目A的后期,最终用户又提出了比较复杂中国式报表,那么项目将会因为采用了快逸报表而锦上添花,因为报表正式快逸报表的强项!说道这里你不禁要问:对于项目A来说,一个免费的报表工具“快逸报表”就能够做到不用写代码实现项目功能么?看看下面的例子,你就知道了。请注意,这些例子中的效果都是图形化的设计器设计出来的,不需要写复杂的Java代码。

下面这些例子,只是快逸报表适用于项目开发的部分示例,如果要详细了解,还是访问快逸的官方网站吧:http://www.quiee.com.cn,想快速了解这个工具最好的办法就是下载用用看。

例子1,项目A中的员工卡片录入页面,集中展示了快逸报表在项目开发中起到的作用:

1)这个页面是图形化设计器画出来的,不用编写代码。

2)页面中的单元格和数据库表的存、取关系只需要简单定义即可实现。

3)页面中的“尊称、职务、地区、城市”这些字段可以来自数据库的代码表,在页面中可以下拉选择。

4)双击员工照片,可以实现选择照片文件、照片上传和保存入库的操作。

5)“ 年龄”信息使用了快逸报表的“自动计算”功能,用户输入出生日期之后,程序会自动计算出“年龄”。

6)“ 邮政编码”信息使用了快逸报表的“合法检查”功能,如果用户输入了不合乎规则的邮政编码,程序会自动弹出提示,请用户修改。


例子2,下面这个页面,实现了对于数据库表的增删改查,在项目A中大量出现。用快逸报表可作做到图形化、零代码。即使是比较复杂的自动流水号功能,也不用写java代码。

例子3,下图是项目A中常用到的合法性检查功能示例。图中的具体错误信息,在图形化设计器中可以方便的修改,也可以提示某行某列的数据有什么样的错误,很容易就让项目A的界面变得友好。

例子4、项目A中有一个情况是:用户在网页上输入“货物数量”,要求能够自动计算出“总运货费”=“货物数量”ד运货费”。因为采用了快逸报表,你只需要在设计器中写一个简单公式即可实现,而不必研究复杂的DHTML和Javascript了。


原文来自: “求好用的java开发工具”–从一个“求助”引发的思考

 

五种主流web报表工具的功能对比:输出方式

12.28.2008 by web报表 - 3 Comments - 0
Posted in web报表

web报表工具在报表展现层的输出方式是报表设计的最后一步,输出方式的好坏和是否丰富会直接影响报表设计的效果和用途,所以不得不承认该功能对web报表工具的重要性。

ireport输出支持 HTML、PDF、EXCEL、CSV、XML;不支持带文本格式的导出;不能实现不失真的导出PDF/EXCEL;不支持不分页的EXCEL导出方式,且不可控制是否导出隐藏行/列;报表中不支持图表,而是通过image控件实现,而且要在同一张报表中显示多个图表很困难;

Finereport输出支持HTML、PDF、EXCEL、CVS、SVG、带格式文本;完全不失真的EXCEL导出;EXCEL不支持分页导出,记录数超过65535列数超过255列报错;导出EXCEL/PDF不能加密,不能进行权限控制; 不能控制是否导出隐藏行列;不支持导出权限控制,不能加密码;

水晶报表输出支持HTML、PDF、EXCEL;导出EXCEL仅能导出数据,导出后再利用困难;不支持带格式文本的导出;导出 EXCEL, 所有单元格都成了合并格,用户无法进行再次的数据处理,统计图导出无法联动 ;

润乾报表标准HTML、PDF、EXCEL、WORD、XML、带格式文本(如TXT)等;导出EXCEL,完全不失真,支持统计图的导出,支持分页/不分页两种导出方式,保证EXCEL中的打印分页表头每页重复,且和润乾报表中一致; 报表导出EXCEL不受行数列数的限制; 导出EXCEL可以加用户密码,可以控制是否导出隐藏行列; PDF导出各版本均支持,可以控制导出权限,可以加密码,可以控制 “文档汇编、复制、低分辨率打印、更改文档、填写表格栏、常规编辑注释、打印、视障人士启用内容访问”  等权限 ; 统计图输出上支持网页上GIF、JPG和PNG三种格式,特别是PNG格式可以做到真彩色(24位颜色);

明宇报表输出支持HTML、PDF、EXCEL;统计图输出上,目前支持GIF和JPG两种格式,前者颜色数不够,后者是失真压缩,在对美观度要求较高的场合显得力不从心。

五种主流web报表工具的功能对比:接口方式

12.25.2008 by web报表 - 0 Comment - 0
Posted in web报表

介绍对比一下主流web报表工具的接口方式。

ireport接口方式为API,但接口不够丰富;

finereport接口方式为API,但接口不够丰富;

水晶报表为非J2EE接口,通过网络协议,力度不足,统计图常采用古老的CGI方式 ;

润乾报表提供丰富的API,非常齐全,结合紧密;向应用程序员开了数百个JAVA的API调用,可以对报表进行深入控制,如替换数据源、报表生成前修改等;而且结合紧密,达到最高运行效率;

明宇报表采用独立服务器方案,应用接口通过网络协议完成,接口数量稀少、控制力度弱,而且严重影响性能;

五种主流web报表工具的功能对比:设计模式易调整

12.23.2008 by web报表 - 0 Comment - 0
Posted in web报表

在实际做报表过程中,报表工具设计模式是否方便,在很大程度上影响了做报表的效率,下面就分开介绍一下个web报表工具在设计模式上的区别。

ireport为可视化制表模式,制表界面为条带填入式,生成的模板文件为XML文件;不支持EXCEL模板导入;格式对齐非常困难;对字体等其他格式的调整也非常麻烦;表格中的表达式不能随着行列变化而实现自动调整;

finereport为类EXCEL的表格式设计模式;支持EXCEL的导入导出;表达式循环引用死机,没有提示信息;表达式:删除插入行列,单元格和数据集的绑定需要手工修改,不能自动变化;

水晶报表为传统条带拖拽式的制表模式,格线对齐困难;不能导入 EXCEL 模板,因此也就不可能有类似 EXCEL 的格式刷、公式调整等;传统的线性报表模型,不支持非线性报表模型;c/s方式设计的报表模板和web方式设计的报表模板不一样,因此c/s的用户想修改web方式编辑出来的报表模板,那是不可能的!不一样格式的报表模板,很难提供完全一致的报表功能 ;

润乾报表为类excel的表格式设计模式,行列对齐非常容易;支持excel的无失真导入导出;插入、删除行列后,单元格的表达式、数据集绑定关系自动变化,不需要手工修改;

明宇报表为基于控件的条带拖拽式制表模式,对于格线较多的表格调整起来非常麻烦,而且难于实现严格的行列对齐;表格中的表达式不能随着行列变化而实现自动调整。

本人认为在做表方面Excel的表格式设计模式是最为方便的,已经被大众所接受,没有什么报表设计模式可以超越excel表格设计模式在人们操作习惯中的主导地位,所以类excel的表格式设计模式在报表的设计模式上应该是有优势。

常用五种web服务器缓存目录

12.21.2008 by web报表 - 4 Comments - 0
Posted in web相关技术

总结了一下几种常用的web服务器缓存目录,跟大家分析一下。

(1) tomcat

tomcat\work\Catalina\localhost

(2) weblogic

/usr/local/bea/user_projects/domains/mydomain/applications/.wlnotdelete

/usr/local/bea/user_projects/domains/mydomain/myserver/.wlnotdelete/extract/myserver_ride_WebContent

(3) websphere

WebSphere\AppServer\temp

(4) jboss

JBoss\server\default\work\jboss.web\localhost

(5) resin

resin\cache

何为.NET?如何影响我?

12.19.2008 by web报表 - 5 Comments - 0
Posted in .net报表相关

什么是.net,我的理解总是随着时间的流逝而改变:最早我告诉他们这是一个新的平台,后来告诉他们这是Microsoft的一个新战略,但是现在我想我会这样回答:.NET是一个概念,是一种构想,或者是微软的一个梦想?对于Microsoft .NET,微软官方有如下描述:“.NET 是 Microsoft 的用以创建 XML Web 服务(下一代软件)平台,该平台将信息、设备和人以一种统一的、个性化的方式联系起来。”“借助于 .NET 平台,可以创建和使用基于 XML 的应用程序、进程和 Web 站点以及服务,它们之间可以按设计、在任何平台或智能设备上共享和组合信息与功能,以向单位和个人提供定制好的解决方案。” “.NET 是一个全面的产品家族,它建立在行业标准和 Internet 标准之上,提供开发(工具)、管理(服务器)、使用(构造块服务和智能客户端)以及 XML Web 服务体验(丰富的用户体验)。.NET 将成为您今天正在使用的 Microsoft 应用程序、工具和服务器的一部分,同时,新产品不断扩展 XML Web 的服务能力以满足您的所有业务需求。”这个美国时间2000年6月22日上午面世的新概念一经发布就引起了全球IT界的关注,因为发布它的微软公司向以改变业界的游戏规则而闻名,该公司另一个出名的地方就是精通“拿来主义”,善于继承别人的思想再经过封装变成自己的产品。在.NET的新产品中,VS.NET有Delphi的影子,C#更宛若Java的一个clone,甚至.NET的“网络计算”的概念也曾经在很早以前由SUN提出过。但是这并不能妨碍.NET成为去年最热门的技术词汇,随着VS.NET和Windows.net的发布,它还会成为今年人们谈论最多的话题之一。发布.NET之后,盖茨说,网络将由呈现式的平台转为完全的平台。在微软的WinXP的发布会上,我注意到主持人特别强调的一句话:在未来,我们可以在任何时间,任何地点,使用任何设备获取信息(any time, any place and on any device.)。但是这当然不是.NET的全部,正如盖茨所言,仅仅能够获取信息是不够的,通过.NET,用户还将会获得由程序封装过的数据,也就是服务。关于这一点,我有如下的想象:有了.NET,全世界的互联网络会组成一个庞大的服务中心,而你的终端设备(当然不仅仅是你的台式机,还包括手机、PDA、平板PC等,甚至家用电器,前面说过了,任何设备)就是你贴身的智能秘书。你不需要自己获得信息去分析,只需将你的要求说(自然语言技术也是.NET的一部分)给秘书听,她就会自动地去互联网络上查找相关的服务,经过自己的智能处理与整合,以最有效率的方式完成你交给她的任务。关于这一新的计算模型所带来的可能性,在下面这一假想的事例中可得到突出的体现: Steve Masters 因公到旧金山出差,过街时被一名骑自行车的邮递员撞伤。Steve 用他的 Web 电话与远在他的故乡的 Jamie 联系,她是他医生办公室里的接待员。Jamie 不仅知道 Steve 的位置,而且还能访问离 Steve 较近的一些诊所列表,这些诊所可提供他的健康保险所包括的服务。她为 Steve 在一街之隔的某诊所约了医生。Steve 在得到所需的医护后又上路了。 很多人为这个前景欢欣鼓舞,其实这只是.NET体验的一小部分而已。.NET为开发人员提供了新的开发平台 (.NET框架) ,新的开发语言(C#) ,新的开发工具 (Visual Studio .NET) ,新的开发方式 (Web Service) ;为普通用户提供了Windows CE、Windows XP、Stinger、Xbox、Tablet PC、.NET My Services、MSN等产品;为企业提供了bCentral。在未来,最终大多数流行的 Microsoft 软件应用程序——包括 Office 和 Visual Studio .NET——将开始与 XML Web 服务实现交互,并把它们的主要功能作为 XML Web 服务公开,以便其他开发人员可以利用。现在,你看到了,Microsoft .NET是一个平台,是 Microsoft 的 XML Web 服务平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。这个平台包含广泛的产品系列,它们都是基于 XML 和 Internet 行业标准构建,提供从开发、管理、使用到体验 XML Web 服务的每一方面。现在,Microsoft 正在五个方面创建 .NET 平台,即工具、服务器、XML Web 服务、客户端和 .NET 体验。Microsoft .NET更是微软的一个网络战略,是微软意图全面占领互联网领域的最强有力的武器。在全球互联网络市场的抢夺战上,微软似乎慢了半拍,在浏览器方面差点败在Netscape手中,还为此吃了老大的官司,在流媒体上又被Real斩于马下。随着互联网以前所未有的速度席卷全球,很多人都希望籍此机会重新洗牌,但是惯于制定游戏规则的微软又怎会轻易将主动权交到别人的手中。同时,由于开放源码组织的不断壮大,微软紧抱源码不放的做法召致越来越多人的不满,很多人出于不同的考虑(安全、开放、免费)投靠了Linux阵营。另外,微软正等待着法院关于拆分的判决,如果微软被拆分,微软的产品将很难再取得目前的市场绝对垄断地位,对于微软来说,在产品上必须要变,而这个变,就是.NET所带来的由一个软件公司向一个服务公司的转变。事实上,微软将来可能会变成一个全球最大的网络服务商(ASP)。Windows这个给微软带来令人眩目的财富和辉煌的十年视窗时代结束了,微软打算全面设计我们的未来,它将把它所有产品全部重新改写为与.NET构造相一致的形态,以ASP(应用服务供应商)方式提供,这之后微软不再主要依靠授权和销售软件光盘赚钱,而是要通过互联网上运行的大量软件服务赚钱,从软件供应商走向ASP——这就是微软的新战略。

事实上,很早就有人提出过,对计算机发展和普及做出巨大贡献的软件行业已经到了这样一个转折点:留在终端的软件会越来越少,目前通过软件包发行的方式即将消失,而改为网上出租的形式获得利润,用户只要在本地发出请求,就可以在网上直接使用它,而这个软件的供应商会依你使用的次数来收费。现在你明白微软为何一定要拼了老本也要对Netscape赶尽杀绝了,一旦这个设想成为现实,集成诸多功能的浏览器将取代现在操作系统的地位,成为终端上唯一需要预安装的软件。如果这个浏览器不是微软的产品,那后果可想而知。

.NET还是微软的一个互联网之梦,是微软公司提出的下一代互联网构想。在这一构想中,计算超越了网络浏览,进入一个更为先进的互联网平台和极为丰富的软件服务的新世界。微软心中有一个梦想,它要通过.NET改变人们未来的生活方式。就像当年Windows的出现使电脑从精英手中的玩具变成了普通大众身边不可或缺的工具,.NET极有可能会使互联网成为人们生活中密不可分的一部分。在未来的i时代,人们的生活、工作、学习、娱乐,都将得到.NET的帮助。在那个时候,.NET或许不会有人再提起,但是它带来的产品与概念,却将时刻伴随我们左右。

Web报表软件的采购成本

12.17.2008 by web报表 - 0 Comment - 0
Posted in web报表

一般地,Web报表在一个软件开发项目中占的比例大概是 10% 左右,这两年有上升的趋势,据总体统计项目中报表的开发量大的能占到20%。下面的计算还是以10%为标准,每人月的成本按2.5万计算。

以一个100万的软件开发项目为例,Web报表的工作量占 10% ,即开发成本为 10 万元。以 2.5 万 / 人月来计算,这个项目需要用 4 个人月来完成报表工作。在实际的项目中,这 10 万元有几种方式分摊:

(1)集成商以前的代码积累+程序员按项目定制。说白了,就是纯手工编写代码。这里又分两种情况: A 、是在集成商以前的代码积累基础之上直接按项目定制; B 、找开源的报表软件,在此之上做修改。这样做能在一定程度上减少程序员的工作量和后期的维护成本,但是开发上要受限于开源软件。且不论产品资料、函数接口什么的是否齐全,单是开源软件的 bug 问题就够让人挠头的了。

这两种方式不涉及到采用报表软件的成本问题,好处就是开发人员对程序能完全控制,开发成本直观。坏处就是如果项目报表的要求比较高的话,程序员的工作量会相当大,报表开发效率低,报表的后期维护成本也比较高,只要客户要修改报表,就必须找到开发商,除非事先商量好,否则就会出现钱方面的扯皮。实际应用中, A、B两种方式主要集中在中小型的项目。

(2)Web报表软件+程序员开发。用报表软件的好处有很多,象提高开发效率、节省时间、缩短工期、方便后期维护等到,就不多说了。但是市场上报表软件非常多,如何能选择出既符合项目需要、又能合理控制成本的工具呢?采购报表软件的成本遵循下面这个原则就行: 选择的Web报表软件至少能减少 50% 的报表开发工作量,报表的总开发成本降低 1/3 左右。

再拿上面的例子来说:以前做报表需要4个人月,在使用Web报表工具后,应该2个人月就能完成;加上报表软件的采购成本,原来需要10万元才能做完的事情,应该要6、7万元就能做完。

至于选择哪些报表工具,还需要拿项目中的几个表实际用报表工具做一下。

web报表的扩展功能

12.15.2008 by web报表 - 60 Comments - 0
Posted in web报表

报表工具的做基础报表功能已经不能满足于使用者多元化的统计分析需求,在应用中需要有相关的扩展功能模块给以实现,如灵活的通用查询分析功能,快捷的即时报表,高级的OLAP分析实现,web报表管理与调度等,都是提高使用者操作效率不错的扩展功能选择。但具体这些web报表的扩展功能要求是什么,应该有什么样的作用。下面本文简单介绍一下。

通用查询:
通用查询以查询结果包含的字段为对象,使用者可以灵活地任意组合自行定义复杂的查询条件,进行数据的过滤与分析,并对查询条件进行保存和复用。

即时报表:
即时报表相当于一个web端的、纯html 方式的报表向导,可自定义查询条件,简单点选即可生成所需报表,使用户可以随时轻松制作报表,并需支持报表的导出、打印。

OLAP分析
OLAP分析需是纯 HTML 模式的已变更适应 B/S 架构下的应用。OLAP分析能灵活选取维字段、指标字段、统计字段;灵活选择统计方式和统计函数可以显示隐藏行列,又可以隐藏显示指标;可以进行旋转、切片、钻取;可以根据分析结果数据生成统计图。

报表管理与调度:
报表管理与调度的作用在于全面的报表目录、用户管理、权限机制,严格保证各级用户查询、设计报表时数据的安全性;定时自动生成报表,支持多种条件下的任务触发方式,如每隔 XX 分钟 / 每天 / 每周 / 每月 / 每季度 / 每年等,以及自定义更复杂条件;参数遍历机制,报表计算时可使用固定序列、函数表达式、 SQL 语句以及自定义等多种方式的参数循环;多种推送方式,将定时生成的报表运算结果以 TEXT 、 HTML 、 EXCEL 、 PDF 、 RAT 等多种形式存入本地系统或 FTP 、 Email 至指定地方;最重要的还要有开放的接口,使用者可自定义调度方式或开发相关应用。

以上罗列的web报表扩展功能虽然说并不是必须的,但其各自功能能让使用者在应用项目中带来很多便利。应用中不一定须全部选用,因项目择取为佳。

快逸报表类EXCEL的高效报表设计

12.12.2008 by web报表 - 57 Comments - 0
Posted in web报表

相信制作过报表或者浏览过诸多报表的读者一定不会觉得有比EXCEL更好用的界面环境了,EXCEL界面环境确实是设计报表的不二选择,其设计效率与便捷的操作设置在定义静态报表方面的优势无可比拟。
同样的争议也曾经在专业级报表工具业内出现过,到底是控件式拖拽设计还是类似于EXCEL的设计模式?毕竟几个元老级别报表工具使用的都是控件拖拽的设计界面,但是,自从润乾报表推出类EXCEL报表设计工具以来,这一争议得到了更响亮的回应:即便是在专业的报表设计工具内,类似于EXCEL的设计报表的工作效率还是远超出控件拖拽式的设计,如同以前的结论:在习惯了EXCEL的设计环境以后,没有人愿意拿powerpoint的矩形框来拼表!
EXCEL即便是对非专业人士而言,也是一个容易上手的制表工具,入门根本不需要多少时间,很快就可以从无到有制作出界面精美的表格。下面我们来看看快逸类EXCEL的设计模型在多大程度上继承了EXCEL的特点。

快逸报表类EXCEL的设计界面

快逸报表类EXCEL的设计界面

在左侧窗口的主设计界面,是最为常见的行列式二维表格,在这里设定格式时候会发现,在设定静态风格上,快逸与EXCEL的功能完全一致:

  • 设定单元格宽度和高度、背景色、前景色、显示格式、换行、格线等等;
  • 字体类型、字体大小、字体粗细、斜体及下划线设置等;
  • 数据水平对齐、垂直对齐;
  • 格式刷;

在定义格式方面,这些都与EXCEL毫无差别,而快逸的设计环境在静态格式的基础上还对单元格的表达式进行了继承;还记得如何在EXCEL中定义表达式么?想要在E3单元格中汇总A3-D3的数据,那你要在E3单元格中写入:=SUM(A3:D3)。同样的例子不妨拿到快逸里面试一下,你会发现,在快逸里面表达式处理与EXCEL如出一辙。
快逸可以像EXCEL一样对位置变动的单元格中的表达式自动调整,如果在上面的表格里面,我在B3和C3之间插入一个新列,这时候EXCEL的F3单元格(原E3)的表达式会自动调整为:=SUM(A3:E3),同样,在快逸的设计表格里,当设计者插入一行或者一列时,相关的表达式也会进行自动调整;不仅如此,诸如:A2+B3-A4、(A1+E2*D4)/C3,同EXCEL一样,这类灵活的公式定义也能得到正确运算。
快逸报表是在继承EXCEL设计习惯的基础上实现了动态扩展数据的功能,这也是EXCEL无法实现的地方,例如下面报表的设计:

报表设计

它的实际设计界面如下:

设计界面

就工作效率而言,处理诸如上例之类的报表,快逸报表毫无疑问是报表设计人员的利器,正是由于快逸的这种先进的类EXCEL的设计模式,与以往的工具相比,同一报表的制作效率提高竟达90%。这也是为什么自快逸报表问世以来,受到广大报表设计者、编程人员、项目管理者的热捧,因为同传统的报表工具相比,快逸报表确实是提高WEB报表设计效率,缩短开发周期,有效降低开发成本不可多得的新一代报表工具。

中国报表漫谈

12.11.2008 by web报表 - 2 Comments - 0
Posted in web报表

本文转自润乾报表

这两年来雨后春笋般地冒出二三十家做报表工具的公司,统统号称能处理中国式报表,大概是这中国报表复杂得都世界闻名了,但凡能搞得定中国的报表,那也就没什么搞不定的报表了。弄到后来有好些所谓的报表只要能在格子里摆条斜线就敢说能对付中国报表(这也太小瞧祖国文化了),而且老外也开始扬言适合于中国报表了,这时髦,不赶怕是不行了。

可话说回来,这中国的报表确实够复杂、巨费劲。用户拿出一撂纸往咱面前一堆:“就照这个做吧”,立马头就晕了,随便选一张搞个两三天是家常便饭,运气坏了折腾一礼拜也不是多罕见的事,手里握着世界排名前三的高档武器(这里不方便点名批评,大家心领神会吧)依然搞得人垂头丧气,末了还是得拿出看家工夫——写代码!谁让咱是程序员呢,就这命呗。

那到底啥才算是中国式报表?中国的报表到底复杂在哪里?号称能对付中国报表的工具到底灵不灵?中国人是不是吃错了什么药非要把报表搞这么费劲?

我们就来胡乱聊聊中国报表的这些闲事。

我们先来研究一下中国报表的特点和当前报表工具的问题。

先从样子上看,中国人的报表好象很少有没有格线的,不仅有格线,还恨不得搞它三五层,大格套小格,更不要说大伙津津乐道的斜线了。可人家老外的报表真地很少有线哟,就那么几个数对得倒也整齐。不过,老外的表层数不多,不容易看花眼,中国的表头比较乱,没有格线容易看走眼的,所以格线确实是非常必要的。

格线既然是为了令数据对齐的,那线本身更是应当横平竖直、一贯到底,小学生画表都是拿尺子比着,一气画老长一条。可老外的武器中却没顺便带上尺子,只是把一些数连同其框框摆来摆去,美其名曰拖拽,号称只要用鼠标简单拖拽就可画出报表。

这么一来,一条长线就要靠十几个甚至几十个小框框拼出来了,一个挨一个。哎,本来一笔就画得出来的线,要堆上几十段,你说烦不烦?单层的还可说,偏偏我国人民喜欢一层套一层,这样就得上下左右全面对齐,这么多小框框指不定哪个不太老实偏出去一点点,直线就变阶梯,中国表还经常特宽,搞得顾了左顾不了右,哪天用户心血来潮要加减几个框框,那可累死人了(用户反正不干活,眼不见心不烦),而且这种纯粹的机械劳动叫我等来搞,真有愧于国家多年的栽培,此时那三字经是不由得要脱口而出的。这还没算完,辛辛苦苦画整齐的表,怎么打到纸上又不齐了,敢情这东西还和分辨率相关,哎,这打印机何苦要比屏幕分辨率高这许多。

这种所谓先进的“拖拽式”其实可以用来画任何东西,是一个一般性的图元编辑器模型,半点也没有体现出表格的规律性,什么都能画,可什么画起来都不大方便。

老外的不行,国人造的如何?可惜,绝大多数国货都在抄老外,谁叫人家发达呢,咱也分不清好不好,都给抄来了。

难道就没什么可使的兵器了?有!当然有,光是摆样子又没多难,人家老外也有这种兵器,而且好使得很。

那就是大名鼎鼎的EXCEL了。EXCEL采用网格线把格子围出来的画法,配合以合并格和边框,好比给大家配上尺子和笔,这下爽了,一个看似复杂的表格三下五除二就搞定了。EXCEL的画法充分体现了表格的规律性,所以特别方便,方便得连用户自己都会搞了。

这下又坏事了,用户太喜欢EXCEL了,于是要求所有报表都要能生成EXCEL的格式,更有甚者,以后不再给咱一撂纸了,给咱一批EXCEL文件,扬言要咱直接读进去,省得再画。

这可更苦了用老外工具(或抄老外的国货)的人,拖拽式和EXCEL的搞法完全不同,定要生成EXCEL文件的话,大都会丧失格式(国货大抵如此),个别使了大劲的可以搞得很象(老外的一般有这个本事),又还是依赖于您的对齐工夫,稍有不慎,嘿嘿,一行变N行。至于读入EXCEL文件,那更是想都别想,还不如打到纸上再对着描着舒坦呢。

那咱干脆直接就用EXCEL好了,不用这些罗里巴索的工具了。哎,这还是有点不大行,EXCEL的格式上是顶呱呱没得说,可没什么数据汇总方案,基本上没法从数据库中读出数据自动产生报表,这毕竟是咱用报表工具的主要目的,否则又得编程序往格子里填数据。

刚才说了,绝大多数国货在抄那种“拖拽式”的老外,那剩下的小部分就在抄EXCEL了,同样抄得倍儿象,没什么数据汇总功能,只能画画样子,也还是没法用。

不过,也真有被这可恶的“拖拽式”折磨过头的,自已编程去准备数填入EXCEL(或类似产品)。这现象其实也还得怪这些报表工具不争气,不仅画起来费劲,统计汇总的本事也就比EXCEL强一点点,离中国报表的要求差得远。这就是我们要谈的第二个方面,也是中国报表真正最复杂的地方。堆框框虽费劲,可有道是只要功夫深,铁杵磨成针,但统计汇总本事不行的话那就没治了,无论功夫有多深,木杵总也磨不成针。

数据统计方面的问题要比报表样式的问题多得多,也严重得多,要分几个方面来研讨。这些研讨主要且只能针对拖拽式的报表工具进行,毕竟这些东西还算有点自动化本事。

中国报表统计方面第一个重要特征是多数据源。

所谓多数据源是指同一张报表的数据会来自多个不同的数据表或视图,甚至来自多个不同的异构数据库!这东西空口说有点费劲,咱瞧上俩例子。

1)人员信息表

姓名   性别   年龄  
政治面目   学历   职称  
家庭住址  

家庭成员

称呼 姓名 性别 年龄 单位
         
         

         
没有特殊情况下,智商正常或以上的人都会在数据库中设计两张数据表来保存这个表格中的数据,那么这张表格的数据就会同时来自这两个表。

2) 成本销售表

购进货物

销出货物

余额

期初

                 

1

                 

2

                 

3

                 

合计

                 

   
一般为了业务系统处理方便,购进和销出信息在数据库中也会是两个数据表,这张报表中不仅有两组来源不同的数据,而且之间还要运算(余额)。

可惜,不知怎么搞的,这些老外和抄老外的武器全都是单数据源的。不论你的数据来源(那SQL语句或存储过程)搞得多复杂,到了报表这一端都必须变成单个的二维表了。

那这些工具是咋对付多源问题的?

对于第一张表,上下部分格式完全不同,只能采用子报表的法子了, 也就是把下半部分造成一个子表贴进去。这样倒是解决了多源问题,可新问题又来了,首先让原本就极难对齐的格线变得更难对齐,目前这个还算简单,如果搞上三五个子表横七竖八的排起来,每个子表都不知会变得有多大(表会根据数据库中数据扩展),那就要充分考验您当初平面几何念得如何了;其次主子表之间除了简单的参数传递外,互相没法沟通,要想把几个子表中的数加一加,对不起,您得自个儿呆一边重算去。所以,子报表是能不用就甭用的。

而第二张表,样子看起来倒不复杂,用不着搞子表。不就俩数据表吗,咱会叉乘呀,写个麻烦一点的SQL不就得了吗。那是,俩表时这么搞一下还行,可指不定会有几个源呢,中国表中有七八个数据源的并不罕见,甚至十几个的也不过份,您总不能把这一大堆表都让可怜的数据库去叉乘吧,如果真这么搞,算一个表您就可以沏杯茶歇一下,茶喝完了还不定能算完;而且,这SQL越写越复杂,和写代码好象也没什么差别了,那天书般的SQL语句要是出点错谁来查(SQL可没法写注释,笔者就见过长达三页纸的SQL,那确是天人所书,真亏数据库居然算得出来)。这还不算,如果这几个源来自多个不同的数据库那可就彻底完了,想喝茶都没戏了。

怎么办?只好祭出最后的法宝——写代码!咱毕竟是程序员嘛,还会写存储过程准备中间数据表,无论多少源、来自多少库,只要肯写代码,统统搞得定。哎,可这么搞,还要这些报表工具干吗呢?

怎么样,折腾得够呛吧,不过,您可别松气,麻烦人的还在后面呢。

中国报表的第二个重要特征是分片,与多源相关,但又不完全一样。多源一般都会是分片的,但分片却不一定是多源的。

还是上面这两个例子,两个报表都很明显地分成了两片,每片都有自己独立的规则,很难统一成一种规则处理。而我们手中的报表工具,如果不考虑采用子报表的话(其危害在上面已经说过了),都要求报表有统一的规则,整个报表只有一片可以重复的条子(细节区和相邻的分组区),因为是单源的,想当然地以为只要一片重复区就够了,理论上就不可能做到分片规则了。

但中国报表中分片现象太常见了,同一批数据也可能按不同的主题统计汇总,比如人事表中并列着按民族划分再按学历划分。事实的情况还远不止分作两片,常常是竖着五六片,横着也是五六片,整个报表乘起来就有二十五六片。而且片与片之间又不是完全独立,横向的分片在纵向规则却又是一致的,反之也是如此,这样既算想搞成子表,嘿嘿,怕是也不大容易,每个分片的表头都要重复编排,对齐则更是要命。

如果运气好,虽然分片了,但整个表的样式看起来还是一致的(比如上面的第二个表),那还可以使出咱最后的杀手锏——写代码!咱写程序把分片的数据搞成一片不就完了,那还是那个话,咱花钱买这这报表工具干吗来了?

运气不会时时都好,如果碰到那种上下(或左右)几个分片中分组层数都不一样的表,那就连最后的法宝都不管用了,就算代码能把数给算好,可格子却拼不出那种上下不同的样子,这会儿您就会特别想念EXCEL了,至少样式是可以很随意的,写代码也就可以搞定了。哎,直接做是做不出来了,用子报表也太恐怖了,想法和用户商量吧,搞表格简化一点吧,别老搞这么怪的样子,我做得烦,您看着也晕吧,咱改简单点吧。

够烦心了吧,嘿嘿,您可甭急,分片问题这才说了一半。

具体到每个分片也不是省油的灯,不象老外弄得那么简单,一下把所有的数都列出来,或者把所有的分组一个不落一个不重的列出来,这种搞法我们叫做“完全划分”。对应的就还有“不完全划分”,也就是分组中并不是把所有出现的情况都列出来(这种很常见),而且还可能重复列出(这个相对少见些)。比如我们按民族划分人员时,不大可能把五十六个民族全来一遍,一般也就是列几个大的民族再加个其它。比较典型的不完全划分现象就是固定行列,无论数据库中有多少记录多少分组,咱就只关心这几种情况,表格永远只有这几行(列)。

这可奇了,会变多的行列得能做出来,固定的还搞不定吗?嘿,还真是这么回事,老外这些东西天生就是和数据库绑定的,固定行的倒不是搞不出来,可又要写代码或者复杂的SQL去准备数据了,象著名的资产负债表,用这些报表工具去搞简直就是有点摧残生命了。

而且就算是会变动的,这些工具也还有个行列不对称的问题,由于和数据库贴得太紧,大家只见过记录数会变的数据表,都没怎么见过字段数也会变的数据表,于是这堆工具也就专心处理行方面的变化了,拒绝去处理列数会变的表,后来总算有了一些打补丁的交叉表模板,能对付点事了,但总是用起来不那么得心应手。可咱中国报表才不管这些,想往下长就往下长,想往右长就往右长,咱没觉得行和列有那么大的差别,至多列数可以少一点,总不能不让咱动呀。这么一搞,只要碰到变列的交叉表,除非特别规整的,这些大牌武器就又要虾米了。

中国报表统计方面的第三个复杂点是格间运算,特别是跨行组的运算。

要统计就要有运算,所有的报表工具都提供了计算汇总的功能,运算只有两种,一种是行内各列之间的运算,另一种是针对某组(或全体)所有数据进行的汇总(可能带条件),两种运算可以组合。但是,在中国的报表中只有要时间序列的,多半就要涉及到比上期、比去年同期之类的运算,这种运算跨行甚至跨组了,这个本事,咱手上这些报表工具又没有了。这是有原因的,大体这类工具都和数据库的概念匹配得很好,而数据库的行是没有次序的,搞不清谁是谁的上一行,比上期就没法定义了,比去年同期这种跨组运算更是想不明白了。为了解决这些问题,有些工具添加了一些引用上行或累积值的特殊函数,但跨组运算依然没法处理,您只好再一次使出编程序的法宝,自己写代码把数据准备好吧。

这种比较有规律的东西倒还不算太难办,编程序准备数据或是写个复杂些的SQL都还是可以搞定的。但中国表中常常还会有些独独的格子,其运算方法和谁都不搭界,或是胡乱从表格中东西南北挑几个格子加减乘除一番,或是干脆自个儿到数据库中再搞一句SELECT算一把,完全与其它格子之间无规律可循,整一个十三不靠。这下可就费大劲了,不是在后台写点程序准备好数据库完了的,要生成完表格再编程序计算出这些数填进去,这种搞法一般就得采用报表的脚本或者宿主开发语言来写代码了,弄得代码满天飞,维护时找不到北。

这三个较大的数据统计问题已经把大伙折磨得差不多吧,其它相关的还有一些次要问题,比如参数和宏的引入、交叉表的表头向右对齐问题等等,咱就不细说了。

不过,事还没算完。中国报表还有填报的要求。

所谓填报,顾名思义,就是填了再报,那报表不是统计汇总完了就完了的,还要能填能改,改完的结果还可以再存起来,咱从小不就常常填表吗?可老外哪里想过这种问题,造出来的工具统统没有这个本事,人家觉得报表是报表,就是不可改的,填的表是另一种东西,根本不能叫报表。但咱中国人天生就认为表都是可以填的,这世上哪有不能填的表,那还叫表格吗?

说得也是,人家EXCEL就可以填,而且填着还方便得很,搞得按照EXCEL抄的国货也统统有填的本事。不过,话说回来,这些工具还是有上面说的问题,没有数据模型,填完的数不知怎么写进数据库,于是常常只能放进文件中(就象EXCEL文件本身),等着您再编程序处理吧。

填报功能说起来其实也挺复杂的,首先要允许表格和数据库字段的随意对应,我可能整表一条记录,也可能一行一条记录,甚至可能一格一条记录(交叉表填写),这几种情况还可能是组合出来的,同一张表一下子写进好几个数据表。填的过程中还应当有自动计算能力(比如EXCEL就很强了),提交时应当有合法性的检查功能,看看您填的数是否合理;更有甚者,中国要填的表经常是一套一套的,十几张之多,那不是一时半会儿填得完的,咱得下载下来回家慢慢填,这又需要多页填报或离线填报的功能。这每条功能搞起来都没那么容易,够狠吧!

除此之外,中国报表还有不少折磨人的小地方,特别是在打印输出方面,比如一张纸上打印几个小票据,横向分栏,横向分页时左表头的重复,末页补足空行,票据套打等等,这些比较头痛但还不算什么根本的问题,这里就不仔细评说了。

还有一个和中国报表特征没啥关系但是程序员常常碰到的头痛问题,就是产品的集成性。

在国内做应用开发,报表只是应用的一个部分而非全部,报表总是要被集成到应用系统中去,如果某个报表工具能力超强,但却不可被集成,那也是没啥意义的。

考虑到当前国内应用开发的现状,我们只研讨基于J2EE机制下的B/S应用的报表集成。

现在流行的报表工具几乎都是独立服务器形式。咱可能资质愚钝,想了许久,楞没想出独立服务器的半点好处来,倒是想出一大堆坏处,下面就来批判批判:

报表服务器与应用程序不在同一个进程空间内,数据沟通都需要通过网络协议进行,即算是同一台机器上,也要把数据传来传去,无端浪费时间降低性能;这种独立的服务器常常也还自己一套用户权限管理机制,设计得还很复杂,咱的程序必须向这个规矩上靠,可这套规矩从来也不会够用,应用系统的用户管理啥时候也没那么规整过,就乖乖地按它家设计的样子来,比如您何曾见过这样的系统,把应用系统中的柜员、科长、局长这种业务角色建立在ORACLE的用户上?这种费了劲又严重影响集成度的东西其实不搞也罢,常常因此浪费巨多的时间还是和应用接上不口。

然后还有问题,独立服务器又没法充分应用服务器的本事,比如数据库连接就不可和应用系统的其它部分共享,非要独独地自己搞一摊,更过分的是集群能力,也还得听命于这个报表服务器。靠,我就不信,Weblogic的平衡负载能力会比你的报表服务器要差劲?人家专吃这碗饭的会搞不过你?可没办法,也只好由着它折腾了。还有布署方案,本来所有的程序数据打个WAR包很方便就上去了,可它偏要与众不同,要独自战斗,还是搞得咱没脾气。

想来想去,估计美国人可能不大需要被集成的报表工具,所以老外的产品也不是为了被集成而设计,这也就情有可愿了。可叹的是,国人抄老外时也没怎么想想,大多一古脑地把体系结构也抄了过来,特别是海归派的新兴企业,抄得有鼻子有眼的,费了老劲还没落到好;有系统集成经验的国产报表厂商就还稍好一点,没去费那没用的劲。

牢骚差不多发完了,这下您该知道中国报表到底是怎么个麻烦法,为啥我们有了国际水平的先进武器依然过得很衰。这些流行的工具名头虽响,确实是极其不适合中国报表的,号称能适应中国报表的大都是胡说八道,赶赶时髦而已。

是不是中国人真地吃错了什么药非要把报表搞这么复杂,以后有没可能简单起来?

报表工具厂商中有一个较普遍的说法是中国现在的应用水平太差,用户都不懂信息化,所以造成了报表复杂,一句话,就是咱的需求错了,咱不够高档,人家高档的美国用户就不用这么复杂的表格。

听起来有点道理,其实是胡扯!明明是自己做不出来,偏偏要说用户的需求不合理,象是《笑林》的那个笑话,和尚念错了经却指责人家死错了人,真是岂有此理!

说老实话,由于没有信息化经验而设计出不合理的报表当然也是存在的,但大部分情况下即使信息化程度已很高,那报表还是复杂得很,而且信息化程度越高,EXCEL使得越熟,那报表就越复杂。比如银行,在中国算是信息化进行最早的行业了,您去瞧瞧银行的报表,嘿嘿,晕死人不赔命的;再如日本人,信息业够发达了吧,那报表还是那样复杂得没商量。至于说美国人的表为啥不太复杂,咱没在美国生活过,还真一下子搞不清。不过,中国的报表复杂是很有道理的,各项信息在表上一目了然,就是省事。所以笔者认为,大概是东方文化传统的因素让中国报表复杂下去,如果真是这种原因,中国的报表还将一如既往的复杂下去,怕是没什么简化的指望了。

所以呢,不要寄希望于报表会变简单,那会被你的竞争者置于死地的,还是努力想法怎么解决这些问题吧。