惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
Security Archives - TechRepublic
Security Archives - TechRepublic
Security Latest
Security Latest
K
Kaspersky official blog
P
Palo Alto Networks Blog
T
Threat Research - Cisco Blogs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
A
Arctic Wolf
NISL@THU
NISL@THU
GbyAI
GbyAI
腾讯CDC
罗磊的独立博客
Simon Willison's Weblog
Simon Willison's Weblog
Scott Helme
Scott Helme
S
SegmentFault 最新的问题
Cyberwarzone
Cyberwarzone
Jina AI
Jina AI
S
Schneier on Security
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Spread Privacy
Spread Privacy
C
CXSECURITY Database RSS Feed - CXSecurity.com
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Register - Security
The Register - Security
C
Cybersecurity and Infrastructure Security Agency CISA
L
Lohrmann on Cybersecurity
V
Vulnerabilities – Threatpost
G
GRAHAM CLULEY
P
Proofpoint News Feed
Cisco Talos Blog
Cisco Talos Blog
博客园_首页
雷峰网
雷峰网
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V2EX - 技术
V2EX - 技术
O
OpenAI News
博客园 - 司徒正美
S
Security @ Cisco Blogs
Last Week in AI
Last Week in AI
M
MIT News - Artificial intelligence
博客园 - 叶小钗
Vercel News
Vercel News
AI
AI
博客园 - 聂微东
Webroot Blog
Webroot Blog
J
Java Code Geeks

博客园 - 哥本哈士奇(aspnetx)

SQL Server 索引知识汇总 医疗器械行业 Salesforce Territory 完整落地实例 Raw Data Vault vs Business Data Vault Neo4j 多跳查询实战:从社交网络场景理解图遍历 Git 本地版本管理学习笔记 看完《低智商犯罪》,学习Cypher构建知识图谱 LangChain DeepAgents 学习笔记 LangChain Deepagent 版本0.6.1中间件一个bug Neo4j笔记(五):查询的处理流程 微软 SQL Server 版本演进史:从诞生到 SQL Server 2025 提升 Text2SQL 准确率 SQLServer Management Studio(SSMS) 22 Copilot 最佳实践学习笔记 SQLServer RAG笔记4:从服务层到前端交互 SQLServer RAG笔记5:为SQLServer 2025配置Ollama SQL Server RAG 笔记3:SQLServer2025 向量数据库 详解传统RAG、Text2SQL、Graph RAG:适用场景与问题示例汇总 SQL Server RAG 笔记2:图数据库服务层与前端可视化构建 SQL Server RAG 笔记1:图数据库构建 Neo4j 笔记(四):一篇文章如何入库的 数据仓库笔记 第六篇:PSA 层 SCD2 处理方式 数据仓库笔记 第五篇:Data Mart 层(数据集市) 数据仓库笔记 第四篇:Star Schema 层(维度建模) 数据仓库笔记 第三篇:常用缓慢变化维处理方式介绍 数据仓库笔记 第二篇:PSA 层(持久化暂存区)详解 数据仓库笔记 第一篇:数据仓库的定义、历史与意义 Neo4j 笔记(三):数据建模与程序连接实战 Neo4j 基础教程(二):Cypher CRUD 完全指南 Neo4j 基础教程(一):安装与快速入门 Power BI学习笔记第20篇:面试题汇总 · 第三篇:高级应用与最佳实践篇 Power BI学习笔记第19篇:面试题汇总 · 第二篇:数据建模与 DAX 篇 Power BI学习笔记第18篇:面试题汇总 · 第一篇:基础概念篇 Power BI学习笔记第15篇:企业级报表开发与最佳实践 Power BI学习笔记第13篇:高级可视化与自定义图表 Power BI学习笔记第14篇:Power Query 高级数据处理 Power BI学习笔记第12篇:DAX 高级计算与性能优化 Power BI学习笔记第11篇:高级数据建模与关系设计 Power BI学习笔记第10篇:实战案例 — 销售数据分析仪表板 Power BI学习笔记第08篇:报表交互与筛选器 Power BI学习笔记第09篇:Power BI Service 发布与共享 Power BI学习笔记第07篇:可视化图表设计与最佳实践 Power BI学习笔记第06篇:DAX 进阶:时间智能与复杂计算 Power BI学习笔记第05篇:DAX 基础:计算列与度量值 Power BI学习笔记第03篇:Power Query 数据清洗与转换 Power BI学习笔记第02篇:数据获取与连接数据源 Power BI学习笔记第01篇:Power BI 简介与环境搭建 Power BI Dashboard 常用布局方案推荐 Power BI 示例一览 OpenClaw 核心八大 MD 文件 Microsoft Agent Framework 智能体调用工具 Microsoft Agent Framework 创建智能体 一个简单案例理解OpenClaw的做梦过程 SQLAlchemy 学习笔记 LangChain RAG索引与查询 - 学习笔记 LangChain使用deep agent并且加载SKILL 本地系统对接大模型智能体的若干尝试 财务分析报告 - 常用Power BI DAX公式详解 用SKILL实现请假流程信息收集 使用小龙虾来操作猿编程的遥控车 使用OpenClaw的Skills对接本地系统 OpenClaw必装Skill全指南 Dify Agentic RAG 笔记 # 简单的神经网络计算过程 - 正负判断 使用Gradio构建AI前端 - RAG的QA模块 使用Gradio构建AI前端 - RAG召回测试 Streamlit + LangChain 1.0 简单实现智能问答前后端 利用AI Agent,辅助销售团队制定培训和考试内容 实现AI和BI整合的初步思路和探索-Part3 实现AI和BI整合的初步思路和探索-Part2 实现AI和BI整合的初步思路和探索 以《出师表》作为例子,对比通用分块和父子分块的区别 LangChain RAG 学习笔记:从文档加载到问答服务 记录无法修改OneDrive文件的解决方法 Power BI制作指标达成跟踪器 Power BI学习笔记-周报销售数据分析
Power BI学习笔记第04篇:数据建模与关系管理
哥本哈士奇(aspnet · 2026-04-25 · via 博客园 - 哥本哈士奇(aspnetx)

第04篇:数据建模与关系管理

1. 什么是数据模型

数据模型是 Power BI 报表性能和分析能力的基础。当你的报表涉及多张表时,需要通过关系(Relationship)将它们连接起来,让 Power BI 知道如何在不同表之间进行跨表计算。

这一篇主要是相关概念的讲解。

1.1 为什么要建模

没有建模时,每张表是独立存在的,无法进行跨表分析。例如:

  • 销售明细表中有"产品ID"但没有"产品名称"
  • 产品信息表中有"产品ID"和"产品名称"
  • 没有关系,报表无法显示每个产品的销售总额

建立关系后,Power BI 就能自动进行跨表关联查询,类似数据库的 JOIN 操作。

1.2 进入模型视图

在 Power BI Desktop 左侧点击第三个图标(模型视图),可以可视化地看到所有表及其关系。


2. 核心概念:事实表与维度表

2.1 事实表(Fact Table)

记录发生的业务事件,如销售订单、库存变动、用户访问日志。

特点:

  • 数据量大(通常数万到数亿行)
  • 包含外键,引用维度表
  • 记录可加总的数量型字段(销售额、数量等)

示例

订单ID 产品ID 客户ID 销售日期 销售额 数量
1001 P01 C01 2024-01-01 5000 10
1002 P02 C02 2024-01-02 3000 6

2.2 维度表(Dimension Table)

描述业务实体的属性信息,用于分析和筛选。

特点:

  • 数据量相对较小
  • 包含主键(唯一标识)
  • 包含描述性文本字段

示例

产品维度表:

产品ID 产品名称 产品类别 品牌
P01 手机A 电子产品 品牌甲
P02 服装B 服装 品牌乙

客户维度表:

客户ID 客户名称 地区 客户等级
C01 公司A 北京 VIP
C02 公司B 上海 普通

3. 建立表关系

3.1 关系的构成

一个关系由三个要素组成:

要素 说明
基数(Cardinality) 一端是一还是多
交叉筛选方向(Cross-filter direction) 关系如何影响筛选上下文
活动属性(Active) 关系是否默认激活

3.2 基数类型

类型 说明 场景
一对多(1:*) 维度表1行 → 事实表多行 最常用!如1个产品对应多笔销售
多对一(*:1) 与一对多相反,从事实表看向维度表 同上
一对一(1:1) 两表行数一一对应 少见,如主表与扩展表
*多对多(*: ) 两表都是多端 需谨慎使用,可能导致性能问题

3.3 创建关系

方法一:自动检测(推荐新手)

Power BI 通常会自动检测关系。

  1. 加载数据后,进入"模型视图"
  2. 点击"主页" → "管理关系" → "自动检测"
  3. Power BI 会根据列名和数据特征自动推断关系

根据我的经验,如果数据库的建模足够好,命名足够规范,并且关系也在数据仓库里都定义好了,那么拿到Power BI里都会被自动识别出来,基本上不需要额外的建模工作。

方法二:手动创建

  1. 在模型视图中,将一个表的主键列拖拽到另一个表的外键列上
  2. 弹出"创建关系"对话框
  3. 确认基数和交叉筛选方向,点击"确定"

通常在没有数据仓库做支撑的场景,需要手动建模或者做调整。

3.4 交叉筛选方向

方向 说明 场景
单向(Single) 维度表 → 事实表 大多数情况使用单向即可
双向(Both) 两表相互影响 需要双向联动筛选时使用

⚠️ 双向筛选会显著增加计算复杂度,可能影响报表性能,建议仅在必要时使用。


4. 星型模型与雪花模型

4.1 星型模型(Star Schema)

最推荐的建模方式,结构如下:


┌───▼───┐  ┌───▼───┐  ┌───▼───┐
│ 产品  │  │ 客户  │  │ 销售渠道│
│ 维度表│  │ 维度表│  │  维度表 │
└───┬───┘  └───┬───┘  └───┬───┘
    │          │          │
    └──────────┼──────────┘
               │
        ┌──────▼──────┐
        │   销售事实表 │
        └─────────────┘

特点

  • 中心是事实表,周围是维度表
  • 所有维度表直接连接事实表,不存在中间层
  • 查询效率高,是数据仓库的经典设计

4.2 雪花模型(Snowflake Schema)

在星型模型的基础上,维度表进一步规范化,形成多层结构:

     ┌──────────────┐
     │   品牌维度表   │
     └───────┬──────┘
             │
      ┌─────▼─────┐
      │ 产品维度表 │
      └─────┬─────┘
            │
     ┌──────▼──────┐
     │  销售事实表 │
     └─────────────┘

特点

  • 减少了数据冗余,存储更节省
  • 查询时需要多层关联,性能略低于星型模型
  • 适用于维度表非常大且有明确层级的情况

💡 建议:在 Power BI 中,优先使用星型模型。如果维度表数据量很大,考虑用雪花模型来节省存储。


5. 隐藏字段与显示文件夹

5.1 隐藏字段

在模型视图中,右键点击字段 → "在报表视图中隐藏",可以将不需要在报表中直接使用的字段(如外键ID)隐藏起来,保持字段列表简洁。

隐藏后,字段仍然可以在 DAX 公式中使用,只是不显示在右侧字段面板中。

5.2 显示文件夹

对于字段较多的表,可以通过显示文件夹进行分组:

  1. 在数据窗格中选中字段
  2. 在"属性"窗格中找到"显示文件夹"
  3. 输入文件夹名称,多个字段可以用分号分隔(如"维度;日期")

6. 角色与行级安全(RLS)

Power BI 支持基于角色的行级安全,控制不同用户看到不同的数据。

示例:区域经理只能看到自己负责区域的数据

  1. 在"建模"选项卡中点击"管理角色"
  2. 创建角色(如"区域经理")
  3. 为该角色添加 DAX 筛选表达式:
    [地区] = USERPRINCIPALNAME()
    
  4. 在 Power BI Service 发布后,为不同用户分配不同角色

7. 常见建模问题与解决

问题 原因 解决方案
关系线是虚线 关系不唯一或有问题 检查基数设置,确保一端唯一
图表显示空白 关系未建立或方向错误 在模型视图中检查关系
计算结果不对 存在多对多关系导致歧义 使用 SUMX 替代 SUM,或设置正确的关系方向
报表加载很慢 模型太复杂,双向筛选过多 简化模型,减少双向筛选使用

8. 小结

本篇介绍了:

  • ✅ 事实表与维度表的核心概念
  • ✅ 创建和管理表关系(基数、交叉筛选方向)
  • ✅ 星型模型与雪花模型的设计与选择
  • ✅ 隐藏字段、显示文件夹、角色与行级安全

下一篇:我们将学习 Power BI 的核心计算语言 DAX,从计算列和度量值开始,掌握数据分析公式的基础用法。