您的位置:首页 > 其它

数据仓库之mondrian的学习

2015-07-21 11:36 260 查看


Mondrian Schema解析

(2013-03-28 18:38:55)


转载▼

分类: 技术之路


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 里面装的是来自立方体中的真实表 . 属性如下:
属性名
含义
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
标题,用来显示时使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: