数据分析-如何区分事实表、维度表、宽表

维度表

维度表是 “描述性信息”,回答 “谁 / 什么 / 何时 / 何地”

可以简单理解为:当我们描述一件事物从多个不同角度去描述,那么这个角度的信息就是维度信息

举个栗子🌰

案例描述:

各个班级的童鞋们参加了各种活动,导员现在要统计这些信息,那么有哪些角度去描述呢?

导员需要考虑:时间、班级信息、参赛学生信息、活动信息

由此我们可以得到以下维度表

维度表:

(2)班级维度表(描述 “哪个班”)

字段名字段说明示例数据
班级 ID唯一标识CLS001
班级名称完整班级名称18 级物流工程 1 班
所属学院对应学院经济管理学院
年级入学年级2018 级
导员姓名班级导员李老师
班级人数班级总人数42

(2)学生维度表(描述 “谁参与”)

字段名字段说明示例数据
学生 ID唯一标识STU038
学生姓名学生姓名iShany
学号学生学号2018XXXX520
班级 ID关联班级维度表CLS001
联系电话学生联系电话18XXXXXXXX6
专业所学专业物流工程

(3)活动维度表(描述 “参与什么活动”)

字段名字段说明示例数据
活动 ID唯一标识ACT012
活动名称活动全称“热血青春,辩出自我” 辩论赛
活动类型活动类别学术竞赛
举办方组织单位经济管理学院
活动目的活动核心目标提升思辨能力、团队协作
活动地点举办地点学院报告厅

(4)时间维度表(描述 “什么时候参与”)

字段名字段说明示例数据
时间 ID唯一标识TIME095
活动日期活动开展日期2020-11-15
所属学期对应学期2020-2021 学年上学期
月份所属月份2020-11
星期活动当天星期

事实表

事实表是 “可量化的业务数据”,回答 “做了什么 / 产生了多少”

举个栗子🌰

案例描述:

各个班级的童鞋们参加了各种活动,导员现在要统计这些信息,需要参赛学生需要填写获奖情况

事实表

学生活动参与事实表(记录 “参与情况”)

字段名字段说明示例数据
参与记录 ID唯一标识REC20201115001
学生 ID关联学生维度表STU038
班级 ID关联班级维度表CLS001
活动 ID关联活动维度表ACT012
时间 ID关联时间维度表TIME095
是否获奖参与活动是否获奖
获奖等级奖项级别(无则填 “无”)三等奖
参与时长实际参与时长(小时)3
角色活动中角色(选手 / 观众)辩手

大宽表

宽表实际上就是把事实表和维度表关联起来去除原来的 维度表ID,整理成一张大表,这个过程原来的维度信息会重复,但是优点是能通过简单筛选查询到想要的信息,技术难度更低。

举个栗子🌰

案例描述:

各个班级的童鞋们参加了各种活动,导员现在要统计这些信息,需要参赛学生需要填写获奖情况

大宽表

宽表设计(维度 + 事实整合)

字段名字段说明示例数据
参与记录 ID唯一标识REC20201115001
班级名称完整班级名称18 级物流工程 1 班
所属学院对应学院经济管理学院
学生姓名学生姓名iShany
学号学生学号2018XXXX520
活动名称活动全称“热血青春,辩出自我” 辩论赛
活动类型活动类别学术竞赛
举办方组织单位经济管理学院
活动日期活动开展日期2020-11-15
所属学期对应学期2020-2021 学年上学期
参与时长实际参与时长(小时)3
角色活动中角色(选手 / 观众)辩手
是否获奖参与活动是否获奖
获奖等级奖项级别(无则填 “无”)三等奖
导员姓名班级导员李老师

表分分合合?怎么选择?

主要看当前的数据量和使用场景,如果使用场景如本案例一样,其实用宽表收集就很方便了,但是针对数据量很大的情况或者一个维度表应用于多个事实表,那么宽表的效率较低,如维度表发生变更,本来只需要变更一个维度表,但是在宽表中每个涉及该维度的都需要做同步,也容易出现漏同步的情况。

  • 分表(维度 + 事实分开):长期使用、多场景灵活分析、数据量大、需要严格数据治理的场景(比如企业核心数据仓库的基础层 DWD、DWS)。

    • 减少数据冗余,降低维护成本
    • 适配业务变化,保持灵活性
    • 符合数据治理规范,支撑多场景分析

[!NOTE]
分开的核心是遵循 “星型模型 / 雪花模型” 设计,从数据治理角度来看更符合长期使用需求。

  • 合宽表:高频查询、简单分析、非技术人员使用、报表 / 大屏展示场景(比如应用层 ADS 的结果表)。

    • 提升查询速度,减少关联计算
    • 降低使用门槛,适配非技术人员
    • 适配特定业务场景,简化数据处理