一、下载地址

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

[mondrian] 快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. Shell 脚本面试问题大全

    我们为你的面试准备选择了 70 个你可能遇到的 shell 脚本面试问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到 ...

  2. Java程序员必备的6款最佳开发工具

    工欲善其事,必先利其器.每一个Java程序员都有其惯用的工具组件.对于Java程序员,各种有用的软件和工具泛滥成灾.初级开发人员要么找不到合适的工具,要么在寻找过程中浪费了大量的时间.下面,我将为大家 ...

  3. .Net自帶Ajax和GridView

    如圖所示,在新建web窗體后的工具欄中有一個 AJAX擴展 ScriptManager 在整個網頁中有且只有一個,使用母版頁和用戶控件中尤為注意, 例如在嵌套母版頁和用戶控件時只在最外層加上Scrip ...

  4. HDU 4442 Physical Examination

    Physical Examination Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  5. Cheatsheet: 2013 08.01 ~ 08.13

    Mobile Objective C Blocks: Summary, Syntax & Best Practices Android SDK: Create an Arithmetic Ga ...

  6. 蒙特卡洛法计算定积分—Importance Sampling

    如上图所示,计算区间[a  b]上f(x)的积分即求曲线与X轴围成红色区域的面积.下面使用蒙特卡洛法计算区间[2  3]上的定积分:∫(x2+4*x*sin(x))dx # -*- coding: u ...

  7. 自动编号维护SNRO

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  8. centos中更换jdk的版本

    现在讲的是Linux中更换jdk版本的问题,卸载Linux自带的jdk更换sun的jdk百度一大堆,但是如果我安装的sun的jdk是1.7的想更换到1.8的如何解决呢,方法其实超easy. 把1.8的 ...

  9. iOS - AudioServicesPlay 短频音效播放

    前言 extern void AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID) __OSX_AVAILABLE_STARTING(_ ...

  10. set使用

    package com.cz.test.util.collection; import java.util.ArrayList;import java.util.Collection;import j ...