前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Saiku_学习_02_Schema Workbench 开发mdx和模式文件

Saiku_学习_02_Schema Workbench 开发mdx和模式文件

作者头像
shirayner
发布2018-08-10 10:25:58
9950
发布2018-08-10 10:25:58
举报
文章被收录于专栏:Java成神之路Java成神之路

一、前言

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

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

二、下载

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

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

三、数据库初始化

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

代码语言:javascript
复制
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文件:

代码语言:javascript
复制
<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="&#25152;&#26377;&#21517;&#31216;" 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,即可创建查询对话框,运行以下语句:

代码语言:javascript
复制
select
       {[Measures].qiuMeasure}
on columns,
       {([qiuDimension].[allCoustomer])}
on rows
from [qiuCube]

效果如下图:

七、空指针异常

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

二、参考资料

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

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

3.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、下载
  • 三、数据库初始化
  • 四、配置数据源 
    • 1.添加数据库驱动
      • 2.配置数据源
      •  五、创建schema
        • 1. 创建空的schema
          • 2.添加立方体(cube)
            • 3. 在立方体里面添加事实表Table
              • 4.在立方体里面添加维度:qiuDimension
                •  5.在维度下面,添加层次。
                  •  6. 在qiu-Hierarchy下面添加维度表
                    • 7.添加一个层次:qiuLevel
                      • 9.添加度量
                      •  六、添加MDX语句,测试模式文件
                      • 七、空指针异常
                      • 二、参考资料
                      相关产品与服务
                      数据库
                      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档