zoukankan      html  css  js  c++  java
  • Saiku_学习_02_Schema Workbench 开发mdx和模式文件

    一、前言

    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);
    View Code

    四、配置数据源 

    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="&#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>
    View Code

     六、添加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.

  • 相关阅读:
    java序列化
    网络协议-TCP/IP
    Java 网络IO编程总结
    Java实用类库
    SpringMVC拦截器-性能监控
    java大数据导出
    打包SDK总结,
    iOS UIButton 传递多个参数
    iOS 开发权限设置
    iOS怎么显示html父文本上的内容
  • 原文地址:https://www.cnblogs.com/shirui/p/8600711.html
Copyright © 2011-2022 走看看