数据准备
表结构
- 时间维表
主要字段
表名:time_by_day |
|
|
字段名称 |
描述 |
其他 |
Time_id |
时间ID |
主键 |
The_date |
日期 |
|
The_month |
月份 |
|
quarter |
季度 |
|
The_year |
年份 |
|
- 部门维表
主要字段
表名: department |
|
|
|
字段名称 |
描述 |
其他 |
|
department_id |
部门ID |
主键 |
|
department_description |
部门名称 |
|
- 雇员表
主要字段
表名: employee |
|
|
字段名称 |
描述 |
其他 |
employee_id |
雇员ID |
主键 |
full_name |
雇员名称 |
|
supervisor_id |
父ID |
|
- 事实表
主要字段
表名: salary |
|
|
字段名称 |
描述 |
其他 |
Pay_date |
时间ID |
外键 |
employee_id |
雇员ID |
外键 |
Department_id |
部门ID |
外键 |
salary_paid |
薪水 |
|
表关系视图
Cube制作
下面的操作将创建包含一个时间维、一个商品维和一个度量的cube模型。
- 将事实表的数据源的jdbc驱动放到schema-workbench\drivers下
- 打开mondrain设计器(workbench),设置好相关信息,测试连接数据源,并保存
- 新建Schema
- 右键Schema节点,点击"add cube",设置cube名称
- 右键点击"Add Table"添加"事实表",并选择"salary"表
- 右键点击"Add Dimension"添加时间维,设置名称、指定事实表外键(时间外键pad_date)和维度类型,时间维必须指定为"TimeDimension"
- 修改Hierarchy的名称
- 右键添加维表,并选择维表time_by_day
- 设置Hierarchy的主键为时间维表的主键the_date。
- 右键新建层次,设置名称为"年",column为"the_year",namecolumn为"the_year",levelType必须设置为"TimeYears"
- 同理,建"季"和"月"两个层次,并设置相关名称、column和namecolumn,levelType分别为"TimeQuarters"和"TimeMonths"
- 同理新建"部门维",部门为普通维度,type为"StandardDimension"
- 同理,新建商店维的层次,并做好与维表的字段对应设置
- 同理新建"雇员维",雇员为父子维度,type为"StandardDimension"
- 添加雇员维表
- 新建雇员层次,雇员是父子维,只有一个level,设置colunm、namecolumn、parentcolumn和nullparentvalue。
这里parentColumn 和nullParentValue是重要的属性: 属性parentColumn 是一个成员连接到它父亲成员的列名。在这种情况下, 它是指向雇员经理的外键。元素<Level>的子元素 <ParentExpression> 是与属性 parentColumn 有相同作用的,但是元素允许定义任意的SQL表达式, 就像元素 <Expression>. 属性 parentColumn (或者元素<ParentExpression>) 是维一向Mondrian指出层次有父子结构的。 属性 nullParentValue 是指明成员没有父成员的值 。 缺省情况下 nullParentValue="null", 但是因为许多数据库不支持null, 建模时 用其他值来代替空值,0和-1.
- 右键点击"Add Measure"新建度量
- 设置度量名称、对应事实表的字段、聚合规则
- 保存cube模型
- 保存成功后,用文本编辑器打开该xml文件,加入xml头<?xml version="1.0" encoding="UTF-8" ?>
上传cube模型
- 打开IE,在地址栏中输入地址:http://localhost:8080/mondrian/manager/
- 输入名称、描述、jdbc驱动字符串、jdbcurl地址、数据库的用户密码和选择cube模型文件
以本文档中mysql为例:
jdbc驱动字符串: com.mysql.jdbc.Driver
URL地址:jdbc:mysql://localhost:6688/foodmartcn?useUnicode=true&characterEncoding=GBK
- 点击"新建",完成cube模型上传