[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人就表示在部门、职系、民族、性别四个维度上企业人数的事实度量,并且在为人数事实中包含部门维度人事教育部这一个维度层次,如果将人数事实的所有维度考虑在内,就构成有关人数的多维分析立方体。
[mondrian] 快速入门的更多相关文章
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- Linux用户应知应会的7个‘ls’命令的独特技巧
在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容.本文时‘ls命令’系列的最后一部分.如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接. Linux中的15个基本 ...
- [翻译]投影变换 Projection Transform (Direct3D 9)
你可以认为投影变换就是控制摄像机内部的一种方式.他可以类推为为摄像机选择一个漏字板.它是三种变换中最难懂的.本文只讨论以下的一些内容. 典型的投影变换就是缩放和透视投影.投影就变换把视椎转化为一个立方 ...
- 【转载】为什么CPU有多层缓存
原文:为什么CPU有多层缓存 http://mp.weixin.qq.com/s?__biz=MzI1NDM2Nzg5Mw==&mid=2247483712&idx=1&sn= ...
- Perform Cut Copy Paste Operations Using Cut_Region Copy_Region Paste_Region Commands In Oracle Forms
You can do Select, Cut, Copy and Paste operations on text items in Oracle Forms using Select_All, Cu ...
- 嵌套结构使用:struc1-struc2-XXX
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- [Effective Java]第三章 对所有对象都通用的方法
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- MySQL多表更新(逻辑外键/事实外键)
语法结构: UPDATE table_reference SET 列名1=value1[,列名2=value2,......] [WHERE where_condition] 说明: tabl ...
- poj 1696 Space Ant (极角排序)
链接:http://poj.org/problem?id=1696 Space Ant Time Limit: 1000MS Memory Limit: 10000K Total Submissi ...
- Python基础学习笔记(五)常用字符串内建函数
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-strings.html 3. http://www.liaoxu ...
- 关于<![CDATA[]]
术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data). 在 XML 元素中,"<" 和 "&& ...