本文完全转载自:http://www.linuxidc.com/Linux/2014-09/107008.htm
我也是初学,为了方便以后查看,所以转到自己博客上了。
----------------------------------------------------------------------------------
一,Mondrian简介
Mondrian是一个开源项目,一个用Java写成的OLAP引擎。它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过Java API以多维的方式对结果进行展示。
Mondrian的使用方式同JDBC驱动类似。可以非常方便的与现有的Web项目集成。
Mondrian OLAP 系统由四个层组成,可分为从最终用户到数据中心, 顺序为:
1表现层(the presentation layer)
2维度层(the dimensional layer)
3集合层(the star layer)
4存储层(the storage layer)
表现层以多维"语法(grammar)(维、度量、单元)”的形式发出查询,然后OLAP服务器返回结果。
维度层用来解析、验证和执行MDX查询要求。为了提高效率,维度层把要求查询的单元成批发送到集合层,查询转换器接受操作现有查询的请求,而不是对每个请求都建立一个MDX 声明。
集合层负责维护和创建集合缓存,一个集合是在内存中缓存一组单元值,这些单元值由一组维的值来确定。
存储层是一个关系型数据库(RDBMS)。它负责创建集合的单元数据,和提供维表的成员。
维度层对这些单元发出查询请求,如果所查询的单元值不在缓存中,则集合管理器(aggregation manager)会向存储层发出查询请求。
Mondrian应用在java web项目中的目录结构:
webContent目录下的jpivot、wcf这两个文件夹包含mondrian展示查询结果图表时需要使用的图像和css文件。
Busy.jsp显示服务器忙碌等待页面、error.jsp显示出错页面、testpage.jsp文件调用了jpivot标签库来处理MDX查询请求,并将最终结果以html的格式返回给用户。
可以到http://sourceforge.net/projects/mondrian/下载Mondrian的项目包文件。
Java 9 的新特性发布 http://www.linuxidc.com/Linux/2014-08/105707.htm
Java编程思想(第4版) 中文清晰PDF完整版 http://www.linuxidc.com/Linux/2014-08/105403.htm
编写高质量代码 改善Java程序的151个建议 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm
Java 8简明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm
Java对象初始化顺序的简单验证 http://www.linuxidc.com/Linux/2014-02/96220.htm
Java对象值传递和对象传递的总结 http://www.linuxidc.com/Linux/2012-12/76692.htm
二,java Web项目中引入mondrian的几个步骤
(1)在java web项目中引入相应的包。
下载mondrian项目包后解压,其中的lib目录下有一个可直接部署的实例mondrian.war。我们需要将war包解压,然后从中取出我们所需要的文件:jpivot、wcf二个文件夹及busy.jsp、error.jsp、testpage.jsp三个文件,放到web项目的webContent目录下。
jpivot、wcf这两个文件夹包含mondrian展示查询结果图表时需要使用的图像和css文件。
jpivot其实是一个自定义jsp的标签库,它基于XML/XSLT配置来生成相应的html。
(2)添加配置文件。
在上述war包的解压目录下的WEB-INF目录下选中jpivot、lib、wcf这三个文件夹,复制到web项目到WEB_INF目录下。Jpivot、wcf这两个文件夹包含jpivot和wcf用于生成用户界面的配置文件(*.xml、*.xsl)及标签文件(*.tld)的定义。lib文件夹包含的是mondrian所要用的jar包。
(3)配置web.xml文件,使web项目能使用mondrian的功能。
可以直接从mondrian.war包中解压得到的项目文件中的WEB_INF路径下复制web.xml文件到我们到项目中,在此基础上进行修改,主要是修改数据库连接字符串connectString的值,并添加项目需要的自定义的Servlet。
(4)在java web 项目的WEB_INF路径下新建queries文件夹,在其中建立模式(schema)文件(一个自定义的xml文件)。
一个模式定义了一个多维数据库。模式文件中包含模式名称Schema、数据立方名称Cube、数据立方对应的事实表名称Table、数据立方中的维度Dimension、维度中包含的数据层次Hierarchy、层次中维度对应的数据库维表名称Table和层次结构中包含的级别Level。
另外就是模式中包含的统计度量因素Measure(需要度量的指标及其计算方法)
Mondrian实现多维数据分析时,需要一个多维数据的逻辑模型(logical Schema model)、一组数据立方(consisting of Cube)、数据维度(Dimension) 、层次(Hierarchy)、和层级成员(Level members), 并映射到物理模型(关系数据库)上。
简单的说,配置一个模式就是配置一个关系数据结构到多维数据结构的映射。
在模式文件定义完成之后,我们就可以根据它来编写相应MDX查询语句了。
模式文件的实例:
nameColumn="proTypeName" uniqueMembers="true" table="producttype" /> uniqueMembers="true" table="product" /> (5)在模式文件Schema基础上编辑用于查询操作的jsp文件,使用MDX语法规则。 在queries目录下新建.jsp文件,jsp文件中使用MDX语法编辑mondrian Query,对数据立方Cube进行查询,从不同的维度上进行select查询取值。 jsp文件中的查询部分如下,包含在标签 catalogUri="/WEB-INF/queries/tezz.xml" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost:3306/zett?user=root&password=root"> select {[Measures].[数量],[Measures].[平均单价],[Measures].[总销售额]} ON columns, {([产品类别].[所有产品],[客户性别].[所有性别])} ON rows from [Sales] (6)部署项目,执行查询。 在tomcat中部署java web项目后,在浏览器中输入: …./projectname/testpage.jsp?query=xxx,浏览查询结果。其中xxx就是queries中的jsp查询文件。testpage.jsp调用xxx页面中的查询,并将返回的结果组织到对应的表格中,进行展示。 效果图如下,表格比较朴素: (4)在java web 项目的WEB_INF路径下新建queries文件夹,在其中建立模式(schema)文件(一个自定义的xml文件)。 一个模式定义了一个多维数据库。模式文件中包含模式名称Schema、数据立方名称Cube、数据立方对应的事实表名称Table、数据立方中的维度Dimension、维度中包含的数据层次Hierarchy、层次中维度对应的数据库维表名称Table和层次结构中包含的级别Level。 另外就是模式中包含的统计度量因素Measure(需要度量的指标及其计算方法) Mondrian实现多维数据分析时,需要一个多维数据的逻辑模型(logical Schema model)、一组数据立方(consisting of Cube)、数据维度(Dimension) 、层次(Hierarchy)、和层级成员(Level members), 并映射到物理模型(关系数据库)上。 简单的说,配置一个模式就是配置一个关系数据结构到多维数据结构的映射。 在模式文件定义完成之后,我们就可以根据它来编写相应MDX查询语句了。 模式文件的实例:
nameColumn="proTypeName" uniqueMembers="true" table="producttype" /> uniqueMembers="true" table="product" /> (5)在模式文件Schema基础上编辑用于查询操作的jsp文件,使用MDX语法规则。 在queries目录下新建.jsp文件,jsp文件中使用MDX语法编辑mondrian Query,对数据立方Cube进行查询,从不同的维度上进行select查询取值。 jsp文件中的查询部分如下,包含在标签 catalogUri="/WEB-INF/queries/tezz.xml" jdbcDriver="com.mysql.jdbc.Driver" jdbcUrl="jdbc:mysql://localhost:3306/zett?user=root&password=root"> select {[Measures].[数量],[Measures].[平均单价],[Measures].[总销售额]} ON columns, {([产品类别].[所有产品],[客户性别].[所有性别])} ON rows from [Sales] (6)部署项目,执行查询。 在tomcat中部署java web项目后,在浏览器中输入: …./projectname/testpage.jsp?query=xxx,浏览查询结果。其中xxx就是queries中的jsp查询文件。testpage.jsp调用xxx页面中的查询,并将返回的结果组织到对应的表格中,进行展示。 效果图如下,表格比较朴素: