现有Java开源BI前端框架

最近在论证java领域的开源BI前端框架,把随手记得东西和大家分享下.
因为只看了几天,有没时间整理所以看起来比较乱,也不是很深入。

目前在java领域较常见的BI前端框架(商业智能项目)主要有以下几个Pentaho,spagoBi, OpenI, JASPER intelligence等开源框架。


 他们都有自己的强项和不足,下面简要介绍下:


轻量级的:


OpenI使用MondrianJpivot框架,报表引擎是jasper report,数据挖掘接口是R-Project,


相对来说开发和学习比较简单,而且OpenI支持使用MS的数据仓库(xmla),但是其国际化比较失败(中文乱码),要深入改造。


 JASPER intelligence也是个轻型项目,对jasper report的支持最好,所以报表部分比较好。


 重量级的:


PentahospagoBi是两个比较大的框架了,集成了相当多的开源项目,JfreeReport、Mondrian、Kettle、Weka基本都使用了。特别适合大型复杂项目的开发。


      Pentaho在中国使用的比较多,文档什么的也多一点。尤其值得一提的是网络上对他的中文支持做的相当好,很多志愿者翻译了它的文档。这给我们开发带来很大便利。


 


      Pentaho的模块工作流引擎、中心资源库、审计组件、报表设计工具、ETL工具、OLAP Server、多维展示、数据挖掘组件各种组建都有。


而且Pentaho得到了很大的投资,开发后劲很大,而且会有付费的官方发售版本。 


http://blog.csdn.net/dust_bug/archive/2006/09/18/1240753.aspx


这个是Pentaho源代码阅读报告》,介绍Pentaho构架相当的全面。 


Pentaho的中文论坛在http://www.bipub.org/ 


Pentaho相对spagoBi来说功能较强,尤其是工作流一块做的相当不错。


官方站的demos在http://www.pentaho.com/products/demos/


 spagoBi功能也很强,尤其是最近发布的1。9版本,在http://spagobi.eng.it:8080/sbiportal/faces/public/exo(或http://spagobi.eng.it:8080/sbiportal


的demos里展现了spagoBi很多功能。


 后记
这几款BI框架因为都是开源的前端框架,所以核心部分使用的还是一些开源项目,


MondrianJpivot,JfreeReport,所以在使用的时候搭建合适的框架会占用项目很大一部分时间,但是一旦框架搭建好了,基本就可以象流水线一样出报表了。


但是期望在原始功能上添加性能功能是比较麻烦的,为了一个新加的功能可能需要相当长的时间来实现。


另外这些开源框架的权限管理都不怎么强,可能需要改造。


另外,全球话的问题也是问题。象OpenI完全不支持中文,必须改造。

阅读全文...

Mondrian+JPivot演示

以前一直是用MS Anylize Service的,最近要做的项目是java的,小项目预算有限,所以想找一个开源的java的数据仓库解决方案来用用。

  在网上查了一下,发现了Mondrian。Mondrian是基于JAVA的数据仓库引擎,可以集成到web项目中,这一点最吸引我。另外与他搭配的表现层的方案也有不少选择,Jpivot是元老,pentaho,openi看起来是后起之秀。不管怎样,还是先研究一下modrian吧

  网上的中文资源比较少,在csdn上找了一下,只发现了两篇比较有用的

http://dev.csdn.net/develop/article/31/31791.shtm   Mondrian——有影响的“艺术家”     选择自 kswaking 的 Blog

http://dev.csdn.net/develop/article/68/68661.shtm  穷人的通用OLAP方案III--JPivot表现层     选择自 calvinxiu 的 Blog

照着做了一下,发现了一些问题,也有了一些心得。

一.环境准备

1.1 首先介绍一下环境

操作系统:Linux

服务器:Tomcat 5.5

数据库:MySQL 5.0.21

1.2 下载程序。Mondrian在http://mondrian.sourceforge.net 可以下载,最早他是用MS Analyze Service的教程中FoodMart数据库作为demo的,那个是access的数据库。还好现在他有了Platform-Independent的版本,我就下载了那个mondrian-2.1.1-derby.zip 解压缩之后在lib目录里面有一个mondrian-embedded.war,把这个直接放到tomcat的webapps目录里面就能够看到mondrian的demo了。不过后面的测试,我把这个war解开之后放到webapps里面去,并且目录把名字改短了点mondrian。启动tomcat,在浏览器输入http://localhost/mondiran 看到了demo。需要说明一下的是,mondrian的发布包含了Jpivot,用它来做展示层,所以不用再去单独下载Jpivot了。

1.3 数据库建表,在MySQL数据库里面建立table,借用了kswaking的数据库结构

在这个tiny的系统中,数据库有3个表tb_employee(职员表),tb_time(时间表),tb_salary(薪酬表)。表结构如下:

drop table tb_employee;

create table tb_employee

(

     employee_id     number,             --职员id    

     employee_name   varchar2(10)        --职员姓名

);

 

drop table tb_time;

create table tb_time

(

    time_id   number,        --时间id

    the_year  char(4),       --

    the_month char(2)        --

);

 

drop table tb_salary;

create  table tb_salary

(

    employee_id  number,                --职员id   

    time_id      number,                --时间id

    salary       number(19,4)           --薪酬

);

 

当然,为了使系统能够运行,还需要读者向数据库表中插入一些数据。

二. mondrian测试

  需要说明的是mondrian使用了MS一样的MDX语言实现查询,这对于从MS Analyze Services入门的人真是一个好消息。

2.1 先编写schema。

<?xml version="1.0"?>
  <Schema name="Mondrian">
    <Cube name="CubeTest">
    <Table name="tb_salary"/>

    <Dimension name="Employee" foreignKey="employee_id">
      <Hierarchy hasAll="true" primaryKey="employee_id">
        <Table name="tb_employee"/>
        <Level name="employeeID" column="employee_id" uniqueMembers="true">
           <Property name="employeeName" column="employee_name"/>
       </Level>
       </Hierarchy>
    </Dimension>

    <Dimension name="Time" foreignKey="time_id">
      <Hierarchy hasAll="false" primaryKey="time_id">
        <Table name="tb_time"/>
        <Level name="year" column="the_year" uniqueMembers="false"/> 
        <Level name="month" column="the_month" uniqueMembers="false"/>
      </Hierarchy>
    </Dimension>

    <Measure name="Salary" column="salary" aggregator="sum"/>

  </Cube>
</Schema>

这个schema定义了一个cube,包含两个Dimension和一个Measure。很容易看懂,就不解释了。
文件路径为webapps/mondrian/WEB-INF/queries/mondriantest.xml。

为了后面的测试方便,我把文件放到了queries目录里面。

因为用MySQL建表的时候都用小写的,所以schema里面的字段名也都用了小写(我一开始也使用大写的,结果出错,找不到字段),calvinxiu的文章说如果是Oracle数据库,这里的字段要用大写。

 

 

2.2 编写JSP

 

<%@ page import="mondrian.olap.*"%>
<%
  Connection connection = DriverManager.getConnection("Provider=mondrian; Jdbc=jdbc:mysql://localhost/mondrian; JdbcUser=root; JdbcPassword=; Catalog=file:///usr/local/apache-tomcat-5.5.12/webapps/mondrian/WEB-INF/queries/mondriantest.xml; JdbcDriver=com.mysql.jdbc.Driver", null, false);

  String querystr = " select {[Measures].[Salary]} ON COLUMNS, {[Employee].[employeeId].Members} ON ROWS from CubeTest ";

  Query query=connection.parseQuery(querystr);
  Result result = connection.execute(query);
  out.println("get result");
%>

可以看到mondrian也使用jdbc来连接数据库的,其中要特别注意的是Catalog指名了schema的位置。

 

文件路径webapps/mondrian/mondriantestmdx.jsp

 

2.3 测试

在浏览器输入http://localhost/mondrian/mondriantestmdx.jsp 可以看到显示的结果 get result,说明一切正常。

 

 

到目前为止,我们只测试了Mondrian,它只负责数据的提取和组织,所以在画面上没有看到任何的数据,下一篇文章将继续研究数据的展现 - Jpivot。

阅读全文...

Prototype.js--Javascript编写者的小军刀



   Prototype.js 是Javascript编写者的一把小军刀,提供了Ruby风格的简写语法和实效的函数,更难得的是完全跨浏览器,让大家舒舒服服写出又精简又不用愁心兼容的的JS代码,springside 已经离不开它了。

 Prototype.js最重要的文档有:

1.1 最爱$系列 

我最喜欢是可以用${"bookDiv"} 等价于通用的document.getElementByID("bookDiv")

值得留意的还有和CSS一样的批量选择语法$$(),如

$$('div#left_books).each(.)

Element系列有很多实用的函数:  

$('bookdiv').update(' < p > </ p > ');  // 更新innerHtml 
$('bookdiv').show(); 
$('bookdiv').hide();
$('bookdiv').toggle();  
// 切换visiable
$('bookdiv').visiable();   // 返回是否visiable
$('bookdiv').scrollTo();

  .....还有很多 

1.2 传统的Ajax

传统的基于URL的ajax函数简单实用。

   new  Ajax.Updater('bookdiv', "foo .jsp " );

此函数的还有很多可选的参数,参数列表见此

 

new Ajax.Updater('bookdiv',"foo.jsp", {onComplete: initObserve});


比如需要异步执行ajax, 更新bookdiv后需要重新执行initObserve, onComplete的设置就刚好满足你的要求。

另有可定时执行Ajax的PeriodicalUpdater

1.3 Form系列函数也不错

Form.serialize   将Form中所有Input对象的值转化为一个URL String,方便把Form转为用 URL Get方式的Ajax提交,最经典的用Ajax提交Form的例子: 

  < form action = " /action/here "  method = " post "  
   onsubmi
= " new Ajax.Updater('div_to_be_updated', '/action/here', {parameters:Form.serialize(this)});
              return false;
" >  

  另外,Form.focusFirstElement , Form.getInputs等函数也很实用。 

1.4 Event系列

除了后述的Observe模式外,还有下列保证兼容IE和FF的事件函数:

1.Event.element(event),找出触发事件的element.

2.Event.findElement(event,tagName),搜索DOM tree里事件的响应链里的第一个符合tagName的element.

3.pointerX(event),pointerY(event)等.

还定义了一些标准KeyCode,见:http://www.sergiopereira.com/articles/prototype.js.html#Reference.Extensions.Event

1.5 Ruby风格

1.循环函数

elements.each(  function (element){
        alert(element); 
       });

2.不定参数

new  Ajax.Updater('mydiv', ' / foo / bar', {asynchronous: true });

2. Observe模式达到搜索引擎Friendly

Observe模式,就是连接仍然以<a href="foo.jsp">形式编写,用Observe为其加入onClick事件的侦听。 这样,当搜索引擎访问时,就会访问传统的URL;而用户使用IE访问时,就会被Observe转为使用onClick事件的Ajax效果。

见SpringSide中的/home/index.jsp 图书详情察看--通过selector查找需要处理的链接(a),循环为每个链接添加观察者,为click事件,添加handle函数。   
 

$$('div#left_books  *  a[href]').each( function (element){
Event.observe(element,'click',handlerCilckEvent,
false );
});

function  handlerCilckEvent(event){
    
var  element  =  Event.element(event);
    
new  Ajax.Updater('bookdiv',element.href); 
    Event.stop(event);
    $('bookdiv').show();
}

3.script.aculo.us的DomBuilder

script.aculo.us语法超简洁的Builder, 相比之下W3c的Dom Builder语法简直是噩梦。html片断不复杂时如果用JSTemplate有点大炮打蚊子,用script.aculo.us的Builder就够了。
Builder很有Ruby的风格,请看下面一句 : 

foo =  Builder.node('a', {href: " foo.jsp " },categorys[i].name)

第1个参数是element类型,第2个是可选的attribbute,第3个是节点内的子节点。
如果要换成W3c的Dom函数写法,善哉善哉。

下面这段更明显,直接照元素的页面顺序来生成对象,而不是像W3C Dom Builder很逻辑抽象的,先生成对象,然后append到父元素。

div  =  Builder.node('div',{className:linkDiv},[ 
                       Builder.node('a', {href:
" foo.jsp " }, categorys[i].name)  ]
         );

 

当然了,还是没有JS Template清晰,所以Builder只作为html片断非常短时使用。

 

阅读全文...

穷人的通用OLAP方案

缘起
从前到现在,用户需要从IT系统中获取信息的变化无常与程序员从传统数据库中制作报表的代价是一个永恒的矛盾。
这边厢程序员为了应付客户忽然而至的报表需求痛苦不已, 客户只想要他想知道的东西,不会管查询语句有多么复杂,优化从海量数据中提取报表的速度有多么困难。

那边厢客户为了等程序员做一个报表,快则半天,慢则一周,事情都过去了。明明只想知道一样很简单的东西, 程序员却要抱怨查询是多么复杂,数据结构是如何制约。有时候出一个报表要呆在屏幕前等半天。

而OLAP是唯一一种真正让用户获得自己所需要的报表而且不用付出巨大实现代价的方法。它能够让用户自由的定制自己的查询条件,观察、累计的维度,最后从海量数据中快速生成它。


方案
经过几年的发展,各大数据库供应商都有了自己的OLAP方案。不过我们一来不想把产品绑定在某个数据库上,二来没钱,所以还是要寻求穷人们自己的免费且底层数据库通用的方案。
从AgileJava的Blog上,看到了Mondrian + JPivot:



Mondrian
蒙德里安,OLAP核心引擎,负责从关系数据库中计算、缓存数据,响应来自表现层的使用MS家 MDX语法的查询。这个微软家的MDX语法,学起来并不难,SQL Server的书也统统有教。
在这一层要做的事情就是定义一个schema元模型,包括 维度(Dimensions), 层次(Hierarchies),级别(Levels),和成员(Members)等。Mondrian要根据它来从关系数据库中聚合数据响应MDX语法的查询。

JPivot
OLAP JSP custom tag library。提供OLAP Navigator与多 维数据的显示,并支持图表生成和Export to Excel。Mondrian的御用表现层。

初遇
Mondrian用了MS家著名的FoodMart数据作例子,Access作底层数据库,JPivot做表现层,让你几分钟之内就能把Example跑起来,感受一下OLAP报表是什么样子的。跑完一遍之后,我就发现做个客户自定制的OLAP报表如此简单.....

如前所说,Mondrian是OLAP的核心引擎,负责从关系数据库中计算、缓存数据,响应来自表现层的使用MS家 MDX语法的查询。具体表现形式呢,就是一个jar,随Tomcat启动。

看完那个FoodMart的Sample之后, 该自己动手了。

首先第一步是设计OLAP的数据库结构。

因为和业务数据库相比,OLAP需要冗余一些数据达到更快的查询。
设计前可以先参拜一下那本经典的《完全维度设计指南》,中文版的几下就能翻个大概。
其实说白了就是去除与报表无关的列,把订单、订单明细两个表合并成一个销售事实表,把产品,产品分类两个表合并成一个产品维表这几个动作。
设计完之后,应该会有几个装有统计数据和维表外键的事实表,和几个用于分类,排序,过滤的维表。

第二步是把业务数据库里的数据导过来。

有不少ETL的工具,弄出一大堆映射文件,转换类来。不过我还是喜欢直接写SQL快捷,可能我面对的不是一天一个G的数据库吧。

第三步是把刚才设计的数据库结构定义成Schema

schema元模型包括 维度(Dimensions)、层次(Hierarchies)、级别(Levels)、和成员(Members)等。Mondrian要根据它来从关系数据库中聚合数据响应MDX语法的查询。

在这一步之前记得先装一个中文版的SQL Server2000,里面的Help文件有详细的解释。
另外jprovit有一个子项目,是这个schema的Eclipse Plug-in。即使不用这个Plug-in,有了它的DTD,在其他XML编辑器里也能避免拼写错误引起的冤枉时间。
用Sample中的FoodMart.xml做蓝本,两下就能Copy Paste出自己的schema来。
最后,注意Oracle的列名必须全大写。

JPivot 是Mondrian的表现层TagLib,一直保持着良好的开发进度。
已经好久没有用了,趁彻底忘记以前,把小小的心得记下来。

1.汉化
1.1 查找所有resources.properties文件,汉化为resources_zh.properties文件
1.2 native2ascii resources_zh.properties resources_zh.properties
1.3 查找Web-INF/jpivot下的所有XML文件,汉化为xxx_zh.xml

2.架构
JPivot的架构看似另类,但其实都是精明的选择。

2.1 使用XML/ XSLT渲染OLAP报表
JPivot 使用 WCF (Web Component Framework) ,基于XML/XSLT来渲染Web UI组件。这使它显得十分另类。不过,OLAP报表这种非常复杂但又有规律可循的东西,最适合使用XSLT来渲染。虽然程序员和编辑器都很不喜欢这种Martin Flower口中有点LISP形式的语言,但Transform Engine这时候的确能比Template Engine(Velocity,Freemarker)更高效的处理OLAP报表及其导航系统的显示。

2.2 完全基于JSP+TagLib
JPivot另外一个可能使人不惯的地方是它完全基于taglib而不是大家熟悉的MVC模式。但如果不基于tabLib,基于任何MVC框架都会使其失去通用性,担不起Mondrain唯一表现层的重任,而且,MVC其实不一定需要那些框架(后述)

2.3 典型的流程及模式:

打开JPivot自带的sample,查看index.jsp文件,典型的流程如下:

1,用户发出 testPage.jsp?query=modrain的请求

2,testPage.jsp上的根据query参数,匹配/WEB-INF/query/下的modrain.jsp来获取数据

3,modrain.jsp上的查询数据,放入到query01变量中

4,testPage.jsp上的根据query01的结果(领域数据) 准备显示OLAP表格所需的数据(显示数据)

5,testPage.jsp上的根据table01的结果,使用xsl,渲染出OLAP表格。

6,循环第4,5步,使用等tag准备navigator,chart的数据然后用渲染出图表和导航系统.

整个流程,第2步的testPage充当Controller调用第3步的Model层,然后第4,5步 执行Martin Flower讲的Transform Engine两步渲染模式----先从领域数据(比如一些Java bean)中转换出格式整齐的,需要显示的数据(比如一段xml),再用xsl将其渲染为最终的表现形式。




阅读全文...

电子政务中的数据汇总系统构建

作者:孙玉冰
文章来源:计算机世界
2005-9-30
1.前言
(1) 政务工作的特点决定了对数据汇总系统的巨大需求.
我国政府机构的业务工作特点决定了政府各个行业对于数据汇总系统的巨大需求。从国家经济普查和宏观调控,到政府机构的财务统计和绩效分析,再到各级、各单位财政预算资金的执行效率和投入产出比等,无不需要利用数据汇总系统或者类似的工具,对相关的信息进行采集、整理、管理、查询,并在此基础上进行数据的汇总分析,以对相关决策提供客观和科学的依据。可以说,数据汇总系统已经成为我国电子政务建设中不可或缺的信息化工具,对于提高工作效率、辅助政府工作、提供决策支持等具有很大的作用。
(2) 数据汇总系统能够有效辅助解决政务工作中遇到的问题
随着政府信息化建设的不断深入和信息通信技术的飞速发展,数据汇总系统也得到了越来越广泛的应用,并有效辅助解决政务工作中的如下主要问题。
A. 提高政务工作中信息的时效性:目前,我国政府工作中还有相当的政府机构、部门还在通过打印机输出报表纸张进行报送或者通过Excel等表格处理软件或者简 单的电子报表软件进行报表的填写、报送和统计工作,这些无益于政府工作效率的提高,极大的降低了政务工作中信息的时效性,也无法适应政府职能转变和政府改 革的需要。另外,报表层层汇总上报的工作方式也会对报表数据的利用价值、信息的安全性等产生较大的影响,不利于领导基于上报信息进行正确、准确的决策。
B.提高政务工作中数据的正确性:通过纸质、Excel等上报数据时,往往需要人为手工的填写或者修改数据,然后上报提交。尤其是较为复杂的报表填写和上 报,人工操作的错误往往无法避免,进而对上报数据的正确性产生影响。汇总数据来自于基础数据,因此也会对之后的汇总结果的正确性和可信度产生影响。
C. 格式的统一有助于提高政务工作效率:传统的纸质或者基于Excel的数据采集和管理模式往往带来上报数据格式的不统一,这也对上级单位统计、汇总下级各单 位填写和报送的数据带来不便,使得该类工作相当费时、费力,工作量较大。数据汇总系统能够通过多种技术手段保证上报数据格式的统一,从而为上级单位节约大 量的时间和精力,大大提高工作效率。
D. 建立数据的共享机制,提高系统的关联能力:绝大多数政府机构在电子政务信息化建设过程中已经积累下相当的业务系统,上报数据往往来自于已经建设和运行的业 务系统,传统的数据报送模式需要采用类似于拷贝、粘贴的方式,手工从业务系统中获得上报数据,然后填写到报表中。数据汇总系统能够通过技术手段,建立与各 个业务系统之间的关联,自动共享业务系统中的数据,通过自动取数、自动填写报表的方式,减少人工操作可能产生的错误,同时提高数据的共享性和系统的关联 性。


2. 数据汇总系统
(1) 系统定位
数据汇总系统是在我国电子政务建设指导意见以及政府各行业进行数据的采集、整理、管理、查询、汇总、分析等相关业务工作整体规划之下,面向政府各个行业, 将行业内部分散在各个单位的业务、财务等数据信息以网络报表的形式汇集起来,并在此基础上根据单位、区域等不同条件重点进行数据的汇总分析,并为领导决策 提供客观依据。

数据汇总系统的应用对象是具有多层次、多单位(部门)树型架构、需进行数据采集、管理、汇总应用的主管单位和下级机构;数据汇总系统对应的数据内容,不但需要能够处理财务等结构化的报表数据,还能够处理政府工作计划、业务统计等非结构化的业务数据。

数据汇总系统基于网络报表,又不同于网络报表。数据汇总系统应用的形式为网络报表,通过报表模板制作、样表生成、报表样表组合及下发、报表填写、报表审 核、报表上报、报表管理等系列操作,完成汇总分析所需要的基础数据的采集工作。与网络报表软件重在数据采集和管理不同,数据汇总系统的重点在于数据的汇总 和分析,为领导决策提供客观依据。

(2) 系统架构概述
数据汇总系统从应用层次上可以划分为四个层次:数据采集层、数据管理层、数据汇总层、数据分析层,其中:
数据采集层主要完成报表数据的采集工作,也即通过浏览器或者客户端软件接收系统代码、报表模板、任务等,本地填写、导入或者自动从业务系统中提取数据,然后保存、审核之后并上报。

数据管理层主要完成下级单位报表数据的收集、整理,并按照系统设定决定上报汇总数据或者上报基础数据加上汇总数据。数据管理层对应的单位可以有多个层次,也即对应于多个中间层单位,该类单位可以对下级单位上报的报表数据进行管理、查询、统计等操作。
数据汇总层主要是帮助主管单位(也可以是中间层主管单位)完成数据的汇总、统计等设置的。具体而言,就是主管单位根据报表相关指标、关键字等,设置汇总统计条件,建置汇总统计模型,然后基于各下级单位上报的数据或者下级单位上报的汇总数据,形成汇总统计的结果。
数据分析层是数据汇总系统的重点,也是该类产品客户需求和市场发展的必然趋势。数据分析层主要是完成数据库到数据仓库的转换,并在数据仓库建置的基础上,完成多维数据分析以及数据的钻取、切片、旋转等功能。
概括的讲,数据采集是基础,数据管理是桥梁,数据汇总是重点,数据分析是目的。数据采集、管理,其重点是在此基础上的汇总和分析,主要目的是为领导的决策提供全面、准确、客观、科学的数字依据。

(3) 系统功能简介
数据汇总系统从功能上来说,一般包括如下主要功能:
系统设置:在数据汇总系统全面应用之前,需要首先进行系统设计的工作,主要包括参数设置、代码设置、单位设置、角色管理、用户管理、数据源设置、关键字、币种、传输设置、关联软件接口等。

报表设计:数据汇总系统数据的载体是报表模板,因此需要首先设计系统应用中需要的各类报表模板,并基于模板建置数据报送任务中需要的报表样表。

任务管理:报表的下发、填写和上报是以任务的形式进行组织的,数据汇总系统中可以针对不同的报表应用设置多个任务,并下发给不同的下级单位。当然,在同一个数据汇总系统应用中,也可以将不同的任务下发给同一个单位。

报表填报:下级单位接收到上级下发的任务之后,可以选择一个当前任务,填写该任务对应的报表样表,并保存数据填写的结果。下级单位可以随时查询自己所填写的报表。当填写完毕后,可以在保存、审核通过之后,将任务中的报表报送给上级单位。

报送管理:上级单位可以管理和查询各下级单位填写、上报的报表数据,并对下级上报的数据进行审核(复核)。同时根据审核的结果,决定是否需要下级单位重新填写或者修改上报的数据。

汇总查询:汇总查询根据需要分为报表汇总、定制查询、指标查询和主题分析四个方面。汇总查询是数据汇总系统的重点,也是数据汇总系统的核心应用模块。

智能分析:智能分析主要是针对经过数据转换形成的数据仓库,完成分析模型的建置,实现基于分析模型的多维分析,并利用展现工具,根据权限设置为领导展现智能分析的结果。

报表传输:报表传输主要是为需要导入、导出数据的单位设置的功能。该类报表数据通过磁盘文件、邮件系统等多种渠道进入数据汇总系统。

系统监控:系统监控主要是为主管单位查询在线用户、正在计算的报表以及系统日志信息而提供的。

3. 数据汇总系统在电子政务建设中的应用
(1) 数据汇总系统在电子政务建设中的应用特点
根据国家信息化领导小组关于我国电子政务建设的指导意见,数据汇总系统在十二金工程建设和重要政务信息资源开发方面都有非常广泛的应用,其应用主要有如下特点:

A 行业化分布
政府各行业关于数据采集、管理、汇总等相关的政策、规定等往往是针对本行业的实际特殊需要所制定和发布的。

比如在社保行业社保基金管理方面,根据《社会保险基金行政监督办法》、《社会保险基金财务制度》、《社会保险基金监督举报工作管理办法》等政策,针对数据 汇总应用,发布《社会保险基金会计报表》、《社会保险基金会计报表说明》、《社保软件使用操作说明》等文件。再比如在行政事业单位国有资产管理方面,按照 管理模式不同,由国资委/局/办、财政主管部门或者政府部门颁布相关政策,针对数据汇总应用,发布《行政事业单位国有资产及经营性收入调查表》、《行政事 业单位国有资产及经营性收入调查表填写说明》、《行政事业单位国有资产监督管理条例》等。

因此,数据汇总相关政策是针对行业的需求做出的,具有行业化分布的特点,这也决定了数据汇总系统的应用必须面向行业,针对不同行业的特点进行实施。

B 可操作性强
数据汇总相关政策往往可操作性很强,主要目的在于规范行业内部某项业务工作的运转和具体操作办法。

比如在国有资产方面所发布的《行政事业单位国有资产及经营性收入调查表》以及《行政事业单位国有资产及经营性收入调查表填写说明》中,对于需要填报单位、 填报人、填报资产的类别、名称、格式、以及各项资产的属性都作了非常明确的规定,以房屋建筑物为例,则需要填报建筑面积、层数、总投资、负债情况、资产地 址、房产证号码、土地证号码、使用状态等;对于土地使用情况,则需要填报土地证书编号、发证机关、总面积、办公用地面积、存量公有住房用地面积、其他用地 面积、闲置用地面积等。在填报说明里面,更对具体每个项目的格式、注意事项等做出说明。

上述报表格式以及填表说明的目的就是为了规范化填报工作,减少或者消除因为表格项目误解等原因导致的误报、漏报、错报等现象,保证数据汇总系统应用相关工作的顺利、规范的实施。

C 上下两条线
数据汇总系统的应用一般是上、下两条线。
对于下行方向,行业主管单位负责制定本行业使用的报表模板以及发布相关政策规定,报表模板由行业主管单位下发到行业中间层单位,再由行业中间层单位根据地方需要添加附加指标、项目等,然后作为本地方统一的行业报表模板下发到基层单位。

对于上行方向,基层单位按照上级单位下发的行业报表模板进行填报,然后经过审核之后,上报到行业中间层单位。行业中间层单位进行审核、汇总后,将经过审核 的汇总数据上报到行业主管单位,另外根据要求,决定是否上报基层单位明细数据。行业主管单位接收到所有行业中间层单位上报的行业报表之后,进行审核、汇 总,最终形成整个行业的汇总报表。同时,数据汇总应用对应的数据集中、统一管理也使得通过汇总、分析为决策提供客观依据提供支持。

(2) 数据汇总系统在电子政务建设中的应用实例
A 数据汇总系统应用于宏观经济分析
在政府部门的规划中,电子政务建设将主要围绕“两网、一站、四库、十二金”重点展开。其中,宏观经济是四个基础数据库之一,其对应的宏观经济管理信息系统 的建设有利于宏观管理部门实现信息资源共享,提高工作效率和质量,增强管理与决策的协调性;有利于宏观管理部门获取及时、准确、全面的宏观经济信息;有利 于推进公共服务,增加政府工作的透明度。

数据汇总系统应用于宏观经济分析,是指在我国电子政务建设指导意见和区域性政府信息化建设整体规划之下,依托政府网络平台,针对宏观经济信息,通过互联互 通和信息共享,进行规范化、信息化、网络化的安全管理和科学分析,从而促进宏观经济管理部门之间的业务协同和互动,为政府提供及时、准确、全面的宏观经济 信息服务,增强区域性政府调控所辖范围内宏观经济、驾驭市场变化、应对突发事件、总揽经济全局的能力。
数据汇总系统应用于宏观经济分析。.
数据汇总系统应用于宏观经济分析主要可以分为宏观经济信息采集、宏观经济信息管理和宏观经济信息分析三个部分。其中:

宏观经济信息采集将包括信息采集和传输平台、信息采集工具、信息转换工具三方面的内容。

信息采集和传输平台主要完成数据汇总系统与关联系统之间数据的压 缩、加密、传输、解密的功能,该平台能够与信息采集工具、信息转换工具一起完成关联系统数据的采集工作。信息采集工具完成从关联系统中获取宏观经济管理分 析所需要的数据,具体获取的方式可以分为主动和被动两种。

信息转换工具用于处理采集到的数据,以便能够转化为宏观经济管理分析所需要的数据,可以分为两大 步骤:第一是从采集到的数据转换到宏观经济管理分析数据库中;第二是从宏观经济管理分析数据库转换到数据仓库中,以实现宏观经济信息的分析和展现。

宏观经济信息管理分为数据的管理和维护、数据的查询、数据的汇总统计三个部分。数据的管理和维护主要是用于对采集和转换后的数据进行管理,包括完整性检 查、数据修改、数据采集通知等。数据的查询可以分为数据基本查询和数据高级查询两种。数据的汇总统计可以按照采集期间、关联单位等进行汇总,汇总统计支持 全部汇总统计、逐级汇总统计等多种汇总方式。

宏观经济信息分析可以分为宏观经济分析模型管理、宏观经济分析工具和宏观经济分析展现三个方面。宏观经济分析模型管理主要用于创建宏观经济分析所需要的分析模型,分析模型主要由事实表、维度、量度、指标等构成,一个分析模型可以看作是一个面向主题的分析对象。管理功能包括模型的创建、修改、保存等。宏观经 济分析工具主要用于提供宏观经济分析所需要的平台,包括数据仓库、数据集市、OLAP分析等。通过宏观经济分析工具,能够提供按照年、月等展现的主要经济 指标、经济周期趋势分析、经济发展的综合指数、社会发展指标、居民生活指标、社会事业指标等。宏观经济分析展现主要用于展现基于宏观经济分析模型、利用分 析工具所获得的分析结果。分析结果可以钻取分析、影响分析、关联分析、分解树等多种方式,按照表格、图形(可以为柱状图、饼图、折线图、曲线图等)等方法 进行展现。

数据汇总系统应用于宏观经济分析,主要能够带来如下价值:

通过统一的数据采集、管理、分析、展现,能够实现宏观经济的集中、统一管理和相关部门之间的信息资源共享;

通过规范化、信息化和网络化的管理,有利于实现业务协同,提高工作效率,增强管理与决策的协调性;

通过建立宏观经济信息分析模型,并基于模型进行统一的展现,有利于政府获得及时、准确、全面的宏观经济信息,并提供政府决策的数字依据;

通过受限开放宏观经济信息的管理和分析结果,有利于推进公共服务,增加政府工作的透明性。

B 数据汇总系统应用于行业数据收集
数据汇总系统以网络报表为基础,重点在于数据汇总分析和决策支持,因此将数据汇总系统在行业数据收集方面的应用最为广泛,收集的数据重点集中于结构化的数值型数据,当然也可以通过文档的形式收集非结构化的业务数据。

目前,数据汇总系统在行业数据收集方面的应用较多,比如以收集企业财务信息为主的财务数据报送软件、以收集产权信息为主的产权登记软件、以收集资产信息为主的资产清查软件、以收集行业协会统计数据为主的行业统计分析系统等等。

C 数据汇总系统应用于社会民意调查
下面,我们再举一个利用数据汇总系统应用于社会民意调查的例子。
政府门户网站或者行业协会网站上经常针对公众或者行业协会成员做社会调查、市场调查或者民意调查之类的事情,用以针对某一个主题了解调查对象的意见,从而 获得一些指导性的统计结果。简单的社会民意调查可以通过简单的技术手段方便的实现,但是对于一些较为复杂的调查问卷,尤其是一些较为重要的、调查对象确定 的调查,如何通过数据汇总系统来实现呢?

从实施上来说,数据汇总系统应用于社会民意调查主要可以分为三个步骤:

a. 问卷调查设计
问卷调查设计的过程对应于利用数据汇总系统制作问卷模板的过程。使用数据汇总系统将需要调查的问题制作成为问卷模板,然后仅将问卷中选择或者填写的区域设置为可写,其他设置为只读。

数据汇总系统报表模板设计的灵活性保证了可以设计出单选调查问卷、复选调查问卷、主观调查问卷等多种问卷模板,并可根据调查问卷的类型、调查对象的范围,以调查任务(不同的问卷调查主题)的形式适应多种问卷调查的需求。

b. 填写调查问卷
调查对象根据下发的调查任务,浏览该调查任务下的各个调查问卷,并根据调查要求或者提示完成调查问卷的填写和检查工作。

c. 调查结果分析
数据汇总系统能够基于收集的调查问卷(可以使用系统提供的审核工具对调查问卷的完整性等进行审核),自动根据单位、区域、期间等进行汇总,并对汇总的结果进行分析,实时、方便的获取调查汇总分析结果,结果的表现形式可以为柱状图、饼图、趋势图等。

4. 数据汇总系统未来的发展趋势
将来,数据汇总系统将来必将超越现阶段以网络报表为特点的系统应用形式,从发展趋势上看,其未来发展的重点将主要集中于智能性、易用性、集成性三个方面,并逐渐成为电子政务市场上主流的应用产品之一。


阅读全文...

BI,OLAP开篇

BI将火


随着2003年12月12日Business Objects公司(简称BO)收购Crystal Decisions 所有交易的全部结束,一个年营业额达7.36亿美元的全球最大的BI(Business Intelligence,商业智能)厂商诞生了。


据不完全统计,近1年来全球范围的企业并购中,涉及到BI的高达数十亿美元之多。其中以老牌BI厂商BO(Business Objects)以8.23亿美元收购Crystal,以及著名的BPM(Business Performance Management,企业绩效管理)厂商Hyperion(海博龙)以1.56亿美元收购第六大BI厂商Brio最为引人注目。而Hyperion在完成收购后,以年营业额6亿美元一跃成为世界第二大BI厂商。


是偶然?记者在同曾经采访过数家企业CIO聊天时惊讶地发现,他们不约而同地正在或即将进行BI产品的选型和规划。是必然?记者从他们那里得到的答案也几乎一致:“经过几年ERP系统的运行,企业拥有了大量的经营及客户数据,为了进一步获得市场的竞争优势,必须把这些封存在各个数据库中的各种结构的数据充分利用起来,提高企业运营绩效,获得更大市场。”


于是乎,我们今年看到或听到诸多之前习惯于在幕后低调工作的BI厂商,纷纷跳出来展示自己BI标记时也就不足为怪了。同样道理,在BI产品上一直毫无建树的国内厂商相继推出相关产品与概念并宣称填补国内空白者也屡见不鲜了。


据IDC数据调查,2003年中国大陆BI市场软件授权费用总量为2300万美元,2004年预估将达3000万美元,增幅达30%。这个数字无疑给众多BI厂商一针强心剂。从表面上看来,目前我国的BI市场不论是需求还是供给都具备了一定的条件,只需到一个临界值便会一触即发。但记者认为事实并非如此,不论从企业用户对BI的认识和定义还是国内BI市场的规范程度都存在很多问题,如同当年的ERP市场一样,需要时间、经验和教训的积累才能发展成熟。


定义BI


在收购了Brio之后,Hyperion副总裁兼亚太区总裁卡尔蒙特力先生经常被他的客户问同样一个问题:你们现在算是BPM厂商还是BI厂商呢?而他常用一个例子来回答:早在6、7年前,全球著名的企业应用软件厂商PeopleSoft(仁科)就曾试图进入BPM市场,但现在他们选择了与Hyperion合作。如今与其合作的还有SAP以及国内的用友和金蝶。“很多BI公司更愿意把自己叫BPM(或者EPM、CPM)公司,但BPM与BI的最根本的区别是:BPM是具有远见的,对企业未来策略的研究,而BI则是对企业历史数据进行研究,是过去时。”


其实,市场上早就有BI工具,比如联机分析处理(Online Analytical Processing简称OLAP)、报表制作和数据挖掘等,但BPM除了包含上述技术外,在应用领域、功能划分以及系统构造方面与BI有着本质的不同。在应用领域方面,BPM可以深入特定的业务流程或功能;BI只是通用工具;在功能划分方面,BPM可按企业业务功能划分,如财务绩效管理、客户关系绩效管理、生产运营绩效管理、交叉业务绩效管理;BI工具只能根据技术划分,如数据挖掘工具、OLAP工具等。在系统构造方面,BPM能够协调业务活动以达到特定的结果,如编制预算、评估关键供应商;BI只是支持没有预定义的特殊查询和分析,其业务目标是开放的。


到底什么是BI?目前常见的有企业界与学术界的两个定义。


企业界认为商务智能是指一种能力:通过智能地使用企业的数据财产来制定更好的商务决策。它的意思是说各种企业的决策人员以企业中的数据仓库(Data Warehouse) 为本,经由各式各样的查询分析工具(Query/Report Tools)、联机分析处理(OLAP)工具、或是数据挖掘(Data Mining)工具加上决策规划人员的行业知识(Industry Knowledge),从数据仓库中获得有利的信息,进而帮助企业获利,提高生产力与竞争力。


学术界的观点是:BI 实际上是帮助企业提高决策能力和运营能力的概念、方法、过程以及软件的集合,其主要目标是将企业所掌握的信息转换成竞争优势,提高企业决策能力、决策效率、决策准确性。


显然,学术界对BI的定义更加宽泛,这同时也给了BI厂商以更多的发挥空间。


BO公司在解释BI的定义时举了个例子:您正面临一个不可预知的商业问题,作出准确的决定将增加利润,反之将减少利润。现在您正需要准确的信息,这恰是BI软件能提供的。它挖掘贵公司的数据库和操作系统中的数据,提供及时可控的信息,所有的都取决于您的商业目标和规则。


尽管ERP理论上包括BI和CRM,而实际并不如此。BI 是为了聚集、巩固、分析和提供接近信息的包括更大范围的分析软件和方案的术语,因此也有人认为,CRM 和ERP 只是BI 能应用的两种操作系统。比如,以CRM 为导向的BI 分析也许会得出这样的结论:年龄集中在31~45岁之间的、住在北京亚运村的客户的年收入在10万元以上。以ERP 为导向的BI 分析也许会包括这样的规律:在特定的生产设备下既定的机器工具的损耗平均时间。


综上所述,其实BI就是一个整合一系列操作以及决策支持应用程序和数据库的企业系统,它向商业团体提供容易接近其商务数据和允许他们作出准确的商务决策。它是一种新“规则”,在其中数据最终被视为企业资源,也就是任何操作系统如ERP、CRM和任何决策支持应用程序(包括数据库和数据仓库)都是BI,当且仅当他们是在战略上主动跨组织的范围和方法下开发的。


产品风骚各领


在MetaGroup在最近的一份报告中,单就技术而言,处于领先地位的公司包括Cognos、Microstrategy、Brio、BO和Oracle。为了考察以上提到的几家公司BI产品的特色,eWEEK/每周电脑报特别联合了一些正在进行BI选型的企业重点对以上五家公司以及SAP、微软公司的BI产品进行了比较与评估。


在评比中我们发现Cognos与Microstratagy属于同一阵营,都属于产品线较齐全,既有前端展示功能,又有后端数据分析与挖掘功能,二者都能够提供比较集成化的方案。Cognos数据处理速度更快一些,且在预算与规划方面造诣颇深,而Microstratagy由于其在OLAP Server上的优势在处理大数据量数据方面更出色。由于Cognos早在1969年就已成立,比其他3家都要早20年,这也决定了他们在技术架构上的差异。据悉,除Cognos仍然沿用C/S架构外,其他几家主流厂商都基于B/S架构。所以Cognos的产品并不能通过Internet进行浏览,但针对特定的和主流的ERP软件专门。Cognos已设计了相应的加速器PPES(PowerPlay Enterprise Server)可解决这个问题,相应的投资自然也会大幅增加。


BO与Brio都是在前端展现方面比较突出,用户接受程度较高。但二者均无OLAP Server,导致数据监控功能较弱,虽然也可以与微软或Oracle的OLAP Server挂接,但这样毕竟受制于人,给客户提供的方案也不是最集成的。正是因为这个原因,Hyperion才认为对Brio的收购是前端与后端的最完美的结合(不过由于缺少数据挖掘这部分功能,他们所谓的完美似乎也有些牵强)。


对此,现任Hyperion中国区销售总监的原Brio中国区总经理王善越认为,Hyperion自身的OLAP Server功能不错,扩展性好,而且可读可写,Brio可以从OLAP里拿数据,也可以从关系型数据库里提取数据,没有任何冲突。而且双方产品合并后没有任何变化,被称为最匹配的合并。另外从客户的角度,目前在国内既在前端用Brio,又采用Hyperion OLAP Server的客户占了Brio全部客户的80%。


相反,BO斥资8.23亿美元收购Crystal的行为除了使其年营业额从4亿美元增长到7.36亿美元外,更多的是引起了业内人士的疑惑。卡尔蒙特力认为,这二者的产品线重点都在前端展示,重合度很高,BO并没有使其产品线得到更有效的扩充。


对此,BO公司亚太区市场总监Kriss Channe先生解释道,BO的产品线已经涵盖了从BPM、数据挖掘到BI前端展示产品,惟独在报表这方面不是很强,而Crystal恰好是最强的报表工具提供商,在全球拥有大量低端用户,而他们恰恰是BO产品的潜在用户,因此二者合并后产生的商机是巨大的。同时,对于Hyperion与 Brio的合并,Channe的看法相当客观,他认为以前Hyperion的用户仅仅局限在财务部门和高层财务人员在使用,而Brio在财务外业务部门有很多解决方案,产品大部分由业务部门使用,收购后,Hyperion希望能够借助Brio从财务部门走到业务部门。“但能不能如Hyperion所愿真正走出财务部门,还要看其今后怎么运用Brio这张牌。”


买还是建


随便翻看任一家BI公司的客户名单,都会发现具有惊人的相似性,即除了金融、电信业均拥有大批客户外,他们的客户简直是涉及到了各行各业。由此很多人不难得出这样一个结论:BI是一个没有行业特征的产品。但实际并非如此。一个BI公司仅靠销售其分析工具或技术平台是发不了财的,而他们真正昂贵的就是经过多年经验积累和总结下来的具有各行业固有特征的商业分析模型。难怪通化钢铁CIO王树强先生不禁感慨,“我们购买BO的平台才不过几十万人民币,可要把他们的平台及商业模型买齐了据说要500万美元,我们想都不敢想啊,只有那些像宝钢这样的财大气粗的行业巨头才买得起。何况全球一些标准模型又不一定适应国内用户。” 经过3个月的培训及自己对钢铁行业业务的熟知,通钢自从去年BI上线后至今已自行开发了25个模型,“虽然慢些,但很灵活。我们需要什么就开发,不需要就废掉或改掉。” 最后,王树强根据自身经验建议,不要在BI产品选型上耗费过多精力,重要的是准备后续力量,熟练使用数据挖掘工具并建立企业需要的商业模型。


买平台还是买整套解决方案及模型?从目前国内大部分用户实际情况来看还是偏向买平台,毕竟价格便宜,如满足基本功能的情况下一个平台的软件授权费用约20万人民币,加上实施费用不过50万元左右,而据悉一套完整成型的数学模型动辄上百万美元,当然用户可以像通化钢铁一样根据自己的需求自行设计模型。汇丰银行则采取了截然不同的方法,它自己不花人力和精力去开发和研究这些模型,而是每年都向花旗等国外银行购买其自行开发并已投入应用的业务模型,以保证花钱购买成熟的模型。即使这种方式往往是最贵的,但采用这种方式的用户看重的是投资回报率。


谈到这一点,BO公司亚太区市场总监Channe认为,虽然购买标准模型预制的分析应用加速了实施时间,帮助企业能够尽快超过他们的竞争者。不过由于目前国内市场应用BI的企业并不多,应用深入的更少,应用基础也比较薄弱,即使拿来国外先进的商业模型也不一定运转起来,所以他建议开始可以先从平台级产品做起,逐渐深入应用。同时他还表示,BO针对国内市场的现状在整体解决方案中提供一些通用性较强的模型给客户使用,以此来均衡“买与建”的关系。


对国内BI产品日益增长的需求,曾经在Ventana Research的一次万名用户调查中获得最低总拥有成本的安讯(Actuate)公司认为,BI不应只被看作是针对个人或部门的一种工具,而是整个企业需要通过正确的信息做出正确的决策。BI对所有企业来说是一种战略优势,必须站在整个企业的高度来看待。最初实施BI项目时无需大张旗鼓,但是发展方向和人员以及数据的可扩充性在最初做计划时必须慎重考虑。企业还需要选择合适的软件平台,确保满足不同用户对数据的不同需求。为了确保BI软件成为“企业平台”而不是“技术孤岛”,终端用户必须考虑在内,这样才能正确选择出一个功能最强并且最经济有效的平台。


中国攻略各不同


一位业内人士毫不客气地指出,目前中国的BI市场非常混乱,就是因为国内代理商把价格都做乱了。而在2004年之前,国际主流的BI厂商也只有Brio一家亲自做中国市场,这也就是为什么BO在全球销售额是Brio的6倍,但在国内却只有其一半。另外,由于其他几家BI厂商在国内根本没有常驻机构,不仅导致市场价格混乱,更加严重的是导致市场上泛滥着盗版。


不过,今后Brio在国内将不再孤独了。从1月1日起,国内原BO与Crystal销售人员将会以统一的形象面对客户,并将在3月份举办新公司最大一次亚太区用户大会。在合作伙伴的选择上,BO也取消了原先的全国总代理制,与原总代Business intelligence中国有限公司解除了合约,改为多代理商制,其中便包括实力强大的神州数码。


在收购Brio之前,Hyperion全球的销售收入中BI与BPM各占一半,收购后BI产品收入则占到60%。在国内,Brio现有销售队伍与Hyperion自有BI产品的队伍进行了整合,而Hyperion最有名的BPM产品则继续由原Hyperion的人员进行销售。对于2004年的市场预期,Hyperion中国公司的目标是:中国前100强企业中15~20%的客户采用Hyperion全套产品,包括后端的BPM与前端的BI(全套产品的意思是包括财务合并、财务分析、模型、从制订战略到商业模型与流程设计到预测)。早在2003年初,Brio便与金蝶达成战略合作伙伴关系,金蝶作为Brio的顶级代理商, 把Brio Performance Suite捆绑到金蝶的企业信息化整体解决方案中。在合作近1年后,金蝶通过OEM方式推出了自己的EPM产品,虽然目前仅仅是雏形,还有很多没有成型,但也足以表明金蝶对这块市场的重视程度。


虽然Cognos全球收入中有70%来自BI,但作为Hyperion非常重视的竞争对手,其在预测及规划上的实力也是不容小觑。但不同于前两家厂商,Cognos并没有亲自进入中国大陆市场,仅由国家信息中心的北京优信佳公司作为其总代理。但毕竟靠代理商及分销商做项目,导致其在国内的管理不到位,价格也比较乱,实施质量同样很难保证。


另一家主流的BI厂商,MicroStrategy也在2003年11月6日宣布,将通过其在大中国区的惟一总代理FirstBI公司代理销售其软件和服务,推广它的中文版产品,向中国企业提供数据分析软件,用以优化业务运作、提高效率和改善客户关系。而FirstBI的之前正是BO公司的中国区总代理。


谈到BI,不能不提及在统计分析、数据挖掘方面全球一流的SAS公司,由于在产品上的明显优势,SAS的客户分布在金融服务业、保险业、电信业、制造业、零售业、医药、能源、政府和教育等领域,甚至在《财富》前100名公司中有98家都使用它的软件。在国内众多金融机构与电信运营商均是其用户,而宝钢则是其最典型的传统企业用户。


但如同其产品的优势一样,其销售模式的独特性也同样明显。由于SAS全球统一的独特的租赁式销售模式使其在国内市场举步维艰。举个例子说明,如果企业使用SAS的产品,第一年应付10元,以后每年都要付5元的租赁费用,如果某年用户拒绝支付该费用,将无法继续使用该软件。这种收费方式首先国内用户接受程度不高,除非是行业巨头可以承受,或者是该企业能清楚地计算出每年的ROI,导致每年付出5元钱不会只得到4元的回报。可这样的企业在国内能有几家呢?


另外,SAS对合作伙伴的支持力度不大,导致虽然SAS进入中国已经10年之久,却始终在市场上不温不火。


全球ERP老大SAP显然也不甘心看到众多专业BI厂商独自瓜分市场份额,于是他们首先在已有的ERP客户上做文章,重点强调其BI产品SAP BW与其R/3 ERP系统的完整性与集成性的优势,但是其昂贵的费用的确也令很多用户有心无力。


在对企业及软件市场进行分析和预测时,任何时候都不要忘记微软。在记者的采访中,被BI厂商提到最多的也是微软。如今,微软的SQL7已经集成了OLAP,但前端展示上还需要二次开发或与BO、Brio等集成,但没有人会怀疑如果微软一旦用心做前端产品,其易用性和亲和力一定不会差的,何况还有与OLAP Server捆绑这一微软惯用的杀手锏。


谈到那么多国外BI厂商的动态,我们不禁疑问:国内有没有BI厂商?的确,近期业内也频频有国内厂商如博科、金蝶发布其BI产品,另外前方正的“空降兵”总裁李汉生也在领导着上海和勤软件进行BI产品的开发。但从产品功能上看,国内厂商自行开发的软件在国外厂商的眼中简直就是“小儿科”,所以其产品价格相差数十倍甚至数百倍也情有可原。鉴于此,一直对中国管理软件情有独钟的中华网近期又收购了一家丹麦的BI公司,并将其产品移植到中华网控股的铂金软件平台上,年后就会面市。已经使用了国外BI产品多年的某企业CIO也认为,看到国内的BI产品后感觉只是一个框架,还需要很多模型和内容去填充,这些内容要么直接来自国外厂商OEM,要么自己从经验中提取并建立,他认为中国的企业的运作方式毕竟同国外企业不同,因此国外很多标准的模型并不能直接套用,适应本地需求的市场还是巨大的。如何使自己的产品更加充实和适应客户需求呢?当然是尽可能多地让了解客户需求并让客户应用产品,所以国内BI厂商应该不要放弃任何接触客户,了解客户需求并让客户了解自己产品的机会,不要看到国外厂商的参与就主动举了白旗,不然永远没有进步的机会,更何谈生存。

阅读全文...

什么是数据仓库?为什么要用数据仓库。


目前,数据仓库一词尚没有一个统一的定义,著名的数据仓库专家W.H.Inmon在其著作《Building the Data Warehouse》一书中给予如下描述:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策。

对于数据仓库的概念我们可以从两个层次予以理解,

首先,数据仓库用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;

其次,数据仓库是对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。

根据数据仓库概念的含义,数据仓库拥有以下四个特点:
1、面向主题。操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织。主题是一个抽象的概念,是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。

2、集成的。面向事务处理的操作型数据库通常与某些特定的应用相关,数据库之间相互独立,并且往往是异构的。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

3、相对稳定的。操作型数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

4、反映历史变化。操作型数据库主要关心当前某一个时间段内的数据,而数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
企业数据仓库的建设,是以现有企业业务系统和大量业务数据的积累为基础。数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。因此,从产业界的角度看,数据仓库建设是一个工程,是一个过程。
整个数据仓库系统是一个包含四个层次的体系结构,具体由下图表示。


数据仓库系统体系结构




·数据源:是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于RDBMS中的各种业务处理数据和各类文档数据。外部信息包括各类法律法规、市场信息和竞争对手的信息等等;




·数据的存储与管理:是整个数据仓库系统的核心。数据仓库的真正关键是数据的存储和管理。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。要决定采用什么产品和技术来建立数据仓库的核心,则需要从数据仓库的技术特点着手分析。针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。




·OLAP服务器:对分析需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:ROLAP、MOLAP和HOLAP。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。




·前端工具:主要包括各种报表工具、查询工具、数据分析工具、数据挖掘工具以及各种基于数据仓库或数据集市的应用开发工具。其中数据分析工具主要针对OLAP服务器,报表工具、数据挖掘工具主要针对数据仓库。

为什么要用数据仓库:

最近做一个web项目,正在考虑报表工具的问题。 报表对于系统开发的重要性是不言而喻的,

一方面对于一般的MIS或者ERP之类的系统而言,报表是客户最能够直观的感受系统功能的表现形式,也就是系统最能够吸引客户的地方,特别是客户的领导阶层。一般的系统在设计的时候都有所谓的“领导查询”或者“决策支持”模块,那是在推销系统的时候给总经理或者总裁预备的,我很少看到在系统真正上线的时候高层领导会直接使用系统的,因为他们通常都是看报表的,而不是直接使用系统的。

另外一方面,在项目上线之后的一段时期内,客户提出最多需求地方就是报表了。所以开发设计各种各样的报表就成了维护人员的日常工作。客户可能会突发奇想,想要一个什么什么样的报表,需要对业务数据进行各种形式的分析,这都令程序员烦恼不已。

解决问题的方法有多种:

1. 系统设计人员会想到给系统增加一个“客户自助查询”或者“报表定制”功能,其实就是自己在做一个小的报表设计器。这样费工费时,而且功能也比较单一。

2. 采用功能比较强的报表工具,带有用户设计器的。例如Fast Report,Crystal Report等,这些工具的设计器很强,而且让用户自己去设计,但是要让客户用这些工具设计复杂的报表,基本上是在培养用户编程程序员。

3. 数据仓库技术是解决这些问题的方案之一,可以看作是报表系统的深化。

现在各大数据库厂商都有自己的数据仓库解决方案了。数据仓库的概念很大,但是一般的人只是用它来做OLAP就足够了。

数据仓库的理论也很复杂,对于一般的应用不需要了解的那么深入。数据仓库入门也很简单,微软的SQLServer附带了Anylize Service,这是微软的数据仓库产品,它带了一个入门教程,很简明,花几个小时step by step做下来之后对数据仓据的一些基本概念就会有所理解了。


阅读全文...

数据挖掘过程

在实施数据挖掘之前,先制定采取什么样的步骤,每一步都做什么,达到什么样的目标是必要的,有了好的计划才能保证数据挖掘有条不紊的实施并取得成功。很多软件供应商和数据挖掘顾问公司投提供了一些数据挖掘过程模型,来指导他们的用户一步步的进行数据挖掘工作。比如SPSS的5A--评估(Assess),访问(Access),分析(Analyze),行动(Act),自动化(Automate),和SAS的SEMMA--采样(Sample),探索(Explore),修正(Modify),建模(Model),评估(Assess)。

最近,一些软件供应商和用户组织成立了行业协会,包括NCR Systems Engineering Copenhagen(丹麦)Daimler-Benz AG(德国)SPSS/Internal Solutions Ltd.(英国),和OHRA Verzekeringen en Bank Grep B.V(荷兰)。这个组织的目的就是建立跨行业数据挖掘过程标准(CRISP-DM),在1999年9月的时候CRISP-DM仍在建立之中。

我们下面详细讨论Two Crows公司的数据挖掘过程模型,他与正在建立的CRISP-DM有许多相似之处。

数据挖掘过程模型

虽然我们把各个步骤按顺序排列,但要注意数据挖掘过程并不是线性的—要取得好的结果就要不断反复重复这些步骤。比如在“分析数据”时你可能觉得在“建立数据挖掘数据库”时作的不够好,要往里面添加一些新的数据。

这些基本数据挖掘步骤包括:

1. 定义商业问题

2. 建立数据挖掘模型

3. 分析数据

4. 准备数据

5. 建立模型

6. 评价模型

7. 实施

1. 定义商业问题。在开始知识发现之前最先的同时也是最重要的要求就是了解的你的数据和业务问题。如果事先没有这种了解,没有任何算法,不管他有多么复杂玄妙,能够为你提供有价值的结果,即使有也难以使人信赖他。缺少了这些背景知识,你就没办法明确定义要解决的问题,不能为挖掘准备数据,也很难正确的解释得到的结果。要想充分发挥数据挖掘的价值,必须要对你的目标有一个清晰明确的定义,即决定到底想干什么。比如你说你想提高直接邮件推销的用户回应时,你想做的可能是“提高用户响应率”,也可能是“提高一次用户回应的价值”,要解决这两个问题而建立的模型几乎是完全不同的,你必须做出决定。有效的问题定义还应该包含一个对你的知识发现项目得到结果进行衡量的标准。当然还应该有整个项目预算和理性的解释。

2. 建立数据挖掘库。连同下面的两个步骤,这三步构成了数据预处理的核心。这三步和在一起比其他所有的步骤加在一起所花得时间和精力还多。一旦你从数据挖掘的结果中学到一些什么之后,你很可能要修改数据以得到更好得结果,因此就需要把数据准备和数据挖掘不断的反复进行。数据准备工作大概要花去整个数据挖掘项目的50%-90%的时间和精力。

应该把要挖掘的数据都收集到一个数据库中。注意这并不是说一定要使用一个数据库管理系统。根据要挖掘的数据量的大小、数据的复杂程度、使用方式的不同,有时一个简单的平面文件或电子表格就足够了。

一般来说,直接在公司的数据仓库上进行数据挖掘是不合适的。你最好建立一个独立的数据集。数据挖掘会使你成为数据仓库非常活跃的用户,这可能会带来一些资源申请上的问题。你需要经常把许多表连接在一起,访问数据仓库的细节数据。一个简单的试验在数据仓库内都要很多步才能完成。

大部分情况下你肯定需要修改要挖掘的数据。而且还会遇到把企业外部的数据拿到数据仓库内和在原有的表中增加新的字段的情况。其他的数据挖掘用户可能也要对数据仓库进行与您相似或完全不同的修改。而对数据仓库管理员来说,这恐怕是他最不愿意遇到的事情。

需要建立独立的数据挖掘库的另一个理由是,数据仓库可能不支持你要对数据进行各种复杂分析所需的数据结构。这包括对数据进行统计查询,多维分析,和各种复杂的图表和可视化。

最后,你可能希望把这些要挖掘的数据存贮在与公司的数据仓库在物理设计上不同的DBMS上。人们越来越倾向于使用DBMS本身很好的支持数据挖掘的数据库程序,这样能使数据挖掘工作进行的更容易一些。当然如果你的数据仓库允许你建立一个在逻辑上独立的数据库并且在计算资源上也足够的话,那么在他上面进行数据挖掘也是可以的。

可以把建立数据挖掘库分成下面几个部分:

a. 数据收集

b. 数据描述

c. 选择

d. 数据质量评估和数据清理

e. 合并与整合

f. 构建元数据

g. 加载数据挖掘库

h. 维护数据挖掘库

注意这些步骤并不需要一定要按步骤执行,而应该按需要进行。比如你可能在收集数据时就开始构建元数据,并随着工作的进行不断的对其进行修改。在数据整合和数据质量评估过程中了解到得东西也有可能是你修改最初的数据选择。

a. 数据收集。确定要挖掘的数据源。可能一些外部的数据也是必须的,需要在公共数据库中获取(人口统计或天气数据)或向数据拥有者购买(比如信用卡使用数据)。

用以一个数据搜集报告把所需的各种不同的数据源的属性列出来。此报告至少应包含如下的内容:

² 数据源(内部数据库或外部提供者)

² 拥有者

² 负责维护此数据的人/组织

² DBA

² 费用(如果需要购买)

² 存储方式(如:Oracle数据库、MSAM文件等)

² 表、字段、记录的数目

² 字节数

² 物理存储方式(CD-ROM、磁带、服务器等)

² 安全需求

² 使用上的限制

² 隐私上的需求


注意一旦应用了在安全和隐私上有特殊限制的数据,那么你的数据挖掘库在安全和隐私上也就继承了同样的限制。比如许多欧洲的数据在隐私上的限制要比美国严格的多。

b. 数据描述。描述每个文件和数据库表的内容。数据描述报告中应包含如下内容:

² 字段/列的数目

² 字段是空(缺值)的数目/百分比

² 字段的名字

对每个字段

² 数据类型

² 定义

² 描述

² 源

² 计量单位

² 所有不同值的个数

² 值的列表

² 值的范围

² 空值的百分比

² 收集信息(比如:怎么得到的,在哪,什么条件下)

² 时间频度(Timeframe)(每天,每周,还是每月)

² 特别时间数据(比如:每个周一或每个周三)

² 主键/外键关系


c. 选择。接下来就要选择用于数据挖掘的数据(源数据的子集)。这与对数据进行采样和选择预测变量是不同的,这里只是粗略的把一些冗余或无关的数据除去,或由于资源的限制、费用的限制、数据使用的限制、和质量问题而必须做出的选择。

d. 数据质量评估和数据清理。“龙生龙,凤生凤”对数据挖掘也是非常适用的,要想得到好的模型必须用好的数据。数据质量评估就是要确定数据的哪些性质会最终影响模型的质量。你不仅要保证数据值的正确性和一致性,还要保证这些值是按同样的方法记录的同一件事情。

由各种各样的数据质量问题。数据域中可能包含了不正确的值。比如,身份证号码被粗心的数据录入人员录入了年龄。即使每个单个域中包含的数据都是正确的,但这些域组合起来时可能就出现了错误的记录,如男性怀孕。有时域中的值为空。当从多个不同的源整合数据时一定要注意不同源之间数据的一致性。

缺值是一个非常有害的问题。如果只要有一个数据域缺值就把这个记录删除掉,那么最后可能得到一个很小的数据库,同时你得到的这个数据库很可能已经丢失了实际数据中蕴含的一些信息,因为你已经改变了原数据的组成。缺值这件事本身可能就是非常有意义的,比如也许只有富有的顾客才经常忽略“收入”这一项。你可以增加一个新的变量来标识这些缺值的记录,然后用它建立一个模型,然后与按其他方法建立的模型进行比较,看哪个准确度更高一些。

另一种方法是为缺失的值计算一个替代值。计算替代值的常用方法包括使用形式值(为名词变量),中间值(为可排序变量),平均值(为连续变量)。还有一个不是很常用的方法是按照数据库中值的分布规律为缺值的字段添值。比如如果数据库中包含40%男性和60%女性,那么在为那些性别子段缺失的记录添值时也按这个比例随机赋值。还有一种方法是为这个缺值的字段用数据挖掘技术建立一个预测模型,然后按照这个模型的预测结果添值,这种方法效果应该最好,当然也最花时间。

承认生活并不是十全十美是必要的,数据挖掘也是一样,你也不可能解决所有遇到的问题,只能做得尽量好一点。检查和修正数据质量问题是一项非常耗费时间和金钱的工作,对解决不了的问题,通常你只能采取折衷的办法,先用现有的数据建立一个模型,把问题放到将来去解决。

e. 合并与整合。如果幸运的话,你需要的所有数据都在同一个数据库中(比如数据仓库),但大部分情况下这些数据是分布在不同的数据库中。数据可能分布在公司不同的部门、不同的应用中,甚至在公司外(人口数据)。

数据合并与整合把来自不同数据源的数据合并到同一个数据挖掘库中,并且要使那些本来存在冲突和不一致的数据一致化。不恰当的一致化是数据质量问题的一个主要来源。不同的数据库间在数据定义和使用上通常都存在巨大的差异。有些不一致问题是容易解决的,如同一客户的不同住址问题。然而有些则非常棘手。例如同一个客户有不同的名字—甚至更遭的情况—多个不同的客户标识号码。同一个名字被用在不同的数据项上(同名异意),或同一个数据项用了不同的名字(同意不同名)。还有单位上的不统一。比如人民币和港元之间不能不做换算就直接加减。

f. 构建元数据。数据收集报告和数据描述报告是建立元数据的基础。本质上,这是一个描述数据库的数据库。他用于建立实际的数据库和为分析数据和建立模型提供辅助信息。

g. 加载数据挖掘库。大多数情况下,用于挖掘的数据应该放到他自己独立的数据库中。如果数据量大并且复杂,那么他通常是一个RDMS,反之只是一个简单的平面文件即可。经过前面所有的搜集、整理之后,现在开始把这些数据实际的加载过来了。依赖于所涉及的DBMS和操作系统,和数据库设计的复杂程度,有时这一步也可能变得很复杂,需要靠专家的帮助来完成。

h. 维护数据挖掘库。挖掘库一旦建好,就需要对他进行维护。需要定期备份;监视他的性能;不时的增加存储空间或提高性能。对存放在DBMS内的复杂的挖掘库来说,维护他需要计算机专业人员来完成。

3. 分析数据。请察看“描述型数据挖掘”以获得更详细的关于可视化、连结分析,及其他数据分析方法。分析的目的是找到对预测输出影响最大的数据字段,和决定是否需要定义导出字段。

如果数据集包含成百上千的字段,那么浏览分析这些数据将是一件非常耗时和累人的事情,这时你需要选择一个具有好的界面和功能强大的工具软件来协助你完成这些事情。

4. 准备数据。这是建立模型之前的最后一步数据准备工作。可以把此步骤划分成4个部分:

a. 选择变量

b. 选择记录

c. 创建新变量

d. 转换变量

a. 选择变量。理想情况下,你可以选择你所有的全部变量,把他们输入到数据挖掘工具中,让他来帮你选择哪些是最好的预测变量。实际上这样做并不是很好,一方面是由于随着变量个数的增加,模型的建立时间也随之上升;另一方面盲目的把所有的变量都加进去会导致建立错误的模型。比如,建立预测模型的一个常见错误就是把一个依赖于目标变量的变量(由目标变量导出)作为预测变量,像用生日来“预测”年龄。

在原理上说,一些数据挖掘算法自动忽略不相关的变量、自动计算相关的(协)变量,在实际应用中完全依赖这些工具是不明智的,毕竟最了解你的数据的还是你自己。利用你的领域知识,你会做出大部分正确的选择。例如,用身份证号或人名做预测变量要么不会有任何用处,要么甚至降低了其他重要变量的影响力。

b. 选择记录。与选择变量类似,你可能也想用你所有的数据行来建立模型,然而如果你的数据量确实非常巨大的话,要么要花费很长的时间来建立这个模型,要么买一台计算能力非常强大的机器。

因此,如果数据量特别大,进行抽样就是一个很好的主意。如果做的足够仔细,保证抽样是按真正的随机来进行的,采样对大部分商业问题来说都不会丢失信息。你可以用所有的数据建立一个模型;你还可以用采样的方法根据不同得采样方法建立几个模型,然后评价这几个模型选择一个最好的。我们认为后面这种方法得到的方法更准确、更健壮。

你可能选择数据中明显的异常数据删除掉。然而在某些情况下,这些看来异常的数据可能包含了你要建立模型的重要信息。基于你对问题的理解方式的不同,通常可以把这些异常忽略掉。比如可以把异常认为是人为的录入错误。

有时也需要向数据中添加一些新的数据(如,那些没有做出购买得客户)。

c. 创建新变量。很多情况下需要从原始数据中衍生一些新的变量作为预测变量。比如,用负债占收入百分比来预测信用风险比直接用负债和收入做预测变量更准确一些,也更容易理解一些。很多变量如果组合起来(加、减、比率等)会比这些变量自身影响力更大。一些变量如果扩大它的范围也会成为一个非常好的预测变量,比如用一段时间内收入变化情况代替一个单一的收入数据。

d. 转换变量。你所选择的算法和工具决定了都要对数据做哪些转换工作。如神经网络要求所有的变量都在0-1之间,因此在这些数据被提交到算法之前就必须先对不在[0,1]内的变量进行映射。同样一些决策树算法不接受数值型变量作为输入,在使用他们之前也要把这些数值映射到“高、中、低”等。当然你的转换方式也在一定程度上影响了模型的准确度。

5. 建立模型。对建立模型来说要记住的最重要的事是它是一个反复的过程。你需要仔细考察不同的模型以判断哪个模型对你的商业问题最有用。你在寻找好的模型的过程中学到的的东西会启发你修改你的数据,甚至改变最初对问题的定义。

一旦决定了预测的类型之后(分类还是回归),就需要为这个预测选择模型的类型。可能是一棵决策树、神经网络、甚至传统的数学统计。选择什么样的模型决定了你需对数据做哪些预处理工作。如神经网络需要做数据转换,有些数据挖掘工具可能对输入数据的格式有特定的限制,等。一旦所有的数据准备好之后,就可以开始训练你的模型了。

为了保证得到的模型具有较好的精确度和健壮性,需要一个定义完善的训练—验证协议。有时也称此协议为带指导的学习。他的主要思想就是先用一部分数据建立模型,然后再用剩下的数据来测试和验证这个得到的模型。有时还有第三个数据集,称为验证集,因为测试集可能受模型的特性的影响,这时需要一个独立的数据集来验证模型的准确性。

训练和测试数据挖掘模型需要把数据至少分成两个部分:一个用于模型训练,另一个用于模型测试。如果不使用不同的训练和测试集,那么模型的准确度就很难使人信服。用训练集把模型建立出来之后,就可以先在测试集数据上先试验一把,此模型在测试集上的预测准确度就是一个很好的指导数字,它说明如果将来与训练集和测试集类似的数据用此模型预测时,正确的百分比会有多大。这并不能保证模型的正确性,他只是说相似的数据用此模型会得出相似的结果。

简单验证。最基本的测试方法是被称为简单验证的方法。做法是从原始数据中拿出一定百分比的数据作为测试数据,这个百分比大概在5%到33%之间。注意在把数据库分成几部分时,一定要保证选择的随机性,这样才能使分开的各部分数据的性质是一致的。

先用数据库的主体把模型建立起来,然后用此模型来预测测试集中的数据。出现错误的预测与预测总数之间的比,称为错误率。正确的预测与总数的比,是准确率(准确率=1 - 错误率)。对回归模型来说,可以用方差来描述准确的程度。

在一次模型的建立过程中,即使这种最简单的验证就要执行几十次。例如在训练神经网络时,有时每一个训练周期就要求在测试集上运行一次,不断的训练测试,直到在测试集上的准确率不再提高为止。

交叉验证。如果数据不是很多(比如只有几千条),那么你可能承受不了再把一部分数据拿到一边不用,单用来做简单验证。交叉验证提供了一种让你使用全部数据的方法。首先把原始数据随机平分成两份,然后用一部分做训练集另一部分做测试集计算错误率,做完之后把两部分数据交换再计算一次,得到另一个错误率,最后再用所有的数据建立一个模型,把上面得到的两个错误率进行平均作为最后用所有数据建立的模型的错误率。

更通用的算法是n-维交叉验证。先把数据随机分成不相交的n份。比如,如果把数据分成10份,先把第一份拿出来放在一边用作模型测试,把其他9份合在一起来建立模型,然后把这个用90%的数据建立起来的模型用上面放在一边的第一份数据做测试。这个过程对每一份数据都重复进行一次,得到10个不同的错误率。最后把所有数据放在一起建立一个模型,模型的错误率为上面10个错误率的平均。

自举法是另一种评估模型错误率的技术。在数据量很小时尤其适用。与交叉验证一样模型是用所有的数据建立。

依据所得到的模型和你对模型的预期结果,你可能修改参数用同样的算法再建立新的模型,甚至采用其他的算法建立模型。别的方法说不定能提高预测的准确度。当然,没有一种算法或工具适应所有的数据,通常也很难在开始决定那种算法对你所面临的问题来说是最好的,因此很多情况下,需要建立用不同的方法(参数或算法)几个模型,从中选择最好的。



6. 评价和解释。

a. 模型验证。模型建立好之后,必须评价他的结果、解释他的价值。记住从测试集中得到的准确率只对用于建立模型的数据有意义。在实际应用中,随着应用数据的不同,模型的准确率肯定会变化。更重要的是,准确度自身并不一定是选择最好模型的正确评价方法。你需要进一步了解错误的类型和由此带来的相关费用的多少。

无序矩阵。对分类问题来说,无序矩阵是理解结果的非常好的工具。如图9所示,无序矩阵把预测的结果与实际的情况进行对比。它不仅说明了模型预测的准确情况,也把模型究竟在哪里出了问题也展示了出来。下表是一个简单的无序矩阵,其中的列代表数据的实际分类情况,行是预测的结果。在这张表值中,可以看到此模型在总共46个B类数据中成功预测了38个,8个出了问题:2个预测成了A,6个成了C。显然这比简单的说模型总体准确度是82%要更详细的多(123个成功预测除以总共150)。





预测
实际

类别A
类别B
类别C

类别A
45
2
3

类别B
10
38
2

类别C
4
6
40


图9:无序矩阵



在实际应用中,如果每种不同的预测错误所需付出的代价(金钱)也不同的话,那么代价最小的模型(而不一定是错误率最小的模型)就是我们所要选择的。例如,上面的无序矩阵中,如果每个准确的预测会带来¥10的收益,错误的预测A要付出¥5的代价,B是¥10,C是¥20,那么整个模型的纯价值是:

(123*¥10)-(5*¥5)-(12*¥10)-(10*¥20)=¥885

然而考察下面的无序矩阵(图10),虽然准确度降低到79%(118/150),但纯价值却升高了:

(118*¥10)-(22*¥5)-(7*¥10)-(3*¥20)=¥940





预测
实际

类别A
类别B
类别C

类别A
40
12
10

类别B
6
38
1

类别C
2
1
40


图10:另一个无序矩阵

外部验证。如前面指出的,无论我们用模拟的方法计算出来的模型的准确率有多高,都不能保证此模型在面对现实世界中真实的数据时能取得好的效果。经验证有效的模型并不一定是正确的模型。造成这一点的直接原因就是模型建立中隐含的各种假定。例如,在建立用户购买模式的模型时,可能没有考虑通货膨胀的影响,但实施模型时通货膨胀率突然由3%增加为17%,这显然会对人们的购买意向产生重大影响,因此再用原来的模型来预测客户购买情况必然会出现重大失误。

因此直接在现实世界中测试模型很重要。先在小范围内应用,取得测试数据,觉得满意之后再向大范围推广。

7. 实施。模型建立并经验证之后,可以有两种主要的使用方法。第一种是提供给分析人员做参考,由他通过察看和分析这个模型之后提出行动方案建议。比如可以把模型检测到的聚集、模型中蕴含的规则、或表明模型效果的ROI图表拿给分析人员看。

另一种是把此模型应用到不同的数据集上。模型可以用来标示一个事例的类别,给一项申请打分等。还可以用模型在数据库中选择符合特定要求的记录,以用OLAP工具做进一步的分析。

通常情况下,模型是某个商业过程的组成部分,如风险分析,信用授权,或欺诈检测。在这些情况下,模型一般都合并到应用程序的内部。例如,在抵押贷款应用程序内部可能集成了一个预测模型,来向贷款官员提供一项贷款申请风险大小的建议。或在定购系统中,当预测到库存有可能降低到一个最低限度时自动发出购买订单。

数据挖掘模型通常一次只能处理一个事件或一个事务。每个事务的处理时间和事务到达的速度,决定了模型运行所需的计算能力,和是否要用并行技术来加快速度。比如,贷款申请程序可能PC机上就运行的很好,而用于信用卡欺诈的模型则需要在服务器上用并行算法才能应付每天的大量事务。

当提交一个复杂的应用时,数据挖掘可能只是整个产品的一小部分,虽然可能是最关键的一部分。例如,常常把数据挖掘得到的知识与领域专家的知识结合起来,然后应用到数据库中的数据。在欺诈检测系统中可能既包含了数据挖掘发现的规律,也有人们在实践中早已总结出的规律。

模型监控。在应用了模型之后,当然还要不断监控他的效果。即使你在开始使用这个模型之后觉得他非常成功,也不能放弃监控,因为事物在不断发展变化,很可能过一段时间之后,模型就不再起作用。销售人员都知道,人们的购买方式随着社会的发展而变化。因此随着使用时间的增加,要不断的对模型做重新测试,有时甚者需要重新建立模型。

阅读全文...

算法常用术语中英对照


Data Structures 基本数据结构
Dictionaries 字典
Priority Queues 堆
Graph Data Structures 图
Set Data Structures 集合
Kd-Trees 线段树
Numerical Problems 数值问题
Solving Linear Equations 线性方程组
Bandwidth Reduction 带宽压缩
Matrix Multiplication 矩阵乘法
Determinants and Permanents 行列式
Constrained and Unconstrained Optimization 最值问题
Linear Programming 线性规划
Random Number Generation 随机数生成
Factoring and Primality Testing 因子分解/质数判定
Arbitrary Precision Arithmetic 高精度计算
Knapsack Problem 背包问题
Discrete Fourier Transform 离散Fourier变换
Combinatorial Problems 组合问题
Sorting 排序
Searching 查找
Median and Selection 中位数
Generating Permutations 排列生成
Generating Subsets 子集生成
Generating Partitions 划分生成
Generating Graphs 图的生成
Calendrical Calculations 日期
Job Scheduling 工程安排
Satisfiability 可满足性
Graph Problems -- polynomial 图论-多项式算法
Connected Components 连通分支
Topological Sorting 拓扑排序
Minimum Spanning Tree 最小生成树
Shortest Path 最短路径
Transitive Closure and Reduction 传递闭包
Matching 匹配
Eulerian Cycle / Chinese Postman Euler回路/中国邮路
Edge and Vertex Connectivity 割边/割点
Network Flow 网络流
Drawing Graphs Nicely 图的描绘
Drawing Trees 树的描绘
Planarity Detection and Embedding 平面性检测和嵌入
Graph Problems -- hard 图论-NP问题
Clique 最大团
Independent Set 独立集
Vertex Cover 点覆盖
Traveling Salesman Problem 旅行商问题
Hamiltonian Cycle Hamilton回路
Graph Partition 图的划分
Vertex Coloring 点染色
Edge Coloring 边染色
Graph Isomorphism 同构
Steiner Tree Steiner树
Feedback Edge/Vertex Set 最大无环子图
Computational Geometry 计算几何
Convex Hull 凸包
Triangulation 三角剖分
Voronoi Diagrams Voronoi图
Nearest Neighbor Search 最近点对查询
Range Search 范围查询
Point Location 位置查询
Intersection Detection 碰撞测试
Bin Packing 装箱问题
Medial-Axis Transformation 中轴变换
Polygon Partitioning 多边形分割
Simplifying Polygons 多边形化简
Shape Similarity 相似多边形
Motion Planning 运动规划
Maintaining Line Arrangements 平面分割
Minkowski Sum Minkowski和
Set and String Problems 集合与串的问题
Set Cover 集合覆盖
Set Packing 集合配置
String Matching 模式匹配
Approximate String Matching 模糊匹配
Text Compression 压缩
Cryptography 密码
Finite State Machine Minimization 有穷自动机简化
Longest Common Substring 最长公共子串
Shortest Common Superstring 最短公共父串
DP——Dynamic Programming——动态规划
recursion —— 递归

编程词汇
A2A integration A2A整合
abstract 抽象的
abstract base class (ABC)抽象基类
abstract class 抽象类
abstraction 抽象、抽象物、抽象性
access 存取、访问
access level访问级别
access function 访问函数
account 账户
action 动作
activate 激活
active 活动的
actual parameter 实参
adapter 适配器
add-in 插件
address 地址
address space 地址空间
address-of operator 取地址操作符
ADL (argument-dependent lookup)
ADO(ActiveX Data Object)ActiveX数据对象
advanced 高级的
aggregation 聚合、聚集
algorithm 算法
alias 别名
align 排列、对齐
allocate 分配、配置
allocator分配器、配置器
angle bracket 尖括号
annotation 注解、评注
API (Application Programming Interface) 应用(程序)编程接口
app domain (application domain)应用域
application 应用、应用程序
application framework 应用程序框架
appearance 外观
append 附加
architecture 架构、体系结构
archive file 归档文件、存档文件
argument引数(传给函式的值)。参见parameter
array 数组
arrow operator 箭头操作符
ASP(Active Server Page)活动服务器页面
ASP.NET worker process ASP.NET工作者进程
assembly 装配件、配件
assembly language 汇编语言
assembly manifest 装配件清单
assert(ion) 断言
assign 赋值
assignment 赋值、分配
assignment operator 赋值操作符
associated 相关的、相关联的
associative container 关联式容器(对应sequential container)
asynchronous 异步的
atomic 原子的
atomic operation 原子操作
attribute 特性、属性
authentication service 验证服务
authorization 授权
audio 音频
A.I. 人工智能
B2B integration B2B整合、B2B集成(business-to-business integration)
background 背景、后台(进程)
backward compatible 向后兼容、向下兼容
backup 备份
backup device备份设备
backup file 备份文件
bandwidth 带宽
base class 基类
base type 基类型
batch 批处理
BCL (base class library)基类库
binary 二进制
binary search 二分查找
binary tree 二叉树
binary function 双参函数
binary large object二进制大对象
binary operator 二元操作符
binding 绑定
bit 位
bitmap 位图
bitwise 按位...
bitwise copy 为单元进行复制;位元逐一复制,按位拷
bitwise operation 按位运算
block 块、区块、语句块
bookkeeping 簿记
boolean 布林值(真假值,true或false)
border 边框
bounds checking 边界检查
boxing 装箱、装箱转换
brace (curly brace) 大括号、花括号
bracket (square brakcet) 中括号、方括号
breakpoint 断点
browser applications 浏览器应用(程序)
browser-accessible application 可经由浏览器访问的应用程序
build 编连(专指编译和连接
built-in 内建、内置
bus 总线
business 业务、商务(看场合)
business Logic 业务逻辑
business rules 业务规则
buttons 按钮
bug 臭虫
by/through 通过
byte 位元组(由8 bits组成)
cache 高速缓存
calendar 日历
call 调用
callback 回调
call-level interface (CLI)调用级接口(CLI)
call operator 调用操作符
candidate key 候选键 (for database)
cascading delete 级联删除 (for database)
cascading update 级联更新 (for database)
casting 转型、造型转换
catalog 目录
chain 链(function calls)
character 字符
character format 字符格式
character set 字符集
CHECK constraints CHECK约束 (for database)
checkpoint 检查点 (for database)
check box 复选框
check button 复选按钮
child class 子类
CIL (common intermediate language)通用中间语言、通用中介语言
class 类
class declaration 类声明
class definition 类定义
class derivation list 类继承列表
class factory 类厂
class hierarchy 类层次结构
class library 类库
class loader 类装载器
class template 类模板
class template partial specializations 类模板部分特化
class template specializations 类模板特化
classification 分类
clause 子句
client application 客户端应用程序
client cursor 客户端游标 (for database)
code page 代码页
cleanup 清理、清除
CLI (Common Language Infrastructure) 通用语言基础设施
client 客户、客户端
client area 客户区
client-server 客户机/服务器、客户端/服务器
clipboard 剪贴板
clone 克隆
CLS (common language specification) 通用语言规范
code access security 代码访问安全
COFF (Common Object File Format) 通用对象文件格式
collection 集合
COM (Component Object Model) 组件对象模型
combo box 组合框
command line 命令行
comment 注释
commit 提交 (for database)
communication 通讯
compatible 兼容
compile time 编译期、编译时
compiler 编译器
component组件
composite index 复合索引、组合索引 (for database)
composite key 复合键、组合键 (for database)
composition 复合、组合
concept 概念
concrete具体的
concrete class 具体类
concurrency 并发、并发机制
constraint 约束 (for database)
configuration 配置、组态
connection 连接 (for database)
connection pooling 连接池
console 控制台
constant 常量
construct 构件、成分、概念、构造(for language)
constructor (ctor) 构造函数、构造器
container 容器
containment包容
context 环境、上下文
control 控件
cookie (不译)
copy 拷贝
CORBA 通用对象请求中介架构(Common Object Request Broker Architecture)
cover 覆盖、涵盖
create/creation 创建、生成
crosstab query 交叉表查询 (for database)
CRTP (curiously recurring template pattern)
CTS (common type system)通用类型系统
cube 多维数据集 (for database)
cursor 光标
cursor 游标 (for database)
custom 定制、自定义
data 数据
data connection 数据连接 (for database)
Data Control Language (DCL) 数据控制语言(DCL) (for database)
Data Definition Language (DDL) 数据定义语言(DDL) (for database)
data dictionary 数据字典 (for database)
data dictionary view 数据字典视图 (for database)
data file 数据文件 (for database)
data integrity 数据完整性 (for database)
data manipulation language (DML)数据操作语言(DML) (for database)
data mart 数据集市 (for database)
data pump 数据抽取 (for database)
data scrubbing 数据清理 (for database)
data source 数据源 (for database)
Data source name (DSN) 数据源名称(DSN) (for database)
data warehouse 数据仓库 (for database)
dataset 数据集 (for database)
database 数据库 (for database)
database catalog 数据库目录 (for database)
database diagram 数据关系图 (for database)
database file 数据库文件 (for database)
database object 数据库对象 (for database)
database owner 数据库所有者 (for database)
database project 数据库工程 (for database)
database role 数据库角色 (for database)
database schema 数据库模式、数据库架构 (for database)
database script 数据库脚本 (for database)
data-bound 数据绑定 (for database)
data-aware control数据感知控件 (for database)
data member 数据成员、成员变量
dataset 数据集 (for database)
data source 数据源 (for database)
data structure数据结构
data table 数据表 (for database)
datagram 数据报文
DBMS (database management system)数据库管理系统 (for database)
DCOM (distributed COM)分布式COM
dead lock 死锁 (for database)
deallocate 归还
debug 调试
debugger 调试器
decay 退化
decision support 决策支持
declaration 声明
declarative referential integrity (DRI)声明引用完整性(DRI) (for database)
deduction 推导
DEFAULT constraint默认约束 (for database)
default database 默认数据库 (for database)
default instance 默认实例 (for database)
default result set 默认结果集 (for database)
default 缺省、默认值
defer 推迟
definition 定义
delegate 委托
delegation 委托
dependent name
deploy 部署
dereference 解引用
dereference operator (提领)运算子
derived class 派生类
design by contract 契约式设计
design pattern 设计模式
destroy 销毁
destructor(dtor)析构函数、析构器
device 设备
DHTML (dynamic HyperText Markup Language)动态超文本标记语言
dialog 对话框
digest 摘要
digital 数字的
DIME (Direct Internet Message Encapsulation)直接Internet消息封装
directive (编译)指示符
directory 目录
dirty pages脏页 (for database)
dirty read 脏读 (for database)
disassembler 反汇编器
DISCO (Discovery of Web Services)Web Services的查找
disk 盘
dispatch 调度、分派、派发(我喜欢“调度”)
DISPID (Dispatch Identifier)分派标识符
distributed computing 分布式计算
distributed query 分布式查询 (for database)
DNA (Distributed interNet Application) 分布式网间应用程序
document 文档
DOM (Document Object Model)文档对象模型
dot operator (圆)点操作符
driver 驱动(程序)
DTD (document type definition) 文档类型定义
double-byte character set (DBCS)双字节字符集(DBCS)
dump 转储
dump file 转储文件
dynamic cursor 动态游标 (for database)
dynamic filter 动态筛选 (for database)
dynamic locking 动态锁定 (for database)
dynamic recovery 动态恢复 (for database)
dynamic snapshot 动态快照 (for database)
dynamic SQL statements 动态SQL语句 (for database)
dynamic assembly 动态装配件、动态配件
dynamic binding 动态绑定
EAI (enterprise application integration)企业应用程序集成(整合)
EBCO (empty base class optimization) 空基类优化(机制)
e-business 电子商务
EDI (Dlectronic Data Interchange)电子数据交换
efficiency 效率
efficient 高效
end-to-end authentication 端对端身份验证
end user 最终用户
engine 引擎
entity 实体
encapsulation 封装
enclosing class 外围类别(与巢状类别 nested class有关)
enum (enumeration) 枚举
enumerators 枚举成员、枚举器
equal 相等
equality 相等性
equality operator 等号操作符
error log 错误日志 (for database)
escape code 转义码
escape character 转义符、转义字符
exclusive lock 排它锁 (for database)
explicit transaction 显式事务 (for database)
evaluate 评估
event 事件
event driven 事件驱动的
event handler 事件处理器
evidence 证据
exception 异常
exception declaration 异常声明
exception handling 异常处理、异常处理机制
exception-safe 异常安全的
exception specification 异常规范
exit 退出
explicit 显式
explicit specialization 显式特化
export 导出
expression 表达式
facility 设施、设备
fat client 胖客户端
feature 特性、特征
fetch 提取
field 字段(java)
field 字段 (for database)
field length 字段长度 (for database)
file 文件
filter 筛选 (for database)
finalization 终结
firewall 防火墙
finalizer 终结器
firmware 固件
flag 标记
flash memory 闪存
flush 刷新
font 字体
foreign key (FK) 外键(FK) (for database)
form 窗体
formal parameter 形参
forward declaration 前置声明
forward-only 只向前的
forward-only cursor 只向前游标 (for database)
fragmentation 碎片 (for database)
framework 框架
full specialization 完全特化
function 函数
function call operator (即operator ()) 函数调用操作符
function object 函数对象
function overloaded resolution函数重载决议
functionality 功能
function template函数模板
functor 仿函数
GAC (global assembly cache) 全局装配件缓存、全局配件缓存
GC (Garbage collection) 垃圾回收(机制)、垃圾收集(机制)
game 游戏
generate 生成
generic 泛化的、一般化的、通用的
generic algorithm通用算法
genericity 泛型
getter (相对于 setter)取值函数
global 全局的
global object 全局对象
global scope resolution operator 全局范围解析操作符
grant 授权 (for database)
granularity 粒度
group 组、群
group box 分组框
GUI 图形界面
GUID (Globally Unique Identifier) 全球唯一标识符
hand shaking 握手
handle 句柄
handler 处理器
hard-coded 硬编码的
hard-copy 截屏图
hard disk 硬盘
hardware 硬件
hash table 散列表、哈希表
header file头文件
heap 堆
help file 帮助文件
hierarchy 层次结构、继承体系
hierarchical data 阶层式数据、层次式数据
hook 钩子
Host (application)宿主(应用程序)
hot key 热键
hyperlink 超链接
HTML (HyperText Markup Language) 超文本标记语言
HTTP pipeline HTTP管道
HTTP (HyperText Transfer Protocol) 超文本传输协议
icon 图标
IDE (Integrated Development Environment)集成开发环境
IDL (Interface Definition Language) 接口定义语言
identifier 标识符
idle time 空闲时间
if and only if当且仅当
IL (Intermediate Language) 中间语言、中介语言
image 图象
IME 输入法
immediate base 直接基类
immediate derived 直接派生类
immediate updating 即时更新 (for database)
implicit transaction隐式事务 (for database)
incremental update 增量更新 (for database)
index 索引 (for database)
implement 实现
implementation 实现、实现品
implicit 隐式
import 导入
increment operator 增加操作符
infinite loop 无限循环
infinite recursive 无限递归
information 信息
infrastructure 基础设施
inheritance 继承、继承机制
inline 内联
inline expansion 内联展开
initialization 初始化
initialization list 初始化列表、初始值列表
initialize 初始化
inner join 内联接 (for database)
in-place active 现场激活
instance 实例
instantiated 具现化、实体化(常应用于template)
instantiation 具现体、具现化实体(常应用于template)
integrate 集成、整合
integrity 完整性、一致性
integrity constraint完整性约束 (for database)
interprocess communication (IPC)进程间通讯(IPC)
interacts 交互
interface 接口
for GUI 界面
interoperability 互操作性、互操作能力
interpreter 解释器
introspection 自省
invariants 不变性
invoke 调用
isolation level 隔离级别 (for database)
iterate 迭代
iterative 反复的、迭代的
iterator 迭代器
iteration 迭代(回圈每次轮回称为一个iteration)
item 项、条款、项目
JIT compilation JIT编译 即时编译
key 键 (for database)
key column 键列 (for database)
laser 激光
late binding 迟绑定
left outer join 左向外联接 (for database)
level 阶、层例
high level 高阶、高层
library 库
lifetime 生命期、寿命
link 连接、链接
linkage 连接、链接
linker 连接器、链接器
literal constant 字面常数
list 列表、表、链表
list box 列表框
livelock 活锁 (for database)
load 装载、加载
load balancing 负载平衡
loader 装载器、载入器
local 局部的
local object 局部对象
lock 锁
log 日志
login 登录
login security mode登录安全模式 (for database)
lookup table 查找表 (for database)
loop 循环
loose coupling 松散耦合
lvalue 左值
machine code 机器码、机器代码
macro 宏
maintain 维护
managed code 受控代码、托管代码
Managed Extensions 受控扩充件、托管扩展
managed object 受控对象、托管对象
mangled name
manifest 清单
manipulator 操纵器(iostream预先定义的一种东西)
many-to-many relationship 多对多关系 (for database)
many-to-one relationship 多对一关系 (for database)
marshal 列集
member 成员
member access operator 成员取用运算子(有dot和arrow两种)
member function 成员函数
member initialization list成员初始值列表
memberwise 以member为单元…、members 逐一…
memberwise copy
memory 内存
memory leak 内存泄漏
menu 菜单
message 消息
message based 基于消息的
message loop 消息环
message queuing消息队列
metadata 元数据
metaprogramming元编程
method 方法
micro 微
middleware 中间件
middle tier 中间层
modeling 建模
modeling language 建模语言
modifier 修饰字、修饰符
modem 调制解调器
module 模块
most derived class最底层的派生类
mouse 鼠标
mutable 可变的
mutex 互斥元、互斥体
multidimensional OLAP (MOLAP) 多维OLAP(MOLAP) (for database)
multithreaded server application 多线程服务器应用程序
multiuser 多用户
multi-tasking 多任务
multi-thread 多线程
multicast delegate 组播委托、多点委托
named parameter 命名参数
named pipe 命名管道
namespace 名字空间、命名空间
native 原生的、本地的
native code 本地码、本机码
Native Image Generator (NGEN)本地映像生成器
nested class 嵌套类
nested query 嵌套查询 (for database)
nested table 嵌套表 (for database)
network 网络
network card 网卡
nondependent name
object 对象
object based 基于对象的
object file 目标文件
object model 对象模型
object oriented 面向对象的
object pooling 对象池化
ODBC data source ODBC数据源 (for database)
ODBC driver ODBC驱动程序 (for database)
ODR (one-definition rule)
OLE Automation objects OLE自动化对象 (for database)
OLE Automation server OLE自动化服务器 (for database)
OLE DB consumer OLE DB使用者 (for database)
OLE DB for OLAP 用于OLAP的OLE DB (for database)
OLE DB provider OLE DB提供者 (for database)
one-to-many relationship 一对多关系 (for database)
one-to-one relationship 一对一关系 (for database)
online analytical processing (OLAP) 联机分析处理(OLAP) (for database)
online redo log 联机重做日志 (for database)
online transaction processing (OLTP) 联机事务处理(OLTP) (for database)
Open Data Services (ODS) 开放式数据服务(ODS) (for database)
Open Database Connectivity (ODBC) 开放式数据库连接(ODBC) (for database)
operand 操作数
operating system (OS) 操作系统
operation 操作
operator 操作符、运算符
option 选项
optimizer 优化器
outer join 外联接 (for database)
overflow 上限溢位(相对于underflow)
overhead 额外开销
overload 重载
overload resolution 重载决议
overloaded function 重载的函数
overloaded operator 被重载的操作符
override 覆写、重载、重新定义
package 包
packaging 打包
palette 调色板
parallel 并行
parameter 参数、形式参数、形参
parameter list 参数列表
parameterize 参数化
parent class 父类
parentheses 圆括弧、圆括号
parse 解析
parser 解析器
part 零件、部件
partial specialization 局部特化
pass by address 传址(函式引数的传递方式)(非正式用语)
pass by reference 传地址、按引用传递
pass by value 按值传递
pattern 模式
PDA (personal digital assistant)个人数字助理
PE (Portable Executable) file 可移植可执行文件
performance 性能
persistence 持久性
PInvoke (platform invoke service) 平台调用服务
pixel 像素
placement delete
placement new
placeholder 占位符
platform 平台
POD (plain old data (type))
POI (point of instantiation)
pointer 指针
poll 轮询
pooling 池化
polymorphism 多态
pop up 弹出式
port 端口
postfix 后缀
precedence 优先序(通常用于运算子的优先执行次序)
prefix 前缀
preprocessor 预处理器
primary key (PK)主键(PK) (for database)
primary table 主表 (for database)
primary template原始模板
primitive type 原始类型
print 打印
printer 打印机
procedure 过程
procedural 过程式的、过程化的
process 进程
profile 评测
profiler 效能(性能)评测器
program 程序
programmer 程序员
programming编程、程序设计
progress bar 进度指示器
project 项目、工程
property 属性
protocol 协议
pseudo code伪码
qualified 经过资格修饰(例如加上scope运算子)
qualified name
qualifier 修饰符
quality 质量
queue 队列
race condition 竞争条件(多线程环境常用语)
radian 弧度
radio button 单选按钮
raise 引发(常用来表示发出一个exception)
random number 随机数
range 范围、区间
rank 等级
raw 未经处理的
readOnly只读
record 记录 (for database)
recordset 记录集 (for database
recursive 递归
re-direction 重定向
refactoring 重构
refer 引用、参考
reference 引用、参考
reference counting引用计数
referential integrity (RI)引用完整性(RI) (for database)
register 寄存器
reflection 反射
refresh data 刷新数据 (for database)
regular expression 正则表达式
relational database 关系数据库
remote 远程
remote request 远程请求
represent 表述,表现
resolve 解析、决议
resolution 解析过程
result set 结果集 (for database)
retrieve data 检索数据
return 返回
return type 返回类型
return value 返回值
right outer join 右向外联接 (for database)
revoke 撤销
robust 健壮
robustness 健壮性
roll back 回滚 (for database)
roll forward 前滚 (for database)
routine 例程
row 行 (for database)
row lock 行锁 (for database)
rowset 行集 (for database)
RPC (remote procedure call)RPC(远程过程调用)
runtime 执行期、运行期、执行时、运行时
rvalue 右值
save 保存
savepoint 保存点 (for database)
SAX (Simple API for XML)
scalable 可伸缩的、可扩展的
schedule 调度
scheduler 调度程序
schema 模式、纲目结构
scroll bar滚动条
scope 作用域、生存空间
scope operator 生存空间操作符
scope resolution operator 生存空间解析操作符
screen 屏幕
SDK (Software Development Kit)软件开发包
sealed class 密封类
search 查找
semantics 语义
semaphore 信号量
sequential container序列式容器
server 服务器、服务端
serial 串行
serialization/serialize 序列化
server cursor服务端游标、服务器游标 (for database)
session 会话 (for database)
setter 设值函数
shared lock 共享锁 (for database)
sibling 同级
side effect 副作用
signature 签名
single-threaded 单线程
slider滑块
slot 槽
smart pointer 智能指针
SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议
snapshot 截屏图
snapshot 快照 (for database)
specialization 特化
specification 规范、规格
splitter 切分窗口
SOAP (simple object access protocol) 简单对象访问协议
software 软件
source code 源码、源代码
SQL (Structured Query Language) 结构化查询语言 (for database)
stack 栈、堆栈
stack unwinding 叠辗转开解(此词用于exception主题)
standard library 标准库
standard template library 标准模板库
stateless 无状态的
statement 语句、声明
static cursor 静态游标 (for database)
static SQL statements 静态SQL语句 (for database)
stored procedure 存储过程 (for database)
status bar 状态条
stream 流
string 字符串
stub 存根
subobject子对象
subquery 子查询 (for database)
subroutine 子例程
subscript operator 下标操作符
subset 子集
subtype 子类型
support 支持
suspend 挂起
symbol 记号
syntax 语法
system databases 系统数据库 (for database)
system tables 系统表 (for database)
table 表 (for database)
table lock 表锁 (for database)
table-level constraint 表级约束 (for database)
tape backup 磁带备份 (for database)
target 标的,目标
task switch 工作切换
TCP (Transport Control Protocol) 传输控制协议
template 模板
template-id
template argument deduction 模板参数推导
template explicit specialization 模板显式特化
template parameter 模板参数
template template parameter
temporary object 临时对象
temporary table 临时表 (for database)
text 文本
text file 文本文件
thin client 瘦客户端
third-party 第三方
thread 线程
thread-safe 线程安全的
throw 抛出、引发(常指发出一个exception)
token 符号、标记、令牌(看场合)
trace 跟踪
transaction 事务 (for database)
transaction log 事务日志 (for database)
transaction rollback 事务回滚 (for database)
transactional replication 事务复制 (for database)
translation unit 翻译单元
traverse 遍历
trigger 触发器 (for database)
two-phase commit 两阶段提交 (for database)
tuple
two-phase lookup 两阶段查找
type 类型
UDDI(Universary Description, Discovery and Integration)统一描述、查询与集成
UML (unified modeling language)统一建模语言
unary function 单参函数
unary operator 一元操作符
unboxing 拆箱、拆箱转换
underflow 下限溢位(相对于overflow)
Union query 联合查询 (for database)
UNIQUE constraints UNIQUE约束 (for database)
unique index 唯一索引 (for database)
unmanaged code 非受控代码、非托管代码
unmarshal 散集
unqualified 未经限定的、未经修饰的
URI (Uniform Resource identifier) 统一资源标识符
URL (Uniform Resource Locator) 统一资源定位器
user 用户
user interface 用户界面
value types 值类型
variable 变量
vector 向量(一种容器,有点类似array)
viable 可行的
video 视频
view 视图
VEE (Virtual Execution Engine)虚拟执行引擎
vendor 厂商
view 视图 (for database)
virtual function 虚函数
virtual machine 虚拟机
virtual memory 虚拟内存
vowel 元音字母
Web Services web服务
WHERE clause WHERE子句 (for database)
wildcard characters 通配符字符 (for database)
wildcard search 通配符搜索 (for database)
window 窗口
window function 窗口函数
window procedure 窗口过程
Windows authentication Windows身份验证
wizard 向导
word 单词
word processor 字处理器
wrapper 包装、包装器
write enable 写启用 (for database)
write-ahead log 预写日志 (for database)
write-only 只写
WSDL (Web Service Description Language)Web Service描述语言
XML Message Interface (XMI) XML消息接口
XML (eXtensible Markup Language) 可扩展标记语言
XSD (XML Schema Definition) XML模式定义语言
XSL (eXtensible Stylesheet Language) 可扩展样式表语言
XSLT (eXtensible Stylesheet Language Transformation)可扩展样式表语言转换
xxx based 基于xxx的
xxx oriented 面向xxx

阅读全文...

OLAP系统中的Java和XML

虽然联机分析处理(OLAP:Online Analytical Processing)系统通常是用来处理大的数据集的,但当数据量和OLAP查询的复杂程度不需要用关系数据库管理系统(RDBMS)来高效地检索数据并进行查询处理时,我们也可以用对象数据库管理系统(ODBMS)。ODBMS的好处是,它需要一个单独的数据模型,可以允许较小的开发团队进行更快的开发。

大多数ODBMS中运用的基本数据结构是一个树状图或一个曲线图,遍历该树状图或曲线图就是我们通常访问一个对象数据库中数据的过程。基于XML的数据模型是一个带有注释的树状图,其中XML元素与节点相应,XML属性与那些节点的注释相应。所以,XML是为一个OLAP系统实现一个对象数据库的很好的候选工具。

另外,大多数OLAP系统都是用多维的结构模式或星型模式(star schema)来建模的。用XML来建立一个星型模式是相当简单的。通过一个简单的零售连锁店的例子,我将讲述如何用XML来建模并实现面向对象的OLAP系统和用来绑定数据的Java Architecture for XML Binding(JAXB)。注意,我所讲述的方法只是为了说明该例子,它不适合大的数据集。

一个多维的数据库

图1. 多维结构模式
设想有一个零售连锁店,在不同的商店出售多种产品。样例数据库中包含最近八个季度各个商店(10家)出售的所有产品(10种)的有关销售和利润的数据。在星型模式中,数据库是一个多维空间中的一组数据事实。我们衡量的就是存储在中心事实表(fact table)中的数据(本例中的销售和利润数据)。

维(dimension)是各商业参数(商店(Store)、产品(Product)和时间(Time)),它们存储在单独的维表(dimension table)中(见图1)。

维有属性。例如,Product 维有属性:Name、Supplier和Category。维中包含各个层次,例如:Time Dimension -> Quarters -> Years




我们可以在层次结构中导航:上卷、向下钻取或切片(定义成一个子立方结构(subcube))。

starschema.dtd文件就是我们用来为样例数据库建立星型模式的Document Type Definition(DTD)(见列表1)。与该DTD一致的XML文件(starschema.xml)的结构见列表2。XML文件及其DTD是不需要说明的。

阅读全文...

国外著名机构对商业智能的定义及提供的解决方案

1、

加特纳集团(Gartner Group

商业智能这一术语1996年由Gartner GroupHoward Dresner首次提出,它描述了一系列的概念和方法,通过应用基于事实的支持系统来辅助商业决策的制定。商业智能技术提供使企业迅速分析数据的技术和方法,包括收集、管理和分析数据,将这些数据转化为有用的信息,然后分发到企业各处。

Ted Friedman Kevin H. Strange 认为:商业智能应该注重数据整合、数据质量、元数据管理、可测量性和互用性以及企业活动的监测。

2、

国际数据公司(Internet Data Corporation, IDC

将商业智能定义为下列软件工具的集合:

²   终端用户查询和报告工具。专门用来支持初级用户的原始数据访问,不包括适用于专业人士的成品报告生成工具;

²   联机分析处理(On-Line Analytical Processing, OLAP)工具。提供数据管理环境,其典型的应用是对商业问题的建模与商业数据分析。OLAP 也被称为分析;

²   数据挖掘(Data Mining, DM)软件。使用诸如神经网络、规则归纳等技术,用来发现数据之间的关系,做出基于数据的推断;

²   数据集市(Data Mart)和数据仓库(Data Warehouse, DW)产品。包括数据转换、管理和存取等方面的预配置软件,通常还包括一些业务模型,如财务分析模型;

²   主管信息系统(Executive Information System, EIS)。

企业机构利用上述软件工具在统一的BI平台上建立所需的企业范围内的商业分析。从系统的观点来看, 商业智能的过程是从不同的数据源收集的数据中提取有用的数据, 对数据进行清理以保证数据的正确性,将数据经转换、重构后存入数据仓库或数据集市(这时数据变为信息),然后寻找合适的查询和分析工具、数据挖掘工具、在线分析工具(OLAP)对信息进行处理(这时信息变为辅助决策的知识),最后将知识呈现于用户面前,转变为决策。

3、

国际商用机器(International Business Machine, IBM

认为:因为每个BI专家对商业智能理解的不同,商业智能的定义也是多种多样的。实际上,商业智能是一系列由系统和技术支持的以简化信息收集、分析的策略的集合,它应该包括企业需要收集什么信息、谁需要去访问这些数据、如何把原始数据转化为最终导致战略性决策的智能、客户服务和供应链管理。

IBM公司在传统、实时反馈(Real-time Feed)、嵌入式(Embedded)三种商业智能模型的基础上提出了闭环BIClosed-loop BI)的概念,认为:事务数据是动态捕获并整合到数据仓库中的,之后数据仓库再将数据提供给一些商业智能工具,例如 OLAP 或挖掘工具。接着,商业智能的输出以推荐对策(例如动态价格变化)的形式直接反馈给前线的决策制定者。这样就形成了一个闭环,从而创造出一种零延时环境。零延时环境允许公司将分析结果整合到每天的企业运转中,并缩短业务决策与业务行动之间的时间间隔。为了实现这个系统,首先应该将这个闭环流程自动化。这可以通过实时构建一个数据仓库、集成实时分析引擎并利用实时规则引擎来实现。其次,这个自动化的闭环流程应该实时出现。这种闭环环境根据由决策引擎生成的消息动态地调整企业运作。这两个标准为更快地制定决策、更快地将产品推向市场以及获得更大的市场机遇打下了基础。

IBM为零售行业提供了专门的商业智能解决方案RBISRBIS提供全面的包含零售企业客户分析、商品定价、营销效果分析、商店运作等多方面的报表库。

IBM商业智能的基本体系结构包括以下部分:

²       数据仓库:Warehouse Manager(数据仓库管理器)用于抽取、整合、分布、存储有用的信息;

²       分析:DB2 OLAP ServerDB2服务器)全方位了解现;

²       数据挖掘:Intelligent Miner用于发现问题、找出规律,达到真正的智能效果:预测将来。

4、

微软(Microsoft

认为:用最简单的术语来说,商业智能是任何尝试获取、分析企业数据以更清楚地了解市场和客户、改进企业流程、更有效地参与竞争的努力。在正确的时间向正确的决策者提供正确的信息,商业智能使企业用更好的时间做出比以前更好的决策。衡量商业智能解决方案的标准是从数据获取知识的能力,这种能力应该可以处理那些远远超出人类简单分析的大量信息并识别其模式、趋势、规则和关系。为此,需要使用强大的、灵活的、易用的、可用的分析工具来做出有用的比较和智能的决策。

微软商业智能包含如下组件:

²       Microsoft SQL ServerAnalysis ServicesMicrosoft Office为主

²       BI共同作业:SharePoint Portal Server

²       可视化:Data Analyzer

²       地理空间分析:MapPoint

²       点击流分析:Commerce Server 2000

²       零售与营销分析:BI Accelerator for SQL Server

²       项目管理:Microsoft Project

²       资料分析:Office Web Components

5、

SAP

认为:商业智能是一大类收集、存储、分析和访问数据以帮助企业用户更好进行决策的应用程序与技术。商业智能应用程序包含如下活动:决策支持、查询和报表、联机分析处理(OLAP)、统计分析、预测和数据挖掘。

SAP的商业智能工具有:SAP Business Information Warehouse (SAP BW)SAP NetWeaver

6、

甲骨文(Oracle

产品与解决方案:

²       数据仓库平台:包括Oracle Database 10gOracle OLAPOracle Data Mining引擎和Oracle Warehouse Builder

²       商业智能工具:包括OracleBI DiscovererOracleBI Spreadsheet Add-inOracleBI Data MinerOracle Reports ServicesOracleBI Beans

²       分析应用程序:包括Oracle Daily Business IntelligenceOracle Balanced ScorecardOracle Enterprise Planning and BudgetingOracle Activity Based ManagementOracle Performance Analyzer

7、

Cognos

认为:商务智能是能使终端用户对企业性能进行监测、分析和形成报表的软件。商业智能可以使企业不总依赖IT部门为组织的数据资产和企业流程带来可见度、清晰度和洞察力

商业智能可以从不同的数据源中聚合和巩固完全不同的内外部数据到一个中心框架中,创建一个公共的、共享的上下文以在一个部门或整个组织中实现有效的、协作的决策制定。商业智能可以在部门级别展开以支持一个特定的6Σ项目,也可以在企业范围内展开以衡量和管理整个公司的绩效。组织可以利用商业智能安排策略,也可以利用商业智能检验策略的效果。

产品和解决方案:

²       ETL工具??Decision Stream

²       事件和检测??NoticeCast

²       统一的元数据??Cognos Architect

²       记分卡、KPI??Cognos Metrics ManagerCognos Metrics DesignerVisualizer

²       报表??ReportNet

²       即时查询??Cognos QueryReportNet Query Studio

²       OLAP分析??PowerPlayPowerPlay Enterprise ServerTransformer

²       门户??Cognos Upfront

²       安全性??Access Manager

²       配置和管理??Cognos Server AdministrationConfiguration Manager

8、

Business Objects

商业智能技术允许组织跟踪、理解和管理至关重要的企业信息。随着越来越多的组织在寻求接近存储在它们事务系统中的有用的信息的方式,商业智能将扮演一个日益重要的战略角色。一个典型的商业智能项目的平均投资回报率(Return Of Investment, ROI)超过了430%,但是分段实施的商业智能项目导致组织不能全面从全球化的、交叉功能信息分析中获益。

BusinessObjects 率先提出电子商务智能(e-Business Intelligence)的概念,将电子商务和商务智能紧密地结合起来。电子商务使得商务关系超越了单个企业范围,延伸到供应商、客户以及投资商。这意味着需要有易用的、安全的、可伸缩的、可扩展的商务智能解决方案来满足企业内部和外部用户的各种需求。信息民主将在具有前瞻性思维的企业中浮现。BusinessObjects提出的概念还包括人力资源智能(Human Resource Intelligence)、产品和服务智能(Product & Service Intelligence)、6Σ智能(Six-Sigma Intelligence)、供应链智能(Supply Chain Intelligence)等概念。

产品及解决方案:

²       查询、报表及分析工具??BusinessObjects 5iWebIntelligence

²       管理工具??BusinessObjects DesignerBusinessObjects SupervisorBussinessObjects Auditor

²       企业分析应用??BusinessMinerBusinessQueryBusinessObjects Set Analyzer

²       开发工具

9、

SAS

商业智能是:关于在组织内部和组织周围正在发生的智能或知识。

当今世界,组织的信息存在分野:一方面,ERP、会计系统,订单录入为组织报告常规的数据;另一方面,商业智能为组织提供知识和洞察力。商业智能允许组织从内部数据提取可以驱动组织前进的信息精华。

产品和解决方案:

SAS Enterprise BI Server SAS Web Report Studio, SAS Add-In for Microsoft Office, SAS Information Delivery Portal, SAS Information Map StudioSAS Integration Technologies

10、

Teradata

商业智能的目的是帮助决策者制定消息灵通的选择。因此,现代商业智能系统必须能处理海量的、详细的、全异的数据并快速将其转化为有意义的、准确、决策者可以放心执行的信息。

Teradata提供的零售解决方案(Teradata Retail Decisions)包含六大核心组件:

²       商品分类分析(Assortment Analysis):在最小存货单元(Stock Keeping Unit, SKU)和业务处理级别上确定商品库存是否合理;

²       商品促销分析(Promotion Analysis):在最小存货单元(Stock Keeping Unit, SKU)和业务处理级别上确定商品的拣选和调拨;

²       客户分析(Customer Analysis):利用可标识客户的数据分段了解客户的购买偏好、对促销的敏感性和收益;

²       渠道分析(Channel Analysis):确定所有销售渠道(店铺、目录、电子通道等)上分类、促销及消费者购买活动的效率;

²       供应商分析(Vendor Analysis):分析供应商提供商品的销售情况、运作效率和边际贡献以帮助谈判和商品分类计划;

²       财务分析(Financial Analysis):对可以用来衡量和提升性能的、主要财务数据(资产、负债、费用和收入)提供及时的洞察力。

11、

all-BI

认为:商业智能是一个没有显著特点的术语,主要应用在一大类用于收集、存储、分析和提供数据访问以帮助企业用户作出更好决策的应用软件和技术上。商业智能应用软件包含的活动有:决策支持、查询和报表、联机分析处理、统计学分析、预测和数据挖掘。

一种变通的描述商业智能的方法是:在公司内部和企业流程过程中进行决策支持所需要的用来将原始数据转化为信息的技术。

在市场竞争中保持兴旺的关键是在竞争中领先。依据准确、及时的信息制定稳定的决策显然要比仅仅靠直觉有效。数据分析、报表和查询工具可以帮助企业用户穿越数据海洋,并从中综合出有用的信息。这些工具在今天被共同归入一个类别:商业智能。

12、

MicroStrategy

商业智能是一系列能够使公司分析数据库中的数据并根据收集的信息获得的洞察力来做决策的软件系统。这种洞察力可以帮助公司:提高效率和生产力、构造强的客户关系、优化生成收入的战略、增加收入并使收益最大化。

商业智能技术由不断增长的用户需求进化而来以支持截然不同的应用模式(或风格)。这五种不同风格的应用模式构成了完整功能意义上的商业智能,以满足商业用户监测、报告和分析数据的需求,包括记分卡(scorecards)和仪表盘(dashboards)、企业报表、OLAP分析、高级预测性分析、警报和前摄告示。

零售解决方案:

零售业要求高性能的商业智能应用程序来支持企业面临的激烈挑战和趋势。MicroStrategy 8实现的零售解决方案包括:

²       商品管理(Merchandise Management):在合适的时间向合适的店铺提供合适的产品;

²       供应商分析:评价供应链的活动性,物流运转和大范围度量下的供应商性能;

²       销售和市场分析:销售管理、市场促销、运作和预算;

²       客户分析和关系行销(Relationship Marketing):在小粒度和聚集水平上分割用户数据;

²       商品类别管理(Category Management):多变量(行销、计划、运作、分布等)分析获得的有效商品管理

²       库存管理(Inventory Management):动态库存帮助零售商避免因经济变动、技术或消费者条件而引起的产品损失;

²       流失预防(Loss Preventions):揭露内外部欺诈行为、甄别经营犯罪、阻止欺诈活动;

²       员工绩效管理(Employee Performance Management):由多个人力资源管理标准变量(销售量、小时数、预算等)分析获得的员工绩效评价;

²       电子商务分析(Ecommerce Analysis):分析大量Web上的商务数据以使流通用户有效管理Web渠道;

²       财务分析:检查影响财务性能的度量以做出有利可图的商业决策。

13、

DM Review杂志

认为:

从数据分析的观点,商业智能是收集与研究主题相关的、高质量的、有意义的信息、以帮助分析信息、得出结论或做出假设的过程。

从信息系统的观点,商业智能是提供给用户联机分析处理或数据分析以帮助回答商业问题、在被观察信息中识别重大趋势或模式的系统。

在过去的10年中,信息系统的名称从主管信息系统(Executive Information System, EIS)变为决策支持系统(Decision Support System, DSS),现在的名称就是商业智能系统。

14、

Hyperion

认为:

大量涌现的集团化运作企业,对庞大而复杂的财务关系和信息流分析提出更高要求,信息技术、管理理论的成熟,催生了商业智能和企业绩效管理。

企业绩效管理(Business Performance Management, BPM)软件允许公司将策略变为计划、监测执行过程、提供能提高财务和运作绩效的洞察力。

商业智能是一类软件,它使公司能访问、分析并共享信息以了解企业的运作情况。商业智能为用户提供从多种不同数据源对历史信息进行访问、分析和统计预测的工具。商业智能的结果是改良的、导致更好运作绩效的决策制定。

阅读全文...