zoukankan      html  css  js  c++  java
  • [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人就表示在部门、职系、民族、性别四个维度上企业人数的事实度量,并且在为人数事实中包含部门维度人事教育部这一个维度层次,如果将人数事实的所有维度考虑在内,就构成有关人数的多维分析立方体。

  • 相关阅读:
    单例模式
    js事件
    oracle_to_excel
    jquery_2
    jquery_1
    4.linux 复制,删除,重命名
    一个tomcat下部署多个springboot项目
    3.centos7 安装oracle
    桥接模式
    组合模式
  • 原文地址:https://www.cnblogs.com/avivaye/p/4997432.html
Copyright © 2011-2022 走看看