数据仓库维度建模详细过程

news2025/5/31 22:28:27

数据仓库的维度建模(Dimensional Modeling)是一种以业务用户理解为核心的设计方法,通过维度表事实表组织数据,支持高效查询和分析。其核心目标是简化复杂业务逻辑,提升查询性能。以下是维度建模的详细过程:


一、维度建模的核心概念

  1. 维度表(Dimension Table)

    • 描述业务实体的属性(如时间、产品、客户、地理位置)。
    • 例如:时间维度表包含年、季度、月、日等字段。
  2. 事实表(Fact Table)

    • 存储业务过程的度量值(如销售额、订单数量)。
    • 例如:销售事实表包含销售金额、销售量,并关联多个维度表的外键。

二、维度建模的步骤

1. 选择业务过程(Business Process)
  • 目标:明确需要分析的业务流程(如销售、订单、库存)。
  • 输入:与业务团队沟通,识别关键业务流程和分析需求。
  • 示例:分析电商平台的“订单处理”过程。
2. 声明粒度(Declare Grain)
  • 目标:定义事实表中每一行数据的细节层级。
  • 原则:选择最细粒度的数据(如订单中的每个商品项而非整个订单)。
  • 示例:订单事实表的粒度是“每个订单项的商品销售记录”。
3. 确定维度(Identify Dimensions)
  • 目标:确定描述业务过程的维度,覆盖所有分析视角。
  • 常见维度:时间、产品、客户、渠道、地理位置等。
  • 示例:订单事实表的维度可能包括 时间维度产品维度客户维度店铺维度
4. 确定事实(Identify Facts)
  • 目标:确定业务过程的度量值(数值型字段)。
  • 类型
    • 可加事实:如销售额、数量(可跨维度求和)。
    • 半可加事实:如库存量(不可跨时间求和)。
    • 不可加事实:如比率(需计算后分析)。
  • 示例:订单事实表的度量包括 销售额折扣金额商品数量
5. 构建维度模型(Build Schema)
  • 星型模型(Star Schema)

    • 事实表居中,直接关联所有维度表(无规范化)。
    • 优点:查询简单、性能高。
    • 缺点:可能存在冗余数据。
  • 雪花模型(Snowflake Schema)

    • 维度表进一步拆分为子维度表(规范化设计)。
    • 优点:减少冗余。
    • 缺点:查询复杂度高。
      Snowflake Schema

三、关键设计要点

  1. 缓慢变化维(Slowly Changing Dimensions, SCD)

    • 问题:维度属性随时间变化(如客户地址变更)。
    • 处理方式
      • Type 1:直接覆盖旧值(不保留历史)。
      • Type 2:新增记录,保留历史(常用)。
      • Type 3:新增字段记录新旧值(有限历史)。
  2. 退化维度(Degenerate Dimension)

    • 将事务的唯一标识(如订单号)直接存储在事实表中,无需单独维度表。
  3. 一致性维度(Conformed Dimensions)

    • 跨不同事实表共享同一维度(如时间维度),确保分析一致性。

四、应用场景

  1. 报表分析:如按时间、地区统计销售额。
  2. 历史数据分析:追踪客户行为变化。
  3. OLAP(联机分析处理):支持多维度的快速钻取、切片和切块。

五、示例:电商销售维度建模

1. 业务过程
  • 分析用户在电商平台下单的销售行为。
2. 粒度
  • 每个订单项的商品销售记录(即一条订单可能对应多条事实记录)。
3. 维度表设计
  • 时间维度:年、季度、月、日、小时。
  • 产品维度:产品ID、名称、类别、价格。
  • 客户维度:客户ID、姓名、地区、会员等级。
  • 店铺维度:店铺ID、名称、所在城市。
4. 事实表设计
  • 订单事实表
    CREATE TABLE fact_order (
      order_item_id INT PRIMARY KEY,
      product_key INT,       -- 关联产品维度
      customer_key INT,      -- 关联客户维度
      time_key INT,          -- 关联时间维度
      store_key INT,         -- 关联店铺维度
      sales_amount DECIMAL,  -- 销售额
      quantity INT,          -- 销售数量
      discount DECIMAL       -- 折扣金额
    );
    

六、注意事项

  1. 数据一致性:确保维度表在不同业务过程中保持一致。
  2. 性能优化
    • 为常用查询字段(如时间、产品类别)建立索引。
    • 预聚合高频查询指标(如每日销售额汇总)。
  3. 可扩展性:预留扩展字段以适应未来业务变化。

总结

维度建模通过事实表维度表的清晰结构,将复杂业务转化为直观的分析模型,是数据仓库设计的核心方法。其核心优势在于:

  • 用户友好:业务人员易于理解。
  • 高性能:减少多表关联,提升查询速度。
  • 灵活性:支持多维分析。

但需注意避免过度规范化(如雪花模型)导致的性能问题,同时合理处理缓慢变化维。

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

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

相关文章

python打卡day37

早停策略和模型权重保存 知识点回顾: 过拟合的判断:测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint,还包含训练状态 早停策略 是否过拟合,可以通过同步打印训练集和测试集的loss曲线…

各个网络协议的依赖关系

网络协议的依赖关系 学习网络协议之间的依赖关系具有多方面重要作用,具体如下: 帮助理解网络工作原理 - 整体流程明晰:网络协议分层且相互依赖,如TCP/IP协议族,应用层协议依赖传输层的TCP或UDP协议来传输数据&#…

OSC协议简介、工作原理、特点、数据的接收和发送

OSC协议简介 Open Sound Control(OSC) 是一种开放的、独立于传输的基于消息的协议,主要用于计算机、声音合成器和其他多媒体设备之间的通信。它提供了一种灵活且高效的方式来发送和接收参数化消息,特别适用于实时控制应用&#x…

区块链可投会议CCF C--APSEC 2025 截止7.13 附录用率

Conference:32nd Asia-Pacific Software Engineering Conference (APSEC 2025) CCF level:CCF C Categories:软件工程/系统软件/程序设计语言 Year:2025 Conference time:December 2-5, 2025 in Macao SAR, China …

【数字图像处理】_笔记

第一章 概述 1.1 什么是数字图像? 图像分为两大类:模拟图像与数字图像 模拟图像:通过某种物理(光、电)的强弱变化来记录图像上各个点的亮度信息 连续:从空间上和数值上是不间断的 举例&…

从0开始学习R语言--Day10--时间序列分析数据

在数据分析中,我们经常会看到带有时间属性的数据,比如股价波动,各种商品销售数据,网站的网络用户活跃度等。一般来说,根据需求我们会分为两种,分析历史数据的特点和预测未来时间段的数据。 移动平均 移动平…

基于开源链动2+1模式AI智能名片S2B2C商城小程序的产品驱动型增长策略研究

摘要:在数字化经济时代,产品驱动型增长(Product-Led Growth, PLG)已成为企业突破流量瓶颈、实现用户裂变的核心战略。本文以“开源链动21模式AI智能名片S2B2C商城小程序”(以下简称“链动AI-S2B2C系统”)为…

使用 OpenCV 实现“随机镜面墙”——多镜片密铺的哈哈镜效果

1. 引言 “哈哈镜”是一种典型的图像变形效果,通过局部镜面反射产生扭曲的视觉趣味。在计算机视觉和图像处理领域,这类效果不仅有趣,还能用于艺术创作、交互装置、视觉特效等场景。 传统的“哈哈镜”往往是针对整张图像做某种镜像或扭曲变换…

鸿蒙仓颉开发语言实战教程:页面跳转和传参

前两天分别实现了商城应用的首页和商品详情页面,今天要分享新的内容,就是这两个页面之间的相互跳转和传递参数。 首先我们需要两个页面。如果你的项目中还没有第二个页面,可以右键cangjie文件夹新建仓颉文件: 新建的文件里面没什…

最新Spring Security实战教程(十六)微服务间安全通信 - JWT令牌传递与校验机制

🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门到实战 🌺《RabbitMQ》…

【五】Spring Cloud微服务开发:解决版本冲突全攻略

Spring Cloud微服务开发:解决版本冲突全攻略 目录 Spring Cloud微服务开发:解决版本冲突全攻略 概述 一、Spring Boot 二、Spring Cloud 三、Spring Cloud Alibaba 总结 概述 spring cloud微服务项目开发过程中经常遇到程序包版本冲突的问题&…

Spring Boot微服务架构(二):开发调试常见中文问题

Spring Boot开发调试常见中文问题及解决方案 一、环境配置类问题 端口冲突 表现:启动时报错"Address already in use"解决:修改application.properties中的server.port或终止占用端口的进程 数据库连接失败 表现:启动时报错"…

Linux基础IO----动态库与静态库

什么是库? 库是由一些.o文件打包在一起而形成的可执行程序的半成品。 如何理解这句话呢? 首先,一个程序在运行前需要进行预处理、编译、汇编、链接这几步。 预处理: 完成头文件展开、去注释、宏替换、条件编译等,最终…

LeetCode百题刷004(哈希表优化两数和问题)

遇到的问题都有解决的方案,希望我的博客可以为你提供一些帮助 一、哈希策略优化两数和问题 题目地址:1. 两数之和 - 力扣(LeetCode)https://leetcode.cn/problems/two-sum/description/ 思路分析: 题目要求在一个整型…

FPGA通信之VGA与HDMI

文章目录 VGA基本概念:水平扫描:垂直扫描: 时序如下:端口设计疑问为什么需要输出那么多端口不输出时钟怎么保证电子枪移动速度符合时序VGA转HDMI 仿真电路图代码总结:VGA看野火电子教程 HDMITMDS传输原理为什么使用TMD…

Leetcode百题斩-二叉树

二叉树作为经典面试系列,那么当然要来看看。总计14道题,包含大量的简单题,说明这确实是个比较基础的专题。快速过快速过。 先构造一个二叉树数据结构。 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode…

ACM Latex模板:合并添加作者和单位

目录: 1.ACM会议论文Latex模板,逐个添加作者和单位: 1)Latex: 2)效果: 2. ACM会议论文Latex模板,合并添加作者和单位: 1)Latex: 2&#x…

将MCP(ModelContextProtocol)与Semantic Kernel集成(调用github)

文章目录 将MCP(ModelContextProtocol)与Semantic Kernel集成(调用github)一、模型上下文协议(MCP)简介1.1 简介1.2 示例 二、集成步骤2.1 安装环境依赖2.2 构建语义内核(Kernel)2.3…

游戏引擎学习第311天:支持手动排序

仓库: https://gitee.com/mrxiao_com/2d_game_7(已满) 新仓库: https://gitee.com/mrxiao_com/2d_game_8 回顾并为今天的内容定下基调 我们接下来要继续完成之前开始的工作,上周五开始的部分内容,虽然当时对最终效果还不太确定,但现在主要任…

LambdaQueryWrapper、MybatisPlus提供的基本接口方法、增删改查常用的接口方法、自定义 SQL

DAY26.2 Java核心基础 MybatisPlus提供的基本接口方法 分页查询 导入依赖springboot整合Mybatis-plus <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.3</version&g…