mysql构建数据立方体_OLAP数据建模工具Workbench的初步使用(数据立方体的建立)

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.

2530613b0e794def9ca93db49acf31dc.png

b.如图2,弹出如下界面,选择“一般”-->连接类型选择“MySQL”-->连接方式选择“Native(JDBC)”-->填写右侧设置中的信息。

a765c50a5552c8be5a229b97732d6c45.png

c.如图3,点击测试,测试是否可以连接成功。若OK,点击确认,连接完成。

9491ba691b9ee0501e7c9c968f7ee1af.png

2)建立Schema

何谓Schema?简单来说,就是描述一个逻辑模型到数据库中物理模型的映射的。其实他就是数据库中的一个命名空间,里面包含着诸如表、索引等对象。

a.如图4.File-->new-->Schema

121b3e1cf3dc856da7e2e4797305ad2b.png

b.如图5,填写Schema相关信息。

·name:指该Schema名称,我们命名为mySchema。

·description:该Schema相关的描述,可以为空

1b1468385a5bb4a24f67caa0311c0570.png

3)建立Cube

a.如图6

fb3767d7b1503ff29e65dd8ffb6c43bb.png

b.如图7,填写Cube相关信息

·name:指该Cube名称,我们命名为myCube

·description:该Cube的描述,可以为空,对外不可见

·caption:对外显示的标题

19d77c833f55735f1de0030f3fe007b7.png

4)Cube关联事实表

a.如图8

18d19d19e28058fbd335d4477ed05738.png

b.如图9,选择相关的事实表,我们选择my_fact_table。

b6a0f813080b847d1c67dc59179e0257.png

5)建立维度myDimension

a.如图10

4ad6cdd1c1c9fcd2f2c8dad41ee5ab3e.png

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:对外显示的标题

0adab80e10ac66e81b3a937c273e6af9.png

c.如图12,填写维度下层次的信息

·primaryKey:指的是维度表中的主键,此处需要关联完维度表后选择。

3a3cdf94beef5c52b402fcdf90066908.png

d.如图13,14,为该维度关联维度表

11541616203bf0f1274b34f69d3a73d9.png

4fa063afac14200a5a4959cb671e9b1c.png

e.如图15,16,建立维度的层级,并填写相关信息

·name:层级的名词,我们命名为myLevel

·table:此处填写要关联的维度表,但因为之前已经关联,所以此处为空,不需要填写。

·column:此处是和事实表关联的字段

·nameColumn:此处是维度表中,将要显示的字段,若为空,则默认显示column处的字段内容,一般不填写,而是把该内容写到column中。

·type:要显示列的数据类型,如nameColumn为空,则填column处字段的类型

·levelType:除了时间,其他类型都选择Regular

·hideMemberIf:一般都选择Never,即不管什么情况下,数据都不隐藏

·caption:对外显示的名字

·visible:勾选,对外可见

9278cafb591788a5d6e471bf38ae4928.png

8688dd78d5bbc1f6e73e13c8c0e9a508.png

f.别忘记了第c步中选择主键哦

6)建立指标

6-1)建立正常指标

a.如图17

9173f423515e45d427376ee901dc7a4b.png

b.如图18,填写相关信息

·name:指标名称,我们命名为myMeasure

·aggregator:我们采用的聚合函数,可以通过下拉选择,这里我们采用distinct-count,来计算一共有多少个user_id

·column:要应用函数的列,这里我们在下拉中选择user_id

·formatString:结果显示的形式,这里我们没有选,可以选择###.###,以三位一组来显示。

·datatype:要显示的结果是什么类型的,我们选择Numeric,也可以选择Integer,因为我们是计算user_id的数量

·caption:对外显示的标题

·visible:勾选,对外可见

b40aac49edd5e3049d07e3b0bbc4589c.png

6-2)建立带sql表达式的指标

如果我们要应用函数的列不是一整列,而是该列中符合我们筛选条件的一部分,该怎么办呢?简单,通过添加表达式来书写筛选sql来得到我们要应用函数的那一列的部分。

a.如图19

5302b902514a3d4a864a0a00d034be39.png

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函数,否则,该列为空。

79e8c8fd2d482c95e544ad415bc159f6.png

小技巧:这里书写完sql,如果你直接点击左侧的菜单栏,当你再次打开这个sql时,就发现,哎?怎么是空白的?我之前写的sql呢?报警了啊!居然没了!对,你没有看错,就是没了。我也不知道为啥会这样,估计是这工具的一个小bug,但是这种问题如何解决呢?简单!只要点击当前页面的任意一个选项就可以啦,你看下面不是有个dialect吗?鼠标双击它,然后再点击菜单栏,问题就没了,sql就保存了。我也是费了好大劲才发现,囧。

7)建立CM

CM是啥咧?Calculated Member,计算成员。但这又是啥?简单来说,CM也是一种指标,只是不像6)中的指标,只有他提供的那几个函数,在CM中,我们可以通过MDX多维表达式来自己定义一些自己想要的函数或者表达式,来完成我们对列的复杂操作。

如图21

f54e772c8b59c692ce8f751f3d3e3170.png

如图22,填写相关CM信息

·dimension:这里只选择Measures,因为我们要借助指标来进行函数计算

·formula|formulaElement:这是我们自定义函数的表达式,这里需要用MDX语言,该语言是适用于OLAP的多维表达式,类似于sql,但有区别。我们在这里写[Measures].[myMeasure] / 24,意为:我们用我们之前建立的指标myMeasure来除以24,假设我们之前的指标myMeasure表示一天的用户数量,则这个CM所计算的结果代表平均每个小时的用户量。

57b19fa4836c98c534bc9344251e172e.png

8)保存

点击工具栏中的保存按钮,将我们的Schema保存下来,以供后续使用,到此,数据模型我们已经建立完成,得到了相应的xml,如图24。

1bc112b3da9235450632d74de1c1f836.png

3.workbench初步使用总结

1.workbench的功能不仅这一点,还有很多,这里只是初步给大家展示一下如何建立一个简单的数据立方体。当然,深入学习还是靠自己,关于该工具,有提供的相关文档mondrian_technical_guide.pdf,在软件安装包doc文件夹中,虽然是英文的,我想这不是问题哈。

2.很多人疑惑,建立完xml就完了?那么数据怎么展示?哈哈,当然没有结束,不过那不是我们这篇文章所讨论的啦,以后会给大家补上如何应用saiku引擎或者mondrian这种olap服务器来解析xml并展示出我们所需要的报表数据的。

3.再次声明,这文章本身就是我这个小菜鸟写的一篇给另一些不熟悉的小菜鸟看的。请各路大神大牛勿喷哦,我也是刚开始接触olap,现在学识浅薄,只当做个积累,也拿出来和大家分享分享,若有哪里不对的地方,请多多指点,不胜感激。

4.最后,大家一起努力,共同进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java循环1000000000_求十亿内所有质数的和,怎么做最快?

注&#xff1a;对知乎的公式编辑功能实在无力吐槽&#xff0c;用typora写的文章直接粘过来公式无法显示&#xff0c;只好又手工加上了全部公式&#xff0c;不过可能还是会有遗漏。大家可以点击这个链接 查看我的博客原文。以下是正文&#xff1a;第一次关注到这个问题是在做pro…

java飞行记录器是什么_运行java飞行记录器JFR(java flight recorder)

JFR上面讲到的工具都是作为快速的查看诊断工具的。如果要深入分析问题&#xff0c;可以选择使用内置的Java飞行记录器:Java Mission Control。转储JFR需要三步&#xff1a;1. 创建一个包含了你自己配置的JFR模板文件。运行jmc, 然后Window->Flight Recording Template Manag…

java申请安卓权限_java4android (包和访问权限)

什么是Java当中的软件包&#xff1f;为什么要使用软件包&#xff1f;如何给一个类打包&#xff1f;//将类放置到一个包中&#xff0c;需要使用package“包名”//打包 编译的方法 javac -d . Test.java//出现错误&#xff1a;编码GBK的不可映射字符 javac -encoding UTF-8 -d . …

php 条形码生成器,PHP条形码图像生成器

这是一个用于生成barocdes的简单PHP脚本&#xff1a;//For displaying barcodes//Arguments are:// code Number you want outputted as a barcode//You can use this script in two ways:// From a webpage/PHP script // Directly in your web browser http://www.example.co…

java欧冠抽签,欧冠抽签吐槽:最大的“礼包”被C罗拿走!梅西出局概率超50%?...

欧冠16强抽签揭晓&#xff0c;结果&#xff1a;多特VS巴黎&#xff0c;皇马VS曼城&#xff0c;亚特兰大VS瓦伦西亚&#xff0c;马竞VS利物浦&#xff0c;切尔西VS拜仁&#xff0c;里昂VS尤文图斯&#xff0c;热刺VS莱比锡&#xff0c;那不勒斯VS巴萨。怎么评价这样的抽签呢&…

matlab 流固耦合,详讲流固耦合

引言近来&#xff0c;航空航天工业在世界上发展迅速&#xff0c;而作为“飞机心脏”的航空发动机是限制其发展的主要因素。目前&#xff0c;航空发动机日益向高负荷、高效率和高可靠性的趋势发展&#xff0c;高负荷导致的高逆压力梯度容易引起流动分离&#xff0c;同时随着科技…

php提示是否运行,php运行错误提示

第一种方法在php.ini文件里改变display_errors和error_reporting的值&#xff0c;没有的直接加上。; 第一处修改; display_errors Offdisplay_errors On; 第二处修改; error_reporting E_ALL & ~E_DEPRECATED & ~E_STRICTerror_reporting E_ALL | E_STRICTdisplay_…

usb转ttl模块与matlab,图文详解USB转TTL设备与电路板的连接

描述USB转TTL的硬件设备:USB转TTL主机一台;芯片选用PL-2303HXUSB转TTL刷机线&#xff0c;采用进口PL2303HX芯片。连接上电脑并安装驱动后&#xff0c;电脑即扩展出一个COM3或COM4....等的串口&#xff0c;配合相应软件就能对路由器、机顶盒或接收机等各种TTL接口的设备系统进行…

php乱码调试,NotePad++ 调试PHP代码中文显示乱码

最近在NotePad上调试PHP代码&#xff0c;按照示例代码进行调试&#xff0c;结果在显示中文的时候显示一堆乱码&#xff0c;于是上网百度&#xff0c;有2种方法可以解决&#xff1a;按调试方式有2种方法&#xff1a;1、菜单插件-NppExec:“插件”-“NppExec”-"Console Out…

php怎么设置网站的字符编码,php如何设置字符编码

php如何设置字符编码&#xff1f;a. 如果欲使用gb2312编码&#xff0c;那么php要输出头&#xff1a;header(“Content-Type: text/html; charsetgb2312")&#xff0c;静态页面添加&#xff0c;所有文件的编码格式为ANSI&#xff0c;可用记事本打开&#xff0c;另存为选择编…

oracle em 删除 重建,Oracle 11g 重建EM需要删除的对象

因为需求需要重建EM,重建时因为某些错误被迫停止,比如对象已存在、用户已经存在等,最终找出了创建必备的条件&#xff1b;1.环境变量(Oracle和Grid在同一个用户下安装):ORACLE_HOME 要设为DB路径;ORACLE_UNQNAME 要设置;2.删除em相关的同义词:select drop public synonym ||syn…

oracle导出数据视频教程,Oracle导入导出数据的几种方式

oracle导入导出数据1.导出dmp格式文件--备份某几张表 &#xff01;&#xff01;&#xff01;&#xff01;exp smsc/smsc file/data/oracle_bak/dmp/bakup0209_2.dmp tables\(send_msg_his,send_msg,recv_msg_his,recv_msg\)--备份整个数据库 &#xff01;&#xff01;&#xff…

php ldap 模块,不重新编译为PHP增加LDAP模块的支持

不重新编译为PHP增加LDAP模块的支持2018-11-28安装步骤1、进入到php安装源码目录rootvm-199:~/lnmp0.9# cd php-5.3.28rootvm-199:~/lnmp0.9/php-5.3.28# cd ext/ldap/rootvm-199:~/lnmp0.9/php-5.3.28/ext/ldap# lltotal 136drwxr-xr-x 3 501 staff 4096 2014-08-06 17:17 ./d…

linux qemu运行windows,用qemu搭建CentOS 6 for colinux虚拟系统——《Windows下搭建CentOS 6开发环境之一》...

用qemu搭建CentOS 6 for colinux虚拟系统一、安装的软硬件环境操作系统&#xff1a; Windows XP SP3硬件环境&#xff1a; CPU AMD 速龙AthlonII X3 445 (3.1GHz/AM3/3*512KB二缓/45纳米)内存 Corsair 海盗船 CMX4GX3M2A1600C9 DDR3 1600 4G(2G*2)硬盘 Seagate 希捷 ST3100052…

linux下c语言编程gedit,Ubuntu Linux下实现Gedit支持NesC语法高亮

在TinyOS下主要采用nesC编程&#xff0c;一种C语言的近亲。平时默认打开文本的工具是gedit&#xff0c;将以下代码保存为nesc.langtext/x-nc*.nc;*C.nc;*M.nc;*P.nc->///**/falsenewthistrueusingtaskpostnamespaceeventcommandmoduleimplementationconfigurationtypenamete…

C语言优先队列作用,C语言实现优先队列(priority queue)

堆排序是一个比较优秀的算法,堆这种数据结构在现实生活中有很多的应用,比如堆可以作为一个优先队列来使用,作为一个高效的优先队列,它与堆的结构一样,都有最大优先队列,最小优先队列.优先队列priority queue 是一种用来维护一组元素构成的集合S的数据结构&#xff0c;每一个元素…

android 自定义progressbar demo,Android 自定义进度条ColorfulProgressbar,原理简单、效果还行...

效果图&#xff1a;demo效果演示演示Demo特性与原生Progress相比&#xff0c;感觉更漂亮一点&#xff0c;可以显示进度值&#xff0c;背景凹凸感明显&#xff0c;进度条效果更加立体。原理说明额&#xff0c;挺简单的。不过感觉我的做法有点复杂了&#xff0c;我先自定义了一个…

android os自动安裝软件,[图]Bliss OS 12进入开发阶段:可在桌面设备上安装Android 10系统...

此外还对电池进行了优化&#xff0c;添加了额外的安全性选项和相关功能&#xff0c;支持大部分主流游戏手柄&#xff0c;兼容ARM / ARM64应用程序。目前Bliss OS 12已经进入早期开发阶段&#xff0c;有望让您在PC上运行最新的Android 10移动操作系统。Bliss OS开发人员说&#…

android+版本升级的时候会清楚数据马,android主进程销毁了,线程会不会也销毁?...

Android Activity 销毁后子线程会不会被GC回收曾想当然地认为页面被finish之后线程会被android 虚拟机的垃圾回收机制回收掉。于是用页面跳转做测试测试代码结果有点意外&#xff0c;页面被销毁后定时器依然在执行。退出应用定时器还在执行。UI线程被结束掉&#xff0c;UI线程里…

mate7安装android o,华为Mate7升级安卓6.0详细教程

来讲一下华为Mate7升级安卓6.0(EMUI4.0)M版本详细图文教程吧&#xff0c;新的一年了&#xff0c;大家都迫不及待的想升级一下EMUI4.0&#xff0c;但是很多朋友都不知道怎样来升级&#xff0c;下面刷机网小编就来给大家仔细说一说吧&#xff0c;教程都在下面己经整理好了&#x…