如何将Mondrianjpivot用于web项目.ppt

上传人:tian****1990 文档编号:3257682 上传时间:2019-12-10 格式:PPT 页数:56 大小:1.11MB
返回 下载 相关 举报
如何将Mondrianjpivot用于web项目.ppt_第1页
第1页 / 共56页
如何将Mondrianjpivot用于web项目.ppt_第2页
第2页 / 共56页
如何将Mondrianjpivot用于web项目.ppt_第3页
第3页 / 共56页
点击查看更多>>
资源描述
1.Mondrian是什么?,Mondrian是一个开源项目。一个用Java写成的OLAP引擎。它用MDX语言实现查询,从关系数据库(RDBMS)中读取数据。然后经过JavaAPI以多维的方式对结果进行展示。Mondrian的使用方式同JDBC驱动类似。可以非常方便的与现有的Web项目集成,1.1Mondrian的体系结构(Architecture),MondrianOLAP系统由四个层组成;从最终用户到数据中心,顺序为:1.1.1表现层(thepresentationlayer)1.1.2维度层(thedimensionallayer)1.1.3集合层(thestarlayer)1.1.4存储层(thestoragelayer)结构图如下:,模式管理器,Mondrian的模式文件,它定义了关系数据到多维数据的映射。需要我们生成,表现层,多维层,集合层,存储层,1.1.1表现层(thepresentationlayer),表现层决定了最终用户将在他们的显示器上看到什么,及他们如何同系统产生交互。有许多方法可以用来向用户显示多维数据集,有pivot表(一种交互式的表),pie,line和图表(barcharts)。它们可以用Swing或JSP来实现。表现层以多维文法(grammar)(维、度量、单元)”的形式发出查询,然后OLAP服务器返回结果。,下面我们将对mondrian在javaweb端使用的jpivot表现层进行简单介绍,1.1.1.1Jpivot表现层,JPivot是Mondrian的表现层TagLib,一直保持着良好的开发进度。您可以通过访问jpivot的官方网站,jpivot使用XML/XSLT渲染OLAP报表:,JPivot使用WCF(WebComponentFramework),基于XML/XSLT来渲染WebUI组件。这使它显得十分另类。不过,OLAP报表这种非常复杂但又有规律可循的东西,最适合使用XSLT来渲染。,jpivot完全基于JSP+TagLib:,JPivot另外一个可能使人不惯的地方是它完全基于taglib而不是大家熟悉的MVC模式。但它可以很方便的将多维数据展示给最终用户,如下表格:,jpivot其实是一个自定义jsp的标签库。它基于XML/XSLT配置来生成相应的html。所幸的是,我们并不需要了解太多关于这方面的内容,我们只要掌握相应jsp标签的使用即可。在本教程的实例中,我们将会对一些常用到的jpivot标签进行讲解。您还可以通过汉化WEB-INF/jpivot下的xml文件来完成对jpivot的汉化工作,1.1.2维度层(thedimensionallayer),维度层用来解析、验证和执行MDX查询要求。一个MDX查询要通过几个阶段来完成:首先是计算坐标轴(axes),再者计算坐标轴axes中cell的值。为了提高效率,维度层把要求查询的单元成批发送到集合层,查询转换器接受操作现有查询的请求,而不是对每个请求都建立一个MDX声明。,集合层负责维护和创建集合缓存,一个集合是在内存中缓存一组单元值,这些单元值由一组维的值来确定。维度层对这些单元发出查询请求,如果所查询的单元值不在缓存中,则集合管理器(aggregationmanager)会向存储层发出查询请求,1.1.3集合层(thestarlayer),1.1.4存储层(thestoragelayer),存储层是一个关系型数据库(RDBMS)。它负责创建集合的单元数据,和提供维表的成员。,1.2API,Mondrian为客户端提供一个用于查询的API因为到目前为止,并没有一个通用的用于OLAP查询的API,因此Mondrian提供了它私有的API.尽管如此,一个常使用JDBC的人将同样发现它很熟悉.不同之处仅在于它使用的是MDX查询语言,而非SQL,下面的java片段展示了如何连接到Mondrian,然后执行一个查询,最后打印结果.importmondrian.olap.*;importjava.io.PrintWriter;Connectionconnection=DriverManager.getConnection(Provider=mondrian;+Jdbc=jdbc:odbc:MondrianFoodMart;+Catalog=/WEB-INF/FoodMart.xml;,null,false);Queryquery=connection.parseQuery(SELECTMeasures.UnitSales,Measures.StoreSalesoncolumns,+Product.childrenonrows+FROMSales+WHERE(Time.1997.Q1,Store.CA.SanFrancisco);Resultresult=connection.execute(query);result.print(newPrintWriter(System.out);,与JDBC类似,一个Connection由DriverManager创建,Query对象类似于JDBC的Statement,它通过传递一个MDX语句来创建.Result对象类似于JDBC的ResultSet,只不过它里面保存的是多维数据您可以通过查看Mondrian帮助文档里的javadoc来获取更多关于MondrianAPI的资料,通过上面的介绍,您应该对mondrian的体系有一个基本的了解。下面我们将通过一个简单的例子来加深您的理解。,2.一个简单的Mondrian例子,现在让我们用一个简单的例子来说明将Mondrian支持添加到您javaweb的具体步骤。,2.1准备开发工具及环境,本测试需要的环境:操作系统:Windows2000;Web服务器:tomcat6.0;关系数据库:sqlserver2000;开发工具:eclipse+myeclipse;JDBC驱动:jtds-1.2.2;您可以在http:/tomcat.apache.org/上下载到tomcat的最新版本及帮助;您可以在,2.2准备Mondrian资源:,从,点击此处下载,2.3创建项目,启动eclipse。在eclipse中新创建一个web项目,名为Tezz。注意需要加入JSTL支持。具体步骤如下:,点击此处新打开建web项目对话框,2.3.1打开新建web项目对话框,1.输入项目名称Tezz,2.在这里打勾以加入JSTL支持,3.选择JSTL1.1,4.单击此处完成创建,一个新项目Tezz的文件结构如下:,项目名称,Web根目录,2.4添加必须的文件,将下载的压缩包进行解压。完成后,进入文件夹可以看到如下目录结构。双击进入lib文件夹。,进入此文件夹,Lib文件夹有如下内容:注意到这里的mondrian.war文件是一个可直接布署的项目,我们需要将它解压,然后从中取出我们所需要的文件。(建议将其扩展名改成zip,然后直接右键解压),我们需要的文件在这个项目文件中,进入解压后的文件夹,选中jpivot、wcf二个文件夹及busy.jsp、error.jsp、testpage.jsp三个文件,我们需要将这些资源复制到我们测试项目的WebRoot文件夹中。按ctrl+C键复制。,注:jpivot、wcf这两个文件夹包含mondrian使用的图像和css文件。Busy.jsp显示等待页面、error.jsp显示出错页面、testpage.jsp这文件的用处将在后面介绍。,切换到eclipse界面,在我们的Tezz项目的WebRoot文件夹处右击鼠标,在弹出的菜单中选择Paste(粘贴)即可,粘贴完成后的项目结构如下,注意:因为我们还未将所有资料复制到项目中,因此eclipse会显示错误图标,包含jpivot所用到的图像及css样式,包含wcf所用到的图像及css样式,调用jpivot标签来处理MDX查询请求,并将最终结果以html的格式返回给用户,最后进入WEB-INF文件夹(在上面步骤中解压的项目文件mondrian.war里),选中jpivot、lib、wcf这三个文件夹,同样需要复制它们到测试项目的WEB-INF文件夹中。,Jpivot、wcf这两个文件夹包含jpivot和wcf用于生成用户界面的配置文件(*.xml、*.xsl)及标签文件(*.tld)的定义。Lib文件夹包含的是mondrian所要用的java包。,切换到eclipse界面,在我们的Tezz项目的WebRoot文件夹处右击鼠标,在弹出的菜单中选择Paste(粘贴),至此Mondrian的支持添加完毕,下面我们将配置web.xml,让我们的项目能够使用到mondrian的功能。,包含jpivot和wcf用于生成用户界面的配置文件(*.xml)及标签文件(*.tld)的定义,2.5配置web.xml,用eclipse打开我们在上面解压的布署项目的WEB-INF/web.xml文件,我们需要从该web.xml文件中抽取出所需要的配置。,过滤器(filter)复制右图中所示的xml代码到我们测试项目Tezz的web.xml文件中。作用:这个过滤器在访问/testpage.jsp前被调用。它被设计成jpivot的前端控制器,用于判断并将用户的请求发送到某个页面。注:在实际项目中可以使用您自己定义的servlet或使用其他技术来替代它以提供更多的功能,JPivotControllercom.tonbeller.wcf.controller.RequestFilterindexJSP/index.html如果这是一个新的会话,则转到此页面errorJSP/error.jsp出错时显示的页面busyJSP/busy.jsp这个页面用于当用户点击一个查询时,在这个查询还未将结果还回给用户时所显示的界面JPivotController/testpage.jsp,复制下面的listener到我们的web.xml文件中(用于初始化一些资源),Printservlet,该servlet用于将数据生成Excel文件或pdf文件并返回给用户,如果您需要用到该功能,则需要将其copy到您项目的web.xml文件中,mondrian.web.taglib.Listenercom.tonbeller.tbutils.res.ResourcesFactoryContextListener,PrintPrintD.tonbeller.jpivot.print.PrintServletPrint/Print,MDXQueryServletmondrian.web.servlet.MDXQueryServletconnectStringmondrian.webapp.connectStringMDXQueryServlet/mdxquery,MDXQueryServlet用于接受并执行一个MDX查询,然后将该查询以Html表格的形式返回。其中的参数connectString用于指定连接到数据库的字符串,例如使用jtds驱动连接到sqlserver2000的字符串如下:Provider=mondrian;Jdbc=jdbc:jtds:sqlserver:/localhost/Tezz;user=sa;password=123456;Catalog=/WEB-INF/queries/tezz.xml;JdbcDrivers=net.sourceforge.jtds.jdbc.Driver;如果您需要用到该功能,则需要将其copy到您项目的web.xml文件中。,DisplayChart和GetChart这两个Servlet用于生成图表和将其显示给最终用户,如果您需要用到该功能,则需要将其copy到您项目的web.xml文件中。,DisplayChartorg.jfree.chart.servlet.DisplayChartGetChartGetChartD.tonbeller.jpivot.chart.GetChartDisplayChart/DisplayChartGetChart/GetChart,它们用于向用户生成和显示如下所示的各种图表:,最后添加以下标签库到我们的web.xml项目中即可,到这里,您应该对mondrian在web.xml的配置有一定的了解,并可按需要添加相应的功能。接下来我们将要创建本例子所要用到的表格及数据。,2.6准备测试用表,本例使用的表结构如下所示:,Sale是事实表,它有两个维:客户(customer)维和由两个表组成的产品(Product)维。表格的创建很简单,您只需要将下面的sql语句导入数据库即可,2.6.1使用以下sql语句创建表,/*销售表*/createtableSale(saleIdintnotnull,proIdintnull,cusIdintnull,unitPricefloatnull,-单价numberintnull,-数量constraintPK_SALEprimarykey(saleId)/*用户表*/createtableCustomer(cusIdintnotnull,genderchar(1)null,-性别constraintPK_CUSTOMERprimarykey(cusId)/*产品表*/createtableProduct(proIdintnotnull,proTypeIdintnull,proNamevarchar(32)null,constraintPK_PRODUCTprimarykey(proId)/*产品类别表*/createtableProductType(proTypeIdintnotnull,proTypeNamevarchar(32)null,constraintPK_PRODUCTTYPEprimarykey(proTypeId),2.6.2使用以下sql语句导入数据,insertintoCustomer(cusId,gender)values(1,F)insertintoCustomer(cusId,gender)values(2,M)insertintoCustomer(cusId,gender)values(3,M)insertintoCustomer(cusId,gender)values(4,F)insertintoproducttype(proTypeId,proTypeName)values(1,电器)insertintoproducttype(proTypeId,proTypeName)values(2,数码)insertintoproducttype(proTypeId,proTypeName)values(3,家具)insertintoproduct(proId,proTypeId,proName)values(1,1,洗衣机)insertintoproduct(proId,proTypeId,proName)values(2,1,电视机)insertintoproduct(proId,proTypeId,proName)values(3,2,mp3)insertintoproduct(proId,proTypeId,proName)values(4,2,mp4)insertintoproduct(proId,proTypeId,proName)values(5,2,数码相机)insertintoproduct(proId,proTypeId,proName)values(6,3,椅子)insertintoproduct(proId,proTypeId,proName)values(7,3,桌子)insertintosale(saleId,proId,cusId,unitPrice,number)values(1,1,1,340.34,2)insertintosale(saleId,proId,cusId,unitPrice,number)values(2,1,2,140.34,1)insertintosale(saleId,proId,cusId,unitPrice,number)values(3,2,3,240.34,3)insertintosale(saleId,proId,cusId,unitPrice,number)values(4,3,4,540.34,4)insertintosale(saleId,proId,cusId,unitPrice,number)values(5,4,1,80.34,5)insertintosale(saleId,proId,cusId,unitPrice,number)values(6,5,2,90.34,26)insertintosale(saleId,proId,cusId,unitPrice,number)values(7,6,3,140.34,7)insertintosale(saleId,proId,cusId,unitPrice,number)values(8,7,4,640.34,28)insertintosale(saleId,proId,cusId,unitPrice,number)values(9,6,1,140.34,29)insertintosale(saleId,proId,cusId,unitPrice,number)values(10,7,2,740.34,29)insertintosale(saleId,proId,cusId,unitPrice,number)values(11,5,3,30.34,28)insertintosale(saleId,proId,cusId,unitPrice,number)values(12,4,4,1240.34,72)insertintosale(saleId,proId,cusId,unitPrice,number)values(13,3,1,314.34,27)insertintosale(saleId,proId,cusId,unitPrice,number)values(14,3,2,45.34,27),2.7建立模式(schema)文件,一个模式定义了一个多维数据库.它包含一个逻辑模型(logicalmodel)、一组数据立方(consistingofcubes)、层次(hierarchies)、和成员(members),并映射到物理模型(关系数据库)上。简单的说,配置一个模式就是配置一个关系数据结构到多维数据结构的映射。,注:关于mondrian的模式及模式的配置,您可以通过阅读mondrian的基本模式.pptx来了解。这里我们只对其进行了简单介绍。,2.7.1创建模式文件:模式文件的创建很简单。首先在WEB-INF下新建一个queries的文件夹,然后在该文件夹下创建一个名为tezz.xml的文件。再按下面的步骤将xml元素添加入即可。,将模式文件tezz.xml创建在这里,2.7.2配置模式文件:,2.7.2.1添加数据立方Sales:往tezz.xml中添加如下代码:,该模式的名称,数据立方的名称,数据立方Sales在关系数据库中对应的事实表的表名称,2.7.2.2添加数据立方Sales的维:添加客户维:,复制到,该维的名称,事实表sale中用于引用维表Customer的外键列,表示该维的所有成员,维表Customer的主键,维表Customer在关系数据库中的名称,级别的名称,级别gender在维表Customer中的列名称,添加产品维(因为产品维由两个表连接而成,因此比客户维复杂些):,将上面的代码复制在客户维的下面即可,因为Product维有两个表,所以您必须在这里指定该维的主表,Join元素,用于将两个以上的表连接起来,需要指定包含该级别的表,添加度量(共有三个度量:数量、平均单价和总销售额):,(unitPrice*number)Measures.总销售额/Measures.数量,该度量在事实表中的列,度量的名称,该度量的聚合方式,该度量的数据类型,总销售额”这个度量并没有引用事实表中的列,而是使用sql片断unitPrice*number来生成一个列,用于定义一个计算成员,表示该计算成员是一个度量,该计算成员的生成规则,将这些xml元素添加在维元素下面即可,(unitPrice*number)Measures.总销售额/Measures.数量,最后生成的tezz.xml文件内容如下:,2.8编写MDX查询语句,在模式文件定义完成之后,我们就可以根据它来编写相应MDX查询语句了。本例所用的MDX语句如下:,selectMeasures.数量,Measures.平均单价,Measures.总销售额oncolumns,(产品类别.所有产品,客户性别.所有性别)onrowsfromSales,数据请求子句,与sql中的select类似。它决定MDX语句的轴维度,指定从多维数据源sales中获取数据(即上面定义的数据立方sales),定义第一个轴维度(别名columns),第二个轴维度(别名rows),您应该可以很清楚的看出,columns轴维度包含的是度量。Rows轴维度包含的是维度中的层次的所有成员(allMemberName),2.9创建查询文件,现在我们将创建一个jsp文件,该jsp使用jpivot的mondrianQuery标签来完成查询。该文件最后将被testpage.jsp使用。在/WEB-INF/queries文件夹下面创建一名为tezz的jsp文件。该jsp包含如下内容:,selectMeasures.数量,Measures.平均单价,Measures.总销售额ONcolumns,(产品类别.所有产品,客户性别.所有性别)ONrowsfromSalesSales,导入jpivot标签,用于执行MDX查询的jpivot标签,指定查询所使用的模式文件(即我们在2.7中建立的tezz.xml),查询所使用的JDBC驱动,用于连接到数据的url,包含数据库的用户名及密码等,需要被执行的MDX语句,2.10布署项目,至此我们已经全部配置完成,文件结构如下:,蓝色部分为我们添加或创建的部分,布署项目,启动Tomcat,在浏览器上输入http:/localhost:8080/Tezz/testpage.jsp?query=tezz即可看到如下结果:,注:testpage.jsp?query=tezz,这里的tezz即刚我们创建的用于查询jsp文件名称,生成图表,及图表的配置,打印及生成pdf或Excel文件,3.testpage.jsp的流程,testpage.jsp文件用于发出查询及将结果转换成html格式。它使用一组jsp标签来完成这些复杂的工作。在本教程的最后一章里,我们对testpage.jsp的流程及用到的主要标签进行简单介绍。,3.1wcf:include标签:,根据query参数(query=tezz),匹配/WEB-INF/queries/下的tezz.jsp来获取数据,tezz.jsp文件中的jp:mondrianQueryid=“query01”标签,执行MDX查询,将结果放到query01参数中,如果query01为null,则转到/index.jsp页面,注:可以将tezz.jsp看成是model层,因为它为testpage.jsp提供数据,3.2jp:table标签:,jp:table根据query01中保存的结果(领域数据)准备显示OLAP表格所需的数据(显示数据),根据table01的结果,使用mdxtable.xsl中的配置,渲染出OLAP表格。,3.3其他jp、wcf标签同样,其他jp标签,如等标签准备待渲染的数据,再由相应的标签将它们渲染成html格式。这样,用户将在浏览器上看到最终的结果。至此,一个完整的mondrian查询结束。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!