`

Mondrian二

    博客分类:
  • OLAP
阅读更多
   WCFJSP数据结构Oracle领域模型
JPivot+Mondrian笔记
一、引言
     Mondrian官方网站(http://mondrian.pentaho.org/)给出的定义是 Mondrian is an OLAP server written in Java. It enables you to interactively analyze very large datasets stored in SQL databases without writing SQL.
     Mondrian是一个OpenSource的基于关系数据库的分析服务器,遵循MDX、XML/A和JOLAP标准。Mondrian是一个BI开源项目。一个用Java写成的OLAP(在线分析性处理)引擎。它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过Java API用多维的方式对结果进行展示。首先应该到http://sourceforge.net/projects/mondrian/下载mondrian的最新版本。

二、Mondrian Architectrue
     Mondrian从架构上可以分为四个层次:表现层、计算层、聚合层、存储层。
  计算层:分析、验证、执行MDX语句, 先计算坐标轴,然后再计算每个单元格的值,从效率上的考虑,计算层批量从聚合层获取单元格数据集合。
  聚合层:聚合层中缓存了多维查询结果,即单元格的数据集合,如果计算层所需要的数据不在缓存中,从存储层中进行查询获取数据并缓存。
  存储层:采用关系数据库实现,一般采用星型模型构建,提供维表、事实表和聚合表。
  系统部署结构上,可以分三层结构分开部署,将表现层部署在一台机器上,计算层和聚合层部署在第二台,存储层部署在第三台。



      根据OLAP服务器数据存储技术,可以分为ROLAP和MOLAP,Mondrian采用ROLAP技术。
      在ROLAP的多维模型组织和存储数据中,比较常用的方式是星型模式,由一个事实表和一组维度表组成。维度必须预先确定,可以是一般的星型架构,也可以是比较特殊的父子架构、雪花架构等。在ORACLE数据库中,我们能够按照维度进行预先的统计、分类、排序,创建大量的实体化视图。对于没有实体化视图类似功能的数据库,我们也可以创建大量的临时聚合表,这样当用户进行比较高级的分析的时候,不用访问数据量庞大的基础事实表,只需要在我们已经形成的实体化视图或聚合表上作进一步的聚合就可以了,这样能够大大提高查询分析的效率,并且减少占用的系统资源。
      在使用聚合表方面有一个关键的技术称之为"聚合感知"技术,只有OLAP引擎必须能够根据多维查询中的维度信息,从适当的聚合表中提取数据,否则聚合表形同虚设。另外在多维模型设计中,设计正确的聚合表也是很关键的。不恰当的设计导致将聚合表的不能满足多维查询的需求,每次从事实表取数据,开销是非常大的。
      Mondrian采用关系数据库存储事实表,其本身不具有"聚合感知"的技术,当需要从比较明细的事实表中汇总数据时,性能就比较差了。但是如果关系数据库能够支持实体化视图或其他聚合技术,那么就可以利用关系数据库的技术透明的提高系统性能。我们可以利用Oracle实体化视图来提高Mondrian的效率。

三、Mondrian开发
      Mondrian开发顺序的分为4个步骤。
      1、创建Mondrian cubes (Schema文件)
Schema元模型包括维度(Dimensions)、层次(Hierarchies)、级别(Levels)、和成员(Members)等。Mondrian要根据它来从关系数据库中聚合数据响应MDX语法的查询。可以说Schema文件是Jpivot+Mondrian架构应用中最核心,最关键的文件。JPivot+Mondrian Demo的/WebRoot/Web-Inf/pasmondrian.xml文件就是基于XML的,用于映射OLAP的数据库结构,以供Mondrian服务器响应MDX语句查询的Schema元模型文件。Schema元模型的定义文件较复杂。幸运的是有开源工具CubeDesigner可以帮我们生成该文件,虽然该工具刚推出不久,并不成熟、稳定,还有许多BUG存在,但它至少可以生成一个大致的文件框架,可以大大减轻工作量。
      Mondrian cubes 创建有多种办法,最原始的办法就是用手写。Mondrian现在有自己的Cube创建平台——workbench。下载地址:http://sourceforge.net/project/showfiles.php?group_id=35302。目前版本为workbench-2.3.2.9247。该平台有三个功能:生成Schema,执行MDX和JDBC Explore。经测试该平台对Mysql数据库可以成功使用,但对Oracle数据库报错如下:“10:56:50,062 INFO  [MondrianProperties] Mondrian: loaded 0 system properties
10:56:51,406 ERROR [JDBCMetaData] java.sql.SQLException: ORA-01424: 转义符之后字符缺失或非法”。

    一、下载workbench-2.3.2.9247.zip后解压缩,运行workbench.bat文件
file-->new-->schema出来的界面如下图:


    二、使用
   1.配置数据库
tools-->Preferences

在弹出的对话框处填写JDBC连接信息。
注意:要把相应的JDBC驱动包拷贝到workbench-版本号\lib目录下。
    2.制作***.mondrian.xml(立方体)


   另外一种方法,就是用Pentaho Cube Designer 去创建 Mondrian cubes。
下载CubeDesigner-0.7.2.0_Win32.zip,解压后运行CubeDesigner.exe。如下图:
第一步:创建new cube,定义数据源


    定义Cube Name——选择数据源——编辑JNDI Name——Driver——Connect String——Username/Password,然后Test连接是否成功。
第二步:定义数据模型和Table Mapping
选择数据库——选择Table/View——双击抽取目标数据——定义Mapping——选择要显示的字段。
    在这步数据模型建立的查询中,还可以定义where condition,group by,having,order by等。


第三步:选择事实表和定义度量


第四步:创建Dimensions及hierarchy,level


第五步:生成Schema及Publish或者保存

    在最后一步中,如果定义的Schema文件有错误,则看不到XML Source并且无法保存结果!要注意维度和度量的定义!



    至此,在保存的目录下就生成三个文件:***.mondrian.xml,***.properties,***.xaction。其中***.mondrian.xml就是我们所需要的Cubes。

     2、创建MDX查询
第一步,将上述生成的***.xml文件放在Tomcat_HOME\webapps\mondrian\WEB-INF\queries目录下。
第二步,编写MDX查询语句
使用JPivot的<jp:mondrianQuery>标签定义一个MDX查询语句,代码如下:
Java代码 
<jp:mondrianQuery  
id="query01" jdbcDriver="sun.jdbc.odbc.JdbcOdbcDriver" 
               jdbcUrl="jdbc:oracle:thin: @172.16.31.51:1521:orcl" 
               jdbcUser="stat" 
               jdbcPassword="stat" 
               catalogUri="/WEB-INF/queries/AAA_MONTH_CUBE.xml"> 
select {[Measures].[SUM of AAA_MONTH.USERCOUNT],[Measures].[SUM of AAA_MONTH.UPWARDDOC],[Measures].[SUM of AAA_MONTH.DOWNWARDDOC]} ON COLUMNS,{[DIM_TIME.TIME_ID].[DIM_TIME.YEAR].Members} ON ROWS from [AAA_MONTH_CUBE] 
</jp:mondrianQuery> 
<jp:mondrianQuery>标签及其属性,可参考JPivot文档。

     3、编写OLAP展现页面
在Demo的/WebRoot/pasmondrian.jsp利用JPivot及WCF一系列JSP标签展现Mondrian服务器返回的OLAP数据集。
具体代码参见DEMO相关文件;JPivot及WCF标签用法参考相关文档。
最后,在web.xml文件中加入映射:
Java代码 
<filter-mapping> 
    <filter-name>JPivotController</filter-name> 
    <url-pattern>/AAA_MONTH_CUBE_QUERY.jsp</url-pattern> 
</filter-mapping> 
 
    4、程序典型流程
1、用户发出 pasmodrian.jsp?query= pasmodrian的请求
2,pasmodrian.jsp上的<wcf:include>根据query参数,匹配/WEB-INF/query/下的pasmodrian.jsp来获取数据
3,pasmodrian.jsp上的<jp:mondrianQuery id="query01">查询数据,放入到query01变量中
4,pasmodrian.jsp上的<jp:table id="table01" query="#{query01}"/>根据query01的结果(领域数据)准备显示OLAP表格所需的数据(显示数据)
5,pasmodrian.jsp上的<wcf:render ref="table01" xslUri="/WEB-INF/jpivot/table/mdxtable.xsl"/>根据table01的结果,使用xsl,渲染出OLAP表格。
6,循环第4,5步,使用<jp:navigator>等tag准备navigator,chart的数据然后用<wcf>渲染出图表和导航系统.
整个流程,第2步的pasmodrian充当Controller调用第3步的Model层,然后第4,5步执行从领域数据(比如一些java bean)中转换出格式整齐的,需要显示的数据(比如一段xml),再用xsl将其渲染为最终的表现形式。
5、 优点
1、基于JSP Tag的展现层,不需要安装任何插件即可运行;
2、可以轻易集成到 web 项目中。

6、 缺点
1、没有完善的帮助文档、开发手册和错误指南,遇到问题不能迅速解决;
2、不支持SQL直接查询,需要编写MDX语句及Schema元模型定义文件,要求程序员对OLAP数据模型及数据仓库思想、理论的认识较高,学习成本高;需要相当高的熟练度才能达到快速开发的目的。
3、相关开发工具(如:报表生成器、可视化的多维报表开发工具等)缺乏,基本上处于代码级的开发。
    四、结论

    JPivot+Mondrian架构,由olap核心引擎响应来自JPivot表现层的MDX语法查询,返回多维查询结果,最终由JPivot展现多维数据。功能相当单一。JPivot和Mondrian项目均处在成长的阶段,在开发工具、文档及技术支持等方面做得还不够。
分享到:
评论

相关推荐

    mondrian运行源码配置方法

    2. **构建项目**:导入源码到IDE,如Eclipse或IntelliJ IDEA。确保IDE已经配置了Maven或Gradle插件,mondrian通常使用这些构建工具管理依赖。运行`mvn clean install`或`gradle build`命令来编译源码,这将生成必要...

    联机分析olap之mondrian

    二、Mondrian的工作原理 Mondrian的核心组件包括元数据模型、解析器、优化器和执行器。元数据模型定义了数据立方体的结构,解析器将MDX查询转化为内部表示,优化器根据数据立方体的结构和查询特点进行优化,最后...

    Mondrian+Oracle 实例

    2. **Oracle数据库集成** Oracle是一个广泛使用的高性能关系型数据库管理系统,适合处理大量复杂数据。将Mondrian与Oracle集成,可以利用Oracle的强大性能和稳定性来支持复杂的OLAP操作。 3. **配置Mondrian与...

    mondrian-api.zip

    2. **Cubes**: 立方体是数据仓库的核心,代表了可以进行分析的数据集合。开发者可以通过`Cube`类来创建和配置立方体,包括设置其维度和度量。 3. **Dimensions**: 尺度是立方体中的分类结构,如时间、地区等。`...

    Mondrian用于web项目

    二、Mondrian与Web项目的集成 1. 使用JDBC连接:Mondrian通过JDBC(Java Database Connectivity)与后端数据库交互,获取数据仓库的信息。开发人员需要配置Mondrian的JDBC连接字符串,以指向数据源。 2. 构建Cube:...

    Mondrian实例

    2. **创建MDX查询**:根据需求编写MDX语句,指定要查询的维度和度量。 3. **执行查询**:通过Mondrian的API调用查询,并获取结果集。 4. **处理结果**:解析返回的结果集,将其转化为易于理解的格式,如表格或图表。...

    mondrian xmla配置需要的jar

    2. **jaxrpc.jar**:这是一个Java API for XML-RPC(远程过程调用)的实现,它允许Java应用程序通过HTTP协议使用XML来调用远程方法。在mondrian与XMLA的上下文中,可能用于实现XMLA的Web服务端点,使得客户端能够...

    Mondrian介绍及配置.pdf

    #### 二、Mondrian配置流程 **1. 下载Mondrian** - **下载地址**:`http://sourceforge.net/projects/mondrian` - **推荐版本**:`mondrian-3.0.4.11371.zip` **2. 部署Mondrian** - **服务器环境**: - 操作...

    mondrian war项目maven编译

    2. **连接数据源**: mondrian需要连接到数据仓库,这通常通过JDBC实现。在应用中配置mondrian的JDBC连接池,确保mondrian能够访问所需的数据。 3. **创建多维模型**: mondrian使用XML格式的元数据文件定义多维模型...

    如何将Mondrian用于web项目.ppt

    Mondrian的核心功能是将二维的关系数据转化为多维的数据模型,便于进行复杂的分析和报表生成。 【Mondrian的体系结构】 Mondrian的体系结构包括四个层次: 1. **表现层 (the presentation layer)**:这一层决定了...

    mondrian-3.0-technical-guide_2.pdf

    根据提供的文件内容,以下是对“mondrian-3.0-technical-guide_2.pdf”文档的知识点的详细介绍: 1. Mondrian介绍与概述 文档开头介绍了Mondrian 3.0.4版本的技术手册,它涉及的是使用Mondrian和JasperAnalysis开发...

    mondrian源码分析与说明.pdf

    2. 静态类包分析 2.1. 包解释 mondrian的源码组织成多个包,每个包都有特定的功能。例如,`mondrian.schema`包含了Schema的定义和管理;`mondrian.calc`处理计算逻辑;`mondrian.olap`实现了MDX解析和函数库;`...

    mondrian的基本模式

    2. **模式文件**: - Mondrian 模式的定义存储在 XML 文件中,如 `FoodMart.xml`,其中包含了所有上述元素的定义。XML 文件的结构是固定的,遵循 mondrian 的模式规范。 - 目前,创建模式文件通常需要手动编辑 XML...

    mondrian 源码

    2. **计算引擎**:mondrian的计算引擎处理MDX查询的执行逻辑,包括对多维数据集的操作和计算。这部分代码涉及到数据的检索、聚合和过滤。 3. **缓存管理**:为了提高性能,mondrian使用缓存来存储先前计算的结果。...

    Mondrian 3.0 Technical Guide

    #### 二、Mondrian架构概述 **Mondrian架构** 包括几个关键层: - **逻辑层**:负责处理多维数据模型的设计与定义。 - **API层**:提供了用于访问和操作OLAP数据的接口。 - **物理层**:处理数据的实际存储和检索...

    mondrian报表技术概要

    接下来我们对第二个Cube进行更详细的解析: ```xml &lt;!--事实表(facttable)--&gt; ``` 这个Cube同样命名为“SALES”,但事实表换成了“SALE”。 ```xml 客户性别"foreignKey="CUSID"&gt; 所有性别"primaryKey="CUSID"&gt;...

    mondrian支持的函数以及schame元素属性

    二、mondrian schema元素属性 mondrian的schema文件是XML格式,它定义了数据仓库的结构和规则。以下是一些重要的schema元素属性: 1. Cube:定义了一个分析立方体,包含维度和度量。属性如`name`、`description`、...

    mondrian基本介绍

    2. 物理模型: - 物理模型描述了实际存储数据的结构,通常是一个关系型数据库的表集合,采用星型或雪花型模式。星型模式由一个事实表(如“sales_fact_1997”)和多个维度表(如“customer”和“time_by_day”)...

Global site tag (gtag.js) - Google Analytics