多维分析 - 宽表的概念及应用

宽表的概念和用途:

宽表,顾名思义,就是比普通的数据表宽的表,比如数据库表一,在数据库中是五个字段,表二是四个字段,宽表就是把这两个有业务联系的表通过关联字段弄到一个大表中,这样列数自然就变多了,表也就宽了,所以就有了宽表

为什么要用宽表?

业务人员在做数据分析时,所需要的数据往往会存储在数据库的多张数据表中,比如订单表中存储了订单编号、商品编号、订购日期等,商品表中存储了商品名称、单价等商品信息,如果要同时查看订单和商品信息,业务人员不知道数据结构,也很难做表间关联,所以就要技术人员将两个表提前关联好形成宽表。

在 olap 技术发展过程中主要有 MOLAP 和 ROLAP 两种形式,MOLAP 中的数据文件通常叫做“CUBE”,这个名字大家都比较熟悉了,一般是各个 olap 产品自己的数据文件格式。而随着数据库性能的提升,ROLAP 产品逐渐流行起来(本文后续用到的产品润乾报表就是一个典型的 ROLAP 产品),ROLAP 中数据保留在关系数据库的事实表中,在使用用途上来说宽表约等于 CUBE。

通过宽表的使用,既能解决多维分析时多表的关联问题又能提高数据查询的速度和分析操作的便捷性。

宽表的生成

先看下业务表的结构:

imagepng

要基于上述业务表生成如下宽表,用来分析销售数据:

imagepng

此时业务数据通常来自同一个数据库,那么可以直接通过一个 sql 语句生成:

create table oders_analyse as (select o.orderid,
       o.amount,
       o.discount,
       p.proname,
       p.price,
       b.typename,
       s.sipname,
       s.linkname,
       k.stockamount
  from orders o
  left join product p    on o.proid = p.proid
  left join proctype b    on p.protype = b.typeid
  left join supplier s    on p.supid = s.supid
  left join stock k    on o.proid = k.proid )

如果是异构数据库,那么还需要 ETL 工具进行处理,这里暂时先不做详细介绍了。

宽表在数据分析中的使用

前边生成了宽表订单分析表,下面介绍下润乾中如何基于这张宽表实现数据分析的操作。

1、启动 DQL 元数据层设计器,并设置数据源连接

2、导入数据库中的“宽表”:ODERS_ANALYSE,并将英文表名和字段名设置成业务人员能够理解的中文名称:

imagepng

3、配置 dql 服务,启动应用及 DQL 服务器

4、浏览器端访问:http://localhost:6868/demo/raqsoft/guide/jsp/olap.jsp

imagepng

这里数据分析时用到的是数据库中提前创建好的宽表,对业务人员来说就是一个单表,结合语义字典的使用,他只需要在 web 端拖拽相应的维度字段就可以实现数据分析的操作。

通过上例可以看到,宽表的使用可以使业务人员忽略多表间的关联关系,看到的是更直观的单表方式,那么宽表是不是多维分析中的最优选择呢?后续文章中会详细说明下实际项目中宽表有哪些缺点,这样在实际使用中要结合实际项目选择更优的方案。