数据仓库工具箱—读书笔记02(Kimball维度建模技术概述02、事实表技术基础)
Kimball维度建模技术概述
记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣

第二章前言部分作者提到:技术的介绍应该通过涵盖各种行业的熟悉的用例展开(赞同哈哈 确实比抽象地讲解概念要好理解🤣🤣🤣)。
书中从第三章开始是通过各行业的用例去讲解维度建模,第二章则是维度建模技术的总体介绍(很多概念,挺抽象的🤣🤣🤣)。
前言部分作者也有提到:我们并不期望您一开始就从头到尾阅读本章,但希望您能将本章作为所提供的技术参考。本节介绍的技术,在所有维度设计工作中都需要考虑。本书的每一章几乎都会涉及本节所介绍的概念。
Kimball维度建模技术概述01、基本概念
书接上回~🤣🤣🤣🤣🤣🤣
Kimball维度建模技术概述
- Kimball维度建模技术概述
- 2.2 事实表技术基础
- 2.2.1 事实表结构
- 2.2.2 可加、半可加、不可加事实
- 2.2.3 事实表中的空值
- 2.2.4 事务事实表(Transactional Fact Table)
- 2.2.5 周期快照事实表(Periodic Snapshot Fact Table)
- 2.2.6 累计快照事实表(Cumulative Snapshot Fact Table)
- 整理不易 列位点赞收藏关注多多支持🤣🤣🤣~
2.2 事实表技术基础
2.2.1 事实表结构
- 发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中。
- 事实表的设计完全依赖于物理活动,不受可能产生的最终报表的影响。

-
主键:
- 通常为复合主键,由多个外键组合,唯一标识一条记录(例如 订单ID + 产品ID。)。
-
外键:
- 连接维度表的字段,提供事实表记录的上下文(如时间ID、产品ID、客户ID)。
-
度量值:
- 存储可聚合的指标数据(如销售额、订单数量、库存量)。
-
粒度:
- 每条记录代表的业务事件或过程的最小单位(如每笔订单的每个商品)。
| 字段名 | 类型 | 描述 |
|---|---|---|
fact_id | INT | 主键 |
time_id | INT | 时间维度外键 |
product_id | INT | 产品维度外键 |
customer_id | INT | 客户维度外键 |
sales_amount | DECIMAL | 销售金额 |
sales_quantity | INT | 销售数量 |
Tip:事实表也可包含可选的退化维度键和日期/时间戳。(退化维度,在专栏里维度表技术基础里有讲~)
2.2.2 可加、半可加、不可加事实
事实表中的数字度量可划分为三类:
| 类别 | 定义 | 示例 | 适用场景 | 注意事项 |
|---|---|---|---|---|
| 可加事实 | 在所有维度上都可以直接求和的度量值。 | 销售金额、销售数量、成本 | 适用于跨时间、产品、客户等维度的总量分析。 | 无需额外计算逻辑,直接进行求和操作即可。 |
| 半可加事实 | 只能在某些维度上求和,而在其他维度(通常是时间维度)上不能求和。 | 库存量、账户余额、银行存款 | 时间快照、状态监控场景,例如监控某日的库存或余额状态。 | 时间维度上不能直接求和,需通过取最近值或计算变化量等方式分析。 |
| 不可加事实 | 在所有维度上都无法直接求和的度量值,通常是比率或衍生指标。 | 利润率、平均单价、转化率 | 适用于分析比率、平均值或需要权重处理的业务场景,例如分析效率。 | 必须结合上下文设计加权平均、除法等逻辑,不能通过直接聚合获得结果。 |
| 类别 | 示例字段名 | 示例描述 | 是否可跨时间维度求和 | 处理方法 |
|---|---|---|---|---|
| 可加事实 | sales_amount | 记录销售金额,例如一笔订单的总金额。 | 是 | 直接使用 SUM(sales_amount) 进行求和即可。 |
| 可加事实 | sales_qty | 记录销售数量,例如商品的销售件数。 | 是 | 可按时间、商品、客户等维度聚合计算总量。 |
| 半可加事实 | stock_qty | 记录某一时间点的库存量,例如每天的库存快照。 | 否 | 取最新时间点的值或计算时间点之间的变化量。 |
| 半可加事实 | account_bal | 记录某一时间点的账户余额,例如每天的账户快照。 | 否 | 取最后一个时间点的余额作为有效值。 |
| 不可加事实 | profit_margin | 记录利润率,例如单个商品的利润率。 | 否 | 按比率的定义公式重新计算(如总利润/总收入)。 |
| 不可加事实 | avg_price | 记录平均单价,例如按订单计算的商品平均单价。 | 否 | 通过加权计算重新求值(如总金额/总数量)。 |
2.2.3 事实表中的空值
-
事实表中可以存在空值度量(所有聚集函数sum、count等都可针对空值事实计算)。
-
但是事实表中的外键不能存在空值,因为它们是维度表与事实表之间的关联桥梁。空值的外键意味着事实表中的记录没有关联到任何有效的维度数据,无法确保确保数据的完整性和一致性(引发数据质量问题)。

2.2.4 事务事实表(Transactional Fact Table)
事务事实表记录的是单个业务事务或事件的详细信息,每条记录代表一个独立的操作,如一次购买、一次交易或一次订单等。数据粒度通常非常细,每一行记录都是一个具体的事务。

- 粒度细:每条记录表示一个单独的事件或操作。
- 数据量大:由于记录详细的事务,数据量较大,且随着业务发展不断增加。
- 高更新频率:事务数据通常在操作发生时实时更新。
- 适用于实时或近实时分析:事务事实表能提供详细的业务过程数据,用于监控和分析业务活动。
| 字段名 | 描述 |
|---|---|
transaction_id | 事务ID(唯一标识) |
customer_id | 客户ID |
product_id | 产品ID |
time_id | 时间ID(外键) |
quantity | 销售数量 |
sales_amount | 销售金额 |
payment_status | 付款状态 |
2.2.5 周期快照事实表(Periodic Snapshot Fact Table)
周期快照事实表记录在特定时间点或时间段内的业务状态,通常会在某个固定时间间隔(如每天、每周或每月)进行快照。

每条记录通常代表某个周期结束时的业务状态,体现的是在该时间点的“快照”信息。
- 粒度较粗:每条记录代表一个周期的业务状态,而不是单个事务。
- 数据量较小:与事务事实表相比,周期快照事实表记录的数量较少,因为它仅记录周期性汇总的业务状态。
- 周期性更新:快照表通常定期(如每天、每月)更新,更新频率较低。
- 适用于趋势分析和汇总:周期快照表非常适合用于分析业务在特定时间点的状态变化,例如月度销售趋势、客户活跃度变化等。
| 字段名 | 描述 |
|---|---|
snapshot_date | 快照日期 |
customer_id | 客户ID |
total_sales | 总销售金额 |
total_quantity | 总销售数量 |
total_orders | 总订单数量 |
2.2.6 累计快照事实表(Cumulative Snapshot Fact Table)
累计快照事实表记录的是某个度量数据(如库存数量、账户余额等)的累积变化情况。与周期快照表不同,累计快照表记录的是从一个起始点开始,随时间积累变化的数据状态。这种表适用于需要持续积累的度量数据,如库存、客户余额、累计销售等。

- 粒度较粗:每条记录通常表示某个特定时间点的累计度量数据。
- 持续更新:与周期快照表不同,累计快照表在每次数据更新时都会进行累积。它不会丢失先前的累积数据,而是随着时间推移不断更新。
- 适用于长期趋势分析:累计快照表能够帮助跟踪业务的长期变化,如追踪某个客户的累计购买金额、账户余额变化等。
| 字段名 | 描述 |
|---|---|
snapshot_date | 快照日期 |
account_id | 账户ID |
balance | 累计余额 |
total_deposit | 累计存款 |
total_withdrawal | 累计取款 |
- 每条记录表示某个时间点的账户余额,包括从账户创建到该日期的所有存款和取款的累计情况。
| 特性 | 事务事实表 | 周期快照事实表 | 累计快照事实表 |
|---|---|---|---|
| 粒度 | 细粒度,每个事件或事务一条记录 | 粗粒度,按周期(如日、月、年)记录状态 | 粗粒度,按累积数据(如累计销售额)记录 |
| 数据量 | 大,随时间增加,记录每个事务 | 相对较小,通常按周期记录数据 | 适中,数据随着累计情况不断增长 |
| 更新频率 | 高,实时或近实时更新 | 低,定期(如每日、每月)更新 | 持续更新,随着业务过程变化而更新 |
| 适用场景 | 详细的业务过程分析,如订单追踪 | 趋势分析、月度或季度报告等 | 长期数据跟踪,如账户余额、累计销售等 |
| 示例 | 每一笔订单的详细信息 | 月度销售汇总数据 | 客户账户余额的累计变化 |
整理不易 列位点赞收藏关注多多支持🤣🤣🤣~
相关文章:
数据仓库工具箱—读书笔记02(Kimball维度建模技术概述02、事实表技术基础)
Kimball维度建模技术概述 记录一下读《数据仓库工具箱》时的思考,摘录一些书中关于维度建模比较重要的思想与大家分享🤣🤣🤣 第二章前言部分作者提到:技术的介绍应该通过涵盖各种行业的熟悉的用例展开(赞同…...
SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期
SAP ABAP-日期格式问题 SAP内部错误,反序列化JSON字符串时发生异常 值 20241215 不是根据 ABAP 的 XML 格式的有效日期 在SAP内部用 YYYYMMDD没有问题 外部传入参数...
Linux-ubuntu点LED灯C语言版
一,C语言点灯 1.寄存器配置 设置为SVC模式,复用寄存器设置GPIO1-IO003,设置电气属性,设置为输出模式。 2.软件 汇编语言对模式设置,并且将堆栈指针指向主程序: .global _start_start: /*设置为svr模式 */mrs …...
ASP.NET|日常开发中数据集合详解
ASP.NET|日常开发中数据集合详解 前言一、数组(Array)1.1 定义和基本概念1.2 数组的操作 二、列表(List<T>)2.1 特点和优势2.2 常用操作 三、字典(Dictionary<K, V>)3.1 概念和用途…...
Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架
Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架 Pytest BDD vs Behave:选择最适合的 Python BDD 框架BDD 介绍Python BDD 框架列表Python BehavePytest BDDPytest BDD vs Behave:关键区别Pytest BDD vs Behave:最佳应用场景结…...
Unity3D Shader变体自定义组合压缩方案详解
前言 在Unity3D中,Shader变体(Shader Variants)是指根据不同条件生成的Shader版本。这些条件可以包括材质属性、光照模型、阴影选项、渲染队列、纹理类型等。Shader变体允许开发者为同一Shader提供多种实现方式,以满足不同的渲染…...
QT使用promoted后样式(setStyleSheet)不生效问题解决
1.理解promoted(提升)在 Qt 中的概念 在 Qt Designer 中,“提升(Promoted)” 是一种机制,它允许你使用自定义的部件类来替代标准的 Qt 部件类。这在你已经创建了一个从标准 Qt 部件(如QListWid…...
Vue3有哪些好用的处理大数据量虚拟表格组件呢?
在 Vue 3 中,处理大数据量的虚拟表格(Virtual Table)通常需要一个专门的组件或库来优化渲染性能,避免一次性渲染过多的 DOM 元素。以下是一些常用的虚拟表格组件,它们可以帮助你有效处理大数据量: 1. Vue …...
Java学习教程,从入门到精通,Java LinkedList(链表)语法知识点及案例代码(62)
Java LinkedList(链表)语法知识点及案例代码 一、LinkedList概述 LinkedList是Java集合框架中的一个类,位于java.util包中。它实现了List、Deque、Queue等接口,提供了链表数据结构的实现。链表是一种线性数据结构,其…...
设计模式——Singleton(单例)设计模式
摘要 本文介绍了单例设计模式的概念、实现和应用场景。单例模式确保某个类只有一个实例,节省资源并提供全局访问点。文章详细解释了单例模式的实现要素,包括私有构造方法、静态实例和公共静态方法,并探讨了其在数据库连接池、日志记录器和配…...
深入理解 CSS 文本换行: overflow-wrap 和 word-break
前言 正常情况下,在固定宽度的盒子中的中文会自动换行。但是,当遇到非常长的英文单词或者很长的 URL 时,文本可能就不会自动换行,而会溢出所在容器。幸运的是,CSS 为我们提供了一些和文本换行相关的属性;今…...
Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC
点一下关注吧!!!非常感谢!!持续更新!!! 大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了: MyBatisÿ…...
kubernetes学习-使用metrics-server监控集群资源和查看日志
kubernetes学习-使用metrics-server监控集群资源和查看日志 一 、简介二、应用场景三、部署四、查看日志 一 、简介 Metrics Server 是一个用于 Kubernetes 集群的监控工具,它用于收集、存储和提供关于集群中各种资源的度量数据。Metrics Server 是 Kubernetes 中一…...
解决 Git Permission denied 问题
前言 push项目时出现gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository.Please make sure you have the correct access rights and the repository exists.出现这个问题表示你在尝试将本地代码推送到GitHub时,没有提供…...
CCNP_SEC_ASA 第三天作业
实验需求: ASA 使用列表放行 Outside 路由器到 DMZ 路由器的 WWW 流量并拒绝 Telnet 流量,当放行和拒绝流量匹配后产生日志通告。 提示:需要使能 ASA的日志功能和 DMZ路由器的 HTTP功能。 设备配置: ##此处展示各设备的配置&am…...
TypeError: Cannot read properties of null (reading ‘ce‘)
vue项目本地跑不起来,但是build之后能运行,本地报错 是因为你的vue版本不对,你的package可能是这样写的 这个表示你允许你的npm安装vue3的任意版本,但是build是按照这个版本来的,所以build之后能运行,本地运…...
AdminJS - 集成 MySQL 的现代化管理面板开发指南
AdminJS - 集成 MySQL 的现代化管理面板开发指南 MySQL 集成配置 首先需要安装必要的依赖: npm install adminjs adminjs/express express npm install adminjs/sequelize sequelize mysql2基础配置示例 const AdminJS require(adminjs) const AdminJSExpress …...
上传文件(vue3)
使用el-upload 先上传到文件服务器,生成url 然后点击确定按钮: 保存数据 <template><el-dialog top"48px" width"500" title"新增协议" :modelValue"visible" close"handleClose()">…...
【Win10 环境vscode配置boost】
文章目录 Boost exe版本windows环境安装vscode配置安装测试总结 Boost exe版本windows环境安装 这里不介绍boost源码安装,请自行网络搜索。本文要介绍的是window下单c文件(cpp),调用boost库的执行配置。不涉及多文件。 安装文件下…...
中间件 redis安装
redis官网地址:Redis - The Real-time Data Platform 环境 CentOS Linux release 7.9.2009 (Core) java version "17.0.12" 2024-07-16 LTS 1、通过压缩包安装redis 1,远程下载redis压缩包,或去官网下载:Downloads …...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Python Einops库:深度学习中的张量操作革命
Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
