http://www.sjsjw.com/105/000790MYM013012/
pentaho schema workbench 图文教程
通过简单示例,介绍schema workbench的使用方法。表的示例是从网络上找的一个简单销售表及产品、产品类别、客户维度表组成;逻辑简单易懂。
1、 创建示例数据库
1.1. 创建表SQL
共四张表,一个事实表,三个维度表,创建表的语句如下:
/**销售表*/
create table Sale (
saleId intnot null,
proId intnull,
cusId intnull,
unitPricefloat null, --单价
number intnull, --数量
constraintPK_SALE primary key (saleId)
)
/**用户表*/
create table Customer (
cusId intnot null,
genderchar(1) null, --性别
constraintPK_CUSTOMER primary key (cusId)
)
/**产品表*/
create table Product (
proId intnot null,
proTypeIdint null,
proNamevarchar(32) null,
constraintPK_PRODUCT primary key (proId)
)
/**产品类别表*/
create table ProductType (
proTypeIdint not null,
proTypeNamevarchar(32) null,
constraintPK_PRODUCTTYPE primary key (proTypeId)
)
1.2. 插入示例数据
insert into Customer(cusId,gender) values(1,'F')
insert into Customer(cusId,gender) values(2,'M')
insert into Customer(cusId,gender) values(3,'M')
insert into Customer(cusId,gender) values(4,'F')
insert into producttype(proTypeId,proTypeName)values(1,'电器')
insert into producttype(proTypeId,proTypeName)values(2,'数码')
insert into producttype(proTypeId,proTypeName)values(3,'家具')
insert into product(proId,proTypeId,proName)values(1,1,'洗衣机')
insert into product(proId,proTypeId,proName)values(2,1,'电视机')
insert into product(proId,proTypeId,proName)values(3,2,'mp3')
insert into product(proId,proTypeId,proName)values(4,2,'mp4')
insert into product(proId,proTypeId,proName) values(5,2,'数码相机')
insert into product(proId,proTypeId,proName)values(6,3,'椅子')
insert into product(proId,proTypeId,proName)values(7,3,'桌子')
insert into sale(saleId,proId,cusId,unitPrice,number)values(1,1,1,340.34,2)
insert into sale(saleId,proId,cusId,unitPrice,number)values(2,1,2,140.34,1)
insert into sale(saleId,proId,cusId,unitPrice,number)values(3,2,3,240.34,3)
insert into sale(saleId,proId,cusId,unitPrice,number)values(4,3,4,540.34,4)
insert into sale(saleId,proId,cusId,unitPrice,number)values(5,4,1,80.34,5)
insert into sale(saleId,proId,cusId,unitPrice,number)values(6,5,2,90.34,26)
insert into sale(saleId,proId,cusId,unitPrice,number)values(7,6,3,140.34,7)
insert into sale(saleId,proId,cusId,unitPrice,number)values(8,7,4,640.34,28)
insert into sale(saleId,proId,cusId,unitPrice,number)values(9,6,1,140.34,29)
insert into sale(saleId,proId,cusId,unitPrice,number)values(10,7,2,740.34,29)
insert into sale(saleId,proId,cusId,unitPrice,number)values(11,5,3,30.34,28)
insert into sale(saleId,proId,cusId,unitPrice,number)values(12,4,4,1240.34,72)
insert into sale(saleId,proId,cusId,unitPrice,number)values(13,3,1,314.34,27)
insert into sale(saleId,proId,cusId,unitPrice,number)values(14,3,2,45.34,27)
2、 schema概要说明
Schema 定义了一个多维数据库。包含了一个逻辑模型,而这个逻辑模型的目的是为了书写 MDX 语言的查询语句。逻辑模型包括几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。在这个文件中形成逻辑模型和数据库物理模型的对应。schemaworkbench 工具创建xml文件非常简单易用。
3、 通过schema workbench创建schema文件
3.1、 配置数据库连接
创建数据库连接,需要事先拷贝数据库驱动程序到schema workbench目录下的drivers文件夹中,然后启动workbench程序,从Optionsàconnection…或者如下图所示点击工具栏按钮。
输入连接属性,测试成功,确定关闭窗口。 3.2、 创建schema文件 从文件菜单或点击工具栏新建按钮,创建schema,弹出界面如下: |
给schema命名SaleSchema并保存; 3.3、 创建cube 一个 Cube 是一系列维度 (Dimension) 和度量 (Measure) 的集合区域。在 Cube 中, Dimension 和Measure 的共同地方就是共用一个事实表。 在左边视图中选择schema节点,点击工具栏cube按钮或右键菜单中,增加cube,然后给cube命名SalesCube并保存。 |
在cube节点上点击右键,增加事实表,选择相应的事实表sale。如下图: |
点击工具栏编辑模式按钮可以切换查看对应生成的xml文件。 |
3.4、 增加客户维度 维度是一个层次( Hierarchies )的集合 , 维度一般有其相对应的维度表 . 他的组成是由层次( Hierarchies )而层次( Hierarchies )又是有级别( Level )组成 。在cube上右键增加维度,并命名dimCustomer保存。需要选择foreignKey,即在事实表中用于引用customer表的外键。 |
增加对应的层次,默认已经给我们建好了一个层次,展开dimCustomer维度看到。修改层次属性,名称可以为空,同时修改 allMemberName,allMemberCaption以及primaryKey字段的值(维表的主键);增加维表Customer。 |
3.4.1、 增加级别 是组成 Hierarchy 的部分。属性很多,并且是 schema 编写的关键,使用它可以构成一个结构树, Level 的先后顺序决定了 Level 在这棵树上的的位置,最顶层的 Level 位于树的第一级,依次类推。 选择级别对应的列名称即可。 |
3.5、 增加产品维度 因为产品维由两个表连接而成,稍稍有些复杂;还是在cube节点上右键增加维度。输入名称和事实表中关联外键。 |
修改默认添加的维度信息,在此维度节点上右键添加join,分别为Product和ProductType.所以需要在维度信息的primaryKeyTable属性中指明主表。 |
设定join的左右表,然后设定join关联建leftKey和rightKey,完成之后,在维度信息设置primaryKeyTable,则primaryKey自动设置为proId。 |
3.5.1、 增加productId级别 在维度节点上右键增加级别,填写相应属性值;级别对应的表和列以及显示列的值,是否为唯一成员。 |
3.5.2、 增加productTypeId级别 同样步骤设置productTypeId级别; |
3.6、 添加度量 Measure 就是我们要计算的数值,操作的核心内容。 3.6.1、 增加销售数量度量 在cube上右键添加度量,输入字段、数据类型及计算方式。 |
3.6.2、 增加总销售额度量 销售额是(unitPrice * number)表达式计算出来的,不能简单设置某个列能实现,需要在该度量上右键添加表达式,然后编辑表达式的值来实现。 |
3.6.3、 添加计算成员类型度量 在cube上右键添加计算度量。默认增加了公式,编辑公式内容,同时也给计算成员添加了 |
3.7、 验证xml结果 新建mdx query,载入对应的schema文件,输入mdx查询语句,点击执行测试,没有错误显示结果,如下图所示。 select {[Measures].saleNumber,[Measures].saleAmount,[Measures].avgPrice} oncolumns, {([dimProductType].[allProduct],[dimCustomer].[allCustomer])} onrows from[salesCube] |