6.维度设计

维度的基本概念

  • 维度建模中,将度量称为"事实",将环境描述为"维度",维度是用于分析事实所需要的多样环境

  • 例如:在分析交易过程中,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。

  • 维度属性查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。

  • 例如:

  • 1.在查询请求中,获取某类目的商品、正常状态的商品等,是通过约束商品类目属性和商品状态属性来实现的;

  • 2.统计淘宝不同商品类目的每日成交金额,是通过商品维度的类目属性进行分组的。

  • 作用:查询约束分类汇总排序

维度属性的获取

  • 报表中获取

  • 与业务人员交谈中发现

  • 1.因为它们(指维度属性)经常出现在查询或报表请求中的"按照(by)"语句内

  • 2.用户要"按照"月份和产品来查看销售情况,那么用来描述其业务的自然方法应该作为维度或维度属性包括在维度模型中。

主键

  • 作用:维度使用主键标识其唯一性,主键也是确保与之相连的任何事实表之间存在引用完整性的基础。

  • 种类:代理键、自然键,用于标识某维度的具体值。

  • 代理键:不具有业务含义,一般用于处理缓慢变化维;

  • 自然键:具有业务含义的键。

  1. 比如商品,在ETL过程中,对于商品维表的每一行,可以生成一个唯一的代理键与之对应(商品本身的自然键可能是商品ID等);

  2. 对于前台应用系统来说,商品ID是代理键;

  3. 对于数据仓库系统来说,商品ID则属于自然键。

维度的基本设计方法

  • 维度的设计过程就是确定维度属性的过程如何生成维度属性,以及所生成的维度属性的优劣,决定了维度使用的方便性,成为数据仓库易用性的关键。

  • 案例:淘宝的商品维度

  1. 选择维度或新建维度。作为维度建模的核心,在企业级数据仓库中必须保证维度的唯一性。以淘宝商品维度为例,有且只允许有一个维度定义。

  2. 确定主维表。此处的主维表一般是ODS表,直接与业务系统同步

  3. 确定相关维表。数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。根据对业务的梳理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性举例:以淘宝商品维度为例,根据对业务逻辑的梳理,可以得到商品与类目、SPU、卖家、店铺等维度存在关联关系。

  4. 确定维度属性。本步骤包含两个阶段:第一阶段是从主维表中选择维度属性或生成新的维度属性。第二个阶段是从相关维表中选择维度属性或生成新的维度属性

确定维度属性的几点提示

  1. 尽可能生成丰富的维度属性:为下游的统计、分析、探查提供了良好的基础。

  2. 尽可能多地给出包括一些富有意义的文字描述:属性不应该是编码,而应该是真正的文字。在阿里巴巴维度建模中,一般是编码和文字同时存在,比如商品维度中的商品ID和商品标题类目ID和类目名称等。ID一般用于不同表之间的关联,而名称一般用于报表标签

  3. 区分数值型属性和事实参考字段的一般用途。如果通常用于查询约束条件或分组统计,则是作为维度属性;如果通常用于参与度量的计算,则是作为事实。比如商品价格,可以用于查询约束条件或统计价格区间的商品数量,此时是作为维度属性使用的。也可以用于统计某类目下商品的平均价格,此时是作为事实使用的。

  4. 尽量沉淀出通用的维度属性:有些维度属性获取需要进行比较复杂的逻辑处理,有些需要通过多表关联得到,或者通过单表的不同字段混合处理得到,或者通过对单表的某个字段进行解析得到。此时,需要将尽可能多的通用的维度属性进行沉淀。例如:淘宝商品的property字段,使用key:value方式存储多个商品属性。商品品牌就存储在此字段中,而商品品牌是重要的分组统计和查询约束的条件,所以需要将品牌解析出来,作为品牌属性存在。又例如,商品是否在线,即在淘宝网站是否可以查看到此商品,是重要的查询约束的条件,但是无法直接获取,需要进行加工,加工逻辑是:商品状态为0和1且商品上架时间小于或等于当前时间,则是在线商品;否则是非在线商品。所以需要封装商品是否在线的逻辑作为一个单独的属性字段

维度的层次结构

posted @ 2023-11-15 17:07  jsqup  阅读(4)  评论(0编辑  收藏  举报