数据仓库工具箱—读书笔记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累计取款
  • 每条记录表示某个时间点的账户余额,包括从账户创建到该日期的所有存款和取款的累计情况。

特性事务事实表周期快照事实表累计快照事实表
粒度细粒度,每个事件或事务一条记录粗粒度,按周期(如日、月、年)记录状态粗粒度,按累积数据(如累计销售额)记录
数据量大,随时间增加,记录每个事务相对较小,通常按周期记录数据适中,数据随着累计情况不断增长
更新频率高,实时或近实时更新低,定期(如每日、每月)更新持续更新,随着业务过程变化而更新
适用场景详细的业务过程分析,如订单追踪趋势分析、月度或季度报告等长期数据跟踪,如账户余额、累计销售等
示例每一笔订单的详细信息月度销售汇总数据客户账户余额的累计变化

整理不易 列位点赞收藏关注多多支持🤣🤣🤣~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fabric.js

目录 一、在canvas上画简单的图形 二、在canvas上用路径(Path)画不规则图形 三、在canvas上插入图片并设置旋转属性(angle) 四、让元素动起来(animate) 五、图像过滤器(filters)让图片多姿多彩 六、颜色模式(Color)和相互转换(toRgb、toHex) 七、对图形的渐变填充(Gradi…

Liinux下VMware Workstation Pro的安装,建议安装最新版本17.61

建议安装最新版本17.61,否则可能有兼容性问题 下载VMware Workstation安装软件 从官网网站下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro 选择所需版本 现在最新版本是17.61,否则可能有兼容性问题…

压力测试Jmeter简介

前提条件:要安装JDK 若不需要了解,请直接定位到左侧目录的安装环节。 1.引言 在现代软件开发中,性能和稳定性是衡量系统质量的重要指标。为了确保应用程序在高负载情况下仍能正常运行,压力测试变得尤为重要。Apache JMeter 是一…

前端的知识(部分)

11 前端的编写步骤 第一步:在HTML的页面中声明方法 第二步:在<script>中定义一个函数,其中声明一个data来为需要的数据 赋值一个初始值 第三步:编写这个方法实现对应的功能

LSTM详解

1. LSTM设计 LSTM(长短期记忆网络)详解 长短期记忆网络(LSTM, Long Short-Term Memory) 是一种特殊的循环神经网络(RNN),特别适合处理和预测序列数据中的长时间依赖关系。LSTM 通过引入“门机制”(如输入门、遗忘门、输出门)来解决标准 RNN 在长时间序列任务中梯度消…

我在广州学 Mysql 系列之 数据类型和运算符详解

ℹ️大家好&#xff0c;我是&#x1f606;练小杰&#xff0c;今天主要学习 Mysql的数据类型以及运算符操作~~ 上周五学习了“Mysql 系列之 数据“表”的基本操作”~ 想要了解更多&#x1f236;️MYSQL 数据库的命令行总结&#xff01;&#xff01;&#xff01; “我是你的敌人,…

python 配置 oracle instant client

1.问题描述 想用python连接oracle数据库&#xff0c;百度得知需要cx_Oracle这个第三方库 import cx_Oracle# 设置Oracle数据源名称 dsn cx_Oracle.makedsn(host, port, service_nameservice_name)# 创建数据库连接 connection cx_Oracle.connect(userusername, passwordpas…

使用FastGPT制做一个AI网站日志分析器

越来越的多网站面临每天上千次的扫描和各类攻击&#xff0c;及时发现攻击IP&#xff0c;并有效的屏蔽不良访问成为网站安全的重要保障&#xff0c;这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器&#xff0c;下面就开始&#xff1a; …

RabbitMQ中的Work Queues模式

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信和解耦系统的关键组件之一。RabbitMQ 是一个广泛使用的开源消息代理软件&#xff0c;支持多种消息传递模式。其中&#xff0c;Work Queues&#xff08;工作队列&#xff09;模式是一…

【Python爬虫系列】_032.Scrapy_全站爬取

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈

音频声音太小怎么调大?调大音频声音的几种方法

音频声音太小怎么调大&#xff1f;音频声音过小可能由多种原因引起。从设备本身的硬件设置&#xff0c;到应用程序或播放软件的音量控制&#xff0c;再到文件本身的音频质量&#xff0c;都可能是导致声音过小的因素。尤其是在观看视频或听音乐时&#xff0c;若音量过低&#xf…

条件随机场(CRF)详解:原理、算法与实现(深入浅出)

目录 1. 引言2. 什么是条件随机场&#xff1f;2.1 直观理解2.2 形式化定义 3. CRF的核心要素3.1 特征函数3.2 参数学习 4. 实战案例&#xff1a;命名实体识别5. CRF vs HMM6. CRF的优化与改进6.1 特征选择6.2 正则化 7. 总结与展望参考资料 1. 引言 条件随机场(Conditional Ra…

基于Clinical BERT的医疗知识图谱自动化构建方法,双层对比框架

基于Clinical BERT的医疗知识图谱自动化构建方法&#xff0c;双层对比框架 论文大纲理解1. 确认目标2. 目标-手段分析3. 实现步骤4. 金手指分析 全流程核心模式核心模式提取压缩后的系统描述核心创新点 数据分析第一步&#xff1a;数据收集第二步&#xff1a;规律挖掘第三步&am…

LWIP协议:三次握手和四次挥手、TCP/IP模型

一、三次握手&#xff1a;是客户端与服务器建立连接的方式&#xff1b; 1、客户端发送建立TCP连接的请求。seq序列号是由发送端随机生成的&#xff0c;SYN字段置为1表示需要建立TCP连接。&#xff08;SYN1&#xff0c;seqx&#xff0c;x为随机生成数值&#xff09;&#xff1b;…

使用winscp从windows访问Ubuntu进行文件传输

Ubuntu 系统上的准备工作 • 安装 SSH 服务器&#xff1a; 确保 Ubuntu 系统上已经安装了 SSH 服务器。如果没有安装&#xff0c;可以使用以下命令安装&#xff1a; sudo apt update sudo apt install openssh-server • 启动 SSH 服务&#xff1a; 确保 SSH 服务正在运行&a…

[机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)

AdaBoost AdaBoost&#xff08;Adaptive Boosting&#xff09;是一种Boosting算法&#xff0c;它通过迭代地训练弱分类器并将它们组合成一个强分类器来提高分类性能。 AdaBoost算法的特点是它能够自适应地调整样本的权重&#xff0c;使那些被错误分类的样本在后续的训练中得到…

PHP代码审计学习(一)--命令注入

1、漏洞原理 参数用户可控&#xff0c;程序将用户可控的恶意参数通过php可执行命令的函数中运行导致。 2、示例代码 <?php echorec-test; $command ping -c 1 .$_GET[ip]; system($command); //system函数特性 执行结果会自动打印 ?> 通过示例代码可知通过system函…

【并发容器】源码级ConcurrentHashMap详解(java78)

1. ConcurrentHashMap 为什么要使用ConcurrentHashmap 在多线程的情况下&#xff0c;使用HashMap是线程不安全的。另外可以使用Hashtable&#xff0c;其是线程安全的&#xff0c;但是Hashtable的运行效率很低&#xff0c;之所以效率低下主要是因为其实现使用了synchronized关…

Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)

目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的&#xff08;面试&#xff09; 上文介绍reids的安装以及基本概念&#xff0c;本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对&#xff08;KEY - VALUE&#xff09;存储的…

基于SpringBoot的乡村信息服务平台的设计与实现

摘 要 乡村信息服务平台的研究背景源于当前乡村振兴战略的实施和信息化技术的快速发展。随着城乡经济差距的逐渐凸显&#xff0c;乡村信息服务平台成为一种新型的信息化手段。本系统采用Java语言&#xff0c;MySQL数据库&#xff0c;采用MVC框架, JS技术开发。乡村信息服务平…