Mondrian Schema解析

来源:互联网 发布:淘宝客最低佣金是多少 编辑:程序博客网 时间:2024/05/29 18:17

Schema

Schema 定义了一个多维数据库。包含了一个逻辑模型,而这个逻辑模型的目的是为了书写MDX 语言的查询语句。这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies)、级别( Levels )、和成员( Members )。而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。在这个文件中形成逻辑模型和数据库物理模型的对应。

Cube

一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。在 Cube 中, Dimension Measure 的共同地方就是共用一个事实表。 Cube 中的有以下几个属性:

属性名

含义

name

Cube 的名字

caption

标题 , 在表示层显示的

cache

是否对 Cube 对应的实表用 mondrian 进行存储 , 默认为true

enabled

是布尔型的 , 如果是被激活 ,Cubes 就执行 , 否则就不予理睬,默认为true

Cube 里面有一个全局的标签定义了所用的事实表的表名

Dimension

他是一个层次( Hierarchies)的集合 , 维度一般有其相对应的维度表 . 他的组成是由层次( Hierarchies )而层次( Hierarchies)又是有级别( Level )组成 . 其属性如下:

属性名

含义

name

Dimension 的名称

type

类型,有两个可选的类型: StandarDimension TimeDimension ,默认为 StandardDimension

caption

标题 , 在表示层显示的

UsagePrefix

加前缀 , 消除歧义

foreignKey

外键,对应事实表中的一个列,它通过 <Hierarchy> 元素中的主键属性连接起来。

Hierarchy

你一定要指定其中的各种关系 ,如果没有指定 , 就默认 Hierarchy 里面装的是来自立方体中的真实表 . 属性如下:

属性名

含义

name

Hierarchy 的名称,该值可以为空,为空时表示Hirearchy 的名字和 Dimension 的名字相同。当一个Dimension 有多个 Hierarchy 时,注意 name 值要唯一。

hasAll

布尔型的 , 决定是否包含全部的成员 member

allMemberName

所有成员的名字 ,也就是总的标题 , 例如: allMemberName= “全部产品”

allLevelName

所有级别的名字,它会覆盖其下所有的 Member name 和所有的 Level name 属性的值。

allMemberCaption

例如 : allMemberCaption=“全部产品”这个是在表示层显示的内容

PrimaryKey

通过主键来确定成员,该主键指的是成员表中的主键,该主键同时要与Dimension 里设置的 foreignKey 属性对应的字段形成外键对应关系

primaryKeyTable

如果成员表不只一个,而是多个表通过 join 关系形成的,那么就要通过这个属性来指明 join 的这些表中,哪一个与Dimension 里设置的 foreignKey 属性形成外键关系。通过该属性来指明主表

caption

标题 , 在表示层显示的

defaultMember

memberReaderClass

设定一个成员读取器,默认情况下 Hierarchy 都是从关系型数据库里读取的,如果你的数据不在 RDBMS 里面的话,你可以通过自定义一个member reader 来表现一个 Hierarchy

Level

级别 , 他是组成 Hierarchy 的部分。属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。 Level的属性如下:

属性名

含义

name

名称

table

Level 要使用的表名

column

用上面指定的表中某一列作为该 Level的关键字

nameColumn

用来显示的时候使用,如果不定义,那么就采用上面的column 的值来进行显示。

oridinalColumn

定义该 Level上的成员的显示顺序,如果不指定,那么采用 column 的值。

parentColumn

在一个有父 - 子关系的 Hierarchy 当中,当前 Level 引用的是其父成员的列名。好比是一张部门表,在一张表里表现部门的上下级关系,一个是主键,肯定还有一个字段为连接到该主键的外键的列名,这里的parentColumn 指的就是这个列名。

nullParentValue

如果当前的 Level是有上下级关系(设置了 parentColumn 属性),如果该 Level又处于顶级,我们需要将顶级的数据取出来,这里指的是位于顶级的父成员的值,有些数据库不支持 null, 那么也可以使用 ’0’ ’-1’ 等,这就表示顶级的成员的父ID ’0’ 或为 ’-1’

type

数据类型,默认值为 string。当然还可以是 Numeric Integer Boolean Date 等。

uniqueMembers

该属性用于优化产生的 SQL,如果你知道这个级别和其父级别交叉后的值或者是维度表中给定的级别所有的值是唯一的,那么就可以设置该值为 true,否则为 false

levelType

Level 的类型,默认为 regular (正常的),如果你在其 Dimension属性 type 里选择了 TimeDimension 那么这里就可以选择 TimeYears TimeQuarters TimeMonth TimeWeeds TimeDays

hideMemberIf

在什么时候不隐藏该成员,可选的值有三个: Never IfBlankName IfParentName

approxRowCount

该属性可以用来提高性能,可以通过指定一个数值以减少判断级别、层次、维度基数的时间,该属性在通过使用XMLA 连接 Mondrian 很有用处。

caption

标题 , 在表示层显示的

captionColumn

用来显示标题的列

formatter

该属性定义了 Member.getCaption()方法返回的动作值,这里需要是一个实现了 mondrian.olap.MemberFormatter 接口的类,用来对 Caption 地值进行格式化。

Join

对于一个 Hierarchy来说,有两种方式为其指定:一种是直接通过一个 Table 标签指定;一种是通过 Join 将若干张表连接起来指定。一旦采用 Join 的话,那么就要在Hierarchy 里的 primaryKeyTable 属性指定主表。

Measure

Measure 就是我们要计算的数值,操作的核心。它的属性如下:

属性名

含义

name

名称

aggregator

要采用的计算函数

column

要计算的列名

formatString

计算结果的显示格式。

visible

是否可见

datatype

数据类型,默认为 Numeric

formatter

采用类来对该 Measure的值进行格式,具体参考 Level formatter属性。

caption

标题,用来显示时使用。