数仓入门基础-8-模型设计

1.事实表模型设计

    事实表有三种类型 : 事务事实表、周期快照事实表和累积快照事实表。
    事务事实表用来描述业务过程,眼踪空间或时间上某点的度量事件,保存的是最原子的数据,也称为“原子事实表“;
    周期快照事实表以具有规律性的、可预见的时间间隔记录事实 ,时间间隔如每 天、每月、每年等;
    累积快照事实表用来表述过程开始和结束之间的关键步骤事件 ,覆盖过程的整个生命周期,通常具有多个日期字段来记录关键时间点, 当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改。

8940211-67b7ec0d11190bee.png
1.1设计原则

1:尽可能包含所有与业务过程相关的事实;
2:只选择与业务过程相关的事实;
3:分解不可加性事实为可加的组件,比如订单的优惠率,应该分解为订单原价金额与订单优惠金额两个事实存储在事实表中;
4:在选择维度和事实之前必须先声明粒度;
5:在同一个事实表中不能有多种不同粒度的事实;
6:事实的单位要保持一致,比如原订单金额、 订单优惠金额、订单运费金额这三个事实,应该采用一致的计量单位, 统一为元或分,以方便使用;
7:对事实的null值要处理,
8: 使用退化维度(存储到事实表中的维度列)提高事实表的易用性;

    在 Kimball 的维度建模中,通常按照星形模型的方式来设计,对于维度的获取采用的是通过事实表的外键关联专门的维表的方式,谨慎使用退化维度。而在大数据领域的事实表设计中,则大量采用退化维度的方式(事实宽表),在事实表中存储各种类型的常用维度信息。这样设计的目的主要是为了减少下游用户使用时关联多个表的操作,直接通过退化维度实现对事实表的过滤查询、控制聚合层次、排序数据以及定义主从关系等。 通过增加冗余存储的方式减少计算开销,提高使用效率。

1.2设计步骤

1.选择业务过程及确定事实表类型
    例如选择支付过程,分析每天用户支付金额情况,可以做周期快照事实表。
2.声明粒度
    粒度的声明是事实表设计中不可忽视的重要一步,粒度用于确定事实表中一行所表示业务的细节层次。在设计事实表的过程中,粒度定义得越细越好,建议从最 低级别的原子粒度开始,因为原子粒度提供了最大限度的灵活性,可以支持无法预期的各种细节层次的用户需求。
3.确定维度
    比如在淘宝订单付款事务事实表中,粒度为子订单, 相关的维度有买家、卖家、商品、收货人信息 、 业务类型、订单时间等维度。
4.确定事实
    事实可以通过回答“过程的度量是什么”来确定。应该选择与业务过程有关的所有事实,且事实的粒度要与所声明的事实表的粒度一致。
5.冗余维度(关联维度做大宽表

2.维表设计

    维度的设计过程就是确定维度属性的过程,如何生成维度属性,以及所生成的维度属性的优劣,决定了维度使用的方便性,成为数据仓库 易用性的关键。正如Kimball 所说的,数据仓库的能力直接与维度属性的质量和深度成正比。

2.1设计原则

    1.尽可能生成丰富的维度属性,比如淘宝商品维度有近百个维度属性,为下游的数据统计、分析、探查提供了良好的基础。
    2.尽可能多地给出包括一些富有意义的文字性描述。
    3.区分数值型属性和事实,数值型宇段是作为事实还是维度属性,可以参考字段的一般用途。 如果通常用于查询约束条件或分组统计,则是作为维度属性;如果通常 用于参与度量的计算, 则是作为事实。比如商品价格,可以用于查询约束条件或统计价格区间 的商品数量,此时是作为维度属性使用的;也可以用于统计某类目下商品的平均价格,此时是作为事实使用的。另外, 如果数值型字段是离散值,则作为维度属性存在的可能性较大;如果数 值型宇段是连续值 ,则作为度量存在的可能性较大,但并不绝对,需要同时参考宇段的具体用途。
    4.尽量沉淀出通用的维度属性,需要将尽可能多的通用的维度属性进行沉淀。一方面,可以提高下游使用的方便性,减少复杂度;另 一方面,可以避免下游使用解析时由于各自逻辑不同而导致口径不一致
    5.维度一致性,对于相同含义的字段进行整合,统一的命名,字段类型,方便维护与理解。

2.2设计步骤
  • 第一步:选择维度或新建维度。作为维度建模的核心,在企业级数据仓库中必须保证维度的唯一性。比如商品维度,只有商品维度信息。
  • 第二步:确定主维表。此处的主维表一般是ODS表,直接与业务系统同步。以商品维度为例, t_sku 是从业务系统同步的商品表,此表即是主维表。
  • 第三步:确定相关维表。数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。根据对业务的梳理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。以商品维度为例,根据对业务逻辑的梳理,可以得到商品与类目、 SPU、 卖家、店铺等维度存在关联关系。
  • 第四步 :确定维度属性 。本步骤主要包括两个阶段,其中第一个阶段是从主维表 中选择维度属性或生成新的维度属性;第二个阶段是从相关维表中选择维度属性或生成新的维度属性。以淘宝商品维度为例,从主维(t_sku)和类目、 SPU、卖家、店铺等相关维表中选择维度属性或生成新的维度属性。
    8940211-db4e9d0660aecf3e.png
好的,针对您的问题,我可以提供如下的医疗居民健康档案数仓维度模型设计的思路: 1. 维度的设计 - 时间维度:包括年、季度、月、周以及日等时间粒度; - 医疗机构维度:包括医院、诊所、社区卫生服务中心等; - 医生维度:包括医生的姓名、性别、职称、科室等信息; - 居民维度:包括居民的姓名、性别、年龄、身份证号、联系方式等信息; - 疾病维度:包括疾病的名称、ICD编码、病症描述等信息; - 检查项目维度:包括检查项目的名称、编码、描述等信息; - 药品维度:包括药品的名称、编码、规格、剂量等信息; 2. 度量的设计 - 居民数量:统计每个时间点的居民数量; - 门急诊人次:统计每个时间点的门急诊就诊人次; - 住院人次:统计每个时间点的住院人次; - 平均住院天数:统计每个时间点的住院总天数除以住院人次; - 门急诊医疗费用:统计每个时间点的门急诊医疗费用总额; - 住院医疗费用:统计每个时间点的住院医疗费用总额; - 药品费用:统计每个时间点的药品费用总额; - 检查费用:统计每个时间点的检查费用总额; - 疾病分类统计:统计每个时间点各种疾病的数量和费用; 3. 粒度的设计 - 时间粒度:按照年、季度、月、周以及日等粒度进行统计; - 医疗机构粒度:按照医院、诊所、社区卫生服务中心等不同的医疗机构粒度进行统计; - 医生粒度:按照医生的姓名、性别、职称、科室等不同维度进行统计; - 居民粒度:按照居民的姓名、性别、年龄、身份证号、联系方式等不同维度进行统计; - 疾病粒度:按照疾病的名称、ICD编码、病症描述等不同维度进行统计; - 检查项目粒度:按照检查项目的名称、编码、描述等不同维度进行统计; - 药品粒度:按照药品的名称、编码、规格、剂量等不同维度进行统计; 以上是一个初步的医疗居民健康档案数仓维度模型设计的思路,具体的细节还需要根据实际情况进行进一步的调整和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值