JDMBA/
共201个网摘 [
1 2 3 4 5 6 ...
7 ]
下一页 |
访问JDMBA的个人空间
JDMBA收录,使用标签:报表,时间:2007-3-28 16:28:15 | 相关网摘,我也收藏
目前市场上主流的Web报表工具,典型代表有如下四种:水晶报表(Crystal Reports)、Style Report、数巨报表(Max@X Reports)、润乾报表。
基本情况
水晶报表是最早进入中国市场的,在早期微软的开发工具VB中集成了该产品,故而是目前知名度最高的报表产品,无论是在国际还是国内市场,均有大量的用户。其设计模型采用带状分布设计模型,通过在不同带状区域中放置控件的方式进行报表绘制,具有非常好的扩展性和适应能力。
Style Report是最早出现的Java报表产品,可以算是Java报表的开山鼻祖,同时也是目前国际市场上知名度最高的纯Java报表工具。具有出色的大并发实时性能表现,曾经在奥运会期间为来自世界各地的成千上万的访问者提供了实时、快捷的成绩发布系统。因其进入中国市场较晚,在国内用户中名气不大,目前主要集中在一些大型高端的报表应用领域,如银行、通讯等领域。其设计模型采用表格设计模型,类似Excel。
数巨报表是一款经历多年市场锤炼的国产报表产品,是国内报表工具市场上主要产品之一。其设计端采用C++开发,服务器采用Java开发,同时兼顾了设计的人性化和可移植性。在其设计模型中则同时采用了带状分布+表格的设计模型,充分发挥了带状模型的扩展性和表格模型的快速设计能力。
润乾报表是近两年在报表市场上突起的一匹黑马,纯Java报表(设计器和服务器均采用Java开发),采用表格设计模型。润乾报表是国内第一个把多数据源关联交叉功能,提升到产品战略高度来宣传的产品,从而迅速在业界名声鹊起。
水晶报表
水晶报表是国内报表市场的启蒙者,早在90年代就进入了中国市场,用过VB的程序员,估计没有不知道它的。其设计风格,几乎已经成为了带状分布设计模型的标准。很多产品,包括微软的Reporting Servers、数巨报表等产品,早期版本几乎都是以水晶报表的操作风格为蓝本设计的。
在西式报表制作方面,水晶报表已经走到极致,通过图形化界面和VB Script脚本的结合,几乎没有什么西式报表是设计不出的。更关键的是,在服务器效率优化方面,水晶报表一直做得非常优秀。
并且,近两年来,为实现真正意义上的本土化,水晶报表已经加强了在满足中国市场需求方面的研发力量,在研发团队中大量使用具有中国文化背景的研发人员,希望在界面风格、功能模型上挽回市场劣势。在加拿大温哥华的研发中心,主要就是由优秀的中国软件开发员参与研发。比如,主力工程师吴炬,自1992年参与开发水晶报表第一版,到今天已成为BusinessObjects公司水晶报表产品的总设计师,以及其它重要商务智能产品的首席开发人员。再如,程序员乐伟良,1995年参与水晶报表研发,如今也已成为BusinessObjects中国研发部门的研发总监。
在被BO收购后,水晶报表已经放弃了向全线BI功能方向拓展的必要,转而开始注重与BO其他产品的融合。使用水晶报表的最大好处在于,一旦客户需要要将单纯的报表功能向完整的BI功能发展,那么此时有BO作为技术后援,这种过渡和迁移将变得异常容易,企业为此承担的技术风险会降低很多。这也是很多用户选择水晶的原因之一。
以水晶报表的力量和重视程度,借助BO在商业智能领域的强大市场和技术优势,水晶报表将有可能给我们演绎一出不老的传说。
Style Report
Style Report是全世界最早面世的纯Java报表工具,以Java报表开山鼻祖来形容,似乎并不为过。由于Style Report不擅长市场宣传,加上进入中国市场较晚,故而在国内用户中名气不大。但这并不妨碍Style Report在高端应用领域的渗透和应用。
作为最早面世的Java报表,Style Report不断受到竞争对手的挑战,这种挑战帮助Style Report至今仍然保持着行业领先的优势。借助全球化的开发力量,Style Report可以在任何时候最先获得最新的技术发展动态,并将其作为产品发展的指南针。有一个事实可以证明,那就是Style Report是最早基于XML, J2EE, JavaScript 和SOAP等开放标准而设计的,目前市场上所有的Java报表,在此方面都是跟进者。
此外,作为Java开放性的拥戴者,Style Report同样将开放性作为产品设计的标准:设计好的报表是以XML文件格式保存的;报表的引擎是100%纯Java的;Script语言采用的是Java Script;传输协议采用的是HTTP, RMI or Corba。这些为Style Report作为一款企业级的报表开发工具奠定了基础。
Style Report不仅在奥运会期间为来自世界各地的成千上万的访问者提供了实时、快捷的成绩发布系统(一个能够处理大量并发请求的实时系统),为Telcodia的电话公司运营支持系统(Operation Supporting System (OSS))的几千个客户每天提供从几页直至长达几千页的从日常运营直至决策支持和分析的报表,事实上,在全球各地有数以千计的客户在使用Style Report来完成他们的各种各样、丰富多采的报表需求:您可以在美国全国棒球协会与球员所签的和约中、在FedEx所承运的快递包裹所贴的货运标签上、在ABB专为亚洲市场开发的电网管理系统中、在GE公司医疗器械部的内部销售管理系统中、在中国上海电信的ERP系统中、甚至在摩托罗拉公司的手机生产线每隔几分钟所产生的实时产品合格率的报告中、包括将来中国一些地区的电力局的所有客户在每月所打印的电费发票上,都能看到Style Report的身影。
所以,尽管Style Report不擅于市场宣传,但凭借技术上的实力,在国内不少大型应用领域,都可以看到它的身影。
数巨报表
数巨报表,是国内最早从事Web报表工具研发的企业之一,也是目前国内报表市场上比较具有竞争力的产品。分析这个企业和产品很有意思。
首先它非常好地把握住了国内报表设计的特点需求,数巨报表所提出的柔性化报表模型、后交互式报表模型等等,均抓住了国内用户的需求要害,所以产品面世不久,就受到业界的关注。
第二是它的借鉴能力非常强,同类产品一旦有新功能出现,你很快就可以在数巨报表的升级版本中找到这个功能,所以它的功能升级频率是同类产品中最高的,一般3个月左右就会有一次版本升级。
第三,是它从来不做标准冒险。相对于同类产品在标准选择中非此即彼的态度,数巨报表往往选择多项支持的态度。比如,在表格模型和带状分布模型的选择上,水晶报表选择了带状模型、Style Report选择了表格模型,两种模型各有优势。而数巨报表采用了一种非常实用主义的态度,即在一个产品中同时集成两种模型,把选择权交给用户(你自己看着办,觉得什么合适就用什么)。
数巨报表成功的还有一个很重要原因,是技术高端化,这一点应该是受到水晶报表和Style Report成功模式的启发:水晶报表不仅仅是一个报表工具,同时也是BO的商业智能产品线中的一个组成部分;Style Report不仅仅提供报表技术,并且提供了一个轻量级的OLAP引擎,可以满足一般情况下的OLAP分析工作。同样,数巨报表也不是一个孤立的产品,而是作为数巨商业智能系统(Max@X Analyser)的一个部分而存在。这样当用户需要将单纯的报表功能向BI扩展的时候,就可以避免更换报表产品,保留原有开发成果,实现应用平滑过渡。
润乾报表
说到国内的报表工具,润乾报表绝对是值得关注的产品。在将技术认知与市场运作相结合方面,润乾的手法绝对值得作为一个经典案例研究。
不得不承认,润乾报表的商业眼光非常犀利,它率先发现在国内报表设计过程中,多数据源关联交叉表是非常常见的一种报表样式,并且迅速把这个功能提升到战略角度加以宣传,从而使润乾报表迅速在市场上崭露头角。
在宣传手法中,首先是打足技术牌。润乾报表将多数据源交叉表功能,起了一个非常技术化的名字“线性报表”,并开始在媒体、技术论坛等方面反复强调线性报表的重要性与革命意义。为此,其董事长蒋步星专门写了一篇文章,叫做《感谢数学》,将这种需求的发现归功于在数学方面的研究。这种学术化的宣传策略,迅速在客户中获得共鸣,从而奠定了润乾报表的市场基础。
其次,润乾报表将具有技术功底的研发人员推至营销一线,将“线性报表”的概念加以系统化梳理,从原理到实现效果,充分发挥了技术人员的论文功底,从而一时间线性报表成为衡量报表产品质量的一个重要水准。
第三,在此基础上,润乾报表报出了一个高出所有同类产品的价格,瞬间形成轰动效应。尽管这仅仅是一个报价,在实际操作中可以打到4折、3折,但是对于市场营销而言,目的已经达到,价格上的轰动效应,以及产品宣传上的侧重点,让润乾报表的高端形象迅速丰满起来。
而后,在建立起品牌知名度后,润乾报表很快推出了一款新的产品,快逸报表。这款产品定价在3000元,是目前市场上除开源软件外最廉价的产品之一。市场操作者的目的在于:以润乾报表的高价位建立产品高端形象,以快逸报表的低价位,借力全面铺开市场,以获得现金收益。
为避免左手和右手的冲突,低端产品启用了新的品牌。新产品以润乾报表为参照,剔除了线新报表的支持。润乾希望能用这个产品,以低端价格全面铺开市场。然而问题在于,润乾报表的优势完全在于用户对于线性报表的认可,剥离这一点,产品将乏善可陈。所以,失去了线新报表支持的快逸报表,在润乾报表的品牌光环下,尽管已经产生销售,但是想全面开花,胜算实在渺茫。而如果将线性报表重新赋予这个低价产品,那么作为高价产品的润乾报表,又将如何销售。这实在是一个两难的问题。
另外一个可能制约润乾报表进一步扩大战果的问题在于:学习难度。润乾报表一直强调设计者在数学方面的深厚功底,然而成也萧何败也萧何,正是这种因素,导致润乾报表在使用思路上极其抽象,在产品设计者眼中非常简单的问题,到了使用者这里,往往需要长时间的推敲才能明白该如何去做,这就给使用者带来很大的学习难度。难怪有使用者抱怨,一个简单的用Count函数来排名次的功能,在润乾说明书中居然用了5页纸才写明白。
在几个典型产品中,润乾报表是最富有争议的产品。拥戴者认为它为报表市场的发展带来了新的气息;而持反面态度者认为润乾报表在研发上投入不足,单凭营销手段,恐怕难以长久。总说纷纭,事实究竟如何,让我们拭目以待。
http://blog.ccw.com.cn/cnit/post/20070216/14917.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 15:59:06 | 相关网摘,我也收藏
今天在做报表时用到了水晶报表,调试的时候很顺利。后来要分组,加上了也没有问题。
分组时进行了统计,问题就出现了。
开始报错,说什么布尔值错误,我数据库字段根本没有真假类型的。搞的我一头雾水。
连接数据库后发现有一个字段没有加入报表就有红色的钩,这下就奇怪了。(因为CR默认时字段加入报表才会出现),我又从新连接,修改表,问题还是不能解决。
狂郁闷啊,我把报表上的所有内容全部删除,运行还是同样报错误。这就奇怪了,我都没有连接数据库,一张空的报表怎么也会有错。
于是下定决心非要找出原因,后来发现一个规律,不管报什么样的错误都是提示一个字段。
是否在群组里面有问题,因为问题开始这里。
报表===>编辑选择公式===>群组,发现了这里有一个字段名就是那个报错的。
问题终于解决。
小结:水晶报表删除数据连接后会删除所有的在页上的字段,那为什么群组上的删不了。
其实快到最后的时候本来可以重新做一个报表,但问题永远找不到。
发现规律后很快找到问题所在,所以在遇到问题的时候不能着急,静下心来。
万事都有它的规律,抓住这一点,什么问题都能迎刃而解。
整个项目都用VSS管理,找到了原因,删除掉的文件还是能找回来。也不需要重新做。
http://www.cnblogs.com/cnaspnet/archive/2006/10/25/539316.html
JDMBA收录,使用标签:报表,时间:2007-3-28 15:12:59 | 相关网摘,我也收藏
不知道大家注意到没有,国外的很多报表工具,象水晶报表( Crystal Reprot )、 Style Report 、 Jasper Report 、 IRport 、 Fast Report 、 QuickReport ( Dephi 内嵌报表控件)等等,这些产品有一个共同点:×× Report 。 Report 在字典里的解释大致是报告的意思。从产品的名称看,国外的报表工具似乎更象在解决报告的问题。
国外的报表样式非常规整,没有格线,表头非常简单,没有斜线表头、没有分层分组。一张报表提供的信息有限,如果要看所有信息,就只能几张表对照着看了。另外,国外的报表似乎没有填的需求(也许是业务规范或者应用水平高的缘故?)建议大家找几个报表工具提供的样例来对比看看。
基于这种报表需求,几乎所有的国外报表工具(除 F1 外)都采用如下方式:
( 1 )数学模型都是基于近三十年前的 SQL/OLAP 理论设计的,虽不断地有所改良,但根本处理方案并没有本质的变化。
( 2 )报表工具的主编辑界面呈条带状,以模拟 SQL 中的 Select 和 Group 运算;在行方向(横向)上的能力很强,可以添加小计、合计等各种运算。
( 3 )拖拽式制表,不懂业务的人做起来也非常方便。
( 4 )采用独立服务器,有独立的权限控制机制,无法享受应用服务器的集群等能力。
http://www.blogjava.net/java-report/archive/2006/10/17/75664.html
JDMBA收录,使用标签:报表,时间:2007-3-28 14:58:09 | 相关网摘,我也收藏
在一个多层结构中,水晶报表的使用往往比较繁琐:
1、在项目中添加数据集,形成xsd文件
2、利用xsd文件,在水晶报表环境中生成报表
3、回到.net,添加rpt文件
这样做的坏处除了繁琐,就是在UI层直接要访问数据库,将使得层次结构晚节难保。其实利用水晶报表的推模式,将很灵活的实现报表。思路是:事先建立报表的架子,运行时为报表指定数据。具体实现:
1、在水晶报表环境中,建立新数据连结,怎么方便怎么来,建议用oledb,快。
2、然后创建报表
3、回到.net环境中,添加rpt文件。
4、运行时为某个事件(往往是查询事件)编写处理函数,创建rpt类的实例,并设置其数据源为查询结果的数据集。将该实例赋给报表控件。
5、重新绑定即可。
6、注意:似乎水晶报表控件没有Viewstate,Postback后很难保持状态,必须在page_load中判断postback状态,进行数据赋值操作。
http://www.cnblogs.com/jetz/archive/2005/06/15/174659.html
JDMBA收录,使用标签:报表,时间:2007-3-28 14:48:01 | 相关网摘,我也收藏
水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。
一、在使用自带的水晶报表时,请注册,否则只能使用30次
水晶报表注册码
注册号:6707437608
密码:AAP5GKS0000GDE100DS
二、使用CrystalReportViewer进行预览
CrystalReportViewer控件允许在应用程序中查看 Crystal Report。ReportSource 属性用于设置要查看哪个报表。该属性设置之后,报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径,也可以是强类型报表。
1.打开“工具箱”,并将一个 CrystalReportViewer 拖到窗体上,我们命名为rptVew。
2.通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。
3.当运行应用程序时,报表将显示在查看器中。
三、创建新报表
1.指向“添加”,单击“添加新项”。
2.在“添加新项”对话框中,从“模板”区域选择 Crystal Report,将报表命名为rptClient,单击“打开”。
3.在 Crystal Report 库中,选择下列选项之一:
·使用报表专家 — 指导您完成报表的创建过程,并将您的选择添加到 Crystal Report Designer。
·作为空白报表 — 打开 Crystal Report Designer。
·来自于现有的报表 — 创建新报表,它与指定的另一报表设计相同。
注意Crystal Report 库包含许多专家,可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表,以确定哪种报表构造方法适合您的需要。
4.单击“确定”按钮。
如果选择使用“报表专家”,便会出现“报表专家”对话框,并带有数据资源管理器。为每个文件夹选择所需数据,完成“报表专家”选项卡界面上的操作,然后单击“完成”来访问 Crystal Report Designer 和您的报表
四、是否需要动态设置数据源?
Crystal Reports 通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。
拉和推模型
为了向开发人员提供最灵活的数据访问方法,Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。
拉模型
在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。
推模型
相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。
四、从 ADO.NET 数据集制作报表
从数据库创建数据集对象
1.在项目中新建一个架构文件:
a. 在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”。
b. 在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”。
c. 在“模板”区域选择“数据集”。
d. 接受默认名称 Dataset1.xsd。
这就创建了一个新的架构文件 (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。
2. 指定数据库位置:
a. 在服务器资源管理器中,右击“数据连接”并选择“添加连接”。
b. 在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server)。
c. 单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。
d. 单击“确定”按钮。
此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。
3. 在解决方案资源管理器中,双击 Dataset1.xsd (如果它尚不是活动视图)。
Dataset1.xsd 现在应显示在“数据集”选项卡中。
4. 若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。
5. 单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。
6. 在“生成”菜单上,单击“生成”为项目生成数据集对象。
ADO.NET 数据集对象提供数据的描述,从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。
请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”,请在 Report Designer 中右击,指向“数据库”,然后单击“添加/删除数据库”。
将报表连接到 ADO.NET 数据集对象
1. 在“数据库专家”中,展开“项目数据”文件夹。
2. 展开“ADO.NET 数据集”文件夹。
3. 选择所需数据集对象。
例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”。
4. 选择要向报表中添加的表,和使用其他数据源一样。
五、动态改变数据源的代码
Dim dsdataSet As New DataSet()
Dim oRpt As New rptClient() '已建立的报表rptClient
请读者自行填充数据集dsdataSet
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet.Tables(0))
' 将带有数据的报表对象绑定到 Windows 窗体查看器,rptVew(CrystalReportViewer控件)
rptVew.ReportSource = oRpt
注意 FillDataSet 方法可连接到指定的数据库,提取数据,然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中,请使用 SQL JOIN 语句将这些表联接在一起;然后在 FillDataSet 方法中指定一个结果表
六、创建主从报表
在报表中,有许多报表是主从表结构,比如订单与订单商品明细,订单是一个表中的一条记录,而分录是另一个表中的多条记录,两个表通过一个字段关联起来,这种报表可利用其分组功能实现,
1. 新建一个工程
2. 往FORM1中添加一个CrystalReportViewer控件
3. 在服务噐资源管理器中连接到SQL SERVER 2000上的Northwind数据库
4. 添加一个数据集Dataset1,将服务器资源管理器中的Orders和 Order Details加入到数据集中。
5. 添加一个水晶报表,使用报表专家,在项目数据中选择“ADO.NET数据集”,插入表Orders和 Order Details,“链接”中是关联字段的链接,在“字段”中选择要显示的主表和明细表的字段,组中选择分组依据为Orders表OrdersID字段,总计,图表,选择(可进行筛选),样式(可设置报表标题),可自行设置。设置完后,点击完成。
6. 在报表设计器中调整需要显示的字段的位置、宽度等。
7. 在窗口中添加代码。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim oRpt As New CrystalReport1()
Dim dsdataSet As New Dataset1()
Dim CN As New Data.SqlClient.SqlConnection("data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa")
CN.Open()
Dim daOrders As New Data.SqlClient.SqlDataAdapter("select * from orders", CN)
daOrders.Fill(dsdataSet, "orders")
Dim daDetails As New Data.SqlClient.SqlDataAdapter("select * from [Order Details]", CN)
daDetails.Fill(dsdataSet, "Order Details")
'使用“报表引擎”对象模型将填充的数据集,传递给报表
oRpt.SetDataSource(dsdataSet)
CrystalReportViewer1.ReportSource = oRpt
End Sub
8、运行程序
七、用程序改变报表中text的文本
代码如下:
Dim GetTextObject As TextObject
' 按名称获取 ReportObject,将其转换为 TextObject,并返回此对象。
GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13")
GetTextObject.Text = "XXXX系统"
总结:水晶报表具有非常强大的功能,还可进行导出WORD、EXCEL、RTF等文件,还可生成复杂、漂亮图表,是进行WEB和WINDOWS报表开发的利器。
http://www.cnblogs.com/MaxIE/archive/2005/12/22/302575.html
JDMBA收录,使用标签:报表,时间:2007-3-28 14:41:56 | 相关网摘,我也收藏
所谓报表工具,最核心最本质的功能,就是它的制表能力,即是否能够不写代码而制作出自己需要的各种报表工具。但用户在考察报表工具时往往很注重打印输出、绘制方案、管理调度等外围因素,而忽视了报表工具最本质的制表能力。当然不可否认这些外围的功能对一个报表工具来说也是很重要的衡量标准,但是报表工具的主要用途是制作报表,而且事实上,市场上的主流产品在处理复杂报表时确实存在明显缺陷,并不能很好地制作出我们需要的报表,半数以上报表仍需编写代码准备数据,导致工具失去意义。因此,考察制表能力对于选择报表工具是至关重要的。
那么e表 for .NET(在线演示地址: http://webreport.fcsoft.com.cn )的制表能力体现在哪几个方面呢?
首先是多源分片。
多源是指一个报表的数据来源来自多个物理数据表,甚至是多个物理数据库。这里的“多个”指的两个以上的物理数据库。
传统的报表工具只支持单源报表,即使是数据来自于多个物理数据表或者物理数据库,也需要在报表设计前将多源转化成单源处理。两三个源尚可写SQL语句完成,但多到五六个源以上时,一方面对应的SQL语句过于复杂难以维护,另一方面其运行效率降低,这时常常要编写存储过程或其它代码来准备数据了。这还只是单数据库的情况,如果多源来自多库,则更为复杂,无法直接写出复杂SQL或存储过程,需要架构专门的数据库桥后才可以完成。
某些传统报表工具也声称可支持多源,实际上指的是多数据库支持,只是把数据库桥功能集成进入报表工具中,但真正到报表设计时仍然是单源的。和我们所说的多源有很大差别。
多源往往带来分片,正是由于分片,使得报表设计必须直接基于多源进行,而不能先将多源转成单源进行。有相当一部分分片报表无论如何也不可能换成单源处理,部分能转成单源的报表处理也非常繁琐。
分片是指报表的纵向或横向或双向同时被分成了多个区域,每个区域重复规则不同,而又可能相互运算。
传统工具能够处理的上下格式一致和列方向固定的分片报表(即可由多源转成单源的报表),但会迫使用户编写复杂的SQL(UNION+JOIN)和代码准备数据,导致工作量大且维护困难;而且对于横向分片数较多报表,由于必须采用JOIN方式准备数据,导致运算性能极低,复杂度为O(Nk),k为分片数。
其次,是不规则划分机制。
e表支持独立的分组报表格式,即传统的通过一个绑定数据的过程来完成分组报表的设计,这种分组是完全规则划分的,即划分标准一致且有规则(一般都按某个字段或表达式),所有字段都必须出现且只出现一次,分组值次序与原数据记录次序一致。
但是与完全划分相对应的,在报表汇总中却常常需要不规则划分,即划分标准看不出规律(常常只能穷举),所有事实不一定全部出现在分组结果中、个别事实还可能重复出现,次序也与原数据记录无关。固定分组是不规则划分的常见表现。
例如下面这张报表。年龄段的分组就是个不规则划分,划分规律不明确,只能穷举出来;分组不完全,50岁以上的则被整合到一个组内。
这个报表用传统工具实现很困难,虽然报表格式并不复杂,但由于出现了不规则划分,无法直接用报表工具的分组功能完成,只能编程把数据准备成一个单层的二维表数据源,即加大了工作量,又很难体现数据之间的层次关系。
然后,e表还有动态格间运算的能力。
所有的报表工具都会提供一些计算列的功能,在原始数据基础上再计算出一些别的列值或统计值,这是报表展现中是不可缺少的功能。
传统工具一般只提供同行内的格间运算和针对某组(或全体)的集合运算,对于常见的跨行组运算则相当困难。个别传统工具提供了简单的跨行能力,如可以引用上一行数据,而跨组则无能为力;对于集合运算只提供个别固定的函数,如取第一名、算累计值等,无法组合出的通用集合运算则无计可施,如取第二名、算累计的乘积等。某些带条件的运算更是无法可想,如计算语文成绩在90分以上的同学的数学成绩总和。
除了有规律的跨行组运算外,报表中还可能会有一些随意的独立格运算,其值可能是报表中的任意几个其它格运算出来,甚至还可能会引用到报表外的数据(比如和数据库中的数据再次运算等)。由于传统工具没有很好的运算后报表数据项命名机制(传统工具只能用列名命名设计的数据单元),很难精确描述数据引用关系,只能写出规律性很强的表达式,但随意的独立格运算会就使传统工具无法处理,而报表外的数据引用更是只能借助脚本或外围应用程序,导致代码极为混乱。
下面这张报表是个典型的跨行组运算报表,其中有比上期(跨行)和比去年同期(跨组)运算,这种报表在传统工具中常常又必须编程准备数据。这个报表的样式并不复杂,但这些格间运算会让传统工具非常为难。只能再次依靠程序代码,把数据事先计算好直接往报表里填。
另外,所有以上的讨论中还贯穿了一点,即行列对称。纵方向上拥有的自动复制扩展的能力需要完全实现在横方向上。报表可以横向分组、横向分片,对于横向变化的报表可以定义跨列组运算等。
我们知道,报表的上述复杂性常常是混合在一起的,同一张报表中很可能包含了所有的问题,这要求我们给出完整的解决方案,而不能单独分别处理。当这几种困难交织到一起时,整个问题的复杂度要远比解决几个单个问题的总和要大得多。因此像e表这样具有非常好的针对性的专门的报表工具,是解决这些问题的最好方式。
http://www.cnblogs.com/ebiao/archive/2007/03/28/691086.html
JDMBA收录,使用标签:报表,时间:2007-3-28 14:38:04 | 相关网摘,我也收藏
报表,一直是我们做企业信息化最头疼的问题,.net开源报表非常少,也不见得怎么成熟,至于商业的水晶报表等(偶不喜欢用破解),太贵,买不起,现在行业软件价格越来越低,能省则省了.我们现在报表有3个方案 :
1 直接用reportview的localreport模式,
2服务端打开office文件,然后填充数据
3,利用javascript+Excel.Application启动客户端excel(可直接打印).
这三个方案都同时在用,然而 reportview功能还是比较有限(导出文件有些问题),而服务端打开office文件需要启动excek进程,太占用服务了吧.个人认为用excel做报表非常强大,用类似于模板语言来设置报表模板(如velocity,freemake),还是很好用的.
微软Open XML格式被批准成为国际标准,我们是否可以用Openxml来更好的实现报表呢.那么应该解决3个问题
1,不用启动office进程也能访问文档对象(而非xml,毕竟直接操作xml太复杂了),这样服务器占用资源的问题就解决了。
2,可以在web上直接打开报表,同时也可以用office打开,毕竟很多企业领导还是喜欢在web上直接打开报表,不需要打开office.
3,office 2000, office 2003能打开openxml文件.
对于第一点,可以到http://www.codeplex.com/OpenXMLObjects/Wiki/View.aspx?title=Samples
下载源码.这是一个开源的 Open XML Objects ,
using (WordProcessingMLDocument myDoc =
WordProcessingMLDocument.Open(@"C:\myDoc.docx"))
{
Paragraph paragraph = myDoc.Body.Paragraphs.New();
paragraph.AddText("Hello World!");
myDoc.Save();
}
第二点,今天早上发现一篇好文 SpreadsheetML documents in a browser ,在web上打开openxml文件,cool
第三点 请查看 如何打开Office 2007文档 。
这三个问题,已经解决,不过如果有小程序能直接阅读opemxml文件(如pdf reader),而不用下载昂贵的office就更好了。
http://www.cnblogs.com/neuhawk/archive/2006/12/20/592593.html
JDMBA收录,使用标签:报表,时间:2007-3-28 14:20:32 | 相关网摘,我也收藏
开发B/S结构的应用程序最头疼的问题可能就是报表打印了,由于只能采用浏览器来作为用户界面进行交互,所以不能精确控制客户端的打印机。而很多B/S结构的应用程序常常需要完成非常复杂的报表打印任务。而靠IE自带的页面打印功能一般不能满足需要。
采用Crystal Report是一种大型报表系统常用和推荐的解决方案,但是如果我们只需要进行一些小规模的报表打印的话,Crystal Report则显得庞大麻烦了一点,可定制性也不太好,它的打印实际上也是利用了IE的打印功能,也不能精确控制打印效果,而且需要您对它进行注册。
所以我们这里讨论的是另外一种办法,简单来说,如果您有下列需求中的任何一条,那么就可以尝试采用本方案。
方案适用性
1. 远程数据打印。需要打印的数据并不在本地,必须进行远程读取。
2. 需要精确控制打印效果,包括页面格式,分页,附加条目,表格等。
3. 出于安全性考虑,不能直接连接到数据库。
方案原理
其实原理很简单,通过XML强大的自定义功能,我们便能方便的自定义出我们所有需要的格式控制标签,在服务器端进行动态编码后通过WEB服务器传到客户端,然后在客户端进行格式解析,根据服务器端定义的打印格式从客户端直接控制打印机打印出我们需要的报表。
技术选择
由于报表打印比较复杂,为了能够精确控制打印格式,不能采用WEB浏览器页面打印的方式进行报表打印工作,只能采取自编程控制客户端的打印工作。由于.NET framework的winform可以直接嵌入到网页中,我们在这里选用了该技术,但是请注意,我这么做并不代表.NET winform是唯一的选择,其实您可以采用任何客户端代替它,例如Java Applet或者ActiveX,甚至是一个普通的应用程序都能行。
不允许直接连接到数据库,因此只能采用XML文件进行中间数据交换格式,通过普通WEB服务器的默认80端口进行数据传输。事实上,我简直找不到其它更理想的方案了,当然,web service也许能算是一种,但是它采用的是SOAP传输数据,从原理上看,应该和我们采用的XML属于同种类技术。
再补充说明一下我为什么要采用.NET编写的受控组件,优点在于:
1. 它不需要进行客户端注册。相对于ActiveX的一个大优点。
2. 比ActiveX安全性高。在.NET Common Language Runtime的控制之下运行
3. 编写方便。我喜欢C#和Visual Studio .NET。
4. 有很强大的打印控制功能。利用.NET framework类库。
5. 直接支持XML技术。
6. 和IE兼容性高。同为Microsoft公司产品。
另外,需要注意一点就是,在.NET framework sp1和sp2中默认的安全级别是不能直接运行受控组件的,但是在.NET framework 1.1 beta中又改了回来,可以直接运行了。
服务器端您则可以采用现有的服务器系统和数据库,不需要新添加任何新硬件设备和新的.NET服务器管理人员,他们往往是些要求拿高薪的家伙。 :)
服务器的工作流程为:
1. 接受客户端的标准XML模版查询。
2. 需要根据查询要求将数据库数据格式转换成标准的XML数据格式。
3. 将XML数据通过80端口发送出去。
可行性分析
由于现在的大部分数据库都支持XML格式的数据查询和转换,如SQL Server 2000,Oracle 9i,IBM DB2等大型关系型数据库。只需要通过简单的设置就能直接进行XML数据转换工作。如果数据库不能支持直接XML数据转换,也可以籍由一些服务器端脚本程序进行脚本转换工作,比如JSP,ASP,PHP等等。
客户端也不需要任何特殊的设置工作,仅需要安装一个大小为21M的.NET framework分发包,然后直接打开网页就可以进行工作。也没有操作系统限制,从windows 98到windows xp都能很好的支持。
伸缩性和安全性
伸缩性
由于采用的是XML标准数据格式作为中间数据交换,因此本解决方案具有非常好伸缩性,例如,客户端的.NET控件可以采用JAVA APPLET、ACTIVX或者是VB,VC等编写的客户端应用程序直接替换。服务器也可以任意选择采用IIS或APACHE等WEB服务器。数据库也可以采用任意一种数据库。包括SQL Server,Oracle或者是Access等。这点上文已经谈到过,因为文章的长一点并不会使送给我的T恤大一号,这里再强调一遍只是为了加深读者对XML的跨平台性的认识。 :)
安全性
由于采用的是普通WEB服务器传送数据,因此可以直接采用SSL安全套接字等已经成熟的WEB加密技术。同时还可以对XML进行数据算法加密,在客户端再进行解密,保证了传输的安全性。
由于采用的是80端口,不需要再另外新增加专用端口,减少了安全漏洞的可能性,同时还能方便的穿过双方的的网络防火墙等保护设备。
方案设计图
格式定义
为了能自己控制打印的格式,我们定义了下列的格式标签,其中在命名上参考了HTML的命名办法,所以基本上熟悉HTML的都能一看就能明白标签的具体含义。如果您觉得这些标签的表达能力还不够强,您还可以自己定义一些更多更精确的格式标签。
标签应用示例:
<root>
<pagesetting>
<Landscape>true</Landscape>
<paperkind>A4</paperkind>
<paperwidth>210</paperwidth>
<paperheight>297</paperheight>
<pageleft>0</pageleft>
<pageright>0</pageright>
<pagetop>0</pagetop>
<pagebottom>0</pagebottom>
</pagesetting>
<reporttable>
<text x="450" y="40" fontname="黑体" fontsize="24" fontcolor="Black"
b="true" i="false" u="true">最新成交合同信息</text>
<text x="70" y="100" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="true">制表时间:2002年0月10日</text>
<text x="910" y="100" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="true">单位:元</text>
<table x="65" y="130" border ="1" bordercolor="Black" maxlines="28">
<tablehead>
<tr height="25">
<td width="90" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">合同号</td>
<td width="90" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">产品名称</td>
<td width="50" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">成交量</td>
<td width="50" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">成交价</td>
<td width="50" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">成交金额</td>
<td width="50" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">挂单量</td>
<td width="50" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">起始价</td>
<td width="330" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">卖方</td>
<td width="330" align="center" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">买方</td>
</tr>
</tablehead>
<tablebody>
<tr height="25">
<td width="100" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">20021010015</td>
<td width="100" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">CNR</td>
<td width="70" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">93</td>
<td width="70" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">6680</td>
<td width="70" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">621240</td>
<td width="70" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">93</td>
<td width="70" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">6680</td>
<td width="200" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">湖北省国营新星拖拉机厂</td>
<td width="200" align="left" fontname="宋体" fontsize="12" fontcolor="Black"
b="true" i="false" u="false" bgcolor="White">中化国际贸易股份有限公司</td>
</tr>
……….
</tablebody>
<tablefoot>
</tablefoot>
</table>
</reporttable>
</root>
注意事项:
a) 如果采用服务器脚本动态生成XML文档时,发送内容类型应该设置为text/xml(普通html页面为text/html),字符编码应该为UTF-8,否则会出现编码错误问题。
b) 应该严格按照XML规定的格式来生成文件,否则XML解析器将不会予以解析。
2. 客户端
可以采用任意应用程序来读取服务器端生成的XML文件,如果采用VB、DELPHI等桌面应用软件开发工具,则可以使用MSXML的COM解析器。推荐采用.NET,内部已经集成了XML解析器,直接就可以通过使用.NET类库调用。既可以做成桌面应用程序形式,通过远程调用;也可以嵌入到IE浏览器中,直接在网页中运行。
效果示例图
打印预览
注意事项:
1. 如果采用.NET,客户端必须先安装.NET framework1.0运行环境,下载地址为:http://download.microsoft.com/download/.NETframesdk/Redist/1.0/W98NT42KMeXP/EN-US/dotnetredist.exe
2. 如果采用嵌入到网页中的形式,那么本程序需要编译成一个控件形式(一个扩展名为dll的文件),然后在网页中插入以下标记:
<object id="print" classid="http:print.dll#Print.UserControl1" Width="728" Height="460"></object>
将控件嵌入到一个静态或动态网页中。然后将该控件文件拷贝到和该网页相同的目录中(标记中Print.dll为生成的控件文件名,Print.UserControl1为该控件的命名空间NAMESPACE)。
.Net Web控件方案的实现和扩充
软件原理:
该软件的原理其实很简单,就是要方便的解析出定义好的XML格式标记,解读出文件中标记的参数定义,最后将这些信息还原成打印机输出的图形格式。
为了能表达出复杂的报表样式,我们需要定义一些标记,在这些标记中附加上具体的样式信息,作用类似HTML的标签,而我们的解析程序就相当于IE浏览器,所不同的是IE将图形输出到屏幕,而我们是将图形输出到打印机,由于打印机相对于显示屏的特殊性(例如分页),因此我们不能直接采用网页浏览器的标签解析功能来打印,需要自己来做一个满足需要的"打印浏览器"。
针对大多数报表的功能需要,我只定义了两种格式标签:文本(text)和表格(table),它们的具体属性定义和另外一些设置性的标签定义请参考前文,这里再补充一幅结构图帮助读者理解。如下所示:
结构设计:
为了描述所有的样式标记,我先定义了一个抽象基类PrintElement,它拥有一个虚拟方法Draw,然后对应表格和文本,从PrintElement派生出两个子类,分别是Table和Text,我还创建了一个Parser类用来解析不同的样式标记和创建对应的对象,它拥有一个静态的方法CreateElement,用来根据不同的格式标签创建出对应的对象。结构图如下所示:
读过《设计模式》的读者一定已经看出来了,这种设计应用了设计模式中的一个非常著名的模式:Abstract Factory。这里使用该模式的好处就是让标签对象和解析器都独立出来,降低了系统的耦合度,有利于今后在需要的时候可以很容易的增加其它的格式标签(下文将会举一个实例)和方便的更换不同的用户界面(图中Client表示Windows应用程序或者是网页插件)。
代码实现:
首先,创建一个"Windows控件库"的新项目,在项目名称处写入RemotePrint,如下图所示:
然后把新建项目中的那个默认的UserControl1类,它的构造函数名和文件名都改成PrintControl。再将它的背景颜色设置为白色,添加三个按纽,并将它们的Enable属性都设置为false,Anchor属性设置为Bottom, Right,再添加一个Label控件用来显示程序状态,它的Anchor属性设置为Left。如下图所示:
再从控件栏中拖入三个打印对象:PrintDocument, PageSetupDialog, PrintPreviewDialog,如下图所示:
将其中的pageSetupDialog1和printPreviewDialog1的Document属性均设置为printDocument1。
然后为项目添加一个PrintElement的新类,代码如下:
using System;
using System.Xml;
using System.Drawing;
namespace RemotePrint
{
public class PrintElement
{
public PrintElement()
{
}
public virtual bool Draw(Graphics g)
{
return false;
}
}
}
该类中只有一个虚拟方法Draw,注意它规定需要返回一个bool值,这个值的作用是用来指示标签是否在页内打印完毕。
然后再添一个Table的新类,代码如下:
using System;
using System.Xml;
using System.Drawing;
namespace RemotePrint
{
public class Table : PrintElement
{
private XmlNode table;
public static int count = 0, pc = 1;
public Table(XmlNode Table)
{
table = Table;
}
public override bool Draw(Graphics g)
{
file://表格坐标
int tableX = int.Parse(table.Attributes["x"].InnerText);
int tableY = int.Parse(table.Attributes["y"].InnerText);
int x = tableX, y = tableY;
DrawTopLine(g, table);//画表格顶线
Pen pen = new Pen(Color.FromName(table.Attributes["bordercolor"].InnerText),
float.Parse(table.Attributes["border"].InnerText));
int trheight = 0;
file://表头
foreach(XmlNode tr in table["tablehead"].ChildNodes)
{
trheight = int.Parse(tr.Attributes["height"].InnerText);
DrawTR(x, y, tr, pen, g);
y += trheight;
}
file://表项
for(int i = 0; i < int.Parse(table.Attributes["maxlines"].InnerText); i++)
{
XmlNode tr = table["tablebody"].ChildNodes[count];
trheight = int.Parse(tr.Attributes["height"].InnerText);
DrawTR(x, y, tr, pen, g);
y += trheight;
count++;
if(count == table["tablebody"].ChildNodes.Count)
break;
}
x = tableX;
file://表底
foreach(XmlNode tr in table["tablefoot"].ChildNodes)
{
trheight = int.Parse(tr.Attributes["height"].InnerText);
DrawTR(x, y, tr, pen, g);
y += trheight;
}
int currentpage = pc;
pc++;
bool hasPage = false;
if(count < table["tablebody"].ChildNodes.Count - 1)
{
hasPage = true;//需要继续打印
}
else
{
count = 0;
pc = 1;
hasPage = false;//表格打印完毕
}
return hasPage;
}
private void DrawTopLine(Graphics g, XmlNode table)
{
Pen pen = new Pen(Color.FromName(table.Attributes["bordercolor"].InnerText),
float.Parse(table.Attributes["border"].InnerText));
int width = 0;
foreach(XmlNode td in table.FirstChild.FirstChild)
{
width += int.Parse(td.Attributes["width"].InnerText);
}
int x = int.Parse(table.Attributes["x"].InnerText);
int y = int.Parse(table.Attributes["y"].InnerText);
g.DrawLine(pen, x, y, x + width, y);
}
file://画表格行
private void DrawTR(int x, int y, XmlNode tr, Pen pen, Graphics g)
{
int height = int.Parse(tr.Attributes["height"].InnerText);
int width;
g.DrawLine(pen, x, y, x, y + height);//画左端线条
foreach(XmlNode td in tr)
{
width = int.Parse(td.Attributes["width"].InnerText);
DrawTD(x, y, width, height, td, g);
g.DrawLine(pen, x + width, y, x + width, y + height);//右线
g.DrawLine(pen, x, y + height, x + width, y + height);//底线
x += width;
}
}
file://画单元格
private void DrawTD(int x, int y, int width, int height, XmlNode td, Graphics g)
{
Brush brush = new SolidBrush(Color.FromName(td.Attributes["bgcolor"].InnerText));
g.FillRectangle(brush, x, y, width, height);
FontStyle style = FontStyle.Regular;
file://设置字体样式
if(td.Attributes["b"].InnerText == "true")
style |= FontStyle.Bold;
if(td.Attributes["i"].InnerText == "true")
style |= FontStyle.Italic;
if(td.Attributes["u"].InnerText == "true")
style |= FontStyle.Underline;
Font font = new Font(td.Attributes["fontname"].InnerText,
float.Parse(td.Attributes["fontsize"].InnerText), style);
brush = new SolidBrush(Color.FromName(td.Attributes["fontcolor"].InnerText));
StringFormat sf = new StringFormat();
file://设置对齐方式
switch(td.Attributes["align"].InnerText)
{
case "center":
sf.Alignment = StringAlignment.Center;
break;
case "right":
sf.Alignment = StringAlignment.Near;
break;
default:
sf.Alignment = StringAlignment.Far;
break;
}
sf.LineAlignment = StringAlignment.Center;
RectangleF rect = new RectangleF( (float)x, (float)y, (float)width, (float)height);
g.DrawString(td.InnerText, font, brush, rect, sf);
}
}
}
Table类将table标签内部的解析和打印独立出来,全部在类的内部完成,这样,我们在对顶层标签解析的时候只要是碰到table标签就直接交给Table类去完成,不需要再关心其实现细节。
再添加一个Text类,代码如下:
using System;
using System.Xml;
using System.Drawing;
namespace RemotePrint
{
public class Text : PrintElement
{
private XmlNode text = null;
public Text(XmlNode Text)
{
text = Text;
}
public override bool Draw(Graphics g)
{
Font font = new Font(text.Attributes["fontname"].InnerText,
int.Parse(text.Attributes["fontsize"].InnerText));
Brush brush = new SolidBrush(Color.FromName(text.Attributes["fontcolor"].InnerText));
g.DrawString(text.InnerText, font, brush, float.Parse(text.Attributes["x"].InnerText),
float.Parse(text.Attributes["y"].InnerText));
return false;
}
}
}
同Table类一样,Text类完成对text标签的解析和打印,不过因为text的简单性,它的代码也少了很多。它们两者同样继承自PrintElement,都重载了Draw方法的实现。
http://www.yesky.com/20030214/1652186.shtml
JDMBA收录,使用标签:报表,时间:2007-3-28 13:45:39 | 相关网摘,我也收藏
近来商业智能吵得火热,作为其关键基础环节的报表工具在市场上也是层出不穷,让人眼花缭乱,国内外的加起来,仔细数一下,怕有二三十种。看看好象又都差不多,这给选择报表工具造成了不少的麻烦。
业内的报表工具在技术上大体可分成两类,一类以SQL/OLAP为理论基础(简称SQL型报表),可以基于数据库或数据仓库自动化的制作报表,这是当前业界的主流工具。代表产品以国外为主,如号称世界排名第一的crystal、纯java的stylereport、老牌的BI类产品bo、brio、cognos、microstrategy、新起之秀actuate(安讯)等;国内较有名的主要有低端控件类的如明宇、数巨、杰表、BI类的和勤、博易智软、菲奈特等;可谓数量众多,精采纷呈。
另一类以EXCEL为原型(简称CELL型报表),主要解决报表的格式和展现问题,与数据库的数据接口基本上没有或非常简单,报表中的统计数据都需要由程序代码计算后填入表格中,基本上无法不编程序就自动化地根据数据库中的数据产生动态变长报表。事实上,这类产品严格地说应当属于电子表格类软件,和商业智能没有关系,原则上算不上报表工具。但由于中国报表的样式过于复杂,采用SQL型报表常常无法完成,迫使许多应用程序员只能使用电子表格再自行编代码去完成报表。这类产品在国内用的比较多的是用友华表和formula1,后者现已被actuate收购改造成其内的一款叫spreadsheet的产品,前者是国产软件中的优秀作品,在各行业已有了广泛的应用。
考查报表工具时,先搞清是哪种类型的产品,SQL型和CELL型的报表是相差非常巨大的两类产品,放在一起对比基本上没什么意义。CELL型报表种类较少,我们重点讨论SQL型的报表产品。
SQL型报表工具有个基本的特征,就是主编辑界面呈条状,一般依次分成几个条状的区域:标题区、细节区、统计区,如果有分组,还会为每级分组增加分组标题和分组统计两个区,总之,整个编辑界面是一个个横条区域构成。
所有的SQL型报表工具的数据处理模型都完全一样,不光上述那些产品之间大同小异,同我们熟悉的C/S开发工具中的某些控件也很象,如PB中的DataWindow,Delphi中的QuickReport等,VB干脆就把crystal集成于其中。
由于数学模型一致,这些产品的制表能力也都相差不大。用crystal能做的表,换stylereport也搞得出来,反之也一样。包括一些公司新近推出的版本,如crystal XI,cognos report *net,Microsoft reporting server,声势都造得很大,其实基本原理还是那个,换汤不换药,报表本身的制作能力基本上没有提高,只是界面可能更花了些、操作略方便了些、报表管理的功能加强了许多。但原来做起来费劲的表(要编码或拼表的),则依然如故,不要指望在这些工具之间换来换去能根本地解决我们制作报表的痛苦。
这些产品的差异都在技术实现和细节上,如stylereport是纯java的,在unix上部署比较容易,但程序不太稳定;bo、crystal制作精良稳定,但在unix部署很困难,基本上属于没人会做的事情,也就没有成功案例;Microstrategy据说运算优化做得比较好,但安装部署比较繁琐;…。
在这个阵营中,有些产品是专做报表的,象crystal、stylereport和国产低端产品;还有一些产品的主要方向是OLAP客户端,报表只是一个部分,这类产品的报表细节处理常常因为不够专业而比较差(其强项是OLAP),象brio制作报表操作方便度和一些细节控制都远不如crystal,而bo收购crystal也正是看中了这一点以弥补其本身的不足。
所有这些报表工具都号称自己比竞争者更擅长对付中国报表,而事实上,这些产品对付中国报表的本事是一样的,都极其困难,由于数学模型完全不对,门都没摸到。换来换去,痛苦依旧。真有复杂的报表问题,在这堆矮子里是拔不出将军的!
http://www.report99.com/lingyu/ly_fx_1.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 13:40:33 | 相关网摘,我也收藏
目录:
一、公式组件
二、公式语法
三、公式类型
----------------------------------------------------------------
公式包含两个关键部分:组件和语法。组件是创建公式所添加的部分,而语法是组织组件所遵循的规则。
在 Crystal Reports 中有几种不同种类的公式:报表、格式化、选定、搜索、运行总计条件和警报公式。报表中的多数公式为报表公式和条件格式化公式。
----------------------------------------------------------------
一、公式组件
在 Crystal Reports 中创建公式与在任何电子数据表应用程序中创建公式类似。可以在公式中使用下列组件:
字段
示例:{客户.客户名}、{客户.去年销售额}
数字
示例:1、2、3.1416
Text
示例:“数量”、“:”、“您的文本”
运算符
示例:+(加)、/(除)、-x(求负)
运算符是可以在公式中使用的操作。
函数
示例:Round (x)、Trim (x)
函数执行求平均值、求和与计数之类的计算。列出所有可用的函数,其参数一并列出,并根据用途排列。
自定义函数
示例:cdFirstDayofMonth、cdStatutoryHolidays
自定义函数提供了一种共享和重复使用公式逻辑的途径。它们可存储在 Crystal 储备库中,而后可将其添加到报表中。一旦自定义函数添加到报表后,当创建公式时,用户就可在“公式专家”中使用自定义函数。
控制结构
示例:“If”和“Select”、“For”循环
组字段值
示例:Average (fld, condFld)、Sum (fld, condFld, "条件")
组字段值对组进行汇总。例如,可以使用组字段值来得出各个组在总计中所占百分比。
其它公式
示例:{@GrossProfit}、{@QUOTA}
有关详细信息,请参阅公式语法。
----------------------------------------------------------------
二、公式语法
语法规则用于创建正确的公式。一些基本规则有:
将文本字符串括在引号内。
将参数括在括号内(在合适的位置)。
引用的公式使用前导 @ 符号标识。
Crystal 语法和 Basic 语法
创建公式时,可以选择使用 Crystal 语法或 Basic 语法。几乎任何使用某种语法编写的公式都可以使用另一种语法来编写。报表可以包含使用 Crystal 语法的公式,也可以包含使用 Basic 语法的公式。
Crystal 语法是包括在 Crystal Reports 的所有版本中的公式语言。
如果熟悉 Microsoft Visual Basic 或 Basic 的其他版本,则您可能更熟悉 Basic 语法。总而言之,除了有特定扩展以处理报表外,Basic 语法以 Visual Basic 为模型。
如果您已经习惯了 Crystal 语法,则可以继续使用它,并且可受益于由 Visual Basic 所产生的新函数、运算符和控制结构。
注意:
记录选定和组选定公式不能用 Basic 语法编写。
使用 Basic 语法不会减慢报表的处理过程。使用 Basic 语法公式的报表可以在运行 Crystal Reports 的任何机器上运行。
使用 Basic 语法公式无需同报表一起分发任何附加文件。
相关主题
若要了解 Basic 语法,请参阅使用 Basic 语法创建公式。
若要了解 Crystal 语法,请参阅使用 Crystal 语法创建公式。
----------------------------------------------------------------
三、公式类型
在 Crystal Reports 中有几种不同种类的公式:报表、格式化、选定、搜索、运行总计条件和警报公式。报表中的多数公式为报表公式和条件格式化公式。
报表公式
报表公式是在报表中创建的单独公式。例如,计算订购日期与发货日期之间天数的公式即为报表公式。
条件格式化公式
格式化公式更改报表的布局和设计,以及文本、数据库字段、对象或整个报表节的外观。通过“格式编辑器”来设置文本的格式。如果需要创建格式化公式,请从“格式编辑器”访问公式工作室。请参阅使用条件格式化。
选定公式
选定公式指定并限制在报表中出现的记录和组。您可直接输入这些公式,或者可使用“选择专家”指定选定内容。Crystal Reports 接着将生成记录选定和组选定公式。可以选择手动编辑这些公式,但必须使用 Crystal 语法。请参阅选择记录。
搜索公式
搜索公式帮助您在报表中定位数据。与选定公式类似,一般您不需要直接输入这些公式,而是使用“搜索专家”来指定搜索判据。Crystal Reports 生成该公式。可以选择手动编辑这些公式,但必须使用 Crystal 语法。
注意: 如果您已经了解 Basic 语法,则只需要了解少量的 Crystal 语法便可以修改大多数选定公式和搜索公式。
运行总计条件公式
运行总计条件公式使您能够定义运行总计求值或重置所依据的条件。请参阅创建条件运行总计。
警报公式
警报公式帮助您定义报表警报的条件和消息。请参阅关于报表警报。
http://www.report99.com/zhuati/zht_sj_4.htm
JDMBA收录,使用标签:信息化,时间:2007-3-28 13:33:56 | 相关网摘,我也收藏
从商业智能解决方案的角度看,前端展现工具是不可缺少的重要组成部分,而从商业智能所面对的市场需求来看,前端展现工具可以说占据了大部分的市场份额。在中国市场上,大部分用户所需要的商业智能,其实实质上主要是集中在前端展现上,或者说得更直接些,就是报表工具上面。
那么,商业智能的前端展现工具从技术角度是什么状况、又将如何发展呢?
概括起来,可以这样说,前端工具的技术发展正处在三大变革之中。这三大变革,对应了前端展现工具的三个重要的方面:展现方式;部署方式;设计方式。
展现方式:
展现方式,就是指将报表与数据等等以何种方式让用户来看。
在这个领域,核心的变革,就是由客户机/服务器方式,向Internet计算和纯粹的浏览器方式的转变。
应该说,由C/S向B/S方式的转变是大势所趋,许多应用系统都处在这一个变革的过程之中。这种转变并不是说所有的应用全都变成只能使用B/S的方式,但是确实在我们当前这样的时代,Internet计算代表了应用系统发展的主流,很难想像不能很好地支持与适应这种模式的技术还能具有竞争力。
对于前端展现工具而言,在几年前可以说主要都是采用客户端软件来实现的,但是,随着整个应用体系的发展,越来越多的前端工具都转向了支持B/S方式,甚至由于技术障碍或历史包袱转不过来的一些产品也都采取了ActiveX控件之类的伪B/S方式,以便给用户一个交代。在两三年以前,纯HTML方式的前端展现工具还很少见,但现在,HTML报表已经成为了行业标准,主流产品都已经完成这一变革,可以说,展现方式向B/S方式的变革在前端报表工具领域中已经基本实现。
部署方式:
部署方式,是指前端展现工具的体系结构、如何在服务器上部署、对环境的要求、与其他应用系统的关系、开发调用方法等一系列的问题。
在这个领域,核心的变革,就是由专有系统向开放系统的发展。
传统的BI前端工具,基本上都是封闭的系统,采用专门的报表服务器。这种系统往往只能在一种平台上运行,而在面对更多的平台的要求时,则推出一个又一个专门的版本。这种方式就如同早期的C在不同平台上编译,早已经是落后于时代的方式。同时,独立的报表服务器,往往成为性能上的瓶颈,更无法有机地与用户的应用系统在数据访问、负载均衡、用户管理等诸多方面相融合。
而开放系统,则具有若干先天的优点,比如易于跨平台部署,可以紧密地与应用系统集成,充分利用应用平台的数据库连接池、负载均衡集群等等,正因为此,所以开放的系统,即纯粹基于JAVA的前端工具受到了软件开发人员的普遍欢迎。
但是,在部署方式方面,专有系统与开放系统的斗争则要激烈得多。毕竟,专有系统来自于一些大牌厂商,他们有着较强的市场能力和很大的客户基础。但是,相信就如同应用软件的其他领域一样,专有系统必将一步步让位于开放系统。当用户用JAVA实现一个应用系统时,他很难理解为什么就偏偏这个工具不能用我的连接池,为什么不能在我的集群上部署,为什么不能给我足够的CLASS来用,为什么还要搞一套独立的用户与权限… …。所以,虽然斗争在继续,但必然的方向一定是开放系统战胜专有系统,或者说专有系统向开放系统靠拢。
设计方式:
设计方式,就是指对数据的具体展现格式与内容如报表、图表等如何进行设计与定制。可以说,这是前端展现工具最核心的环节,是决定了前端展现工具好不好用、能不能很好地解决用户的问题的关键所在。
在这个领域,核心的变革,就是由传统的视图、条带、分组为核心的传统报表模型向以多源分片、不规则分组、动态格间计算、行列对称为核心的新一代报表模型转变的发展。
现有大多数的前端工具所采用的设计模型都是一样的,概括起来就是:数据不管来自于多少个表,都要先弄成一个视图;在设计过程中把不同的字段和其他报表元素放到不同的条带(BAND)上;通过根据一些字段进行分组、合计来处理一些相对复杂的报表。
这种传统模型应该说是来自于最常见的一些简单的报表,但在实际中面对很多复杂的报表设计的要求,就出现了很多“补”的方法。时间越来越长,“补”的方法就越来越多,一些产品的功能也就越来越强。
但是,这并不是根本解决前端工具设计问题的方法,由于模型的局限,不论怎么补,增加多少辅助的功能,都还是会有更多的报表很难依靠前端工具本身来实现,而需要大量的前期数据准备、复杂的SQL,甚至编写程序来实现。另一方面,补的结果,使得一个工具从使用与学习方面都越来越不方便。一个最典型的例子就是交叉表。正是因为最初的条带、分组模型难以很好地处理数据横向展开的问题,因此许多工具里面都带着一个交叉表,但交叉表与纵向表往往是两个不太相关的东西,从而在一起结合使用很别扭,许多表拿这个方法那边不行了,拿那个方法这边又不行了。
实际上,传统工具的报表模型,诞生于十几年前,并不是针对复杂的报表需求而设计的。在那个时代,解决复杂报表的办法就是编程序,而且编程序在当时相对而言也不是一个低效率的方法。报表工具只是为了解决一些简单、标准形式的报表的快速设计与输出,或者说,主要是作为BI的前端工具来用的。但面对着大量的直接的报表应用需求,面对着其他技术的突破式的发展,这种传统的模型就表现得落后于时代了。对于市场而言,需求的迫切与技术的局限就意味着机会,就意味着创新与发展的动力。正是传统模型的局限与困难,推动了新一代报表模型的出现。
新一代报表模型的核心特征表现为多源分片、不规则分组、动态格间计算、行列对称。
多源分片,就是在一个报表中可以独立地使用多个不同的数据视图,供报表的不同“片”使用,各自进行不同方式的数据展开与使用,各片之间还可建立各种联系。这样就避免了复杂的SQL、预先计算和很多在传统模型中需要编程解决的问题。
不规则分组,就是在传统标准的GROUP分组方式之外,可以支持灵活的各种分组方式,比如不完全分组、集合分组、重复分组等,以适应各种复杂的统计需要。
动态格间计算则跨越了传统的横向字段间计算和纵向求和计算,可以灵活地、跳跃地处理各种方式的格间计算关系。
行列对称通过类似于EXCEL式的设计方式,可以将行、列同等处置,解决了传统模型中水平方向不能进行展开、无法支持复杂的横向表的困难。
可以说,这些新的模型、新的特征都来源于传统模型经常遇到而又很难解决的问题。通过构架完整的新型模型,使得报表的设计效率有了大幅度的提高,有人将其比喻成由火车到飞机的革命。
在报表设计的领域,由传统模型到新一代模型的变革还刚刚开始,但是,更合理、更高效、更强有力的新一代模型有着强大得多的生命力,因此这一变革必将成为前端工具技术发展中的新的高潮。
http://www.report99.com/zhuati/zht_zh_1.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 13:30:44 | 相关网摘,我也收藏
BI的前端展现工具,或者说报表系统,在应用系统中占据着重要的地位。
报表系统的部署,有多种方式:
一种独立服务器,以Business Objects(BO,Crystal Report),Heperion(Brio),Cognos等国外产品为代表的,它们的服务器是单独部署的,与应用程序之间通过某种协议沟通信息。这类服务器功能比较强大,但同时安装也比较复杂,特别是在非Windows的操作系统下,除个别纯JAVA产品外,大部分产品在UNIX下部署困难,个别产品至今没有稳定的成功案例。这种方式还有个问题,由于报表服务器与应用程序之间要通过网络协议,会导致性能下降,而且不可能通过网络协议提供较多的API接用,对报表服务器控制力度较不够深入。对于报表这种无事务的服务而言,采用独立服务器并不是一个好的选择。
第二种是控件嵌入式,这又会走另一个极端,干脆所有的报表计算都在客户端的控件上。这样服务器端基本上只是负责把数据取出来送出,其实没什么代码,部署就相当简单。但是缺点是控件安装、更新都给用户带来很大负担,有时也可能带来安全性方面的问题。而且这些控件也全都只能在windows下运行,无法把高强度的运算转移给服务器。
第三种是嵌入式服务器,特别是纯Java的产品,以Jar包形式提交。这类产品一般会在前端提供HTML而不是控件的报表展现方案(关于报表的展现,请参见... ...)。由于Java的平台无关性,Java报表系统可以轻松地部署在各种平台上。而且嵌入式的服务可以无缝地与应用程序结合在一起,达到最高的运行效率,而且可以充分利用应用服务器的集群共享能力,控制力度也非常深入,还能够与应用程序统一部署安装,整体结构非常自然。
毫无疑问,在BI展现工具的上述各种部署方式之中,嵌入式的Java报表应该是最容易部署的,也是最有利于用户的投资保护的。举个例子,象100%纯Java的润乾报表,就曾经经历过客户同时在AIX、HP-UX和Windows上进行报表系统部署的情况,而对于基于Java的报表系统而言,这种需求很容易就得到了满足。
http://www.report99.com/zhuati/zht_bs_3.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 13:24:12 | 相关网摘,我也收藏
今天有一位朋友问起有关Web报表软件的体系结构和性能问题,解释如下:
Web报表 软件总的讲有三种体系结构。一种是纯Java报表,以 润乾 为代表;一种是控件方式,以数巨为代表;另一种是独立服务器方式的报表软件,以Crystal Report为代表。
1、控件方式:这种方式在浏览器端要安装一个ActiveX控件,在服务器端只负责取数据,报表的计算与生成都是在控件中进行的。采用这种方式的原因是它的报表功能往往都是采用Delphi实现的,包括许多产品都是采用相同的第三方组件。
关于控件方式,这篇文章可以参考: http://blog.9zi.com/post/1/205
控件方式的缺点在于:
1)部署:一个控件,要完成别人报表服务器所实现的大部分功能,体积可想而之。功能越强,控件的体积越大。这对于部署是一个很大的负担。不仅如此,而且,当报表系统升级时,用户都必须重新安装控件,Web报表软件的B/S结构在部署方面的优势荡然无存。(其实这种方式本身就是伪B/S)
2)性能:在PC端计算与在服务器端计算,对小报表可能差别不大,但对于大报表,显然差异非常大。并且,如果一个Web报表系统有多个用户都要使用,服务器方式所可以采用的定时计算、缓存等等都无法发挥作用。
所以,控件方式一般只适用于简单、小型报表。这里的简单,不仅是报表的样式简单,也包括计算量、报表规模上都比较简单。
2、独立服务器:这种方式安装一个独立(逻辑上)的报表服务器。它避免了控件方式的Web报表软件部署繁琐、升级不便的缺点,能够通过服务器有效地管理报表,很好地处理性能问题。但它部署起来也是比较麻烦的,实际很多这类Web报表软件产品也很难真正做到跨平台。尤其是涉及集群、连接池等问题,它就无法提供良好的可扩展性。
3、Java报表软件:首先它可以轻松实现Web报表的跨平台部署。对于ASP,.NET等非Java应用,它可以以报表服务器的方式提供Web报表服务,这时这种Web报表工具的工作方法是与Crystal Report之类的产品类似的,具有独立服务器相同的优点与缺点(这里所说的独立服务器是指逻辑上的,物理上仍然可以与其他服务器安装在一起)。而对于Java应用,则可以以类包的方式将报表软件嵌入到J2EE应用架构中,与应用系统形成无缝衔接。这时,它的优势就更加明显:
1) Java应用服务器的所有提高性能的手段,都可以在Web报表软件上充分发挥作用,如计算能力更强的服务器(对控件方式服务器起不了多大作用,独立报表服务器则很多难以在UNIX服务器上部署),负载均衡,连接池等等。
2) Web报表软件可以与应用程序更紧密地衔接,被应用程序更灵活地使用。
参考文章: Java环境下的部署 - 充分发挥100%Java报表工具的优势
有人说,你不要总拿Unix说事,实际应用中很多应用服务器是采用PC Server的。确实是这样,但是(姑且不说许多Web报表工具并不能很好地支持Linux)不要忘记应用服务器层采用PC Server的原因是在于在这一层比较适合采用水平方向的扩展,即使用Cluster和负载均衡技术。对于Java报表软件,这一点太容易了,直接和应用部署在一起就可以,可以说是天生的,但对于独立服务器,这个就很麻烦了。
http://www.report99.com/pingshu/pingshu_7.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 13:20:37 | 相关网摘,我也收藏
生成一个10万条数据的报表要多长时间? - Web报表工具的性能问题是很多用户关心的。本文将讨论:性能是受什么影响的,如何提升Web报表的性能,在性能方面会出现的局限是什么。
一个参考数据:润乾报表,使用1台P4 2.0GCPU, 512M内存的PC进行测试,大约时间是1分钟。
实际上,这个数据说明不了什么,因为报表的样子,数据的情况,相关环境都是不一样的,很难进行什么比较。
这里面真正需要的,是弄明白性能是受什么影响的,如何提升Web报表的性能,提升性能的方法的局限性。
影响Web报表性能的,最主要的可能是两个方面,一个是报表与数据的关系,另一个是服务平台的计算能力。
先看前一个,报表与数据的关系。如果传到报表的数据大量是多余的数据,或者提取数据的过程中数据库的计算过于复杂(比如复杂的视图、存储过程),则肯定会影响性能。反之,如果报表模型先进,需要传过来的的数据量少,如果不需要复杂的预计算过程,则肯定性能会比较高。
再看服务平台,简单讲方法就是:CPU,内存最直接影响性能。
相应地,提升性能的方法也很简单,一是采用更合理的报表设计,或者说采用在这方面有优势的报表工具,二是增加CPU或采用能力更强的CPU,三是增加内存。
接下来说说这些方法的局限性,设计方面的就不在这里讨论了,主要谈谈就服务平台方面的:
1、更多、更强的CPU,更多的内存,在PC Server范围内还简单,如果需要UNIX服务器,则实际上除了纯JAVA的报表工具外,很多其他报表工具在兼容性上就会出现问题,其中不少声称能支持UNIX的,实际未必能做到或真的做过。
2、用户真正关心的性能,不在于一张报表特别特别大,而在于有很多比较大的报表。这时,尤其是在使用PC Server的时候,很可能就需要使用服务器集群与负载均衡技术。对于纯Java的报表工具这个是与生俱来的,但对独立报表服务器则问题就比较大了。
3、更有必要深入探讨一下控件方式,除了部署方面的麻烦外,控件方式(即报表计算是在控件内进行的)从根本上是与服务器计算、与B/S应用模式背道而驰的。我们在这里不讲空概念,就认真分析一下道理。首先你所谓的加或升CPU,加内存,对控件方式在服务器端做是没用的,你需要在客户端加。如果你有100个用户... ... 更何况,真要是大报表,除非你把PC弄得象个服务器似的,否则可能就出问题了。同时,要考虑网络传输。不论报表是1万条还是10万条,看的人都是1页1页看,如果是在服务器端计算,算好后,传到浏览器的总是正在看的那一页,而对控件方式,则是要把这些数据一股脑地传给客户端的控件(如果它能承受得住的话)。所以,对控件方式,是无性能可言的。
http://www.report99.com/pingshu/pingshu_6.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 13:14:46 | 相关网摘,我也收藏
报表,是许多应用系统中非常重要的组成部分。
报表工具,是高效率开发和运行报表的关键。今天,已经没有人再会用手工编写代码的方法来制作报表了吧。
目前,已经有了不少报表工具可供选择,各厂家做足宣传,产品功能令人眼花瞭乱。本文将从B/S应用的角度,专注于Web报表工具,谈谈如何以一个合理的方法,选择Web报表工具。
选择Web报表工具的基本次序是:硬指标满足 - 报表的可实现性 - 综合成本 - 系统的可靠性与性能
1. 硬指标满足:
硬指标是指一些对Web报表工具很明确的、必须要满足的要求。这种指标每个项目都会不同,但往往都是对用户和开发商很关键的。比如,有时会要求能在Linux平台下运行,有时会要求能将报表转出为PDF,有时会要求能将产品的标记改为项目开发商或用户的(OEM),有的要求Java报表,有的要求离线填报,有的要求客户端无控件... ...。并不是说一定要满足上面的指标,而是说,对于这类的指标,应该一开始就列清楚,要明确问明白被选择的产品能不能满足,对于不能满足的产品,就完全没必要再浪费时间了。
之所以把这个工作放在第一步,一方面是因为这是很重要的环节,另一方面是因为这个工作花费的时间少,用它来进行第一步的筛选,最节省时间。
同时在这里列出一些常见Web报表工具在“硬指标”方面的情况:
跨平台部署:这方面Style Report, 润乾报表都支持得很好。杰表虽然是Java的,但有用户反映在UNIX下有困难。Crystal Report/BO, Brio等产品由于其体系结构原因,实际在Unix下部署很困难。其他一些基于控件的低端产品就很难讲了。
HTML展现:这方面象润乾,杰表,Crystal Report,Style Report等Web报表工具都没有问题,但基于控件的低端Web报表产品如数巨、明宇就有很大缺陷。
OEM及开发接口:这方面国内产品普遍没有问题,但国外产品则都做不到OEM。开发接口方面,润乾的Java开发接口应该说是最强大的,Crystal Report则在.NET方面比较强。
填报:这方面国内Web报表产品一般都支持填报功能(具体强弱有差异),但国外产品则都做不到。
2. 报表的可实现性:
一个Web报表工具再好,再便宜,或是再有名,要是你要的报表做不出来,别的全是瞎扯。
所以,一定要弄清楚,客户要什么样的报表,要拿到一些典型的表样。
如果你的报表很简单,把数据挑几列一行行列出来,那每个产品都能做。
如果你的报表很复杂,特别是里面有些很别扭的东西,恐怕就会有很多产品做不了了。
这一步,最省事的方法,是拿着要做的报表,给Web报表产品厂商看一下,让他们说句痛快话,能做不能做。
但是,销售有一句名言:使劲拍胸脯,哪怕拍成鸡胸。所以,厂商很可能会告诉你他们都能做,但到最后,你会发现做不了。
因此,还是要对常规的报表制作方法有一个基本了解。最简单的,打开MS Access,就有一个内置的报表工具,这是报表的老鼻祖了,大多数报表工具,都是从这种模式传承下来的,当然做了很多的改良。当你了解了一般的报表路数,你就会比较容易明白,哪些东西对于报表工具是小菜一碟,几乎谁都能做,哪些东西则有难度,甚至很难做。对于后者,你可以集中精力,了解一下你选择的产品能不能做,怎么实现。当你认真去探讨时,做得了、做不了,也就会比较清楚了。
这里面会出现一个问题,有些报表,拿有的工具就是做不出来,那很简单,直接PASS掉。但有些报表,在有些Web报表工具下可以很简单地做出来,在有些工具下则可以用一些曲折的方法做出来,这时就不能简单地比较产品了,要去比较综合拥有成本。
在这个方面,大多数产品,以Crystal Report,Style Report为代表,都是传统的模型,只是适合比较简单的报表,而对于复杂的报表,有些需要编程来实现,有些则根本实现不了。国内有些产品如杰表在设计模式上进行了一些小的改进,而改进最大的则是润乾报表,采用了新的报表模型,在处理各种复杂报表方面优势很大。(可以参考:新一代报表工具–报表设计的革命)
3. 综合成本
是不是一张报表,一个工具五分钟做出来,另一个Web报表工具半天做出来,前者就一定好呢?(这是象润乾这样的产品所经常宣称的)
是不是两个Web报表工具(或者说BI工具),一个能做十件事,另一个只能做三件事,前者就一定好呢?(这是象BO、Brio这样的产品所经常宣称的)
是不是两个Web报表工具,一个卖十块钱,另一个卖一百块钱,前者就一定更合算呢?(这是有些Web报表工具所乐于宣称的,仅需xxx元...)
未必吧!
单张设计效率高,如果报表少,如果报表简单,有什么用?
一大堆功能,用户用不上,有什么用?
买工具便宜,开发花一大堆钱,合算吗?
当问题这样直接问出来时,恐怕很多人都能做出正确的回答了。
真正正确的方法,是考察综合拥有成本。综合拥有成本,是为了达到目标(用户的实际需要),所花费的购买工具、开发、机会成本等等的总和。
请你明确一下用户到底需求的是什么;他的报表是什么样子;他的报表有多少;还有,你自己的人员成本是多少!
另外计算一下你有多少人,项目的进度要求... ...
看看用每个报表工具,你要花多少钱,你要花多少精力与人力投入... ...
根据这些,做出一个综合评估,你就会很明确,哪个是对你最合算的选择。
举两个极端的例子,用户就10张报表,你的程序员不用花钱(不管你用什么办法),那你干脆找个开源的,自己改改吧。
反之,用户有500张报表,很复杂,你的程序员一个人月的成本是2万(不光是工资,你还要付福利、房租、空闲成本、培训成本、管理分摊...),那你选一个报表工具比另一个便宜五万块钱,有多大用吗?
这里有两点要明确。一是算综合成本,前提是“能做”,即我们所说的可实现性。二是算综合成本,是建立在一个假设的基础上,即你相信厂商所说的。后面你还需要实际去试试。
这方面的情况是,有低端的Web报表产品,如开源的、杰表、数巨、明宇,大概在0-几千元,定位于报表数量少、报表简单的应用,高端的产品在十万元量级如BO、Brio定位于复杂的OLAP应用,Crystal Report、Style Report等大约是一万至几万的量级,定位于具有一定复杂度的应用。而润乾则目前推出了全系列的Web报表产品线,从千元到几十万元,以适合不同应用的需要。
在综合成本方面,更长远一点考虑,就是如果你是一个开发商,你不光要考虑一个项目的综合成本,还要考虑长期应用的综合成本,如果你有些项目简单,有些项目复杂,那么选择象润乾这样的全系列Web报表产品会更有助于技术体系的统一性。实际上对于复杂的大型项目,几乎润乾是唯一合适的选择,但以前润乾集中于高端应用,对简单报表应用的用户不太适合,现在则推出了低端版本,可以很灵活地适应低端用户的需要。
4. 系统的可靠性与性能
到这一步,你应该是有一个优选的产品了。
为什么到这一步才去试,是因为系统的可靠性与性能,试起来都要花费你大量的精力。如果拿好几个产品试,不仅浪费时间,而且可能会使你无法真正把一个产品试深入。
至于说应该如何试、试到什么程度,看你的经验、判断及厂商的相关情况等等了。
不过,在试验之前,首先要从理论上进行一下了解:
- Crystal Report, Style Report,作为国际知名产品,其可靠性是很有保障的。国内一些比较知名的Web报表产品,如润乾、杰表,可靠性也是不错的。一些太小的或者炒作大于实际的所谓大公司,以及开源的产品,其可靠性就谈不上保障了。
- Style Report、润乾、杰表作为Java报表工具,可以在大型服务器上运行,可以充分利用应用服务器的负载均衡、数据库连接池等,因此性能方面有很大优势。Crystal Report为代表的产品是基于独立服务器的,在一般规模的应用下应无问题。而数巨、明宇等基于控件的Web报表产品,其机制是前端控件中完成报表计算,这种机制对于大型、复杂报表或者大面积应用都是不适合的。
总的讲,以下关于Web报表的选择建议可供参考:
- 大型或中型Java报表应用,选择润乾报表
- 一般的.NET应用,选择Crystal Report(也可以考虑润乾)
- 小型Web报表应用,Java的选择润乾的低端版本或杰表,ASP和.NET的选择数巨、明宇,如果实在不想花钱,可以选择开源的(其实更主要的是从学习角度)。
- 作为产品选型或开发商长期的技术选型,除非是专注于.NET,否则一定要选择润乾(注意可以与润乾谈一个打包的方法,避免一套套购买成本太高)。
http://www.blog.com.cn/user7/20839/archives/2005/134730.shtml
JDMBA收录,使用标签:报表,时间:2007-3-28 11:22:12 | 相关网摘,我也收藏
这篇文章集中讲述一下开源的JAVA报表工具,象JASPER、BIRT之类的。由于本人对这些工具研究得不是很深,因此只是简单地说一下。
优点之一:不用花钱
优点之二:JAVA报表共同的优点
这个前几篇说过多次了,不用再说
优点之三:有源代码,自己可以随心所欲
开源报表工具缺点也很明显:
缺点之一:功能有限。这些开源工具普遍功能弱于哪怕是很初级的JAVA报表产品(道理很简单,否则人家也不会拿出来卖)。
缺点之二:没有支持。虽然有社区、资料,但这和厂商的支持是根本没法比的。大家都是爱好者,谁对谁的支持都靠不住。
缺点之三:学习、使用成本高。虽然不用花钱,但要投入大量的学习成本,这还可以算是一次性的。更重要的是,如果使用起来,由于其功能的不足和存在的缺陷,要在报表的设计、部署等方面持续花大量的时间,这种使用成本,除非只是做极少量的报表,否则根本没省下钱来。
价值评估:开源报表工具,对于学习应该说是非常有用的。但是如果作为商业应用,则完全不应去考虑。
http://www.report99.com/pingshu/pingshu_5.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 11:20:28 | 相关网摘,我也收藏
从部署、展示、设计等方面,全面比较Java报表工具,如 润乾 , 杰表 ,Style Report,Jasper等,以及声称支持Java的Crystal Report,数巨等。
Java报表工具,首先可以分成两大类:纯Java报表工具,和"支持"Java的报表工具.
"支持"Java的报表工具 :
我们所说的"支持"Java的报表工具.其实就是非Java的报表工具,但是可以在Java程序中调用.这样的产品很多,总的讲一大类是采用独立报表服务器的,如Bo/Crystal Report,Brio,Cognos,和勤等;另一大类是在前端有控件的,如数巨报表等。
独立报表服务器的问题在于:
独立的报表服务器,直接限制了报表的性能瓶颈
无法共享web服务器的集群能力
无法共享web服务器的连接池管理能力
无法统一部署,实施人员既要部署自己的web应用,还需要部署报表服务器
独立报表服务器往往有一套自己的用户角色管理机制,与用户的应用衔接起来问题多多
前端控件方式的问题在于:
用户部署起来非常麻烦,每台机器都要安装控件。(为解决这个问题,有些厂商把原来控件所做的报表计算工作移到服务器上做,但只能在Windows下运行,因为它不是纯Java的)
控件会对大报表产生性能问题,因为其报表生成与计算工作是在控件中实现的。
应用系统无法灵活地通过API对报表进行控制 - 因为是在控件里。
产品升级 - 将会是一大麻烦,客户端都要重新下载新的控件。
这一比较,并不是说其他方式不可以用,但显然对Java环境下的报表应用,纯Java的报表产品应该有先天的优势。事实上这一点是不需要讨论的,以前之所以还会有独立服务器的产品勉强在用,还会出现一批基于控件的产品,其原因是在于当时基于纯Java的报表产品还没怎么出现。如果有合适的Java平台下的产品(前提是要好用),当然是用纯Java的产品了。
http://www.report99.com/pingshu/pingshu_8.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 11:17:17 | 相关网摘,我也收藏
做报表很长时间了,最近发现一个比较奇怪的现象:各家工具使出各种手段做广告、吸引注意力,但是受到程序员热烈追捧的反倒是 Jsper report + ireport 这样的免费、开源的 JAVA 工具,几个开了专版讨论 JAVA 报表的论坛里面都是热火朝天,发问者众。
这是为什么?
Jsper report + ireport 是纯 JAVA 的报表工具,相信无论出于何种目的的使用者,看上这两个产品的原因无非是因为:免费(这是最重要的)、专业的报表工具、纯 JAVA 的。看来大部分人都意识到应该用专业的工具而不是堆代码来完成报表了,这是个进步。纯 JAVA 的报表现在也有很多了,快逸报表、 Fine report 、润乾、 Style report 等等,很多。看来决定性因素只有应该:免费。
报表工具,到底免费与收费孰优孰劣?
首先,免费的 Jsper report + ireport 能给我们带来什么?答案显而易见:拥有了一个有一定可用性的报表工具;开源的代码能够拥有灵活的可定制能力和完全的控制;最重要的是成本低。
事实果真是这样吗?
Jsper report + ireport 的制表能力实在一般,老外的东西,本质上就不符合咱的需求。被水晶这种产品培养出的报表习惯,报表似乎就该这么做,做不出来的报表似乎就应该写程序,再要不请客户修改需求吧。改不了?写代码。所以用工具的结果还是吭哧吭哧写代码。
在论坛里,象“请教高手某某问题如何解决”这类的帖子比比皆是,发问者往往也是在线等答复。问题如果有解也就罢了,无非是有答案的人什么时候给答案,运气好的在线能等到,运气不好的那就等着吧。如果碰到的正好是个没解的问题呢?或许会有热心观众参与讨论,解决办法还得自己想。掰着指头算算,花在这问题上的时间、人工成本,够不够买一个收费的工具?
最近听说 Jsper report + ireport 的所有帮助文档是收费的,文档倒是相当细致,需要花大量的时间阅读。这才明白:所谓开源不可能真的有人那么无聊为人民服务,说白了还是要挣钱的,否则产品的后续研发怎么办?呵呵,听说文档都是英文的。
收费的报表工具如何呢?
至少在你有问题的时候能找个人支持你吧?!
至少还能理直气壮地说“我买了你产品,你就得帮我解决问题”吧?!
至少还能在某种程度上偷工减料说“这表我整不出来,你过来和我们一起做吧”?!
至少还能拉着人跟你一起痛苦。
从社会的分工的趋势来看,工作一定是越做越专业,分工一定是越来越细致。就报表行业看,最理想的情况应该是:专业报表厂商应该是开发商的一个外围研发中心,每家开发商出一些钱(在项目中使用报表工具)给报表厂商,而厂商则专注于为各家合作伙伴解决报表问题。
那买一个报表工具的成本要多少?
至少我见过 3000 元的报表工具,纯 JAVA 的,一定比 Jsper report + ireport 要好用,还有专门的支持和培训,运气好的时候还能赶上促销赠送。
所以,再碰上选择报表工具的时候,一定不要怕跟老板倾诉:报表制作其实是很专业的的活,花钱买一个工具比用开源工具划算,这跟你的开发能力无关,你要做好的是你的业务系统。
http://www.blogjava.net/java-report/archive/2006/10/13/74962.html#Post
JDMBA收录,使用标签:报表,时间:2007-3-28 11:13:27 | 相关网摘,我也收藏
在实际生活中,沟通是在大体处于同一层次的人之间进行的(一个成年人显然不会跟 3 岁的孩子讨论医改问题)。 Web报表软件的比较也应该从实际需求的角度出发,与同类的产品进行比较才有意义 。
下面这些Web报表软件是同类产品:水晶报表、Jasper & ireport、如意报表、Fine report 、杰表、数巨报表和快逸报表,我们从制表能力、应用范围、价格和使用者四个方面进行比较。
从制表能力来说,因为这些工具在数据的处理方式非常类似,都是单数据源(可能来自于多张表或视图),都需要写一定的SQL语句或代码,做表的过程、难度大同小异,只是在细节上各有优缺。
一个有复杂报表需求的项目,功能简单的报表工具和功能强大的报表工具,前者的工作量会大大高于后者。无论厂家如何拉高产品的定位,产品的功能决定了它所能适用的范围,而产品价格则部分反应了这种产品定位。
这些工具对使用者,都要求有了解数据库,能熟练书写SQL语句。至于有些产品提到的能让用户自定义报表,我的体会是:用户可以自定义报表,但定制的报表都是非常简单的,涉及到统计汇总、求平均、同期比等等这些运算的,不可能让用户自己做(否则要程序员干什么?)
总结一下这几个工具的共同点:
功能差不多,单数据源,需要写代码准备数据;
适用简单、 低端的Web报表需求;
产品价格相差不大的:如意报表、 Fine report 、杰表、数巨报表都在万元左右,快逸报表仅3000元,水晶报表十几万元(国外的产品,成本自然高些),Jasper & ireport产品免费、文档收钱。
都要求使用者具有一定的技术能力。
http://www.report99.com/pingshu/pingshu_11.htm
JDMBA收录,使用标签:报表,时间:2007-3-28 11:09:42 | 相关网摘,我也收藏
JasperReports
JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其它IDE报表工具一样来制作报表。JasperReports支持PDF、HTML、XLS、CSV和XML文件输出格式。JasperReports是当前Java开发者最常用的报表工具。
Openreports
OpenReports提供基于web的灵活报表解决方案,通过浏览器自动生成动态PDF,XLS,HTMLCSV和Chart报表。利用到的开源技术有Hibernate,Veloctiy,Webwork。
JFreeChart
JFreeChart它主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
JFreeReport
JFreeReport是一个用来生成报表的Java类库。它为Java应用程序提供一个灵活的打印功能并支持输出到打印机和PDF, Excel, HTML和XHTML, PlainText, XML和CSV文件中。
jCharts
jCharts是一个100%基于Java的制图工具,它可以输出很多种图表。这个包是通过Servlets显示图表理想选择。
Cewolf
Cewolf可以在一个基于Servlet/JSP的Web应用程序内部使用,以在Web页中嵌入各种复杂的图形图表(如,直方图、饼图、棒图等等)。它提供了一个功能完备的标签库来定义图表的所有属性(颜色、笔画、图例等),这样嵌入了图表的JSP就不用使用任何Java代码。
JOpenChart
JOpenChart库和工具包提供了创建不同的图表的方法,包括饼图、直方图、和自绘图。进一步,它包含了将图表嵌入到Swing 或Web应用程序中的组件。这个库的Renderer Interface API可以方便地为不同种类的图表增加新的绘制。
iReport
iReport是为JasperReports设计的强大的,直观的,易于使用的可视化报表设计器采用纯Java开发。这个工具允许用户可视化编辑包含charts,图片,子报表等的复杂报表。iReport 还集成了JFreeChart图表制作包。允许用户可视化地编辑XML JasperDesign文件。用于打印的数据可以通过多种方式获取包括:JDBC, TableModels, JavaBeans, XML,Hibernate(支持HQL查询语言), CSV等。它支持多种输出格式包括:PDF,RTF,XML,XLS,CSV,HTM。
Chart2D
Chart2D - 一个直观显示数据流量的2维图表(pie,线,垂直条,水平条,分散条(点),合并和覆盖图。有JComponent 和 BufferedImage类图表。
DataVision
DataVision是一个用Java编写的类似于Crystal Reports的报表工具。它支持多种数据源(JDBC, 文本文件) ,输出格式有HTML, XML, PDF, LaTeX, 逗号或tab分隔的数据文件, 和DocBook。它让你用一个支持拖放操作的GUI设计报表,报表描述存储为XML。
JCCKit
JCCKit是一个很小(< 100Kb)而且灵活的图形报表制作框架。
JSynoptic
介绍一个很错不的 Java 图表制作工具 JSynoptic,它把简单数据源(data source)根据你的需要自动生成各种类型的图表,比如柱状图、饼状图。这个工具核心是 JFreeChart,如果你仅仅需要一些统计图表,而不是做开发,那么这个工具将非常适合你。
Eclipse BIRT
BIRT是一个Eclipse-based开放源代码报表系统。它主要是用在基于Java与J2EE的Web应用程序上。BIRT主要由两部分组成:一个是基于Eclipse的报表设计和一个可以加到你应用服务的运行期组件。BIRT同时也提供一个图形报表制作引擎。
JERT
JERT是一个开放源代码的(Java视线开源项目),基于web的,数据库报表工具,它能够让你不需要编程而能创建各种灵活的报表。(需要了解一定的SQL知识) 。JERT使用到许多优秀的开源项目Hibernate/Spring/Webwork/Sitemesh/FreeMarker。
ARTART
ART是一个轻量级的,基于web的报表引擎。定制容易,支持图形报表,支持通过插件把结果导出为各种格式。
JChart2d
JChart2d是为那些需要精确的图形报表但可以不注重图形报表漂亮的工程任务所提供的一种工具。它有着简洁,可扩展的API和丰富的文档。
JasperAssistant
JasperAssistant是一个JasperReports的可视化报表设计器,一个受欢迎的报表引擎。它构建在Eclipse的插件体系之上,它的主要目的是通过一个直观的图形界面来帮助你开发JasperReports报表定义文件。
ObjectVisualizer
ObjectVisualizer是一个开源的商业化智能工具,属于OpenReports项目的一部分.它依赖于对象持久性技术(Hibernate,JDO,与Cayenne)用来对Object映射的数据进行查询,制表和制图.
Fourfive
Fourfive是一个领先的开源Web报表解决方案,使用XML作为它的配置文件。支持集群、负载平衡、动态发布、PDF, Excel, LDAP,图表、过滤器、排序、布局定制、门户、JasperReports、Velocity模板、兼容Internet Explorer, Netscape, Mozilla, Opera。
JooReports
JooReports是一个基于OpenOffice.org利用Java创建Office文档与报表的解决方案.模板可利用word处理器进行设计.生成的文档可以是PDF,Word和其它格式.数据源包括POJOs与XML.
Pentaho
Pentaho商业智能项目提供企业级报表制作,分析,数据挖掘与工作流的功能.这个软件提供灵活的部署选项以使它可作为嵌入式组件来使用,或作为定制BI应用程序的解决方案或作为一个完全脱离容器,完整的BI平台。Pentaho包括Eclipse BIRT,JasperReports,Mondrian,JPivot,调度(scheduling),web服务,商业规则。
JMagallanes
开源项目JMagallanes是一个用Java/J2EE开发的Olap和动态报表应用程序。JMagallanes结合了静态报表(基于JasperReports),Swing pivot表格(用于OLAP分析),和图表(基于JFreeChart)。它可从多种数据源(如:SQL,Excel,XML和其它)读取数据并可生成多种输出如:PDF,XML,应用程序特殊文件用于将来报表的脱机查看。
JR Free Web Chart Component
JR Free Web Chart Component提供了三种开源的Web Chart组件:FreeWebBarChart4J、FreeWebLineChart4J、FreeWebPieChart4J。这些组件支持3D,支持GIF,JPEG,PNG和SVG等多种图片格式,易于使用。可以在applet中使用,也可以在servlet/JSP中使用。在其主页上还提供了许多可以免费下载的文档,电子书籍,源代码。其中有一些比较常用的开源组件和框架的开发指南如:JFreeChart,JasperReports,Hibernate,Struts,Spring等。
ReportJet
ReportJet是一个基于Java的商业智能和报表系统。ReportJet Designer构建在Eclipse胖客户端平台(RCP)之上,为快速,简单地设计复杂的报表模板提供一个友好的用户界面。
Carte
Carte是一个报表模板引擎能够生成Text(包括HTML与XML)与PDF格式的报表。 所需要的第三方类库包括:
Carte CSS,DOM CSS Java类库.
iText,生成PDF格式的Java类库.
jCharts-基于Java的制图工具包。
JCLF,一组Java常用Utilitie.
http://www.open-open.com/open8419.htm
JDMBA收录,使用标签:CIO,时间:2007-3-23 13:56:27 | 相关网摘,我也收藏
病毒不过是一个技术工具,要想杜绝病毒产业链的形成,也需要利用技术手段去加以阻止。这样才能清除这个灰色产业链条的源头。
最近,一个蠕虫病毒“仇英(Worm.Chouying.a)”又开始在互联网上大行其道。根据瑞星反病毒专家的分析,“仇英”病毒运行后会感染所有可执行PE文件和网页文件,中毒电脑会出现蓝屏、运行缓慢等现象,病毒也会自动在企业局域网中传播。
瑞星反病毒专家同时透露,“仇英”病毒的功能与“熊猫烧香”非常相似,在传播能力和自我保护能力上甚至有所超出。可见,在“熊猫烧香”病毒还未能完全让我们平静下来时,又一个大毒枭又开始在网上横行。
“熊猫烧香”病毒在年初曾经猖獗一时,但就在病毒作者刚刚被抓获后不久,就又有人铤而走险开始疯狂制造病毒,这一切又是为了什么?
我们回头来看看“熊猫烧香”。案犯李俊将“熊猫烧香”病毒写完后,先后在网上以每个病毒500元至1000元的价格出售,总计不到一个月时间,李俊就牟利至少15万元。“仇英”的作者更是宣称:“出售本程序及源代码,并可以按照用户要求定做其它功能”。为了方便购买者联系,病毒作者甚至留下了自己的QQ号码。
由此看来,病毒的性质已经在改变—从最初的电脑高手多以炫耀、破坏为目的而发展成为一切为了获取商业利益为目的。
据了解,现在盈利型病毒产业链条主要分为三步:首先会有专人制造病毒;再就是一部分人在病毒制造完毕后,在互联网及网络上盗取虚拟装备,这部分人往往会要求制造病毒的人员“生产”出什么样的病毒;最后就是通过网络财产交易平台将虚拟物品变成现金。
这种获利型病毒一般都是盗取用户网上涉及到一些经济利益的密码、网络游戏虚拟装备等,而目前对网络立法明显滞后,如在如何保障网络虚拟财物还是个空白点。根据现有法律规定,制造传播病毒者需根据后果严重程度量刑,但这个“后果严重程度”该根据什么去衡量,是让数以百万计的受害者去一一举证?还是让被盗的“虚拟财物”一一转化成现实货币?这些显然是不现实的。因此势必会导致对这些涉案的病毒制造者在量刑上无法把握。
从另一个角度去看,法律只是对违法者惩罚的一种手段,而非目的。病毒不过是一个技术工具,要想杜绝病毒产业链的形成,也需要利用技术手段去加以阻止。这样才能清除这个灰色产业链条的源头。
目前通常的杀毒技术,是通过从病毒体中提取病毒特征值构成病毒特征库,并对计算机中的文件或程序等目标逐一进行特征值比对,以判断计算机是否被病毒感染。
而就现在病毒利用网络频频爆发来看,这种“马后炮”式的特征值扫描技术带来了严重的滞后性。目前,这种新病毒只有被发现并捕获到后,杀毒软件厂商才有可能从病毒体中提取其特征值从而查杀的技术方式,使用户不能对网络新病毒及时防御。因此,跳出传统技术路线,“病毒主动防御”、“未知病毒查杀”、“行为主动分析”等主动式病毒查杀技术,已经成为反病毒软件的必须的发展趋势。
需要注意的是,从病毒查杀技术上来说,病毒都有着本质的目的—