训练的目的
数据构建的概念对刚接触的同事来讲很抽象,最大的问题是“不容易理解为什么需要分层”,传统的ERP顾问等都是通过源表直接写SQL获取数据。本训练的的目的是帮助刚如何的同事理解数据分层的意义,直观理解什么叫数据构建。
数据构建的意义
数据构建的典型问题?
我们在做ERP的时候也做表,通常做表的方式是“直接从数据库写一段SQL取出数据”,然后我们发现经常要关联很多表,很麻烦,所以会做一些“视图”预先把表都关联起来,然后基于视图写SQL。
一上是最常见的也是最简单的数据构建方式。带来的问题是什么呢?由于没有统一的方法和管理,带来的典型问题有:
- 面向用户:指标不统一,因为每一个字段都可能是不同的人通过sql写的,都有自己的理解,也都可能存在理解的偏差,同一个指标,在不同的sql里面,叫法不同,口径不同,导致管理层在不同的表里面看到的同一个指标数值不同,从而带来对整个数据的不信任。
- 面向IT:指标无法复用,同一个指标,在不同的粒度,不同的周期,不同的表里面无法共享,常见的情况示例:销售已经开发出了A指标,但是财务需要用到A、B指标,因为B指标不在销售的表里面,所以财务又重新开发了一套包含A和B的sql,导致大量的无效投入。
- 面向供应商:开发效率低,因为每次都是全新开发,都是基于excel在管理指标和口径,有时候甚至联excle都没有,不同的供应商有不同的理解,字段的命名五花八门,难以维护,自然开发成就搞,数据也很难横向共享。
数据分层和数据构建的关系?
数据分层本质和宜家的仓库,家里的整理,是一个道理,就是分门别类对有共性的东西进行归集。数据分层是数据构建的第一环,相当于人的脑袋、躯干、四肢,分层是数据构建落地的第一环。本练习的数据分层为:ODS-DWD-FOR_DWS-DWS-ADS-DIM
练习的目标成果
从DWD开始到ADS,理解数仓规范,生成一张以月为周期,项目为粒度的拉通“供应”“销售”的视图。
注:不要删除初始数据,如果有需要尝试的地方,可以复制一张表进行修改。
练习数据任务介绍
ODS模拟数据介绍
| ods_oa_organization | 组织表,来源于OA系统 |
|---|---|
| ods_ty_project | 项目表,来源于主数据系统 |
| ods_my_room | 房间表,来源于ERP系统 |
| ods_my_contract | 合同表,来源于ERP系统 |
表的关系
| ods_oa_organization:ods_ty_project | 1:n | 一个组织下面有多个项目 |
|---|---|---|
| ods_ty_project:ods_my_room | 1:n | 一个项目下面有多个房间 |
| ods_my_room:ods_my_contract | 1:n | 一个房间有多个合同,换房退房产生新合同 |
DIM层构建
任务:把项目和组织关联起来,方便后续所有的表使用,形成统一的项目维度表。
组织冗余为6级。
扩展任务:构建一个2000.01.01~2050.12.31的时间维度表
DWD层构建
任务:构建一张运营域的明细表
任务:构建一张营销域的明细表
FOR_DWS层构建
任务:构建以房间为粒度的,日为周期的供应面积,供应货值,供应套数指标表
任务:构建以房间为粒度的,日为周期的最新签约总价,签约建筑面积,签约套数指标表
口径:
t.zhuangtai = ‘激活’ — 口径的关键体现 只取激活状态的最新数据 and t.shifou_shenhe = ‘y’ — 口径的关键体现 只有审核以后的才算

这一部分是for_dws最具有代表性作用的体现,指标口径的统一。
DWS层构建
dws构建主要体验按不同的粒度、周期进行汇总。
任务:构建项目粒度、年周期签约总价、签约套数销售表
任务:构建项目粒度、月周期签约总价、签约套数销售表
任务:构建项目粒度、月周期供应金额、供应面积供应表
ADS层构建
任务:构建项目粒度、月周期供销拉通的供应金额、签约金额指标供销宽表
总结
通过模拟数据构建,掌握:
- 表如何命名;
- 视图如何命名——本训练集模拟的是用视图代替物理表,所以没有加视图前缀;
- 字段如何命名;
- dim构建的规范;
- 理解dwd的作用——清洗、关联、业务还原;
- 理解for_dws的作用——进行指标统一;
- 理解dws的作用,按域进行指标汇总——提高数据访问效率;
- 理解ads的作用,针对使用对象进行封装,拉通,收取;
