当前位置: 首页 > news >正文

数据仓库工具箱—读书笔记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 事实表结构

  • 发生在现实世界中的操作型事件,其所产生的可度量数值存储在事实表中。
  • 事实表的设计完全依赖于物理活动,不受可能产生的最终报表的影响。

在这里插入图片描述

  1. 主键

    • 通常为复合主键,由多个外键组合,唯一标识一条记录(例如 订单ID + 产品ID。)。
  2. 外键

    • 连接维度表的字段,提供事实表记录的上下文(如时间ID、产品ID、客户ID)。
  3. 度量值

    • 存储可聚合的指标数据(如销售额、订单数量、库存量)。
  4. 粒度

    • 每条记录代表的业务事件或过程的最小单位(如每笔订单的每个商品)。
字段名类型描述
fact_idINT主键
time_idINT时间维度外键
product_idINT产品维度外键
customer_idINT客户维度外键
sales_amountDECIMAL销售金额
sales_quantityINT销售数量

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&#xff5c;日常开发中数据集合详解 前言一、数组&#xff08;Array&#xff09;1.1 定义和基本概念1.2 数组的操作 二、列表&#xff08;List<T>&#xff09;2.1 特点和优势2.2 常用操作 三、字典&#xff08;Dictionary<K, V>&#xff09;3.1 概念和用途…...

Pytest-Bdd vs Behave:选择最适合的 Python BDD 框架

Pytest-Bdd vs Behave&#xff1a;选择最适合的 Python BDD 框架 Pytest BDD vs Behave&#xff1a;选择最适合的 Python BDD 框架BDD 介绍Python BDD 框架列表Python BehavePytest BDDPytest BDD vs Behave&#xff1a;关键区别Pytest BDD vs Behave&#xff1a;最佳应用场景结…...

Unity3D Shader变体自定义组合压缩方案详解

前言 在Unity3D中&#xff0c;Shader变体&#xff08;Shader Variants&#xff09;是指根据不同条件生成的Shader版本。这些条件可以包括材质属性、光照模型、阴影选项、渲染队列、纹理类型等。Shader变体允许开发者为同一Shader提供多种实现方式&#xff0c;以满足不同的渲染…...

QT使用promoted后样式(setStyleSheet)不生效问题解决

1.理解promoted&#xff08;提升&#xff09;在 Qt 中的概念 在 Qt Designer 中&#xff0c;“提升&#xff08;Promoted&#xff09;” 是一种机制&#xff0c;它允许你使用自定义的部件类来替代标准的 Qt 部件类。这在你已经创建了一个从标准 Qt 部件&#xff08;如QListWid…...

Vue3有哪些好用的处理大数据量虚拟表格组件呢?

在 Vue 3 中&#xff0c;处理大数据量的虚拟表格&#xff08;Virtual Table&#xff09;通常需要一个专门的组件或库来优化渲染性能&#xff0c;避免一次性渲染过多的 DOM 元素。以下是一些常用的虚拟表格组件&#xff0c;它们可以帮助你有效处理大数据量&#xff1a; 1. Vue …...

Java学习教程,从入门到精通,Java LinkedList(链表)语法知识点及案例代码(62)

Java LinkedList&#xff08;链表&#xff09;语法知识点及案例代码 一、LinkedList概述 LinkedList是Java集合框架中的一个类&#xff0c;位于java.util包中。它实现了List、Deque、Queue等接口&#xff0c;提供了链表数据结构的实现。链表是一种线性数据结构&#xff0c;其…...

设计模式——Singleton(单例)设计模式

摘要 本文介绍了单例设计模式的概念、实现和应用场景。单例模式确保某个类只有一个实例&#xff0c;节省资源并提供全局访问点。文章详细解释了单例模式的实现要素&#xff0c;包括私有构造方法、静态实例和公共静态方法&#xff0c;并探讨了其在数据库连接池、日志记录器和配…...

深入理解 CSS 文本换行: overflow-wrap 和 word-break

前言 正常情况下&#xff0c;在固定宽度的盒子中的中文会自动换行。但是&#xff0c;当遇到非常长的英文单词或者很长的 URL 时&#xff0c;文本可能就不会自动换行&#xff0c;而会溢出所在容器。幸运的是&#xff0c;CSS 为我们提供了一些和文本换行相关的属性&#xff1b;今…...

Java-27 深入浅出 Spring - 实现简易Ioc-03 在上节的业务下手动实现IoC

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…...

kubernetes学习-使用metrics-server监控集群资源和查看日志

kubernetes学习-使用metrics-server监控集群资源和查看日志 一 、简介二、应用场景三、部署四、查看日志 一 、简介 Metrics Server 是一个用于 Kubernetes 集群的监控工具&#xff0c;它用于收集、存储和提供关于集群中各种资源的度量数据。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时&#xff0c;没有提供…...

CCNP_SEC_ASA 第三天作业

实验需求&#xff1a; ASA 使用列表放行 Outside 路由器到 DMZ 路由器的 WWW 流量并拒绝 Telnet 流量&#xff0c;当放行和拒绝流量匹配后产生日志通告。 提示&#xff1a;需要使能 ASA的日志功能和 DMZ路由器的 HTTP功能。 设备配置&#xff1a; ##此处展示各设备的配置&am…...

TypeError: Cannot read properties of null (reading ‘ce‘)

vue项目本地跑不起来&#xff0c;但是build之后能运行&#xff0c;本地报错 是因为你的vue版本不对&#xff0c;你的package可能是这样写的 这个表示你允许你的npm安装vue3的任意版本&#xff0c;但是build是按照这个版本来的&#xff0c;所以build之后能运行&#xff0c;本地运…...

AdminJS - 集成 MySQL 的现代化管理面板开发指南

AdminJS - 集成 MySQL 的现代化管理面板开发指南 MySQL 集成配置 首先需要安装必要的依赖&#xff1a; npm install adminjs adminjs/express express npm install adminjs/sequelize sequelize mysql2基础配置示例 const AdminJS require(adminjs) const AdminJSExpress …...

上传文件(vue3)

使用el-upload 先上传到文件服务器&#xff0c;生成url 然后点击确定按钮&#xff1a; 保存数据 <template><el-dialog top"48px" width"500" title"新增协议" :modelValue"visible" close"handleClose()">…...

【Win10 环境vscode配置boost】

文章目录 Boost exe版本windows环境安装vscode配置安装测试总结 Boost exe版本windows环境安装 这里不介绍boost源码安装&#xff0c;请自行网络搜索。本文要介绍的是window下单c文件&#xff08;cpp&#xff09;&#xff0c;调用boost库的执行配置。不涉及多文件。 安装文件下…...

中间件 redis安装

redis官网地址&#xff1a;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&#xff0c;远程下载redis压缩包&#xff0c;或去官网下载&#xff1a;Downloads …...

[java] 简单的熔断器scala语言案例

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

【java】序列化的种类和使用场景

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

Qt5与Qt6中的高DPI缩放属性解析

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

Mac使用总结

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

【日期规则】EXCEl 自定义日期匹配规则,学习基础知识,自由匹配场景

excel 新建规则工具路径&#xff1a;开始 - 条件格式 - 新建规则 B$1TODAY() 注意&#xff1a;新建规则后&#xff0c;要点击 条件格式 - 管理规则 - 应用于 要选择规则应用范围 使用场景&#xff1a; excel 做进度管理当中可以查看当天的情况&#xff1b;每周的学习规划 或…...

苹果电脑可以安装windows操作系统吗?Mac OS X/OS X/macOS傻傻分不清?macOS系统的Java支持?什么是macOS的五大API法王?

苹果电脑可以安装windows操作系统吗? 先抛开虚拟机安装&#xff0c;苹果电脑可以安装Windows操作系统。苹果公司提供了一个名为Boot Camp的软件&#xff0c;它允许用户在Mac电脑上安装Windows操作系统。通过Boot Camp&#xff0c;用户可以在启动电脑时选择是要进入macOS还是Wi…...

芋道SpringBoot配置Maven、创建SpringBoot项目、创建Web接口、读取配置信息

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 第一章 芋…...

物理机内网穿透

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

Vue 3: 通过图片链接获取图片颜色,间接设置背景颜色

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

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&#xff1a;…...