一个简单的Mondrian例子(部分参考某个大牛的文档~~)希望大家学到东西~
可以详细参考豆丁网上的一个文档:http://www.docin.com/p-88928995.html 也可以跟我一起做~
3.1 创建新的web项目
3.1.1 打开myEclipse,新建一个网站我的是这样的:
注意名字要按照我给的,取名为Tezz
建好之后是这样的:
3.1.2 打开你刚刚解压的文件,进入解压后的文件夹目录mondrian-3.2.1.13885/lib, 把一个名字为mondrian.war的文件解压到当前的文件夹。
我进入后是这样:
我直接把.war改为.zip然后解压
3.2 添加文件
第一步
进入解压后的文件夹,选中jpivot、wcf二个文件夹及busy.jsp、error.jsp、testpage.jsp三个文件,我们需要将这些资源复制到我们测试项目的WebRoot文件夹中。
我的是这样的:
把jpivot和wcf这两个文件夹添加到WebRoot下,把剩下三个文件添加到Web-INF里面,我添加完成之后是这样的:
第二步
进入mondrian(之前为.war,后来改名为.zip解压后的文件夹) WEB-INF文件夹(在上面步骤中解压的项目文件mondrian.war里),选中jpivot、lib、wcf这三个文件夹,同样需要复制它们到测试项目的WEB-INF文件夹中。
Jpivot和wcf两个文件夹包含了用于生成用户界面的配置文件
复制进去的时候会问你:
果断yes!
扫面之后就不会出现错误了,之前出现错误是因为我们没有添加实例进去。
3.3 配置web.xml
第一步:在MyEclipese 上打开我们新建项目的文件:web.xml
第二步:添加配置文件,直接把我给出的下列代码复制到你的web.xml文件中,注意是覆盖!在下面的代码也会相应对.xml中的一些东西做一些介绍~
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> |
• 它们用于向用户生成和显示如下所示的各种图表:
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 准备测试用表
本例使用的表结构如下所示:
Sale是事实表,它有两个维:客户(customer)维和由两个表组成的产品(Product)维。
表格的创建很简单,您只需要将下面的sql语句导入数据库即可
1 使用以下sql语句创建表
|
2 使用以下sql语句导入数据
insert into Customer(cusId,gender) values(1,'F') insert into producttype(proTypeId,proTypeName) values(1,'电器') insert into product(proId,proTypeId,proName) values(1,1,'洗衣机') insert into sale(saleId,proId,cusId,unitPrice,number) values(1,1,1,340.34,2) |
3.5 建立模式文件
• 一个模式定义了一个多维数据库. 它包含一个逻辑模型(logical model)、一组数据立方(consisting of cubes)、层次(hierarchies)、和成员(members), 并映射到物理模型(关系数据库)上。
• 简单的说,配置一个模式就是配置一个关系数据结构到多维数据结构的映射。
注:
关于mondrian的模式及模式的配置,这里我们只对其进行了简单介绍。
3.5.1创建模式文件
模式文件的创建很简单。首先在WEB-INF下新建一个queries的文件夹,然后在该文件夹下创建一个名为tezz.xml的文件。再按下面的步骤将xml元素添加入即可。
3.5.2 配置模式文件
<Schema name = “tezz”>
<Cube name = “mondrianText”>
<!--事实表sale(fact table)-->
<Table name = “sale”/>
</Cube>
</Schema>
添加数据立方Sales 的维:
添加产品维( 因为产品维由两个表连接而成,因此比客户维复杂些) :
添加度量( 共有三个度量: 数量、平均单价和总销售额) :
最后生成的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语句如下:
我们可以很清楚的看出,columns轴维度包含的是度量。Rows轴维度包含的是维度中的层次的所有成员(allMemberName)
3.7 创建查询文件
注意,连接数据库之前需要配置数据库连接的插件,jdbc, 去微软官网或是找同学要一个jdbc的包,添加到JAVA安装路径的这个文件夹
如果这个方法不行的话,可以用eclipse 或是myEclipse 手动导入:、
们在用Eclipse开发程序的时候,经常想要用到第三方的jar包。这时候我们就需要在相应的工程下面导入这个jar包。以下配图说明导入jar包的步骤。
1.右击工程的根目录,点击Properties进入Properties。或者选中工程根目录,按Alt-Enter即可。
2.在Properties页面中选中Java Build Path,选中Libraries标签,点击Add External JARs。
3.找到需要添加的jar包,确定即可。
• 现在我们将创建一个jsp文件,该jsp使用jpivot的mondrianQuery标签来完成查询。
• 该文件最后将被testpage.jsp使用。
• 在/WEB-INF/queries文件夹下面创建一名为tezz的jsp文件。该jsp包含如下内容:
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 布署项目
至此我们已经全部配置完成,文件结构如下:
蓝色部分为我们添加或创建的部分
• 布署项目,启动Tomcat,在浏览器上输入http://localhost:8080/Tezz/testpage.jsp?query=tezz 即可看到如下结果:
注:
testpage.jsp?query=tezz,这里的tezz即刚我们创建的用于查询jsp文件名称