一、前言

saiku的查询都是通过cube来进行的。因此每当我们要进行一次多维度查询时,都要先修改xml、上传、重启才能生效,不仅效率低,还不利于学习和理解MDX和模式文件。

通过 workbench  图形界面工具,可以自动生成 Schema 文件

二、下载

下载地址:https://sourceforge.net/projects/mondrian/files/schema%20workbench/

选择最新版下载解压即可。

三、数据库初始化

运行这款软件需要依赖一个数据库,Mysql或者Postgresql都可以,我使用的是mysql,下面是网络上搜索到的建表语句:

CREATE TABLE sale
(
saleid integer NOT NULL,
proid integer,
cusid integer,
unitprice double precision,
num integer,
CONSTRAINT sale_pkey PRIMARY KEY (saleid)
); CREATE TABLE customer
(
cusid integer NOT NULL,
gender character(1),
CONSTRAINT customer_pkey PRIMARY KEY (cusid)
);
CREATE TABLE product
(
proid integer NOT NULL,
protypeid integer,
proname character varying(32),
CONSTRAINT product_pkey PRIMARY KEY (proid)
);
CREATE TABLE producttype
(
protypeid integer NOT NULL,
protypename character varying(32),
CONSTRAINT producttype_pkey PRIMARY KEY (protypeid)
); 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,num)values(1,1,1,340.34,2);
insert into sale(saleId,proId,cusId,unitPrice,num)values(2,1,2,140.34,1);
insert into sale(saleId,proId,cusId,unitPrice,num)values(3,2,3,240.34,3);
insert into sale(saleId,proId,cusId,unitPrice,num)values(4,3,4,540.34,4);
insert into sale(saleId,proId,cusId,unitPrice,num)values(5,4,1,80.34,5);
insert into sale(saleId,proId,cusId,unitPrice,num)values(6,5,2,90.34,26);
insert into sale(saleId,proId,cusId,unitPrice,num)values(7,6,3,140.34,7);
insert into sale(saleId,proId,cusId,unitPrice,num)values(8,7,4,640.34,28);
insert into sale(saleId,proId,cusId,unitPrice,num)values(9,6,1,140.34,29);
insert into sale(saleId,proId,cusId,unitPrice,num)values(10,7,2,740.34,29);
insert into sale(saleId,proId,cusId,unitPrice,num)values(11,5,3,30.34,28);
insert into sale(saleId,proId,cusId,unitPrice,num)values(12,4,4,1240.34,72);
insert into sale(saleId,proId,cusId,unitPrice,num)values(13,3,1,314.34,27);
insert into sale(saleId,proId,cusId,unitPrice,num)values(14,3,2,45.34,27);

四、配置数据源

1.添加数据库驱动

将数据库驱动放入 drivers 文件夹中

2.配置数据源

五、创建schema

1. 创建空的schema

file -> new schema

修改schema名称,命名是:qiu-schema

2.添加立方体(cube)

schema 右键 -> add cube

修改name为 qiuCube

3. 在立方体里面添加事实表Table

4.在立方体里面添加维度:qiuDimension

5.在维度下面,添加层次。

其实不需要添加,他会默认添加一下,点击qiuDimension左侧的小图标即可

6. 在qiu-Hierarchy下面添加维度表

咱们选择的是customer

7.添加一个层次:qiuLevel

9.添加度量

到这里一个简单的模式文件就建成了,点击最右侧的带有铅笔样式的图标即可看见xml文件:

<Schema name="qiuSchema">
<Cube name="qiuCube" visible="true" cache="true" enabled="true">
<Table name="sale">
</Table>
<Dimension type="StandardDimension" visible="true" foreignKey="cusid" highCardinality="false" name="qiuDimension">
<Hierarchy name="qiuHierarchy " visible="true" hasAll="true" allMemberName="allCoustomer" allMemberCaption="所有名称" allLevelName="all levels" primaryKey="cusid">
<Table name="customer">
</Table>
<Level name="qiuLevel" visible="true" column="gender" type="String" uniqueMembers="false" levelType="Regular" hideMemberIf="Never">
</Level>
</Hierarchy>
</Dimension>
<Measure name="qiuMeasure" column="num" datatype="Integer" aggregator="sum" visible="true">
</Measure>
</Cube>
</Schema>

六、添加MDX语句,测试模式文件

file -> new MDX Query,即可创建查询对话框,运行以下语句:

select
{[Measures].qiuMeasure}
on columns,
{([qiuDimension].[allCoustomer])}
on rows
from [qiuCube]

效果如下图:

七、空指针异常

原因:填写信息的时候信息不全。漏掉allLevelName、还有字段类型要为Integer

二、参考资料

1.Schema Workbench 开发mdx和模式文件

2.saiku、mondrian前奏之——立方体、维度、Schema的基本概念

3.

Saiku_学习_02_Schema Workbench 开发mdx和模式文件的更多相关文章

  1. Schema Workbench 开发mdx和模式文件

    一.前言 安装了saiku之后,每次修改schema文件,非常耗时,每次都要经历若干步骤:修改xml.上传.重启才能生效,并且非常不利于学习和理解MDX和模式文件,踌躇之际,发现了这个工具,十分小巧方 ...

  2. VSTO学习笔记(三) 开发Office 2010 64位COM加载项

    原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(A ...

  3. 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组

    真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...

  4. 图像开发的p2s模式:halcon+opencv的联动

    [<zw版·Halcon与delphi系列原创教程> 图像开发的p2s模式:halcon+opencv的联动 尽管halcon功能强大,基本上cv只是halcon的一个子集,不过cv毕竟是 ...

  5. App开发三种模式

    APP开发三种模式 现在App开发的模式包含以下三种: Native App 原生开发AppWeb App 网页AppHybrid App 混合原生和Web技术开发的App 详细介绍: http:// ...

  6. .net之微信企业号开发(三) 回调模式的接口开发

    一.前言 微信企业号应用中,有两种模式,一种是普通模式,这种模式只能进行简单网页链接,以及发送固定的消息.为了可以让企业号的用户更好的与应用交互,微信提供了回调模式,这种回调模式的可以将用户发送给微信 ...

  7. Android开发学习之LauncherActivity开发启动的列表

    Android开发学习之LauncherActivity开发启动的列表 创建项目:OtherActivity 项目运行结果:   建立主Activity:OtherActivity.java [jav ...

  8. asp.net学习之ado.net(连接模式访问)

    原文:asp.net学习之ado.net(连接模式访问)    ado.net框架支持两种模式的数据访问: 连接模式(Connected)和非连接模式(disconnected).这一节介绍如何使用连 ...

  9. 作为小白,如何学习Web前端开发?

    作为一个已经写码这么多年的人,我不会告诉你我最初的时候是自学的,因为刚开始自己学真的特别无聊枯燥,实在学不下去,所以就自己报了一个培训(上元教育)的地方,毕竟是交了钱的,本着不服气的精神,硬是把自己生 ...

随机推荐

  1. Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)

    本文介绍的是mysql中last_insert_id和mysql_insert_id的区别 1 mysql_insert_id 一.PHP获取MYSQL新插入数据的ID mysql_insert_id ...

  2. RabbitMQ集群安装配置+HAproxy+Keepalived高可用

    RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...

  3. PHP里的socket_recv方法解释

    以前一直经为PHP里没有低级的socket帧接收函数,看来是没看仔细,不过那些说明也太少了,(更令人气的里在英文版说明里的例子下有一句话:这个程序不能运行,因为没用listen函数,但在中文版里却没了 ...

  4. [转]mysqlx 同时使用 AND OR

  5. Office365client通过本地方式批量部署(即点即用部署)

    当企业用户拥有Office 365 ProPlus的许可后,可登陆Office 365.自行下载Officeclient安装部署 以上仅仅是理想情况,实际情况是企业用户较多,IT水平參差不齐,企业的带 ...

  6. php序列化与反序列化

    php序列化简单来说就是 把复杂的数据类型压缩到一个字符串中php对象转换成字符串,反序列化就是把变量转换成对象 一般来说  当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用ur ...

  7. 基于SqlDependency的Asp.net数据缓存

    首先,确保目标数据库的is_broker_enabled已经enabled. SELECT name, is_broker_enabled FROM sys.databases 如果不是enabled ...

  8. 【BZOJ4154】[Ipsc2015]Generating Synergy KDtree

    [BZOJ4154][Ipsc2015]Generating Synergy Description 给定一棵以1为根的有根树,初始所有节点颜色为1,每次将距离节点a不超过l的a的子节点染成c,或询问 ...

  9. Learning string similarity measures for gene/protein name dictionary look-up using logistic regression

    Yoshimasa Tsuruoka1,*, John McNaught1,2, Jun’ichi Tsujii1,2,3 and Sophia Ananiadou1,2 1 School of Co ...

  10. Android JSON And Object Cast

    Ref:JSON字符串转换成Java实体类(POJO) Ref:Java.Json转换方式之二:Jackson Ref:Jackson 框架,轻易转换JSON Ref:几种序列化协议(protobuf ...