??xml version="1.0" encoding="utf-8" standalone="yes"?> 一、引a Mondrian, 蒙得里安·皮特1872-1944荷兰dQ作品以交错的三原色为基色的垂直U条和^面ؓ特点Q他的著作包?/span> 新造型M(1920q_Q对抽象艺术的发展曾l生很深媄响。——金p霸如是说?/span> 不过,本文所要讨论的可不是这位艺术家。那到底mondrian是什么呢Q?/span> Mondrian是一个开源项目。一个用Java写成的OLAPQ在U分析性处理)引擎。它用MDX语言实现查询Q从关系数据?RDBMS)中读取数据。然后经qJava API用多l的方式对结果进行展C?/span> 我们都知道,在线分析处理(OLAP)要实时地分析大量数据?#8220;online”q个词的含义是即相关的数据量是巨大的——可能以GB为单位——系l也要够快的响应以昄l果?/span> OLAP用了多维分析的技术。尽关pd数据库所存储的所有数据都是以行和列的形式存在的,但一个多l数据集q是可以pu(axes)和单?cell)l成?/span> 在上面的例子中,旉是个l度Q?/span>dimensionQ,而它下面的层ơ(HierarchiesQ又分ؓ半年、季度等U别(Level)?/span> 二、感性认识——运行一个小实例 我们暂时先不讨论Mondrian所用到的一些技术。我们可以先从一个小例子开始,不必在意每个l节Q只是希望大家有个感性认识先。在实施q个例子的过E中Q或许读者就能见些端倪?/span> 首先应该?a >http://sourceforge.net/projects/mondrian/下蝲mondrian的最新版本。这是一个zip包,包括我们要用到的lib和一个例子?/span> 当然Q读者完全可以运行mondrian自带的实例,不过q个例子有些UL复杂Q除了Mondrian本nq有其它技术在里面Q不大容易讲清楚Q也不太适合初学者学习。所以,W者在q里设计一个简z干净的最化实例?/span> 本文所阐述的实例环境是Windows2000+Tomcat+Oracle。ƈ且认者已l针对jdk和Tomcat做了正确的开发环境的讄?/span> 2Q?/span>1准备工作 2Q?/span>2数据库结?/span> 在这个tiny的系l中Q数据库?个表tb_employeeQ职员表Q?tb_timeQ时间表Q?tb_salaryQ薪酬表Q。表l构如下Q?/span> 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), --q?/span> the_month char(2) --?/span> ); drop table tb_salary; create table tb_salary ( employee_id number, --职员id time_id number, --旉id salary number(19,4) --薪酬 ); 当然Qؓ了ɾpȝ能够q行Q还需要读者向数据库表中插入一些数据?/span> 2Q?/span>3Ҏ数据库表的结构,书写schema文g <?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> 文g路径为mywebapp"WEB-INF"mondriantest.xml 2Q?/span>4利用MDX查询 mywebapp"mondriantest.jsp 1 <%@ page import="mondrian.olap.*"%> <% 2 Connection connection = DriverManager.getConnection ("Provider=mondrian; Jdbc=jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:dbname; JdbcUser=dbuser; JdbcPassword=dbpasswd; Catalog=file:///c:/Tomcat4.1/webapps/mywebapp/WEB-INF/mondriantest.xml; JdbcDrivers=oracle.jdbc.driver.OracleDriver;",null,false); 3 String queryStr= "select {[Measures].[Salary]} ON COLUMNS, {[Employee].[employeeId].Members} ON ROWS from CubeTest "; 4 Query query =connection.parseQuery(queryStr); 5 Result result = connection.execute(query); out.println("get result"); %> 2Q?/span>5q行 http://localhost:8080/mywebapp/ mondriantest.jsp 三、深入探?/strong> 3Q?/span>1 API mondrian为客L应用E序提供了API接口以进行查询?nbsp;而这些API对于M用过JDBC的h都会觉得似曾相识的。主要的不同Ҏ查询语言的不同:Mondrian用的是MDX('Multi-Dimensional eXpressions'),?/span>JDBC则用的是SQL?/span> ?/span>JDBC一P也是要经q徏立连接,形成查询语句Q执行查询得到结果集{几个步骤的?/span> 我们来看?/span>mondriantest.jsp的代?/span> W?行:import mondrian.olap.* q是引入我们所需的类Q下面要用到的DriverManager、Connection、Query、Result都在q个package内。这个package一般位于mondrian.jar中?/span> W?行:Connection connection = DriverManager.getConnection ("Provider=mondrian; Jdbc=jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:dbname; JdbcUser=dbuser; JdbcPassword=dbpasswd; Catalog=file:///c:/Tomcat4.1/webapps/mywebapp/WEB-INF/mondriantest.xml; JdbcDrivers=oracle.jdbc.driver.OracleDriver;",null,false); 通过DriverManager创徏一个Connection的实例,建立h据库q接?/span> 其中Jdbc=jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:dbname; 是设|数据库的ip和库名。JdbcUser=dbuser; 讄数据库用戗JdbcPassword=dbpasswd; 讄用户密码。?/span> Catalog=file:///c:/Tomcat4.1/webapps/mywebapp/WEB-INF/mondriantest.xml; 是讄MDX语句查询要对应的schema文g的\?/span> W?行:String queryStr= "select {[Measures].[Salary]} ON COLUMNS, {[Employee].[employeeId].Members} ON ROWS from CubeTest "; 形成MDX的查询语句。MDX语句的Ş式和schema文g的设定是密切相关的,当然schema文g的Ş成也是由数据库结构决定的?/span> W?行:Query query =connection.parseQuery(queryStr);对MDX语句q行分析处理Q是否符合schema文g定义、数据库l构和数据库数据?/span> W?行:Result result = connection.execute(query);执行查询Q得到结果集?/span> 我们发现QuerycM于JDBC的Statement,而Result则酷gResultSet?/span> 3Q?/span>2 schema 3Q?/span>2Q?/span>1什么是schema schema定义了一个多l数据库。包含了一个逻辑模型Q而这个逻辑模型的目的是Z书写MDX语言的查询语句。这个逻辑模型实际上提供了q几个概念:Cubes,l度Q?/span>DimensionsQ, 层次Q?/span>HierarchiesQ,U别Q?/span>LevelsQ,和成员(MembersQ?/span> ?/span>schema文g是~辑q个schema的一?/span>xml文g。在q个文g中Ş成逻辑模型和数据库物理模型的对应?/span> 3Q?/span>2Q?/span>2 schema的逻辑l构 3Q?/span>2Q?/span>2Q?/span>1 Cube 一?/span>Cube是一pdl度(Dimension)和度?/span>(Measure)的集合区域。在Cube中,Dimension?/span>Measure的共同地方就是共用一个事实表?/span> 例: <Cube name="CubeTest"> <Table name="TB_SALARY" /> ……. </Cube> <Table>标签定了所用的事实表的表名?/span> 3Q?/span>2Q?/span>2Q?/span>2 Measure 一个度量,单的_是要被计算的倹{?/span> 例: <Measure name="Salary" column="SALARY" aggregator="sum" /> <Measure>标签?/span>3个必要的属?/span>nameQ度量名Q,columnQ在事实表中的字D名Q?/span>, aggregationQ聚合所用的ҎQ?/span> 3Q?/span>2Q?/span>2Q?/span>3 Dimenesion 而维度一般有其相对应的维度表?/span> 例: <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> 一般Dimesion包含层次QHierarchyQ,而hierarchy是由U别QLevelQ组成?/span> <Dimension>标签的foreignKey是事实表中的字段Q?lt;Hierarchy>标签的primaryKey是维度表中的字段Q通过q种方式把事实表和维度表兌h?lt;Hierarchy>标签下的<Table>标签指明了l度表名。而若q个Level对应着l度表的若干字段?/span> 3Q?/span>3 MDX语言 MDX是ؓ了查询多l数据的Q而SQL是ؓ了查询关pL据库的。而Mondrian所涉及到的一些MDX概念、MDX语法以及pȝ定义的MDX函数和微软的MDX十分接近Q差别微。完全可以参考微软的帮助文档q行学习。在此就不在赘述。MDX语言基本上已成ؓ多维数据库查询语a的标准?/span> 四、结?/strong> Mondrian作ؓZjava的OLAP引擎Q而且是开源的目Qؓ那些Zjava的项目而要q微Y构架但又不得不对大量数据q行分析的项目又提供了一U可行的Ҏ。希望它也能?/span>蒙得里安·皮特Ҏ象艺术的发展产生影响一栯vC定的作用?/span>?Tomcat%"webapp"依次建立mywebappQmywebapp"WEB-INFQmywebapp"WEB-INF"lib,?/font>
mondrian.war"WEB-INF"lib"mondrian.jar,javacup.jar,
xalan.jar,junit.jar
{相关的jar包copy?/span>
%TOMCAT_HOME%
"webapps"mywebapp"lib"
下?/span>
q时启动to
mcat,
在浏览器地址栏中输入
卛_?/font>
]]>
BI(Business Intelligence) 是一U运用了数据仓库、在U分析和数据挖掘{技术来处理和分析数据的崭新技术,目的是ؓ企业决策者提?strong style="color: #ff0000">决策支持?br />
从定义上我们要明白BIq行的基?nbsp;Q数据仓库,和联机分?Q数据挖?br />
目的Q提供决{支?br />
2、BI分类
信息c?BI 应用
指由原始数据加工而来?strong>数据查询?strong>报表图表?strong>多维分析?strong>数据可视?/strong>{应用,q些
应用的共同特ҎQ将数据转换为决{者可接受的信息,展现l决{者。例如将银行交易数据加工为银行胦务报表?/span>
知识c?BI 应用
指通过数据挖掘技术和工具Q将数据中隐含的关系发掘出来Q利用计机直接数据加工ؓ知识Q展现给决策者?br />
3、BI的应用模?br />
A、初U模?br />
数据查询和生成报表,q是BI的初U应用模?br />
B?br />
1、BI 高应用模式
OLAP Q即联机分析处理Q是 BI 带来的一U全新的数据观察方式Q是 BI 的核心技?之一?br />
2、数据挖?/span>
数据挖掘的目的是通过计算机对大量数据q行分析Q找出数据之间潜藏的规律和知识,q以可理解的方式展现l用戗数据挖掘是最高?BI 应用Q因为它能代曉K分h脑功能?nbsp;
数据挖掘的三大要素是Q?
技术和法Q?/strong>目前常用的数据挖掘技术包括—?br />
自动cd侦测(Auto Cluster Detection)
决策?Decision Trees)
经|络(Neural Networks)
数据Q?/strong>׃数据挖掘是一个在已知中挖掘未知的q程Q?br />
因此需要大量数据的U篏作ؓ数据源,数据U篏 预测模型Q?/strong>也就是将需要进行数据挖掘的业务逻辑?br />
计算机模拟出来,q也是数据挖掘的主要d?br />
4?nbsp;底——数据仓库技?br />
数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变?Time Variant)的数据集合,用于支持理决策。以上是数据仓库的官方定义?nbsp;
量越大,数据挖掘工具׃有更多的参考点?/p>
5、ȝQ?br />
要想学好BIQ以上知识点是基。必L基础学习才能深切的理解BIQ理解客户在q主面真正意义上的需求?br />
]]>
վ֩ģ壺
|
|
|
|
|
Զ|
|
|
Ǩ|
|
|
|
|
߮|
ʯ|
峣|
ɳ|
|
|
ɫ|
¸|
|
|
˷|
ƽ|
|
˴|
|
|
|
|
|
|
Ұ|
|
¤|
|
|
|
¬|
Ȫ|