Schema 定义了一个多维数据库。包含了一个逻辑模型,而这个逻辑模型的目的是为了书写 MDX 语言的查询语句。这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。在这个文件中造成逻辑模型和数据库物理模型的对应。数据库
一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。在 Cube 中, Dimension 和 Measure 的共同地方就是共用一个事实表。 Cube 中的有如下几个属性:app
属性名ide |
含义函数 |
name性能 |
Cube 的名字优化 |
captionspa |
标题 , 在表示层显示的orm |
cachexml |
是否对 Cube 对应的实表用 mondrian 进行存储 , 默认为 true接口 |
enabled |
是布尔型的 , 若是是被激活 ,Cubes 就执行 , 不然就不予理睬,默认为 true |
Cube 里面有一个全局的标签订义了所用的事实表的表名
他是一个层次( 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 。 |
级别 , 他是组成 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 地值进行格式化。 |
对于一个 Hierarchy 来讲,有两种方式为其指定:一种是直接经过一个 Table 标签指定;一种是经过 Join 将若干张表链接起来指定。一旦采用 Join 的话,那么就要在 Hierarchy 里的 primaryKeyTable 属性指定主表。
Measure 就是咱们要计算的数值,操做的核心。它的属性以下:
属性名 |
含义 |
name |
名称 |
aggregator |
要采用的计算函数 |
column |
要计算的列名 |
formatString |
计算结果的显示格式。 |
visible |
是否可见 |
datatype |
数据类型,默认为 Numeric |
formatter |
采用类来对该 Measure 的值进行格式,具体参考 Level 的 formatter 属性。 |
caption |
标题,用来显示时使用。 |