OLAP数据建模工具Workbench的初步使用(数据立方体的建立)
概要:
1.workbench工具简介
2.workbench简单操作(附demo)
3.workbench初步使用总结
1.workbench工具简介
OLAP,(Online Analytical Processing,联机分析处理)。从事相关工作的小伙伴,具体的相关概念就不一一赘述,概念不懂,有古哥和度娘的柔怀。在这里,主要介绍一番在OLAP中,数据建模的工具workbench的使用。我们知道,要想进行OLAP,则需要建立数据立方体,来从多个维度来分析数据,从而得到相应的信息。关于数据立方体(Cube),其实就是一个XML文件,然后由ROLAP(relation-olap)服务器,如mondrian,或者轻量级OLAP分析引擎Saiku进行解析,最后将所需的信息以报表形式呈现。
所以,OLAP数据建模,即数据立方体的建立也就相当关键,直接影响结果的准确性。对于数据立方体,可以采用直接写XML的形式写出来。然而当数据立方体比较大,对应的XML会非常的大,内容也很多。对于维护以及查阅,造成一定的困难。所以这个时候,建议使用OLAP建模工具workbench来创建数据立方体。简单来说,workbench就是一个建立数据立方体的图形界面工具,由Java语言开发。通过workbench的图形界面,建立数据立方体,然后该工具帮你自动生成对应的XML。当然,有些大大说不好用,的确有些地方用着不舒服,但是一个人一种习惯,自己顺手就好啦。一句话:工具为了提升效率,别和自己过不去呀。
2.workbenchbench简单操作
下面我们通过一个简单的demo,来创建一个数据立方体,show一下工具的简单使用。
相关参数:
a. 数据立方体:myCube
b. 所连数据库:test
c. 关联事实表:my_fact_table
d. 关联维度表:my_dim_table
e. 所建维度:myDimension
f. 所建指标:myMeasure和myCM
注:涉及概念,古哥和度娘在等你。
1)连接数据库
a.因为所建的这个数据立方体是关联到一个数据库中的数据,所以我们需要先连接一个库。我所使用的是本地mysql数据库。
如图1.
b.如图2,弹出如下界面,选择“一般”-->连接类型选择“MySQL”-->连接方式选择“Native(JDBC)”-->填写右侧设置中的信息。
c.如图3,点击测试,测试是否可以连接成功。若OK,点击确认,连接完成。
2)建立Schema
何谓Schema?简单来说,就是描述一个逻辑模型到数据库中物理模型的映射的。其实他就是数据库中的一个命名空间,里面包含着诸如表、索引等对象。
a.如图4.File-->new-->Schema
b.如图5,填写Schema相关信息。
·name:指该Schema名称,我们命名为mySchema。
·description:该Schema相关的描述,可以为空
3)建立Cube
a.如图6
b.如图7,填写Cube相关信息
·name:指该Cube名称,我们命名为myCube
·description:该Cube的描述,可以为空,对外不可见
·caption:对外显示的标题
4)Cube关联事实表
a.如图8
b.如图9,选择相关的事实表,我们选择my_fact_table。
5)建立维度myDimension
a.如图10
b.如图11,填写Dimension相关信息
·name:指该维度的名字,我们命名为myDimension
·description:该维度的描述,对外不可见,可以为空
·foreignKey:这是指维度表在事实表中的外键。如事实表my_fact_table与维度表my_dim_table通过字段user_id相关联,即my_fact_table事实表中,user_id的字段内容是维度表my_dim_table中的主键。则user_id则是外键,所以将user_id填入此处,用来关联两个表。记住,此处填写的是事实表中的字段,不是维度表中的。
·caption:对外显示的标题
c.如图12,填写维度下层次的信息
·primaryKey:指的是维度表中的主键,此处需要关联完维度表后选择。
d.如图13,14,为该维度关联维度表
e.如图15,16,建立维度的层级,并填写相关信息
·name:层级的名词,我们命名为myLevel
·table:此处填写要关联的维度表,但因为之前已经关联,所以此处为空,不需要填写。
·column:此处是和事实表关联的字段
·nameColumn:此处是维度表中,将要显示的字段,若为空,则默认显示column处的字段内容,一般不填写,而是把该内容写到column中。
·type:要显示列的数据类型,如nameColumn为空,则填column处字段的类型
·levelType:除了时间,其他类型都选择Regular
·hideMemberIf:一般都选择Never,即不管什么情况下,数据都不隐藏
·caption:对外显示的名字
·visible:勾选,对外可见
f.别忘记了第c步中选择主键哦
6)建立指标
6-1)建立正常指标
a.如图17
b.如图18,填写相关信息
·name:指标名称,我们命名为myMeasure
·aggregator:我们采用的聚合函数,可以通过下拉选择,这里我们采用distinct-count,来计算一共有多少个user_id
·column:要应用函数的列,这里我们在下拉中选择user_id
·formatString:结果显示的形式,这里我们没有选,可以选择###.###,以三位一组来显示。
·datatype:要显示的结果是什么类型的,我们选择Numeric,也可以选择Integer,因为我们是计算user_id的数量
·caption:对外显示的标题
·visible:勾选,对外可见
6-2)建立带sql表达式的指标
如果我们要应用函数的列不是一整列,而是该列中符合我们筛选条件的一部分,该怎么办呢?简单,通过添加表达式来书写筛选sql来得到我们要应用函数的那一列的部分。
a.如图19
b.如图20,我们要书写筛选条件sql,采用sql的条件语句:
case when my_fact_table.id < 10 then my_fact_table.user_id else null end
意思是:如果事实表中的主键id小于10,那么我们将主键小于10的user_id来应用distinct-count函数,否则,该列为空。
小技巧:这里书写完sql,如果你直接点击左侧的菜单栏,当你再次打开这个sql时,就发现,哎?怎么是空白的?我之前写的sql呢?报警了啊!居然没了!对,你没有看错,就是没了。我也不知道为啥会这样,估计是这工具的一个小bug,但是这种问题如何解决呢?简单!只要点击当前页面的任意一个选项就可以啦,你看下面不是有个dialect吗?鼠标双击它,然后再点击菜单栏,问题就没了,sql就保存了。我也是费了好大劲才发现,囧。
7)建立CM
CM是啥咧?Calculated Member,计算成员。但这又是啥?简单来说,CM也是一种指标,只是不像6)中的指标,只有他提供的那几个函数,在CM中,我们可以通过MDX多维表达式来自己定义一些自己想要的函数或者表达式,来完成我们对列的复杂操作。
如图21
如图22,填写相关CM信息
·dimension:这里只选择Measures,因为我们要借助指标来进行函数计算
·formula|formulaElement:这是我们自定义函数的表达式,这里需要用MDX语言,该语言是适用于OLAP的多维表达式,类似于sql,但有区别。我们在这里写[Measures].[myMeasure] / 24,意为:我们用我们之前建立的指标myMeasure来除以24,假设我们之前的指标myMeasure表示一天的用户数量,则这个CM所计算的结果代表平均每个小时的用户量。
8)保存
点击工具栏中的保存按钮,将我们的Schema保存下来,以供后续使用,到此,数据模型我们已经建立完成,得到了相应的xml,如图24。
3.workbench初步使用总结
1.workbench的功能不仅这一点,还有很多,这里只是初步给大家展示一下如何建立一个简单的数据立方体。当然,深入学习还是靠自己,关于该工具,有提供的相关文档mondrian_technical_guide.pdf,在软件安装包doc文件夹中,虽然是英文的,我想这不是问题哈。
2.很多人疑惑,建立完xml就完了?那么数据怎么展示?哈哈,当然没有结束,不过那不是我们这篇文章所讨论的啦,以后会给大家补上如何应用saiku引擎或者mondrian这种olap服务器来解析xml并展示出我们所需要的报表数据的。
3.再次声明,这文章本身就是我这个小菜鸟写的一篇给另一些不熟悉的小菜鸟看的。请各路大神大牛勿喷哦,我也是刚开始接触olap,现在学识浅薄,只当做个积累,也拿出来和大家分享分享,若有哪里不对的地方,请多多指点,不胜感激。
4.最后,大家一起努力,共同进步!