Mondrian_Schema属性详解
- 格式:doc
- 大小:108.50 KB
- 文档页数:11
mondrian源码分析1.概述 (1)1.1.若干概念 (1)1.2.架构 (2)2.静态类包分析 (3)2.1.包解释 (3)2.2.Schema manger部分 (4)2.3.包mondrian.calc (4)2.4.包mondrian.olap—接口 (5)2.4.1.mdx函数包 (5)2.4.2.funCall (5)2.4.3.Query类 (6)2.5.包mondrian.rolap—计算层 (6)2.5.1.成员读取包MemberReader (6)2.5.2.单元格读取CellReader (8)2.5.3.RolapResult类 (11)2.5.4.RolapEvaluator类 (12)2.5.5.关于排序 (12)2.6.聚集层Star layer (13)2.6.1.概述 (13)2.6.2.聚合装载过程 (13)2.6.3.segment详解 (14)2.6.4.缓存失效控制 (17)3.交互管理层 (18)3.1.初始化MondrianModel (18)3.2.获取结果集 (19)4.修改点 (22)4.1.mondrian角色参数化 (22)4.2.缓存失效控制 (22)4.3.connection创建参数优化 (23)4.4.维度成员排序 (23)4.5.对mondrian bug的修正 (24)4.6.to-do List (24)1.概述1.1. 若干概念成员(member):成员是代表维度中一次或多次数据出现的项。
度量值也可以算作一个维度,因此一个具体度量值项也可以作为一个成员。
元组(tuple):是向量,用于定义来自多维数据集的数据切片;它由来自一个或多个维度的单个成员的有序集合组成。
元组用于标识来自多维数据集的特定多维数据块;由来自多维数据集中各个维度的一个成员组成的元组完全描述单元值。
换言之,元组是一种成员向量。
例如:(时间.[下半年], 路线.非陆地.航空),由单个成员组成的元组也可括在圆括号内,但这不是必需的。
Mondrian入门介绍之schema manager1 olap基本概念联机分析处理(On Line Analytical Proccessing,简称OLAP) 概念最早由关系数据库之父E.F.Codd于1993年提出。
OLAP应用是目前数据仓库上的重要应用之一,是决策分析的关键。
作为数据仓库最重要的多维分析工具,OLAP利用存储在数据仓库中的数据完成各种分析操作,并以直观易懂的形式将分析结果返回给决策人员。
它的目标是满足决策支持或多维环境特定的查询和报表需求,技术核心是多维分析。
OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对大量复杂数据的分析变得轻松而高效,以利于迅速做出正确的判断,辅助决策。
相比于传统的OLTP(联机事务处理),OLAP定义了多维模型的概念辅助分析操作:图 1如图1所示,这是由三个维度构成的一个OLAP立方体,立方体中包含了满足条件的cell(子立方)值,这些cell里面包含了要分析的数据,称之为度量值。
显而易见,一组三维坐标就唯一确定了一个子立方。
下面介绍一下多位模型的基本概念:立方体:由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行。
维度:就是观察数据的一种角度。
在这个例子中,路线,源,时间都是维度,这三个维度构成了一个立方体空间。
维度可以理解为立方体的一个轴。
要注意的是有一个特殊的维度,即度量值维度。
维度成员:构成维度的基本单位。
对于时间维,它的成员分别是:第一季度、第二季度、第三季度、第四季度。
层次:维度的层次结构,要注意的是存在两种层次:自然层次和用户自定义层次。
对于时间维而言,(年、月、日)是它的一个层次,(年、季度、月)是它的另一个层次,一个维可以有多个层次,层次可以理解为单位数据聚合的一种路径。
级别:级别组成层次。
对于时间维的一个层次(年、月、日)而言,年是一个级别,月是一个级别,日是一个级别,显然这些级别是有父子关系的。
OLAP 系统结构整个OLAP 系统为三层结构,最低层为存储层,一般分为两个部分1联机事务处理数据库.它是分析数据的来源;2 储存分析所用数据的数据仓库.该数据是从OLTP 数据库中提取和整理获得,通过这一层将OLAP 数据和OLTP 数据分离,这样就不会对原系统运行效率造成影响;第二层为应用层,它由OLAP 服务器与Web 服务器组成, OLAP 服务器是支持和管理多维数据结构的数据处理引擎,由它执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。
Web 服务器是专门用于向OLTP 服务器提交用户请求或向用户浏览器发送处理结果以供浏览。
顶层为前端浏览工具.采用Web 浏览页就可以实现对多维数据集的访问.并以表格或者图形的方式展现查询结果。
架构如图所示:存储层应用层表现层前台设计:1、表现层本层采用jpivot 作为表示层,Jpivot 是JSP 定制标志库,它呈现一个联机分析处理表格并让用户能够执行典型的联机分析处理导航操作,如上卷、下钻和旋转等。
它使用Mondrian 和XML/A 作为OLAP 引擎,使用WCF (Web Component Framework) 来支持使用XML 和XSLT 来创建UI 。
2、应用层本层中Web 服务器采用Tomcat,由Mondrian 作为 OLAP 引擎,Mondrian 是一个OpenSource 的基于关系数据库的分析服务器,遵循MDX 语言、XML/A 和JOLAP 标准。
它自定义了一种使用MDX 语言的客户端接口,可以通过执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。
存储层提供数据,由于mondrian被设计运行在关系数据库上,因此这里采用关系数据库实现,指向数据源的连接字符串格式如下:Provider=mondrian;Jdbc=jdbc:oracle:thin:placea/placea@192.168.90.18:1521:mps;JdbcDrive rs=oracle.jdbc.driver.OracleDriver; Catalog=/WEB-INF/queries/institute_type.xml 其中,Provider=mondrian定义了OLAP引擎,采用不同的存储数据库jdbc与jdbcDriver 的值也随之变化,这里采用了oracle数据库,Catalog指明了schema元模型的位置,mondrian 根据它到数据仓库中提取数据。
Mondrian操作介绍和调优配置操作前提介绍1、生成维度和指标MDX查询语句在页面里面制定对应的查询前需要配置对应的查询数据源,使用的是jpivot 标签。
有关jpivot的使用可以查看开源的项目jpivot。
如下面指定对应的oracle数据库连接数据源。
让mondrian可以连接到对应的数据库进行查询操作。
查询操作使用的sql是MDX。
类似于sql的语法,有关MDX的使用可以了解MDX语句。
<jp:mondrianQuery id="query01"jdbcDriver="oracle.jdbc.driver.OracleDriver"jdbcUrl="jdbc:oracle:thin:@10.45.49.21:1521:osstest"jdbcUser="bi71"jdbcPassword="smart"catalogUri="/WEB-INF/queries/Analysis.xml">select {[Measures].[Charge], [Measures].[CallTimes], [Measures].[Num of Subscriber], [Measures].[Duration], [Measures].[ARPU],[Measures].[MOU]} ON COLUMNS,{([AcctType].[AllAcctType],[Package].[AllPackage],[ProductState].[AllProdState],[PayLevel].[AllPayLevel],[ON-NetWorkDuration].[AllDuration],[SendDate].[AllSendDate])} ON ROWSfrom [SubsVoiceAnalysis]</jp:mondrianQuery>上面的MDX指定了六个维度:[Measures].[Charge], [Measures].[CallTimes], [Measures].[Num of Subscriber], [Measures].[Duration], [Measures].[ARPU], [Measures].[MOU]和六个指标:[AcctType].[AllAcctType],[Package].[AllPackage],[ProductState].[AllProdState],[PayLevel].[AllPayLevel],[ON-NetWorkDuration].[AllDuration],[SendDate].[AllSendDate]查询效果界面展示为:下面将从界面介绍mondrian的操作。
1Mondrian 性能调试(数据库)Oracle性能调试占很大比重Aggragate table是主要方法,机制调试SQL跟踪1.1 设置SQL跟踪SQL跟踪语句要输出到指定文件,因而SQL跟踪的设置与logging的设置有关。
1.1.1Mondrian的设置据网上相关文档记录:将WEB-INF/Mondrian.propeties文件中加入mondrian.trace.level=1,SQL语句即输出到System.out,为了将SQL跟踪语句输出到指定文件,需要配置log4j1.1.2JBoss的Logging设置JBoss的最大特色就是LOGGING集中管理,各应用不必自带LOG4J.JAR和配置文件。
详细内容参见《JBoss:A Developer's Notebook》Charpter6 Logging简单的说conf/Log4j.xml配置的是一个MAP,即二元组集合。
(这个二元组的第一元是LOGGER日志生成器,第二元是APPENDER输出设备。
)也就说log4j配置文件说明了,那些日志生成器输出到那些输出设备。
请注意Category和Root的概念,了解JBOSS中的server.log输出设备.可以在server.log中查看SQL语句如下:2007-02-01 10:15:54,187 DEBUG [mondrian.rolap.RolapUtil] Segment.load: executing sql [select"DC_TIME"."THE_QUARTER" as "c0", "DC_TIME"."THE_YEAR" as "c1",sum("DC_JOBCOLLECT"."JCPASSQUANTITY") as "m0", sum("DC_JOBCOLLECT"."JCREJECTQUANTITY") as "m1", sum("DC_JOBCOLLECT"."JCREWORKQUANTITY") as "m2" from "DC_TIME" "DC_TIME","DC_JOBCOLLECT" "DC_JOBCOLLECT" where "DC_JOBCOLLECT"."JCCOLLECTTIME" ="DC_TIME"."TIME_ID" and "DC_TIME"."THE_QUARTER" = '2' and "DC_TIME"."THE_YEAR" = '2002' group by "DC_TIME"."THE_QUARTER", "DC_TIME"."THE_YEAR"], 469 ms如下设置,可以将SQL语句输出到指定文件1.删除mondrain自带的log4j*.jar2.在conf/log4j.xml增加如下设置2.1指定输出文件sqltrace.log<!-- A time/date based rolling appender for mondrian sql tracing--><appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender"><errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/><param name="File" value="${jboss.server.home.dir}/log/sqltrace.log"/><param name="Append" value="false"/><param name="DatePattern" value="'.'yyyy-MM-dd"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionPattern" value="%d %-5p [%c] %m%n"/></layout></appender>2.2绑定日志生成器<category name="mondrian.rolap.RolapUtil"><priority value="DEBUG" /><appender-ref ref="SQLTRACE"/></category>1.2 根据SQL跟踪设计AGGTABLE默认规则:以下聚集表均根据mondrian的默认rules进行设计命名。
Mondrian Schema详解SchemaSchema 定义了一个多维数据库。
包含了一个逻辑模型,而这个逻辑模型的目的是为了书写MDX 语言的查询语句。
这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。
而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。
在这个文件中形成逻辑模型和数据库物理模型的对应。
Cube一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。
在 Cube 中,Dimension 和 Measure 的共同地方就是共用一个事实表。
Cube 中的有以下几个属性:Cube 里面有一个全局的标签定义了所用的事实表的表名Dimension他是一个层次( Hierarchies )的集合 , 维度一般有其相对应的维度表 . 他的组成是由层次( Hierarchies )而层次( Hierarchies )又是有级别( Level )组成 . 其属性如下:Hierarchy你一定要指定其中的各种关系 , 如果没有指定 , 就默认 Hierarchy 里面装的是来自立方体中的真实表 . 属性如下:Level级别 , 他是组成 Hierarchy 的部分。
属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。
Level 的属性如下:Join对于一个 Hierarchy 来说,有两种方式为其指定:一种是直接通过一个 Table 标签指定;一种是通过 Join 将若干张表连接起来指定。
一旦采用 Join 的话,那么就要在 Hierarchy 里的 primaryKeyTable 属性指定主表。
XML与电子商务应用XML and the Application in E-Business第3章数据结构和模式⏹3.1 数据模式概述⏹3.2 DTD概述⏹3.3 在DTD中定义元素⏹3.4 在DTD中定义属性⏹3.5 Schema概述⏹3.6 用Schema定义元素和属性⏹3.7 用Schema定义简单类型⏹3.8 用Schema定义复杂类型⏹3.9 Schema中元素内容与注释⏹3.10 Schema与名字空间基本语法:<element name="名字参数" type="类型参数"default="默认值" nillable="true/false"minOccurs="最少出现次数" maxOccurs="最大出现次数"/>–type是元素类型声明,其值可为Schema的常用数据类型、也可以是自己定义的复杂类型。
–default定义了元素的默认值–nillable定义了元素是不是为空,true为空,false为非空–minOccurs、maxOccurs定义元素出现的最小次数和最大次数,取值范围为0到unbounded <xsd:element name="生日"type="date"/><!ELEMENT 生日(#PCDATA)>元素的默认值:语法格式:<xsd:element name="元素名称"default="默认取值"/> 例如:<xsd:element name="名字"default="王五"/>DTD中只有对应属性值的默认用法。
元素的默认值没有表示方法对元素出现次数的控制:语法格式:<xsd:element name="元素名称"minOccurs="次数" maxOccurs="次数"/>例如:基本语法:⏹<xsd:attribute name="属性名字"type="数据类型"default="默认值"use="属性出现类型"fixed="true/false"/>–type取值只能是基本类型或简单类型。
达梦数据库 schema函数
达梦数据库(DMDB)是一种关系型数据库管理系统,它提供了丰富的功能来支持数据库的设计和管理。
在达梦数据库中,Schema 函数通常用于获取数据库中的模式信息,包括表、视图、索引等对象的结构和属性。
Schema函数可以用来查询数据库中的对象信息,比如表的列信息、索引信息、触发器信息等。
通过Schema函数,可以了解数据库中的对象结构,帮助开发人员更好地理解和操作数据库。
在达梦数据库中,Schema函数通常以系统视图的形式提供,用户可以通过查询系统视图来获取所需的模式信息。
比如,通过查询sys.tables、sys.columns等系统视图,可以获取表和列的信息;通过查询sys.indexes可以获取索引的信息。
除了查询对象的结构信息,Schema函数还可以用来查询对象的权限信息。
通过Schema函数,可以查看用户对数据库对象的权限,帮助管理员更好地管理数据库安全性。
总之,达梦数据库中的Schema函数是用来获取数据库对象结构
和权限信息的工具,它为开发人员和管理员提供了方便的途径来了
解和管理数据库。
希望这个回答能够帮助到你,如果还有其他问题,欢迎继续提问。
schema 参数
Schema参数是指在编写数据定义语言(DDL)时,用于定义数据结构和约束的参数。
例如,在创建表时,可以使用 schema 参数来定义列名、数据类型、默认值、唯一性约束、主键约束、外键约束等。
使用 schema 参数可以确保数据的一致性和完整性,减少数据冗余和错误,提高数据的质量和可靠性。
同时,schema 参数也可以帮助开发人员更好地理解和管理数据结构,提高代码的可读性和可维护性。
值得注意的是,不同的数据库系统和编程语言对 schema 参数的实现有所不同,开发人员需要根据具体情况选择合适的参数和语法。
同时,随着数据需求的变化和业务逻辑的演进,schema 参数也需要不断地进行优化和调整,以满足不同的数据需求和业务场景。
- 1 -。
立方体简介当展现一个数据库时,Mondrian 需要数据库的xml 描述称为模式(Mondrian Schema)。
通过这个xml 模式来定义立方体,度量和维度。
一个立方体是度量和维度的集合。
一个立方体是数据库的一部分,为它创建图形化界面。
维度描述了属性或者属性集,这些属性能够将度量分到不同的子目录。
模式中一个维与数据库中的一个维表关联。
但是模式中描述的维不必与数据库中的维度具有同样粒度。
一个简单的立方体XML文件:<Schema name="mySchema"><Cube name="Sales"><Table name="sales_fact_1997"/><Dimension name="Gender" foreignKey="customer_id"><Hierarchy hasAll="true" allMemberName="All Genders" primaryKey="customer_id"><Table name="customer"/><Level name="Gender" column="gender" uniqueMembers="true"/></Hierarchy></Dimension><Dimension name="Time" foreignKey="time_id"><Hierarchy hasAll="true" allMemberName="All Time" primaryKey="time_id"> <Table name="time_by_day"/><Level name="Year" column="the_year" type="Numeric" uniqueMembers="true"/><Level name="Quarter" column="quarter" uniqueMembers="false"/><Level name="Month" column="month_of_year" type="Numeric" uniqueMembers="false"/></Hierarchy></Dimension><Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/><Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/><Measure name="Store Cost" column="store_cost" aggregator="sum" formatString="#,###.00"/><CalculatedMember name="Profit" dimension="Measures" formula="[Measures].[Store Sales]-[Measures].[Store Cost]"><CalculatedMemberProperty name="FORMA T_STRING" value="$#,##0.00"/></CalculatedMember></Cube></Schema>该模式包含一个名为“sales”的简单数据立方(cube), 它有两个维(dimension):"Time",和"Gender", 和两个度量:"Unit Sales" 和"Store Sales".数据立方(cube)一个数据立方是一些度量的维的集合. 通常定义在一个事实表中, 如我们在事实表"sales_fact_1997"中看到的, 它保存了度量值和对维表的引用.<Cube name="Sales"><Table name="sales_fact_1997"/>...</Cube>度量(measures)这个销售数据立方定义了两个度量:"Unit Sales" and "Store Sales".<Measure name="Unit Sales" column="unit_sales" aggregator="sum" formatString="#,###"/><Measure name="Store Sales" column="store_sales" aggregator="sum" formatString="#,###.##"/>成员(member)一个成员(member)是指维上的一个点,是该维值集合中的一个值. 如名为gender的层次结构有两个member:…M‟ and …F‟.名为store 的层级结构有三个成员'San Francisco', 'California' 和'USA' .层次结构(hierarchy)层次结构(hierarchy)是为了方便分析问题而将一组member组织成的结构. 例如,store层次结构由store name, city, state, 和nation组成。
schema的元素数据类型(复杂数据类型)1.简单元素的声明<xs:element name="元素名称" type="xs:string" default="默认值"minOccurs="nonNegetiveInteger" maxOccurs="nonNegetiveInteger|unbounded" />minOccurs:指定该元素在⽂档中出现的最少次数,如果为0,说明该元素是可选的maxOccurs:最多出现的次数minOccurs和maxOccurs的默认值都为12.复杂元素的声明<xs:element name="元素名称" type="数据类型名" default="默认值"minOccurs="nonNegetiveInteger" maxOccurs="nonNegetiveInteger|unbounded" />e.g.<xs:complexType name="address"> <xs:sequence> <xs:element name="street" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:decimal"/> </xs:sequence></xs:complexType>3.匿名类型的定义e.g1<?xml version="1.0" encoding="utf-8" ?>2<xs:schema xmlns:xs="/2001/XMLSchema">3 <xs:element name="conent">4 <xs:complexType mixed="true">5 <xs:sequence>6 <xs:element name="item" type="xs:string"/>7 </xs:sequence>8 </xs:complexType>9 </xs:element>10</xs:schema>匿名数据类型。
Mondrian解决schema中的中文乱码方法(不同系统编码不同导致乱码)首先需要下载mondrian-3.6.5.jar的源码或者使用反编译软件看到源码,我在网上没找到这个版本(由于我用反编译工具弄的,放到文件中会报错,所以就下载了源码,反正也好找),于是我拿了mondrian-3.7.0.0-752的源码下来,用着也正常1、从中找到文件mondrian.olap.Util,找到方法readVirtualFileAsString修改内容为如下(重点是红色内容):InputStream in = readVirtualFile(catalogUrl);try {return IOUtils.toString(in,"utf-8");} finally {IOUtils.closeQuietly(in);}或者按照网上说的另外一种方式,整体替换为如下内容,也可以,不过下面的编码必须写你的schema文件的编码:try {final byte[] bytes = Util. readFully(in, 1024);final char[] chars = new char[bytes. length];for ( int i = 0; i < chars. length; i++) {chars[i] = ( char) bytes[i];}String str = new String(bytes,"utf-8").replace("\ufeff" , "" );//加replace("\ufeff", "")是为了过滤"UTF-8无BOM格式文件"的开头return str;} finally {if (in != null) {in.close();}}2、再找到文件 mondrian.rolap.RolapSchema.load(String, String)修改in = Util.readVirtualFile(catalogUrl);def = xmlParser.parse(in);为def=xmlParser.parse(Util.readVirtualFileAsString(catalogUrl));然后重启Saiku,快乐的玩耍吧。
mondrian入门参考文章:Mondrian——有影响的“艺术家”数据仓库研究之二--mondrian入门What is Mondrian?Mondrian is an OLAP server written in Java. It enables you to interactively analyze very large datasets stored in SQL databases without writing SQL./projects/mondrian/Mondrian是一个开源项目。
一个用Java写成的OLAP(在线分析性处理)引擎。
它用MDX 语言实现查询,从关系数据库(RDBMS)中读取数据。
然后经过Java API用多维的方式对结果进行展示。
多维数据中,维度(dimension),层次(Hierarchies),级别(Level)等概念很重要。
OLAP用了多维分析的技术。
尽管关系型数据库所存储的所有数据都是以行和列的形式存在的,但一个多维数据集还是可以由轴(axes)和单元(cell)组成。
一.环境准备1.1Windows + Tomcat 5.0 + MySQL 5.0.211.2下载程序。
Mondrian在 可以下载,最早它是用MS Analyze Service的教程中FoodMart数据库作为demo的,那个是access的数据库。
现在有了Platform-Independent的版本,例如下载mondrian-2.1.1-derby.zip 解压缩之后在lib目录里面有一个mondrian-embedded.war,把这个直接放到tomcat的webapps目录里面就能够看到mondrian的demo了。
把这个war解开之后放到webapps里面去,并且目录把名字改为mondrian。
启动tomcat,在浏览器输入http://localhost/mondiran 看到了demo。
mondrian源码编译Mondrian是一个开源的数据分析工具,它用于构建和运行数据挖掘模型。
要使用Mondrian进行数据分析,首先需要编译其源码。
本文将介绍如何编译Mondrian源码的步骤。
一、准备工作在开始编译Mondrian源码之前,需要确保已正确安装所需的开发工具和库。
具体要求如下:1. 安装Java Development Kit(JDK)版本8或更高版本。
2. 安装Apache Maven,用于构建Mondrian项目。
3. 安装MySQL数据库,用于测试和运行Mondrian。
二、获取源码访问Mondrian的官方网站或下载页面,下载最新的Mondrian源码包。
解压缩源码包,得到相应的目录结构。
三、配置环境变量编辑系统环境变量,将Mondrian的根目录添加到JAVA_HOME环境变量中,并将Mondrian的bin目录添加到PATH环境变量中,以便在命令行中执行相关命令。
四、构建项目打开终端或命令行窗口,进入Mondrian源码目录,运行以下命令来构建项目:```shellmvn clean install```该命令将执行Maven的编译和测试任务,确保项目正确构建。
五、测试编译结果编译成功后,Mondrian源码将被编译为可执行文件,存放在Mondrian源码目录的target/bin目录下。
运行可执行文件,测试Mondrian是否能够正常工作。
在本例中,我们将使用MySQL数据库进行测试。
六、运行示例数据集在Mondrian源码目录中,找到示例数据集目录(通常为examples/scripts),将其中的数据集文件复制到数据库中。
数据集文件通常是XML格式的文件,用于描述数据集的结构和内容。
七、配置Mondrian实例在数据库中创建一个Mondrian实例(通常为mondrian_schema.xml文件),用于配置数据源、维度、事实表等。
根据示例数据集中的XML文件结构,配置相应的数据源和维度。
Mondrian Schema详解SchemaSchema 定义了一个多维数据库。
包含了一个逻辑模型,而这个逻辑模型的目的是为了书写 MDX 语言的查询语句。
这个逻辑模型实际上提供了这几个概念:Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。
而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。
在这个文件中形成逻辑模型和数据库物理模型的对应。
属性:Cube一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。
在Cube 中, Dimension 和 Measure 的共同地方就是共用一个事实表。
Cube 中的有以下几个属性:Cube 里面有一个全局的标签定义了所用的事实表的表名元素:如果事实表不在默认的数据库schema 中,你需要通过使用”schema”属性明确指出:Dimension他是一个层次( Hierarchies )的集合 , 维度一般有其相对应的维度表 . 他的组成是由层次( Hierarchies )而层次( Hierarchies )又是有级别( Level )组成 . 其属性如下:Hierarchy你一定要指定其中的各种关系 , 如果没有指定 , 就默认 Hierarchy 里面装的是来自立方体中的真实表 . 属性如下:Level级别 , 他是组成 Hierarchy 的部分。
属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。
Level 的属性如下:MeasureMeasure 就是我们要计算的数值,操作的核心。
它的属性如下:Join对于一个 Hierarchy 来说,有两种方式为其指定:一种是直接通过一个 Table 标签指定;一种是通过 Join 将若干张表连接起来指定。
一旦采用 Join 的话,那么就要在 Hierarchy 里的 primaryKeyTable 属性指定主表。
进行Mondrian的MDX语法检查2009-08-06 22:27主要是通过mondrian.olap包中的一些核心类来进行MDX语法的检查。
首先,通过mondrian.olap.DriverManager来获取一个链接对象mondrian.olap.Connection.Connection connection =DriverManager.getConnection("Provider=mondrian;Jdbc=jdbc:oracle:thin:@xxx.xxx.xxx.xxx:1521:dbname;JdbcUser=dbuser;JdbcPassword=dbpasswd;Catalog=file:///c:/Tomcat4.1/webapps/mywebapp/WEB-INF/mondriantest.x ml;JdbcDrivers=oracle.jdbc.driver.OracleDriver;",null,false);再对查询的MDX语句进行处理,使其转化为一个可查询的Query对象。
String queryStr="select {[Measures].[Salary]} ON COLUMNS,{[Employee].[employeeId].Members} ON ROWSfrom CubeTest ";Query query =connection.parseQuery(queryStr);到此为止,如果query不为空,并且parseQuery没有出现异常的话,就算是语法检查通过了。
当然,如果要进行查询结果输出的话,就显示很简单了,先查询得到 Result,再对Result进行处理就可以了。
Result result = connection.execute(query);mondrian中的Element描述2009-08-06 22:54根元素<Schema> Collection of Cubes, Virtual cubes, Shared dimensions, and Roles.逻辑元素<Cube> A collection of dimensions and measures, all centered on a fact table.<VirtualCube> A cube defined by combining the dimensions and measures of one or more cubes.<Dimension><DimensionUsage> Usage of a shared dimension by a cube.<Hierarchy><Level><Property><Measure>物理元素<Table> Fact- or dimension table.<View> Defines a 'table' using a SQL query, which can have different variants for different underlying databases.<Join> Defines a 'table' by joining a set of queries.存取控制<Role> An access-control profile.<SchemaGrant> A set of rights to a schema.<CubeGrant> A set of rights to a cube.<HierarchyGrant> A set of rights to a hierarchy and levels within that hierarchy.<MemberGrant> A set of rights to a member and its children.其他<Parameter><Table><Table>根元素<Schema>多维数据集,虚拟多维数据集,共享维度和角色集.逻辑元素<Cube>集合的尺寸和措施,都集中在一个事实表。
<VirtualCube>多维数据集定义的通过组合中的一个或多个立方体的尺寸和措施。
<Dimension><DimensionUsage>共享维度的多维数据集的使用。
<Hierarchy><Level><Property><Measure>物理元素<Table>事实维度表。
<View>定义一个“表”使用SQL查询,它可以有不同的变种不同的底层数据库。
<Join>定义了一个“表”,通过加入一组查询.存取控制<Role>一个访问控制配置文件.<SchemaGrant>一组权利的架构.<CubeGrant>一组权利的多维数据集.<HierarchyGrant>一组权利,在该层次结构的层次和水平。
<MemberGrant>一组的成员,其子女的权利.其他<Parameter><Table><Table>mondrian中的父子层次关系2009-08-06 23:01父子层次一个使用方便的层次有一个严格的层的集合, 成员与层紧密的联系.比如,在Product 层次中, 任何产品名称层的成员在商标层上都有一个父亲,商标层上的成员在产品子目录层也都有一个父亲. 这种结构对于现实世界中的数据有时候太严格了.一个父子层次只有一层 (不计算 'all' 层), 但是任何成员可以在同一层上有父亲成员. 一个典型的例子是Employees 层次:<Dimension name="Employees" foreignKey="employee_id"><Hierarchy hasAll="true" allMemberName="All Employees"primaryKey="employee_id"><Table name="employee"/><Level name="Employee Id" uniqueMembers="true" type="Numeric"column="employee_id" nameColumn="full_name"parentColumn="supervisor_id" nullParentValue="0"><Property name="Marital Status" column="marital_status"/><Property name="Position Title" column="position_title"/><Property name="Gender" column="gender"/><Property name="Salary" column="salary"/><Property name="Education Level" column="education_level"/><Property name="Management Role" column="management_role"/></Level></Hierarchy></Dimension>这里parentColumn 和nullParentValue是重要的属性:属性parentColumn 是一个成员连接到它父亲成员的列名。