Mondrian_Schema(多维分析)属性详解_第1页
Mondrian_Schema(多维分析)属性详解_第2页
Mondrian_Schema(多维分析)属性详解_第3页
Mondrian_Schema(多维分析)属性详解_第4页
Mondrian_Schema(多维分析)属性详解_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MondrianSchema详解SchemaSchema定义了一个多维数据库。包含了一个逻辑模型,而这个逻辑模型的目的是为了书写MDX语言的查询语句。这个逻辑模型实际上提供了这几个概念:Cubes(立方体)、维度(Dimensions)、层次(Hierarchies)、级别(Levels)、和成员(Members)。而一个schema文件就是编辑这个schema的一个xml文件。在这个文件中形成逻辑模型和数据库物理模型的对应。属性:属性名含义nameSchema勺名字measuresCaption在表小层显小的内谷Cube一个Cube是一系列维度(Dimension)和度量(Measure)的

2、集合区域。在Cube中,Dimension和Measure的共同地方就是共用一个事实表。Cube中的有以下几个属性:属性名含义nameCube的名字caption标题,在表示层显示的cache是否对Cube对应的实表用mondrian进行存储,默认为trueenabled是布尔型的,如果是被激活,Cubes就执行,否则就不予理睬,默认为truedefaultMeasureCube里面有一个全局的标签定义了所用的事实表的表名元素:元素名含义table定义该Cube中的事实表如果事实表不在默认的数据库schema中,你需要通过使用"schema属性明确指出Tableschemadinar

3、t*name=*sales_fact_1997*/>Dimension他是一个层次(Hierarchies)的集合,维度一般有其相对应的维度表.他的组成是由层次(Hierarchies)而层次(Hierarchies)又是有级别(Level)组成.其属性如下:属性名含义nameDimension的名称type类型,后两个可选的类型:StandarDimension和TimeDimension,默认为StandardDimensioncaption标题,在表示层显示的UsagePrefix加前缀,消除歧义foreignKey外键,对应事实表中的一个列,匕通过<Hierarchy>

4、;兀素中的主键属性(primaryKey)连接起来。Hierarchy你一定要指定其中的各种关系,如果没有指定,就默认Hierarchy里面装的是来自立方体中的真实表.属性如下:属性名含义nameHierarchy的名称,该值可以为空,为空时表小Hirearchy的名子和Dimension的名子相同。当一'个Dimension有多个Hierarchy时,注意name值要唯一。hasAll布尔型的,决定是否包含全部的成员memberallMemberName所有成员的名字,也就是总的标题,例如:allMemberName="全部产品”allLevelName所有级别的名字,它会

5、覆盖具卜所后的Member的name和所有的Level的name属性的值。allMemberCaption例如:allMemberCaption-全部广品这个是在表小层显示的内容PrimaryKey通过主键来确定成员,该主键指的是成员表中的主键,该主键同时要与Dimension里设置的foreignKey属性对应的字段形成外键对应关系primaryKeyTable如果成员表不只一个,而是多个表通过join关系形成的,那么就要通过这个属性来指明join的这些表中,哪一个与Dimension里设置的foreignKey属性形成外键关系。通过该属性来指明主表caption标题,在表示层显示的defa

6、ultMember用来覆盖层次中的默认的成员memberReaderClass设廿个成员读取器,默认情况下Hierarchy都是从关系型数据库里读取的,如果你的数据/、在RDBMS里面的话,你可以通过自止义一个memberreader来表现一个Hierarchy。primaryTable如果层次有多于一个的表,你应该使用primaryTable属性以消除歧义。Level级别,他是组成Hierarchy的部分。属性很多,并且是schema编写的关键,使用它可以构成一个结构树,Level的先后顺序决定了Level在这棵树上的的位置,最顶层的Level位于树的第一级,依次类推Level的属性如下:属

7、性名含义name名称table该Level要使用的表名column用上面指定的表中某一列作为该Level的关键字nameColumn用来显示的时候使用,如果不定义,那么就采用上面的column的值来进行显小。ordinalColumn1定义该Level上的成员的显示顺序,如果不指定,那么采用column的值。parentColumn11在一个有父-子关系的Hierarchy当中,当前Level引用的是其父成员的列名。好比是一张部门表,在一张表里表现部门的上下级关系,一个是主键,肯定还有一个字段为连接到该主键的外键的列名,这里的parentColumn指的就是这个列名。nullParentVal

8、ue如果当前的Level是有上下级关系(设置了parentColumn属性),如果该Level又处于顶级,我们需要将顶级的数据取出来,这里指的是位于顶级的父成员的值,有些数据库/、支持null,那么也可以使用0'或'-1'等,这就表示顶级的成员的父ID为0'或为-1。type数据类型,默认值为stringo当然还可以是Numeric、nteger、Boolean、Date等。uniqueMembers1该属性用于优化产生的SQL,如果你知道这个级别和其父级别交叉后的值或者是维度表中给定的级别所有的值是唯一的,那么就可以设置该值为true,否则为false。在最顶

9、层的级别中,一直都应该设置为UniqueMembers=true,因为这里没有父级别evelType该Level的类型,默认为regular(正常的),如果你在其Dimension属性type里选择了TimeDimension那么这里就可以选择TimeYears、TimeQuarters、TimeMonth、TimeWeeds、TimeDays。hideMemberIf在什么时候不隐藏该成员,可选的值肩二个:Never、fBlankName、IfParentNamehighCardinality111局基数属性,是用于通知Mondiran这里的维度兀素的值很大而且没有定义,可以选择该属性的值为

10、true或false(默认值),当highCardinality=true的时候,对超出维度兀素的操作将不会被执行。approxRowCount11该属性可以用来提高性能,可以通过指廿个数值以减少判断级别、层次、维度基数的时间,该属性在通过使用XMLA连接Mondrian很有用处。caption标题,在表小层显小的captionColumn用来显示标题的列formatter该属性定义了Member.getCaption()方法返回的动作值,这里需要是一个实现了mondrian.olap.MemberFormatter接口的类,用来对Caption地值进行格式化。MeasureMeasure就是

11、我们要计算的数值,操作的核心。它的属性如下:属性名含义name名称aggregator要采用的计算函数column要计算的列名formatString计算结果的显示格式。visible是否可见datatype数据类型,默认为Numericformatter米用类来对该Measure的值进仃格式,具体参考Level的formatter属性。caption标题,用来显示时使用。Join对于一个Hierarchy来说,有两种方式为其指定:一种是直接通过一个Table标签指定;一种是通过Join将若干张表连接起来指定。一旦采用Join的话,那么就要在Hierarchy里的primaryKeyTable

12、属性指定主表。进行Mondrian的MDX§法检查2009-08-0622:27主要是通过mondrian.olap包中的一些核心类来进行MDX§法的检查。首先,通过mondrian.olap.DriverManager来获取一个链接对象mondrian.olap.Connection.Connectionconnection=DriverManager.getConnection("Provider=mondrian;Jdbc=jdbc:oracle:thin:xxx.xxx.xxx.xxx:1521:dbname;JdbcUser=dbuser;JdbcPas

13、sword=dbpasswd;Catalog=file:/c:/Tomcat4.1/webapps/mywebapp/WEB-INF/mondriantest.xml;JdbcDrivers=oracle.jdbc.driver.OracleDriver;",null,false);再对查询的MDX§句进行处理,使其转化为一个可查询的Query对象。StringqueryStr="selectMeasures.SalaryONCOLUMNS,Employee.employeeId.MembersONROWSfromCubeTest"Queryquery=

14、connection.parseQuery(queryStr);到此为止,如果query不为空,并且parseQuery没有出现异常的话,就算是语法检查通过了。当然,如果要进行查询结果输出的话,就显示很简单了,先查询得到Result,再对Result进行处理就可以了。Resultresult=connection.execute(query);mondrian中的Element描述2009-08-0622:54根元素<Schema>CollectionofCubes,Virtualcubes,Shareddimensions,andRoles.逻辑元素<Cube>Aco

15、llectionofdimensionsandmeasures,allcenteredonafacttable.<VirtualCube>Acubedefinedbycombiningthedimensionsandmeasuresofoneormorecubes.<Dimension><DimensionUsage>Usageofashareddimensionbyacube.<Hierarchy><Level><Property><Measure>物理元素<Table>Fact-ordimens

16、iontable.<View>Definesa'table'usingaSQLquery,whichcanhavedifferentvariantsfordifferentunderlyingdatabases.<Join>Definesa'table'byjoiningasetofqueries.存取控制<Role>Anaccess-controlprofile.<SchemaGrant>Asetofrightstoaschema.<CubeGrant>Asetofrightstoacube.<

17、HierarchyGrant>Asetofrightstoahierarchyandlevelswithinthathierarchy.<MemberGrant>Asetofrightstoamemberanditschildren.其他<Parameter><Table><Table>mondrian中的父子层次关系2009-08-0623:01父子层次一个使用方便的层次有一个严格的层的集合,成员与层紧密的联系.比如,在Product层次中,任何产品名称层的成员在商标层上都有一个父亲,商标层上的成员在产品子目录层也都有一个父亲.这种结构对

18、于现实世界中的数据有时候太严格了.一个父子层次只有一层(不计算'all'层),但是任何成员可以在同一层上有父亲成员.一个典型的例子是Employees层次:<Dimensionname="Employees"foreignKey="employee_id"><HierarchyhasAll="true"allMemberName="AllEmployees"primaryKey="employee_id"><Tablename="emplo

19、yee"/><Levelname="EmployeeId"uniqueMembers="true"type="Numeric"column="employee_id"nameColumn="full_name"parentColumn="supervisor_id"nullParentValue="0"><Propertyname="MaritalStatus"column="marital_

20、status"/><Propertyname="PositionTitle"column="position_title"/><Propertyname="Gender"column="gender"/><Propertyname="Salary"column="salary"/><Propertyname="EducationLevel"column="education_level&q

21、uot;/><Propertyname="ManagementRole"column="management_role"/></Level></Hierarchy></Dimension>这里parentColumn和nullParentValue是重要的属性:属性parentColumn是一个成员连接到它父亲成员的列名。在这种t#况下,它是指向雇员经理的外键。元素<Level>的子元素<ParentExpression>是与属性parentColumn有相同作用的,但是元素允

22、许定义任意的SQ达达式,就像元素<Expression>.属性parentColumn(或者元素<ParentExpression>)是维一向Mondrian指出层次有父子结构的。属性nullParentValue是指明成员没有父成员的值。缺省情况下nullParentValue="null",但是因为许多数据库不支持null,建模时用其他值来代替空值,0和-1.mondrian的国际化2009-08-0623:11在Schema!的Dimension>Level、Measure标签者B有个caption属性,在shecma里有个measure

23、sCaption属性,Hierarchy里有个allMemberCaption属性都是国际化显示用的。格式为:caption="%。"通过以下几个步骤便可实现国际化一、修改Schem破口下<DimensionforeignKey="TIME_ID"name="TIME"><HierarchyhasAll="true"allMemberName="Alltime"primaryKey="TIME_ID“allMemberCaption="%compensati

24、on.dimension.time.allmember.caption”><Tablename="TIME_TO_MONTH"></Table><Levelname="YEAR"table="TIME_TO_MONTbolumn="YEAR"type="String"uniqueMembers="false"levelType="Regular"hideMemberIf="Never"></Leve

25、l><Levelname="QUARTER'able="TIME_TO_MONTbolumn="QUARTERype="String"uniqueMembers="false"levelType="Regular"hideMemberIf="Never"></Level><Levelname="MONTHtable="TIME_TO_MONTdolumn="MONTH"ype="String&

26、quot;uniqueMembers="false"levelType="Regular"hideMemberIf="Never"></Level></Hierarchy></Dimension><Measurename="UOT1"column="UOT1"caption="%compension.measure.uot1.caption"datatype="Numeric"formatstring=&qu

27、ot;#,#0.#"aggregator="sum"></Measure>二、在WEBApplication的classes里创建对应的国际化文件,命名如下locale_zh_CN.propertiescompensation.dimension.time.allmember.caption=u5168u90e8u65f6u95f4compensation.dimension.position.allmember.caption=u5168u90e8u8d44u4f4dcompension.measure.uot1.caption=1.5u500du52a0u73edu65f6u6570compension.measure.uot2.caption=2u500du52a0u73edu65f6u6570compension.measure.uot3.caption=3u500du52a0u73edu65f6

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论