[mondrian] 快速入门

 

一、下载地址

mondrian各个版本和工具等的下载地址:

http://sourceforge.net/projects/mondrian/files/?source=navbar

注意:mondrian-3.5.0及其以下版本都有mondrain的运行示例mondrian.war,而在mondrian-3.5.0以后的版本中就包含了jar和source.jar了
所以,需要先运行示例的需要注意下载的版本

 

二、入门DEMO

 

(1)运行demo

在 mondrian.war 中找到 lib 目录下面的 mondrian.war,将其复制到Tomcat下面运行。输入:http://localhost:8080/mondrian/可以看到Mondrian的界面,点击其中的Mondrian Examples可以看到相应的示例。

 

(2)实现自己的OLAP分析Demo

① sql脚本

CREATE TABLE `person` (
    `userid`  varchar(100) ,
    `department`  varchar(100) ,
    `username`  varchar(100),
    `sex`  varchar(100) ,
    `nationality`  varchar(100),
    `post`  varchar(100),
    `zyjslb`  varchar(100),
    `zyjsdj`  varchar(100) ,
    `zhixi`  varchar(100),
    `xueli`  varchar(100) ,
    `age`  int(10) ,
    PRIMARY KEY (`userid`)
)

 

② schema文件

在Mondrian里面的cube是以XML的形式定义的。

他有一个GUI工具workbench来制作cube,可以选择这个GUI生成或者纯手写来简历XML文件。

但是注意,使用workbench时选择的mondrian的jar版本要和实际使用时的一致。

新建personDemo.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<Schema name="Mondrian">
<Cube name="Person">
    <Table name="PERSON" /> 
     <Dimension name="部门" foreignKey="USERID" >
        <Hierarchy  hasAll="true" primaryKey="USERID" allMemberName="所有部门" >
          <Table name="PERSON" alias="a"/>   
        <Level name="部门" column="DEPARTMENT" uniqueMembers="true" />
        <Level name="姓名" column="USERNAME" uniqueMembers="true" />           
        </Hierarchy>
    </Dimension>     
    <Dimension name="性别"  foreignKey="USERID" >
        <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有性别">         
            <Table name="PERSON" alias="b" />
        <Level name="性别" column="SEX"   uniqueMembers="true" />
        </Hierarchy>
    </Dimension>
    <Dimension name="专业技术资格类别"  foreignKey="USERID" >
        <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有专业技术资格类别">         
            <Table name="PERSON" alias="c" />
        <Level name="资格类别" column="ZYJSLB"   uniqueMembers="true" />
        </Hierarchy>
    </Dimension>
    <Dimension name="专业技术资格等级"  foreignKey="USERID" >
        <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有专业技术资格等级">         
            <Table name="PERSON" alias="d" />
        <Level name="资格等级" column="ZYJSDJ"   uniqueMembers="true" />
        </Hierarchy>
    </Dimension>
     <Dimension name="职系"  foreignKey="USERID" >
        <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有职系">         
            <Table name="PERSON" alias="e" />
        <Level name="职系" column="ZHIXI"   uniqueMembers="true" />
        </Hierarchy>
    </Dimension>
    <Dimension name="民族"  foreignKey="USERID" >
        <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有民族">         
            <Table name="PERSON" alias="f" />
        <Level name="民族" column="NATIONALITY"   uniqueMembers="true" />
        </Hierarchy>
    </Dimension>
    <Dimension name="学历"  foreignKey="USERID" >
        <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有学历">         
            <Table name="PERSON" alias="g" />
        <Level name="学历" column="XUELI"   uniqueMembers="true" />
        </Hierarchy>
    </Dimension>       
    <Measure name="人数" column="USERID" aggregator="distinct count" />
    </Cube>
</Schema>

 

英文版本

<?xml version="1.0" encoding="UTF-8"?>
<Schema name="Mondrian">

    <Cube name="Person">
    
        <Table name="PERSON" /> 
        
        <!--  -->
        <Dimension name="department" foreignKey="USERID" >
            <Hierarchy  hasAll="true" primaryKey="USERID" allMemberName="alldepartment" >
              <Table name="PERSON" alias="a"/>   
            <Level name="department" column="DEPARTMENT" uniqueMembers="true" />
            <Level name="name" column="USERNAME" uniqueMembers="true" />           
            </Hierarchy>
        </Dimension>   
        
        <!--  -->
        <Dimension name="xb"  foreignKey="USERID" >
            <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="syxb">         
                <Table name="PERSON" alias="b" />
            <Level name="xb" column="SEX"   uniqueMembers="true" />
            </Hierarchy>
        </Dimension>

        <!--  -->
        <Dimension name="zyjszglb"  foreignKey="USERID" >
            <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="syzyjszglb">         
                <Table name="PERSON" alias="c" />
            <Level name="zglb" column="ZYJSLB"   uniqueMembers="true" />
            </Hierarchy>
        </Dimension>
        
        <!--  -->
        <Dimension name="zyjszgdj"  foreignKey="USERID" >
            <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="syzyjszgdj">         
                <Table name="PERSON" alias="d" />
            <Level name="zgdj" column="ZYJSDJ"   uniqueMembers="true" />
            </Hierarchy>
        </Dimension>
        
        <!--  -->
        <Dimension name="zx"  foreignKey="USERID" >
            <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="syzx">         
                <Table name="PERSON" alias="e" />
            <Level name="zx" column="ZHIXI"   uniqueMembers="true" />
            </Hierarchy>
        </Dimension>
        
        <!--  -->
        <Dimension name="mz"  foreignKey="USERID" >
            <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="symz">         
                <Table name="PERSON" alias="f" />
            <Level name="mz" column="NATIONALITY"   uniqueMembers="true" />
            </Hierarchy>
        </Dimension>
        
        <!--  -->
        <Dimension name="xl"  foreignKey="USERID" >
            <Hierarchy hasAll="true" primaryKey="USERID" allMemberName="syxl">         
                <Table name="PERSON" alias="g" />
            <Level name="xl" column="XUELI"   uniqueMembers="true" />
            </Hierarchy>
        </Dimension> 
          
        <Measure name="personCount" column="USERID" aggregator="distinct count" />
        
    </Cube>
    
</Schema>

 

 

③ 编写测试的MDX查询语句保存为person.jsp

<%@ page session="true" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> 
<%@ taglib uri="http://www.tonbeller.com/jpivot" prefix="jp" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 
<jp:mondrianQuery id="query01" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost:3306/olaptest" ca   talogUri="/WEB-INF/queries/personDemo.xml" jdbcUser="root" jdbcPassword="root" connectionPooling="false"> 
  select 
    NON EMPTY {[Measures].[人数]} on columns,     NON EMPTY {([部门].[所有部门],[职系].[所有职系],[专业技术资格类别].[所有专业技术资格类别],[专业技术资格等级].[所有专业技术资格等级],[学历].[所有学历],[民族].[所有民族],[性别].[所有性别])} ON rows   from Person
</jp:mondrianQuery> <c:set var="title01" scope="session">人员结构多维分析</c:set>

 英文版本

%@ page session="true" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %> 
<%@ taglib uri="http://www.tonbeller.com/jpivot" prefix="jp" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> 
<jp:mondrianQuery id="query01" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost:3306/test" catalogUri="/WEB-INF/queries/qqDemo.xml" 
 jdbcUser="root" jdbcPassword="root" connectionPooling="false"> 
select NON EMPTY {[Measures].[personCount]} on columns, 
 NON EMPTY {([department].[alldepartment],[zx].[syzx],[zyjszglb].[syzyjszglb],[zyjszgdj].[syzyjszgdj],[xl].[syxl],[mz].[symz],[xb].[syxb])} ON rows 
 from Person 
 </jp:mondrianQuery> 
 <c:set var="title01" scope="session">ryjgdwfx</c:set>

 

④ 将personDemo.xml和person.jsp放在测试demo的WEB-INF/queries目录下面

⑤ 在浏览器中输入:http://localhost:8080/mondrian/testpage.jsp?query=person 测试

 

三、基本概念

(1)变量(度量)

变量是数据度量的指标,是数据的实际意义,即描述数据“是什么”。像上面示例中的人数。

(2)维度

维度是描述与业务主题相关的一组属性,单个属性或属性集合可以构成一个维。如上面示例中的学历、民族、性别等都是维度。

(3)维的层次

一个维往往可以具有多个层次,例如时间维度分为年、季度、月和日等层次,地区维可以是国家、地区、省、市等层次。这里的层次表示数据细化程度,对应概念分层。后面介绍的上钻操作就是由低层概念映射到高层概念。概念分层可除根据概念的全序和偏序关系确定外,还可以通过对数据进行离散化和分组实现。

(4)维的成员

若维是多层次的,则不同的层次的取值构成一个维成员。部分维层次同样可以构成维成员,例如“某年某季度”、“某季某月”等都可以是时间维的成员。

(5)多维数组

多维数组用维和度量的组合表示。一个多维数组可以表示为(维1,维2,……,维n,变量),例如(部门,职系、民族、性别,人数)组成一个多维数组。

(6)数据单元(单元格)

多维数组的取值。当多维数组中每个维都有确定的取值时,就唯一确定一个变量的值。数据单元可以表示为(维1成员,维2成员,……,维N成员,变量的值),例如(人事教育部,技能,回族,男,1人)表示一个数据单元,表示人事教育部职系是技能的回族男性有1人。

(7)事实

事实是不同维度在某一取值下的度量,例如上述人事教育部职系是技能的回族男性有1人就表示在部门、职系、民族、性别四个维度上企业人数的事实度量,并且在为人数事实中包含部门维度人事教育部这一个维度层次,如果将人数事实的所有维度考虑在内,就构成有关人数的多维分析立方体。

 

posted @ 2015-11-26 13:08  Aviva_ye  阅读(1910)  评论(0编辑  收藏  举报