`

教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

阅读更多

一个简单的Mondrian例子(部分参考某个大牛的文档~~)希望大家学到东西~Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

可以详细参考豆丁网上的一个文档:http://www.docin.com/p-88928995.html 也可以跟我一起做~

3.1 创建新的web项目

3.1.1 打开myEclipse,新建一个网站我的是这样的:

注意名字要按照我给的,取名为Tezz

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

建好之后是这样的:


Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询
3.1.2 打开你刚刚解压的文件,进入解压后的文件夹目录mondrian-3.2.1.13885/lib, 把一个名字为mondrian.war的文件解压到当前的文件夹。

 

我进入后是这样:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

我直接把.war改为.zip然后解压

3.2 添加文件

第一步

进入解压后的文件夹,选中jpivot、wcf二个文件夹及busy.jsp、error.jsp、testpage.jsp三个文件,我们需要将这些资源复制到我们测试项目的WebRoot文件夹中。

我的是这样的:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

把jpivot和wcf这两个文件夹添加到WebRoot下,把剩下三个文件添加到Web-INF里面,我添加完成之后是这样的:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

第二步

进入mondrian(之前为.war,后来改名为.zip解压后的文件夹) WEB-INF文件夹(在上面步骤中解压的项目文件mondrian.war里),选中jpivot、lib、wcf这三个文件夹,同样需要复制它们到测试项目的WEB-INF文件夹中。

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

Jpivot和wcf两个文件夹包含了用于生成用户界面的配置文件

复制进去的时候会问你:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

果断yes!

扫面之后就不会出现错误了,之前出现错误是因为我们没有添加实例进去。

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

3.3 配置web.xml

第一步:在MyEclipese 上打开我们新建项目的文件:web.xml

 

第二步:添加配置文件,直接把我给出的下列代码复制到你的web.xml文件中,注意是覆盖!在下面的代码也会相应对.xml中的一些东西做一些介绍~Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

1过滤器(filter)

复制下边所示的xml代码到我们测试项目Tezz的web.xml文件中。当然你也可以直接把解压包里面WEB-INF中的web.xml直接拖到你的项目中,可以对比以下两者的不同,其实就是<description>标签显示的内容不一样,可以自己看看。

<filter>

    <filter-name>JPivotController</filter-name>

    <filter-class>com.tonbeller.wcf.controller.RequestFilter</filter-class>

    <init-param>

      <param-name>indexJSP</param-name>

      <param-value>/index.html</param-value>

      <description>如果这是一个新的会话,则转到此页面</description>

    </init-param>

    <init-param>

      <param-name>errorJSP</param-name>

      <param-value>/error.jsp</param-value>

      <description>出错时显示的页面</description>

    </init-param>

    <init-param>

      <param-name>busyJSP</param-name>

      <param-value>/busy.jsp</param-value>

      <description>这个页面用于当用户点击一个查询时,在这个查询还未将结果还回给用户时所显示的界面</description>

    </init-param>

</filter>

 

  <filter-mapping>

    <filter-name>JPivotController</filter-name>

    <url-pattern>/testpage.jsp</url-pattern>

  </filter-mapping>

2 初始化资源的linstener

复制下面的listener到我们的web.xml文件中(用于初始化一些资源)

<listener>

    <listener-class>mondrian.web.taglib.Listener</listener-class>

  </listener>

 

  <!– 资源初始化-->

  <listener>

    <listener-class>com.tonbeller.tbutils.res.ResourcesFactoryContextListener</listener-class>

  </listener>

 

3 Print  servlet

该servlet用于将数据生成Excel文件或pdf文件并返回给用户,如果您需要用到该功能,则需要将其copy到您项目的web.xml文件中

<servlet>

    <servlet-name>Print</servlet-name>

    <display-name>Print</display-name>

    <description>Default configuration created for servlet.</description>

    <servlet-class>com.tonbeller.jpivot.print.PrintServlet</servlet-class>

  </servlet>

 <servlet-mapping>

    <servlet-name>Print</servlet-name>

    <url-pattern>/Print</url-pattern>

  </servlet-mapping>

4 MDXQueryServlet

MDXQueryServlet用于接受并执行一个MDX查询,然后将该查询以Html表格的形式返回。其中的参数connectString用于指定连接到数据库的字符串,例如使用jtds驱动连接到sql server 2000的字符串如下:

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文件中。

<servlet>

    <servlet-name>MDXQueryServlet</servlet-name>

    <servlet-class>mondrian.web.servlet.MDXQueryServlet</servlet-class>

    <init-param>

      <param-name>connectString</param-name>

      <param-value>@mondrian.webapp.connectString@</param-value>

    </init-param>

  </servlet>

 <servlet-mapping>

    <servlet-name>MDXQueryServlet</servlet-name>

    <url-pattern>/mdxquery</url-pattern>

  </servlet-mapping>

5 DisplayChart 和GetChart 这两个Servlet

DisplayChart 和GetChart 这两个Servlet 用于生成图表和将其显示给最终用户,如果您需要用到该功能,则需要将其copy到您项目的web.xml文件中。

<!-- jfreechart provided servlet -->

  <servlet>

    <servlet-name>DisplayChart</servlet-name>

    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>

  </servlet>

  <!-- jfreechart provided servlet -->

  <servlet>

    <servlet-name>GetChart</servlet-name>

    <display-name>GetChart</display-name>

    <description>Default configuration created for servlet.</description>

    <servlet-class>com.tonbeller.jpivot.chart.GetChart</servlet-class>

  </servlet>

<servlet-mapping>

    <servlet-name>DisplayChart</servlet-name>

    <url-pattern>/DisplayChart</url-pattern>

  </servlet-mapping>

<servlet-mapping>

    <servlet-name>GetChart</servlet-name>

    <url-pattern>/GetChart</url-pattern>

  </servlet-mapping>

 

•       它们用于向用户生成和显示如下所示的各种图表:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

6 添加标签库

•       最后添加以下标签库到我们的web.xml项目中即可

<taglib>

    <taglib-uri>http://www.tonbeller.com/wcf</taglib-uri>

    <taglib-location>/WEB-INF/wcf/wcf-tags.tld</taglib-location>

  </taglib>

 

  <taglib>

    <taglib-uri>http://www.tonbeller.com/jpivot</taglib-uri>

    <taglib-location>/WEB-INF/jpivot/jpivot-tags.tld</taglib-location>

  </taglib>

 

到这里,我们对mondrian在web.xml的配置有一定的了解,并可按需要添加相应的功能。接下来我们将要创建本例子所要用到的表格及数据。

 

3.4 准备测试用表

 

本例使用的表结构如下所示:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

Sale是事实表,它有两个维:客户(customer)维和由两个表组成的产品(Product)维。

表格的创建很简单,您只需要将下面的sql语句导入数据库即可

1 使用以下sql语句创建表


create table Sale (
         saleId int not null,
         proId int null,
         cusId int null,
         unitPrice float null,  --单价
         number int null,        --数量
         constraint PK_SALE primary key (saleId)
)

        
create table Customer (
         cusId int not null,
         gender char(1) null,         --性别
         constraint PK_CUSTOMER primary key (cusId)
)

create table Product (
         proId int not null,
         proTypeId int null,
         proName varchar(32) null,
         constraint PK_PRODUCT primary key (proId)
)

create table ProductType (
         proTypeId int not null,
         proTypeName varchar(32) null,
         constraint PK_PRODUCTTYPE primary key (proTypeId)
)

2 使用以下sql语句导入数据

insert into Customer(cusId,gender) values(1,'F')
insert into Customer(cusId,gender) values(2,'M')
insert into Customer(cusId,gender) values(3,'M')
insert into Customer(cusId,gender) values(4,'F')

insert into producttype(proTypeId,proTypeName) values(1,'电器')
insert into producttype(proTypeId,proTypeName) values(2,'数码')
insert into producttype(proTypeId,proTypeName) values(3,'家具')

insert into product(proId,proTypeId,proName) values(1,1,'洗衣机')
insert into product(proId,proTypeId,proName) values(2,1,'电视机')
insert into product(proId,proTypeId,proName) values(3,2,'mp3')
insert into product(proId,proTypeId,proName) values(4,2,'mp4')
insert into product(proId,proTypeId,proName) values(5,2,'数码相机')
insert into product(proId,proTypeId,proName) values(6,3,'椅子')
insert into product(proId,proTypeId,proName) values(7,3,'桌子')

insert into sale(saleId,proId,cusId,unitPrice,number) values(1,1,1,340.34,2)
insert into sale(saleId,proId,cusId,unitPrice,number) values(2,1,2,140.34,1)
insert into sale(saleId,proId,cusId,unitPrice,number) values(3,2,3,240.34,3)
insert into sale(saleId,proId,cusId,unitPrice,number) values(4,3,4,540.34,4)
insert into sale(saleId,proId,cusId,unitPrice,number) values(5,4,1,80.34,5)
insert into sale(saleId,proId,cusId,unitPrice,number) values(6,5,2,90.34,26)
insert into sale(saleId,proId,cusId,unitPrice,number) values(7,6,3,140.34,7)
insert into sale(saleId,proId,cusId,unitPrice,number) values(8,7,4,640.34,28)
insert into sale(saleId,proId,cusId,unitPrice,number) values(9,6,1,140.34,29)
insert into sale(saleId,proId,cusId,unitPrice,number) values(10,7,2,740.34,29)
insert into sale(saleId,proId,cusId,unitPrice,number) values(11,5,3,30.34,28)
insert into sale(saleId,proId,cusId,unitPrice,number) values(12,4,4,1240.34,72)
insert into sale(saleId,proId,cusId,unitPrice,number) values(13,3,1,314.34,27)
insert into sale(saleId,proId,cusId,unitPrice,number) values(14,3,2,45.34,27)

 

 

3.5 建立模式文件

 

•       一个模式定义了一个多维数据库. 它包含一个逻辑模型(logical model)、一组数据立方(consisting of cubes)、层次(hierarchies)、和成员(members), 并映射到物理模型(关系数据库)上。

•       简单的说,配置一个模式就是配置一个关系数据结构到多维数据结构的映射。

注:

    关于mondrian的模式及模式的配置,这里我们只对其进行了简单介绍。

 

3.5.1创建模式文件

    模式文件的创建很简单。首先在WEB-INF下新建一个queries的文件夹,然后在该文件夹下创建一个名为tezz.xml的文件。再按下面的步骤将xml元素添加入即可。

 

 

 Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

3.5.2 配置模式文件

添加数据立方Sales:Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

<Schema name = “tezz”>

<Cube name = “mondrianText”>

       <!--事实表sale(fact table)-->

       <Table name = “sale”/>

</Cube>

</Schema>

 

添加数据立方Sales 的维:


Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

添加产品维( 因为产品维由两个表连接而成,因此比客户维复杂些)

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

 

添加度量( 共有三个度量: 数量、平均单价和总销售额)

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

最后生成的tezz.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<Schema name="tezz">

<Cube name="Sales">

    <!-- 事实表(fact table) -->

    <Table name="sale" />

    <!-- 客户维 -->

    <Dimension name="客户性别" foreignKey="cusId">

       <Hierarchy hasAll="true" allMemberName="所有性别" primaryKey="cusId">

           <Table name="Customer"></Table>

           <Level name="gender" column="gender"></Level>

       </Hierarchy>

    </Dimension>

 

    <!-- 产品类别维 -->

    <Dimension name="产品类别" foreignKey="proId">

       <Hierarchy hasAll="true" allMemberName="所有产品" primaryKey="proId"

           primaryKeyTable="product">

           <join leftKey="proTypeId" rightKey="proTypeId">

              <Table name="product" />

              <Table name="producttype"></Table>

           </join>

           <Level name="proTypeId" column="proTypeId" nameColumn="proTypeName"

              uniqueMembers="true" table="producttype" />

           <Level name="proId" column="proId" nameColumn="proName"

              uniqueMembers="true" table="product" />

       </Hierarchy>

    </Dimension>

    <Measure name="数量" column="number" aggregator="sum" datatype="Numeric" />

    <Measure name="总销售额" aggregator="sum" formatString="¥#,##0.00">

    <!-- unitPrice*number所得值的列 -->

       <MeasureExpression>

           <SQL dialect="generic">

              (unitPrice*number)

           </SQL>

       </MeasureExpression>

    </Measure>

    <CalculatedMember name="平均单价" dimension="Measures">

       <Formula>

           [Measures].[总销售额] / [Measures].[数量]

       </Formula>

       <CalculatedMemberProperty name="FORMAT_STRING" value="¥#,##0.00" />

    </CalculatedMember>

</Cube>

</Schema>

3.6编写MDX查询语句

•       在模式文件定义完成之后,我们就可以根据它来编写相应MDX查询语句了。

•       本例所用的MDX语句如下:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

我们可以很清楚的看出,columns轴维度包含的是度量。Rows轴维度包含的是维度中的层次的所有成员(allMemberName)

3.7 创建查询文件

注意,连接数据库之前需要配置数据库连接的插件,jdbc, 去微软官网或是找同学要一个jdbc的包,添加到JAVA安装路径的这个文件夹

 

 Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

如果这个方法不行的话,可以用eclipse 或是myEclipse 手动导入:、

们在用Eclipse开发程序的时候,经常想要用到第三方的jar包。这时候我们就需要在相应的工程下面导入这个jar包。以下配图说明导入jar包的步骤。

1.右击工程的根目录,点击Properties进入Properties。或者选中工程根目录,按Alt-Enter即可。

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询
Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

 

2.在Properties页面中选中Java Build Path,选中Libraries标签,点击Add External JARs。

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

3.找到需要添加的jar包,确定即可。

 

 Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

•       现在我们将创建一个jsp文件,该jsp使用jpivot的mondrianQuery标签来完成查询。

•       该文件最后将被testpage.jsp使用。

•       在/WEB-INF/queries文件夹下面创建一名为tezz的jsp文件。该jsp包含如下内容:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

JSP如下:

<%@ page session="true" contentType="text/html; charset=ISO-8859-1" %>

<%@ taglib uri="http://www.tonbeller.com/jpivot" prefix="jp" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

 

<jp:mondrianQuery id="query01"

    jdbcDriver="com.mysql.jdbc.Driver"

    jdbcUrl="jdbc:mysql://localhost/test"

    catalogUri="/WEB-INF/queries/tezz.xml"

    jdbcUser="root" jdbcPassword="123" connectionPooling="false">

    select {[Measures].[数量],[Measures].[平均单价],[Measures].[总销售额]} ON columns,

       {([产品类别].[所有产品],[客户性别].[所有性别])} ON rows

    from [Sales]

</jp:mondrianQuery>

 

<c:set var="title01" scope="session">Sales</c:set>

需要注意的问题是,你要自己修改连接数据库的那几行代码

2.9 布署项目

 

至此我们已经全部配置完成,文件结构如下:

 

蓝色部分为我们添加或创建的部分

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

•       布署项目,启动Tomcat,在浏览器上输入http://localhost:8080/Tezz/testpage.jsp?query=tezz 即可看到如下结果:

Mondrian---简单的例子,教会你如何在自己建立的网站上使用Mondrian和MDX语句对数据库查询

 

注:

  testpage.jsp?query=tezz,这里的tezz即刚我们创建的用于查询jsp文件名称

分享到:
评论

相关推荐

    Mondrian解析MDX成sql语句的分析与整理

    然而,为了将这些查询有效地执行在数据库上,需要将其转换为关系型数据库能够理解的SQL语句。Mondrian是一个开源的OLAP服务器,它负责这一转换过程。本文将深入探讨Mondrian如何解析MDX并生成相应的SQL语句。 MDX的...

    mondrian foodmart SQL SERVER 数据库

    Mondrian是一个开源的MDX(多维表达式)查询处理器,它为数据仓库提供了灵活的接口,而SQL Server则是一个强大的关系型数据库管理系统,广泛应用于企业级数据存储和处理。 在数据仓库和商务智能领域,mondrian food...

    mondrian ROLAP MDX 经典资料

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

    Mondrian实例

    通过这个"Mondrian实例",你可以学习到如何在Java应用中集成Mondrian,以及如何利用MDX查询语言对数据立方体进行操作。这将有助于提升你在数据驱动决策和商业智能方面的技能。记住,实践是掌握知识的关键,尝试运行...

    mondrian foodmart access 数据库

    Mondrian是Pentaho公司开发的一款开源多维数据集(OLAP)服务器,它允许用户通过SQL查询在数据仓库上进行快速分析。FoodMart是一个常见的用于数据仓库和BI演示的数据集,它模拟了一个零售行业的销售数据。 首先,...

    Mondrian+Oracle 实例

    这种设计使得Mondrian能够在多种数据库平台上运行,包括Oracle,提供对大数据集的快速查询和分析。 2. **Oracle数据库集成** Oracle是一个广泛使用的高性能关系型数据库管理系统,适合处理大量复杂数据。将...

    mondrian foodmart derby 数据库

    Mondrian FoodMart Derby 数据库是一个用于数据分析和报表生成的示例数据库,它结合了Mondrian OLAP服务器和Apache Derby关系型数据库管理系统。这个数据库通常被用作数据仓库和商业智能解决方案的教育工具或测试...

    联机分析olap之mondrian

    尽管用户通过MDX进行查询,但这些查询最终会转化为SQL语句执行在数据库上。因此,理解SQL对于优化Mondrian的性能至关重要。SQL文档通常包含了与Mondrian相关的索引建议、查询优化技巧等内容,是开发者提升Mondrian...

    Mondrian用于web项目

    总结,Mondrian在Web项目中的应用涉及到数据库连接、多维模型构建、MDX查询、报表设计、性能优化等多个方面。理解和掌握这些知识点对于开发高效、灵活的报表系统至关重要。通过熟练运用Mondrian,开发人员能够为用户...

    mondrian源码分析与说明.pdf

    Query类是mondrian处理MDX查询的核心,它负责解析MDX语句,生成查询计划,并与执行器交互以获取结果。 2.5. 包mondrian.rolap 这个包主要处理与关系数据库的交互,实现ROLAP功能。 2.5.1. 成员读取包MemberReader ...

    mondrian操作手册和优化配置

    在 mondrian 中,通过 jpivot 标签来定义数据源和 MDX 查询,以便mondrian 可以连接到像 Oracle 这样的关系型数据库并执行查询。 例如,下面的 MDX 查询展示了如何定义六个维度(例如 [Measures].[Charge] 和 ...

    如何将Mondrian用于web项目.ppt

    由于没有统一的OLAP查询API,Mondrian提供了自己的接口来支持MDX查询和数据操作。 【MDX多维表达式】 MDX是OLAP领域的标准查询语言,用于在多维数据集上执行复杂的检索。它允许用户指定维度、层次、成员和度量,...

    mondrian-3.0-technical-guide_2.pdf

    文档对聚合表的介绍包括它的定义、建立、如何被Mondrian识别和使用、以及相关的工具和属性。文档还讨论了优化Mondrian性能的一般过程和数据库调优建议,包括聚合表、物化视图和Mondrian的使用。 7. 缓存管理 ...

    mondrian-olap:JRuby gem,用于使用Mondrian OLAP Java库执行关系数据库数据的多维查询

    mondrian-olap是JRuby的瑰宝,它包括Mondrian OLAP引擎,并提供Ruby DSL以在关系数据库模式之上创建OLAP模式,并提供MDX查询语言和查询构建器Ruby方法来进行分析查询。 -olap用于。 可以用于在基于mondrian-olap的...

    mondrian-api.zip

    6. **SQL生成与执行**: mondrian API能够生成针对关系数据库的SQL查询,根据用户在多维数据集上的操作(如切片、钻取、旋转等)。`RolapSchema`和`MondrianStatement`等类提供了这些功能。 7. **MDX(多维表达式)*...

    Mondrian和olap4j api的示例

    3. **处理元数据**:如何使用olap4j来探索和理解Mondrian服务器上的模型元数据。 4. **数据钻取和切片**:示例可能包括如何通过olap4j实现数据的钻取(Drill-down)、上卷(Roll-up)、切片(Slice)和 dice(Dice)...

    数据分析工具mondrian教程

    通过学习这个教程,你将能够熟练地运用mondrian进行数据分析,创建自定义的OLAP Cube,理解和使用MDX查询语言,以及将mondrian集成到Web应用中,从而提升数据驱动决策的能力。不断实践和深入理解这些知识,你将成为...

    mondrian 源码

    mondrian作为OLAP服务器,支持多种数据源,包括关系数据库和MDX(多维表达式)查询语言。MDX是专门设计用来操作多维数据集的语言,它提供了丰富的功能,如钻取、切片、切块和旋转等。 mondrian源码包含以下几个关键...

    Mondrian的异常处理小结

    在数据仓库和商务智能领域,OLAP(在线分析处理)引擎Mondrian是广泛使用的工具,它支持多维数据集的快速查询和分析。MDX(多维表达式)是与OLAP数据库交互的主要查询语言,用于构建复杂的多维查询。在构建多维报表...

Global site tag (gtag.js) - Google Analytics