??xml version="1.0" encoding="utf-8" standalone="yes"?>91原创在线视频,亚洲免费视频中文字幕,国产精华一区二区三区http://www.aygfsteel.com/pdw2009/category/30867.htmlJ2EE相关应用技术日?/description>zh-cnThu, 17 Apr 2008 05:37:14 GMTThu, 17 Apr 2008 05:37:14 GMT60java开源的OLAP引擎--mondrianhttp://www.aygfsteel.com/pdw2009/archive/2008/04/17/193728.html有猫怼的日?/dc:creator>有猫怼的日?/author>Thu, 17 Apr 2008 05:29:00 GMThttp://www.aygfsteel.com/pdw2009/archive/2008/04/17/193728.htmlhttp://www.aygfsteel.com/pdw2009/comments/193728.htmlhttp://www.aygfsteel.com/pdw2009/archive/2008/04/17/193728.html#Feedback0http://www.aygfsteel.com/pdw2009/comments/commentRss/193728.htmlhttp://www.aygfsteel.com/pdw2009/services/trackbacks/193728.html 

一、引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准备工作

?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>

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行

q时启动tomcat,在浏览器地址栏中输入

http://localhost:8080/mywebapp/ mondriantest.jsp卛_?/font>

三、深入探?/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>



]]>
BI的入?/title><link>http://www.aygfsteel.com/pdw2009/archive/2008/04/17/193714.html</link><dc:creator>有猫怼的日?/dc:creator><author>有猫怼的日?/author><pubDate>Thu, 17 Apr 2008 04:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/pdw2009/archive/2008/04/17/193714.html</guid><wfw:comment>http://www.aygfsteel.com/pdw2009/comments/193714.html</wfw:comment><comments>http://www.aygfsteel.com/pdw2009/archive/2008/04/17/193714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/pdw2009/comments/commentRss/193714.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/pdw2009/services/trackbacks/193714.html</trackback:ping><description><![CDATA[<p>        最q想学习BI,因ؓ自己做的一个项目用C大量Oracle 分析函数,而烃使用使用OLAP技?pȝ目前数据量少,速度相对来说可以。每天数据量q么大,谁能保证U篏了两q的数据后,q算速度q有q么快呢。这让我不得不思考我在做的项目与BI的差别,BIq概念之前只听说q没深入了解更没有用q相应的工具。一开始自己就惛_开源的BI工具Q就开始下载,扑օ门文档。两天之后让我发现这行不通,q概念都不理解,仅有工具是不行的。我们需要理解它的定义、历双Ӏ作用,才能开始学习它Q才需要用q工兗?br /> 1、BI的定议:<br />       BI(Business Intelligence) 是一U运用了数据仓库、在U分析和数据挖掘{技术来处理和分析数据的崭新技术,目的是ؓ企业决策者提?strong style="color: #ff0000">决策支持</strong>?br />      从定义上我们要明白BIq行的基?nbsp;Q数据仓库,和联机分?Q数据挖?br />      目的Q提供决{支?br /> 2、BI分类<br />      <span style="color: #99cc00">信息c?BI 应用  <br />         <span style="color: #000000">指由原始数据加工而来?strong>数据查询</strong>?strong>报表图表</strong>?strong>多维分析</strong>?strong>数据可视?/strong>{应用,q些 <br /> 应用的共同特ҎQ将数据转换为决{者可接受的信息,展现l决{者。例如将银行交易数据加工为银行胦务报表?/span><br />      <strong>知识c?BI 应用<br /> <br /> </strong>    <span style="color: #000000">  指通过数据挖掘技术和工具Q将数据中隐含的关系发掘出来Q利用计机直接数据加工ؓ知识Q展现给决策者?br /> 3、BI的应用模?br />      A、初U模?br />            数据查询和生成报表,q是BI的初U应用模?br />      B?br />           <span style="color: #ff0000">1、BI 高应用模式<br /> </span>           OLAP Q即联机分析处理Q是 BI 带来的一U全新的数据观察方式Q是 BI 的核心技?之一?br />         <span style="color: #ff0000"> 2、数据挖?/span><br />              <strong></strong>数据挖掘的目的是通过计算机对大量数据q行分析Q找出数据之间潜藏的规律和知识,q以可理解的方式展现l用戗数据挖掘是最高?BI 应用Q因为它能代曉K分h脑功能?nbsp;  <br />          数据挖掘的三大要素是Q?</p> <p>         <strong>技术和法Q?/strong>目前常用的数据挖掘技术包括—?br />                 自动cd侦测(Auto Cluster Detection)<br />                 决策?Decision Trees)<br />                 经|络(Neural Networks)</p> <p>        <strong>数据Q?/strong>׃数据挖掘是一个在已知中挖掘未知的q程Q?br />                 因此需要大量数据的U篏作ؓ数据源,数据U篏<br />                 量越大,数据挖掘工具׃有更多的参考点?/p> <p>        <strong>预测模型Q?/strong>也就是将需要进行数据挖掘的业务逻辑?br />                 计算机模拟出来,q也是数据挖掘的主要d?br /> </p> <p><strong>4?nbsp;底——数据仓库技?br /> </strong>         <strong></strong>数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变?Time Variant)的数据集合,用于支持理决策。以上是数据仓库的官方定义?nbsp;<br /> <br /> <br /> 5、ȝQ?br />       要想学好BIQ以上知识点是基。必L基础学习才能深切的理解BIQ理解客户在q主面真正意义上的需求?br />       <br /> </span></span></p> <img src ="http://www.aygfsteel.com/pdw2009/aggbug/193714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/pdw2009/" target="_blank">有猫怼的日?/a> 2008-04-17 12:55 <a href="http://www.aygfsteel.com/pdw2009/archive/2008/04/17/193714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ǩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">߮</a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">峣</a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɫ</a>| <a href="http://" target="_blank">¸</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˷</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˴</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">΢</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ұ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¬</a>| <a href="http://" target="_blank">Ȫ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>