数据模式(Schema)定义
Created 星期一 24 十月 2016
模式(Schema)定义了一个多维数据库,它包一个含逻辑模型,并定义了逻辑模型到物理模型的映射。
物理模型包含多维数据的存储方式:事实表、维表及其结构等。
逻辑模型包含了用于MDX 查询的结构,如数据立方体、维度、层次、成员、度量等。
Mondrian 使用一个XML 文件来描述模式。
Mondrian 包含一个创建、修改模式文件的Java桌面应用schema-workbench。
模式文件
Schema 文件可以定义虚拟立方体,基于一个或多个基础立方体来建立。也可以定义角色以及角色的访问权限(对立方体、维度等)。有关虚拟立方体和角色的内容本文档不涉及。
Schema 文件主要结构如下(去掉了VirtualCube 和Role 等):
Schema 包含立方体、虚拟立方体、共享维度、角色
Cube 维度和度量的集合,以事实表为中心
Table 事实表
AggName 声明一个聚集表
aggElements 聚集表设置,结构见下
AggPattern 声明一批聚集表
aggElements
Dimension 维度
Hierarchy 维度层次
relation 物理表、视图,结构见下
Closure/ 映射父子层次关系
Level 一个层次
DimensionUsage 引用共享维度
Measure 度量
CalculatedMemberProperty/
CalculatedMember 计算成员
NamedSet 命名集合
Formula/ 公式
UserDefinedFunction/ 声明用户自定义函数
Relation 可以是Table、View、Inline Table、Join:
aggElement 可以是以下元素:
- AggExclude
- AggFactCount
- AggIgnoreColumn
- AggForeignKey
- AggMeasure
- AggLevel
示例:
personDemo.xml
<?xml version="1.0" encoding="UTF-8"?>
<Schema name="Mondrian"> <!--模型定义-->
<Cube name="Person"> <!--立方体 ,一个立方体有多个维度-->
<Table name="PERSON" /> <!--立方体对应的事实表 -->
<Dimension name="部门" foreignKey="USERID" > <!--定义维度 -->
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有部门" > <!--定义维度下面的层次,层次包含很多层 -->
<Table name="PERSON" alias="a"/> <!--定义维度获取数据的来源-维表 -->
<Level name="部门" column="DEPARTMENT" uniqueMembers="true" /> <!--定义层次的层,每个层对应数据库中对应的字段 -->
<Level name="姓名" column="USERNAME" uniqueMembers="true" />
</Hierarchy>
</Dimension>
<Dimension name="性别" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有性别">
<Table name="PERSON" alias="b" />
<Level name="性别" column="SEX" uniqueMembers="true" />
</Hierarchy>
</Dimension>
<Dimension name="专业技术资格类别" foreignKey="USERID" >
<Hierarchy hasAll="true" primaryKey="USERID" allMemberName="所有专业技术资格类别"> </