`
zhangjj616
  • 浏览: 15506 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JPivot+Mondrian笔记

    博客分类:
  • OLAP
阅读更多
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查询语句,代码如下:
<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文件中加入映射:
<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项目均处在成长的阶段,在开发工具、文档及技术支持等方面做得还不够。[/img]
分享到:
评论

相关推荐

    JPivot+Mondrian资料收集汇总(1)

    JPivot设计模式和基本操作流程.HTML 网上收集汇总。

    JPivot+Mondrian资料收集汇总(2)

    1、JPivot标签使用详解 2、JPivot框架详解 3、jpivot学习总结

    mondrian xmla配置需要的jar

    jpivot + mondrian + xmla配置需要的jar, 包括 commons-discovery-0.2.jar jaxrpc.jar axis.jar wsdl4j-1.5.1.jar

    jpivot+wcf

    1.jpivot-1.8.0.zip:内有jpivot.war,mondrian-src.zip, 2.wcf-1.7.0.zip,与jpivot-1.8匹配的wcf库,内有wcf.war,wcf-src.zip 可以发布war应用程序,并结合src源代码,研究下mondrian+jpivot实现框架

    如何将Mondrian+jpivot用于web项目

    如何将Mondrian+jpivot用于web项目

    jpivot-1.8.0

    它使用Mondrian 作为其OLAP服务器。它使用WCF (Web Component Framework) ,基于XML/XSLT来渲染Web UI组件。JPivot在元数据缓存方面的过于简化的整体性初始化装载的做法将限制它只能处理很小的立方体(Cube)

    mondrian配置例子

    mondrian配置例子,附件是openi源码例子,集成了mondrian+Jpivot。

    JPivot标签使用详解 中文

    JPivot标签使用详解 中文.ppt 入门必读

    jpivot1.8帮助文档

    jpivot1.8帮助文档,为方便大家携带特转换为chm格式的

    jpivot教程

    很不错的jpivot教程,值得大家下载,技术共进步

    jpivot-1.8.jar

    jpivot-1.8.jar

    Mondrian实例

    这个Java实例将利用Mondrian提供的OLAP引擎对已建立好的数据立方体XML进行MDX查询。不是网上到处都有的jPivot,而是一个更基础更轻量的例子。

    olap,jpivot-1.8.0.zip

    olap,jpivot-1.8.0.zip ,很好的东西。

    mondrian ROLAP MDX 经典资料

    mondrian ROLAP MDX 经典资料打包。 MDX的基本语法及概念.ppt ROLAP的概念.ppt 如何将Mondrian用于web项目.ppt MDX的基本语法及概念.ppt doc_cn jpivot

    mondrian动态报表工具

    用于和jpivot结合做动态报表的工具,有研究这个的可以+QQ大家一起讨论215759710

    mondrian schema 的eclipse插件

    mondrian schema 的eclipse插件 还需要安装 EMF&SDO (Eclipse官方的一个建模插件) 具体参考:http://jpivot.sourceforge.net/mondrian-schema/

    jpivot汇总.doc

    jpivot汇总.doc

    Pentaho mondrian的几种多维展示方案

    本文介绍其它几种支持Pentaho/mondrian的多维展示方案,供大家作项目时参考

    jpivot学习总结.doc

    JPivot 是一套基于 Mondrian 的 OLAP 前端展现工具,它提供了一套标签库来解决的 OLAP 的展现层问题。 在一个 JSP 页面当中,如果要使用 JPivot 标签库,除了要配置相关的配置文件外,我们需要在 JSP 头的位置声明...

Global site tag (gtag.js) - Google Analytics