一、下载地址

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. SqlSever基础 order by之后再orderby,双重排序,对排序好的数据中再次进行排序

    镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...

  2. MySql性能优化相关

    原来使用MySql处理的数据量比较少,小打小闹的,没有关注过性能的问题.最近要处理的数据量飙升,每天至少20W行的新增数据,导致MySql在性能方面已经是差到不可用的地步了,必须要重视MySql的优化 ...

  3. 当插入数据失败时,防止mysql自增长字段的自增长的方法

    问题描述: 当mysql设置了自增长字段时(注意:一个表中只能设置一个自增长字段,可以不是主键,但必须是键 ),如果插入数据失败,那么自增长字段仍然会占用这个自增长值,再次成功插入数据时就会造成断层. ...

  4. Ubuntu14.04设置开机root用户登录

    1.sudo vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf 2.添加:greeter-show-manual-login=true 3.su ...

  5. MVC客户端验证配置

    <appSettings> <add key="ClientValidationEnabled" value="true"/> < ...

  6. Android 使用finalBitmap实现缓存读取

    public class NewsApplication extends Application{ private FinalBitmap finalBitmap=null; public Final ...

  7. ie8不支持transform: translateY,ie9支持不友好

    transform: translateY(0);  ie8 不支持这个属性  但是我觉得用css实现的效果特好 特自然 也许是我的脚本写的不够完善 呵呵    现在我希望其他 主流的浏览器应用CSS ...

  8. 手机如何解散QQ讨论组

    手机如何解散QQ讨论组   讨论组可以方便一群人的聊天,一般都是一段时间的问题.过了这一段时间,大家都是不需要再在讨论组里面发言了,那么手机如何解散QQ讨论组呢?     1 我们登录自己的 QQ之后 ...

  9. ORACLE SQL 分组

    select max(cost),suppliercode from tel_bill where period = '2014005' group by suppliercode;select * ...

  10. [转载] 理解 rto

    原文: http://mp.weixin.qq.com/s?__biz=MzAxNjM3MDkyOQ==&mid=204656491&idx=1&sn=5046aa16eee0 ...