mondrian入门

转载 2007年10月01日 10:14:00
以前一直是用MS Anylize Service的,最近要做的项目是java的,小项目预算有限,所以想找一个开源的java的数据仓库解决方案来用用。

    在网上查了一下,发现了Mondrian。Mondrian是基于JAVA的数据仓库引擎,可以集成到web项目中,这一点最吸引我。另外与他搭配的表现层的方案也有不少选择,Jpivot是元老,pentaho,openi看起来是后起之秀。不管怎样,还是先研究一下modrian吧

    网上的中文资源比较少,在csdn上找了一下,只发现了两篇比较有用的

http://dev.csdn.net/develop/article/31/31791.shtm  

Mondrian——有影响的“艺术家”     选择自 kswaking 的 Blog

http://dev.csdn.net/develop/article/68/68661.shtm 

穷人的通用OLAP方案III--JPivot表现层     选择自 calvinxiu 的 Blog

照着做了一下,发现了一些问题,也有了一些心得。

一.环境准备

1.1 首先介绍一下环境

操作系统:Linux

服务器:Tomcat 5.5

数据库:MySQL 5.0.21

1.2 下载程序。Mondrian在http://mondrian.sourceforge.net 可以下载,最早他是用MS Analyze Service的教程中FoodMart数据库作为demo的,那个是access的数据库。还好现在他有了Platform-Independent的版本,我就下载了那个mondrian-2.1.1-derby.zip 解压缩之后在lib目录里面有一个mondrian-embedded.war,把这个直接放到tomcat的webapps目录里面就能够看到mondrian的demo了。不过后面的测试,我把这个war解开之后放到webapps里面去,并且目录把名字改短了点mondrian。启动tomcat,在浏览器输入http://localhost/mondiran 看到了demo。需要说明一下的是,mondrian的发布包含了Jpivot,用它来做展示层,所以不用再去单独下载Jpivot了。

1.3 数据库建表,在MySQL数据库里面建立table,借用了kswaking的数据库结构

在这个tiny的系统中,数据库有3个表tb_employee(职员表),tb_time(时间表),tb_salary(薪酬表)。表结构如下:

drop table tb_employee;

create table tb_employee

(

     employee_id     number,             --职员id    

     employee_name   varchar2(10)        --职员姓名

);

 

drop table tb_time;

create table tb_time

(

    time_id   number,        --时间id

    the_year  char(4),       --

    the_month char(2)        --

);

 

drop table tb_salary;

create  table tb_salary

(

    employee_id  number,                --职员id   

    time_id      number,                --时间id

    salary       number(19,4)           --薪酬

);

 

当然,为了使系统能够运行,还需要读者向数据库表中插入一些数据。

二. mondrian测试

    需要说明的是mondrian使用了MS一样的MDX语言实现查询,这对于从MS Analyze Services入门的人真是一个好消息。

2.1 先编写schema。

<?xml version="1.0"?>
  <Schema name="Mondrian">
    <Cube name="CubeTest">
    <Table name="tb_salary"/>

    <Dimension name="Employee" foreignKey="employee_id">
      <Hierarchy hasAll="true" primaryKey="employee_id">
        <Table name="tb_employee"/>
        <Level name="employeeID" column="employee_id" uniqueMembers="true">
           <Property name="employeeName" column="employee_name"/>
       </Level>
       </Hierarchy>
    </Dimension>

    <Dimension name="Time" foreignKey="time_id">
      <Hierarchy hasAll="false" primaryKey="time_id">
        <Table name="tb_time"/>
        <Level name="year" column="the_year" uniqueMembers="false"/> 
        <Level name="month" column="the_month" uniqueMembers="false"/>
      </Hierarchy>
    </Dimension>

    <Measure name="Salary" column="salary" aggregator="sum"/>

  </Cube>
</Schema>

    这个schema定义了一个cube,包含两个Dimension和一个Measure。很容易看懂,就不解释了。
   文件路径为webapps/mondrian/WEB-INF/queries/mondriantest.xml。

   为了后面的测试方便,我把文件放到了queries目录里面。

   因为用MySQL建表的时候都用小写的,所以schema里面的字段名也都用了小写(我一开始也使用大写的,结果出错,找不到字段),calvinxiu的文章说如果是Oracle数据库,这里的字段要用大写。

 

 

2.2 编写JSP

 

<%@ page import="mondrian.olap.*"%>
<%
  Connection connection = DriverManager.getConnection("Provider=mondrian; Jdbc=jdbc:mysql://localhost/mondrian; JdbcUser=root; JdbcPassword=; Catalog=file:///usr/local/apache-tomcat-5.5.12/webapps/mondrian/WEB-INF/queries/mondriantest.xml; JdbcDriver=com.mysql.jdbc.Driver", null, false);

  String querystr = " select {[Measures].[Salary]} ON COLUMNS, {[Employee].[employeeId].Members} ON ROWS from CubeTest ";

  Query query=connection.parseQuery(querystr);
  Result result = connection.execute(query);
  out.println("get result");
%>

    可以看到mondrian也使用jdbc来连接数据库的,其中要特别注意的是Catalog指名了schema的位置。

 

    文件路径webapps/mondrian/mondriantestmdx.jsp

 

2.3 测试

    在浏览器输入http://localhost/mondrian/mondriantestmdx.jsp 可以看到显示的结果 get result,说明一切正常。

 

 

    到目前为止,我们只测试了Mondrian,它只负责数据的提取和组织,所以在画面上没有看到任何的数据,下一篇文章将继续研究数据的展现 - Jpivot。


相关文章推荐

Mondrian初涉入门--运行自带演示程序FoodMart配置步骤

Mondrian初涉入门--运行自带演示程序FoodMart配置步骤2007-11-30 19:29最近刚接触Mondrian,准备学习这个强大的开源Olap工具,首先从它自带的demo例子程序学起,...

Mondrian入门

 Mondrian是一个开放源代码的Rolap服务器,使用java开发的。
  • chch87
  • chch87
  • 2014年04月17日 21:40
  • 1901

OLAP简介及Mondrian快速入门

OLAP简介及Mondrian快速入门    OLAP(On-Line Analysis  Processing)在线分析处理是一种共享多维信息的快速分析技术;OLAP利用多维数据库技术使用户从不...

mondrian与java工程的集成

mondrian与java工程的集成
  • qzp1991
  • qzp1991
  • 2015年03月04日 15:47
  • 1144

mondrian中用mdx计算父级百分比和整体百分比

mdx计算父级百分比:   Mdx代码   With   //整体百分比   Member [Measures].[用户的百分比1] as    ([Measure...

OLAP方案I I--Mondrian引擎 .

如前所说,Mondrian是OLAP的核心引擎,负责从关系数据库中计算、缓存数据,响应来自表现层的使用MS家 MDX语法的查询。具体表现形式呢,就是一个jar,随Tomcat启动。 看完那个Food...

mondrian 性能优化

mondrian作为开源的rolap引擎非常稳定,bug也非常少,但是就是基本没用人维护了,如果出现什么问题,需要自己修改源码了。现在很多BI工具的rolap引擎都使用的是modnrian ,例如比较...
  • lyzxx
  • lyzxx
  • 2016年11月14日 14:28
  • 1490

数据仓库之mondrian的学习

Mondrian Schema解析  (2013-03-28 18:38:55) 转载▼   分类: 技术之路 Schema Sch...

Creating a basic Mondrian OLAP Cube

This post is a hands on tutorial on how to create an analysis cube for the Mondrian OLAP engine. I...

Mondrian异常

Mondrian异常
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mondrian入门
举报原因:
原因补充:

(最多只允许输入30个字)