在使用 Power BI、Tableau 或数据仓库设计时,你必须了解这两个经典的数据建模方法:Star Schema(星型模型) 和 Snowflake Schema(雪花模型) 。🌟❄️
✅ 一句话解释
名称 | 定义 |
---|---|
Star Schema | 中心是"事实表",周围是"维度表",像一颗星星 🌟 |
Snowflake Schema | 在 Star Schema 基础上,把维度表进一步拆分规范化,形成像雪花一样 ❄️ |
🔧 模型结构对比图(形象理解)
Model
Star Schema:
客户维度
|
产品维度 --- 销售事实表 --- 时间维度
|
地区维度
Snowflake Schema(维度再拆分):
客户类型
|
客户维度
|
产品子类 --- 产品维度 --- 品牌
|
销售事实表
|
时间维度 --- 年维度 --- 季度维度
🌟 Star Schema 的特点(主流推荐)
- 所有维度表都直接连到事实表
- 维度表是反规范化的(包含重复值)
- 查询更快、逻辑更简单
- 更适合 Power BI / BI 工具 做分析
✅ 优势:
- 查询性能更快(少 Join)
- 更适合建模与可视化
- 更容易理解与维护
❌ 劣势:
- 维度表有冗余数据(空间大)
- 不适合频繁更新数据的系统
❄️ Snowflake Schema 的特点
- 把维度表继续拆分成子表(规范化)
- 有更多的表之间的连接(多层级关系)
- 更像传统的数据库设计方式
✅ 优势:
- 节省存储(更规范)
- 避免维度表数据重复,更新更方便
❌ 劣势:
- 关系复杂,JOIN 多,查询性能差
- 用在 Power BI 中,建模复杂,关系图容易乱
✅ 在 Power BI 中的使用建议
场景 | 推荐模型 |
---|---|
BI 分析项目,大量报表 | ⭐ Star Schema |
数据库设计、ETL清洗中间过程 | ❄️ Snowflake |
Power BI 更推荐 Star Schema:
- 创建"一个事实表 + 多个维度表"
- 用日期维度、产品维度、客户维度等分析销售等指标
- 建立一对多关系,设置好方向(Filter Direction)
🎯 示例:销售分析模型
表名 | 类型 | 内容 |
---|---|---|
Sales |
事实表 | 销售记录(销售额、数量等) |
Date |
维度表 | 日期、月份、季度 |
Customer |
维度表 | 客户姓名、城市、性别等 |
Product |
维度表 | 产品名称、品牌、类型等 |
Region |
维度表 | 城市、省份、区域信息 |
👉 就是一个标准的 Star Schema
💡 小结对比表
项目 | Star Schema 🌟 | Snowflake Schema ❄️ |
---|---|---|
构造方式 | 维度表直接连接事实表 | 维度表进一步拆分(规范化) |
性能 | 快(JOIN 少) | 慢(JOIN 多) |
空间占用 | 高(有重复) | 低(更紧凑) |
建模难度 | 简单,适合 BI 工具 | 复杂,不适合直观建模 |
推荐使用场景 | Power BI/Tableau 分析建模 | 数据仓库设计、后台存储 |
✅ 实战建议:
你在 Power BI 中做可视化建模时,强烈建议使用 Star Schema!
- 创建日期表(使用
CALENDAR()
)- 创建产品、客户、地区等维度表
- 连接销售事实表
- 所有度量字段放在事实表(如销售额、利润)