<?xml version="1.0" encoding="UTF-8"?>
<Schema name="Mondrian"> <Cube name="Person"> <Table name="PERSON" /> <Dimension name="部门" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有部门" >
  <Table name="PERSON" alias="a"/>
  <Level name="部门" column="DEPARTMENT" uniqueMembers="true" />
  <Level name="姓名" column="USERNAME" uniqueMembers="true" />
</Hierarchy>
</Dimension> <Dimension name="性别" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有性别">
<Table name="PERSON" alias="b" />
  <Level name="性别" column="SEX" uniqueMembers="true" />
</Hierarchy>
</Dimension> <Dimension name="专业技术资格类别" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有专业技术资格类别">
<Table name="PERSON" alias="c" />
  <Level name="资格类别" column="ZYJSLB" uniqueMembers="true" />
</Hierarchy>
</Dimension> <Dimension name="专业技术资格等级" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有专业技术资格等级">
<Table name="PERSON" alias="d" />
  <Level name="资格等级" column="ZYJSDJ" uniqueMembers="true" />
</Hierarchy>
</Dimension> <Dimension name="职系" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有职系">
<Table name="PERSON" alias="e" />
  <Level name="职系" column="ZHIXI" uniqueMembers="true" />
</Hierarchy>
</Dimension> <Dimension name="民族" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有民族">
<Table name="PERSON" alias="f" />
  <Level name="民族" column="NATIONALITY" uniqueMembers="true" />
</Hierarchy>
</Dimension> <Dimension name="学历" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有学历">
<Table name="PERSON" alias="g" />
  <Level name="学历" column="XUELI" uniqueMembers="true" />
</Hierarchy>
</Dimension> <Measure name="人数" column="USERID" aggregator="distinct count" /> </Cube> </Schema>

一、节点结构:

Schema

  |- Cube

    |-Table

    |-Dimension

      |-Hierarchy

        |-Table

        |-Level

    |-Measure

  |-Role

注意:

1、一个schema文件中只有一个Schema节点

2、通常Measure都作为统计的列,Dimension都作为统计的行

3、Cube可有多个,通过name来区分,上述配置只有一个Cube,名字标识为Person

二、MDX语句查询DEMO

<jp:mondrianQuery 
  id="query01"
  jdbcDriver="com.mysql.jdbc.Driver"
  jdbcUrl="jdbc:mysql://localhost:3306/test"
  catalogUri="/WEB-INF/queries/personDemo.xml"
  jdbcUser="root"
  jdbcPassword="root"
  connectionPooling="false">

    select
      NON EMPTY {[Measures].[人数]} on columns,
      NON EMPTY {(
        [部门].[所有部门],
        [职系].[所有职系],
        [专业技术资格类别].[所有专业技术资格类别],
        [专业技术资格等级].[所有专业技术资格等级],
        [学历].[所有学历],
        [民族].[所有民族],
        [性别].[所有性别]
      )} ON rows
   from Person
</jp:mondrianQuery>
注意:

1、<jp:mondrianQuery>的属性配置的是mondrian的链接信息
2、MDX的查询语句是通过name属性值进行查询的
<Cube name="Person"> 对应 from CubeName
<Dimension name="学历"> 对应 [DimensionName].[HierarchyName] 
<Measure name="人数"> 对应 [Measures].[MeasuresName]
 
参考资料:
http://files.cnblogs.com/files/avivaye/Mondrian_Schema%28%E5%A4%9A%E7%BB%B4%E5%88%86%E6%9E%90%29%E5%B1%9E%E6%80%A7%E8%AF%A6%E8%A7%A3.rar
 

[mondrian] 分析一个简单的schema文件的更多相关文章

  1. 从零开始的程序逆向之路基础篇 第二章——用OllyDbg(OD)分析一个简单的软件

    作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43469-1-1.html 0x00知识回顾 (由于笔者省事,没开XP虚拟机,而且没关闭A ...

  2. 一个简单的makefile文件

    一个简单的makefile文件:可以编译指定目录下的所有c和cpp文件,暂未加入自动头文件的依赖. #!/bin/bash #编译器 CROSS_COMPILING_PATH = #源文件路径 VPA ...

  3. ubuntu14.04 配置g++工具,并运行一个简单的c++文件

    首先,对Ubuntu 14.04 LTS进行源更新,摘自下述链接: http://chenrongya.blog.163.com/blog/static/8747419620143185103297/ ...

  4. 分析一个简单的goroutine资源池

    分析一个简单的goroutine资源池 tunny. 从资源池中获取goroutine并进行处理的逻辑如下: tunny将goroutine处理单元封装为workWrapper,由此可以对gorout ...

  5. VS2017生成一个简单的DLL文件 和 LIB文件——C语言

    下面我们将用两种不同的姿势来用VS2017生成dll文件(动态库文件)和lib文件(静态库文件),这里以C语言为例,用最简单的例子,来让读者了解如何生成dll文件(动态库文件) 生成动态库文件 姿势一 ...

  6. 使用go写一个简单的exe文件

    工作需要一个小工具给分析师用,原先打算写一个脚本的,但是呢我又不会用python,要写的话只能用java来实现(打包成可执行jar,使用java -jar 的命令来执行,当然得安装jdk).这种命令行 ...

  7. 一个简单的makefile文件编写

    下午闲来无聊,就打开很久没动过的linux系统想熟悉熟悉在linux上面编译代码,结果一个makefile文件搞到晚上才搞定,哈哈! 先把代码简单贴上来,就写了一个冒泡排序: sort.h: #ifn ...

  8. 如何用 Nodejs 分析一个简单页面

    本文目的 在浏览器地址栏中输入 localhost:3000,在页面显示 博客园首页 的 20 篇文章标题. 过程分析 首先需要端口的监听,这就需要引入 Node 中最重要的模块之一 express. ...

  9. 一个简单的excel文件上传到数据库方法

    因为以前项目中有用到过Excel导入,所以整理了一下,这是一个导入Excel数据到数据库的方法 注意:需要导入poi jar包 代码清单 /** * Excel 导入 * @param mapping ...

随机推荐

  1. HTML(Open Method)翻译自MSDN

    Open Method Opens a new window and loads the document specified by a given URL. Navigates the app wi ...

  2. 昂贵的聘礼 Dijkstra法

    poj 1062 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 39437   Accepted: 11432 Descri ...

  3. JavaScript语法(一)

    JavaScript 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 & ...

  4. [C程序设计语言]第五部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. MySQL SELECT语句

    说明:MySQL的offset第一行是0 位置指的是在SELECT语句中第几个出现的字段,如:1,则代表用第一个出现的字段来分组. SELECT语句: SELECT  select_expr1 [,s ...

  6. fzu 1015 土地划分(判断线段相交+求出交点+找规律)

    链接:http://acm.fzu.edu.cn/problem.php?pid=1015  Problem 1015 土地划分 Accept: 714    Submit: 1675Time Lim ...

  7. 2013/7/17 HNU_训练赛5

    sgu 542 Gena vs Petya sgu 543 Cafe 题意:有N组人需要被分配到某些固定了人数的桌子上,其中ai表示第i组有多少个人,安排作为需要符合如下安排:某一组的人员不能够单独在 ...

  8. mysql 求时间段平均值

    考虑下面的需求,在一段时间内,间隔一段时间,取一个平均值,把所有的平均值取出来,怎么办?思路:在存储过程中,拼接sql语句.根据起始时间和结束时间,while循环每次加一段时间.DROP PROCED ...

  9. 一次tomcat服务器被入侵解决办法

    突然tomcat目录下莫名其妙的多了几个war文件,里面内容只有一个index.jsp,打开控制台发现多了几个应用,我可以确定不是我部署上去的,顺着应用访问竟然看到了

  10. Service 与 Thread 的区别

    很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thre ...