数据仓库工具箱—读书笔记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 …...

[java] 简单的熔断器scala语言案例
failureRateInterval时间内如果addEx(错误)达到 maxFailuresPerInterval 次数,则fused方法返回true,表示触发熔断,进入冷却期coolingInterval,冷却期内fused方法返回true,冷却期过后进入下一个错误统计周期。 scala语言完成 imp…...

【java】序列化的种类和使用场景
文章目录 序列化概述什么是序列化?序列化的作用 Java内置序列化java.io.Serializable接口使用ObjectOutputStream和ObjectInputStream优缺点分析 自定义序列化实现Externalizable接口自定义序列化方法适用场景 第三方序列化框架KryoProtobuf (Google Protocol Buffe…...

Qt5与Qt6中的高DPI缩放属性解析
在Qt5中,高DPI缩放默认是禁用的。为了启用它,开发者需要设置Qt::AA_EnableHighDpiScaling应用程序属性。然而,在Qt6中,高DPI缩放默认是启用的,并且不能被禁用。这种变化使得开发者在处理高分辨率屏幕时更加方便&#x…...

Mac使用总结
Mac 常用快捷键 复制:Cmdc粘贴:Cmdv只粘贴文档: ShiftCmdv行首: Cmd<行尾:Cmd>鼠标处选中到行首:ShiftCmd<鼠标处选中到行尾:ShiftCmd>选中整行:上面两个命令组合鼠标处…...

【日期规则】EXCEl 自定义日期匹配规则,学习基础知识,自由匹配场景
excel 新建规则工具路径:开始 - 条件格式 - 新建规则 B$1TODAY() 注意:新建规则后,要点击 条件格式 - 管理规则 - 应用于 要选择规则应用范围 使用场景: excel 做进度管理当中可以查看当天的情况;每周的学习规划 或…...

苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?
苹果电脑可以安装windows操作系统吗? 先抛开虚拟机安装,苹果电脑可以安装Windows操作系统。苹果公司提供了一个名为Boot Camp的软件,它允许用户在Mac电脑上安装Windows操作系统。通过Boot Camp,用户可以在启动电脑时选择是要进入macOS还是Wi…...

芋道SpringBoot配置Maven、创建SpringBoot项目、创建Web接口、读取配置信息
🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 系列文章目录 第一章 芋…...

物理机内网穿透
前言: 本文主要讲述如何使用内网穿透以及其安全性。 将带领大家在公网上搭建几个常用靶场。 一,什么是内网穿透。 大多数情况下,我们的个人电脑都处于内网,即没有可公开访问的独立 IP 地址,因此其他内网用户找不到…...

Vue 3: 通过图片链接获取图片颜色,间接设置背景颜色
在现代Web开发中,动态获取和处理图像数据是一个常见的需求。例如,你可能希望自动提取一张图片的主色调,以便根据这些颜色进行UI主题调整或其他视觉效果的处理。本文将介绍如何在Vue 3项目中,通过一个图片链接获取图片的颜色信息。…...

opencv-python的简单练习
题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2:…...