了解 Power BI 中的数据建模:Joins、Relationships 和 Schemas 解析

发布: (2026年4月29日 GMT+8 00:26)
9 分钟阅读
原文: Dev.to

Source: Dev.to

继续我之前的文章 “How Excel Is Used in Real‑World Data Analysis,”,我现在在探索 Power BI。过去两周让我大开眼界——我发现,虽然 Excel 仍然至关重要,但其他工具也能完成许多相同的任务(往往做得更好)。以下是我迄今为止学到的概念,或许能帮助你在自己的学习旅程中前行。

📊 什么是数据模型?

  • Data Model – 对数据在数据库中如何组织和存储的可视化表示。可以把它看作一张地图,展示每个表中存放了哪些数据以及表之间的关联方式。
  • Data Modeling – 创建这张“地图”的过程:连接数据源、定义关系,并将所有内容安排成支持分析的结构。

我将使用一个示例数据集来说明这些概念,该数据集包含四个表(Customers、Products、Stores、Sales),分别位于 Excel 的不同工作表中。

📁 示例数据集(Excel 视图)

此处应放置工作簿的截图,显示四个工作表。

数据集已经是干净的,但如果您需要先进行整理,请在构建模型之前使用 Power BI 的 Transform Data(Power Query)。

🛠️ 在 Power BI 中处理数据的三种方式

视图如何访问功能
表视图打开空白报告 → 获取数据 → 选择 Excel 工作簿将原始表加载到 Power BI。
模型视图点击 模型 图标(截图中已高亮)用于创建和管理表之间关系的可视化画布。
报表视图点击 报表 图标(位于表视图图标上方的那个)构建可视化;也可以在此管理关系。

提示: 三种视图均可通过功能区或左侧导航窗格访问。

🔗 管理关系

  1. 加载数据后,转到 Model View(或在任意视图中使用 Manage Relationships)。
  2. 单击 Manage Relationships → 会弹出一个带有绿色 + New Relationship 按钮的弹窗。
  3. 在对话框中,选择要关联的两个表,并选择共享列(例如,CustomerIDSalesCustomers 之间)。
  4. 对其他表对重复上述操作。

结果是一个 Data Model,大致如下所示:

Insert a diagram of the model showing Sales at the centre linked to Customers, Products, and Stores.

🔀 Joins vs. Relationships

ConceptWhat It Does
Join将两个表中的行合并为一个表(在 Power Query 中通过 Merge Queries 执行)。
Relationship定义表之间的关联方式,同时保持表的独立性;Power BI 利用这些关联自动过滤和聚合数据。

🔧 Power BI 中的连接类型(Power Query → Merge Queries

连接类型描述
左外连接保留 所有 左表的行并匹配右表的行。未匹配的行返回 null
右外连接保留 所有 右表的行并匹配左表的行。未匹配的行返回 null
全外连接保留 两个 表的 所有 行;未匹配的行返回 null
内连接只返回在 两个 表中都有匹配的行(行数会减少)。
左反连接返回左表中 没有 在右表中匹配的行。
右反连接返回右表中 没有 在左表中匹配的行。

Merge Queries 对话框中,窗口底部会显示匹配了多少行——快速的合理性检查。

🔗 Power BI 中的关系类型

  1. One‑to‑Many (1:M) – 主表中的一行对应次表中的多行。
    示例: Sales → Customers, Sales → Products, Sales → Stores. 这是最常见的关系,能够实现平滑的聚合。

  2. Many‑to‑many (M:M) – 一个表中的多行对应另一个表中的多行。
    注意: 可能导致计算错误;尽量避免。

  3. One‑to‑one (1:1) – 表中的一行恰好对应另一表中的一行。虽少见,但在将大表拆分为逻辑部分时很有用。

  4. Active vs. Inactive – 可以在同两个表之间定义多个关系。Power BI 默认使用 active 关系。若要使用非活动关系,需要显式引用(例如使用 USERELATIONSHIP)。

基数 & 交叉过滤方向

属性说明
Cardinality描述关系类型(1:M、M:M、1:1)。
Cross‑filter direction确定过滤器在关联表之间的流向。
Single direction过滤器仅从“一侧”流向“多侧”(或按定义的方向)。
Bidirectional过滤器双向流动,对某些计算有用,但可能影响性能。

⭐ 星型模式

星型模式是一种数据模型设计,其中中心的 事实 表(例如 Sales)被多个 维度(查找)表(例如 Customers、Products、Stores)环绕。

  • 事实表 存储事务数据(销售额、数量、日期)。
  • 维度表 存储描述性属性(客户名称、产品类别、店铺位置)。

我们的模型遵循此模式:Sales 是事实表,链接到三个维度表。

🚀 要点

  • 数据建模 是 Power BI 中任何稳健分析的基础。
  • 关系 使表保持独立,但能够实现强大的自动过滤。
  • 连接 在需要单一合并表进行进一步转换时非常有用。
  • 了解 基数交叉过滤方向 以及 活动 vs. 非活动 关系,可帮助微调性能和准确性。
  • 设计 星型模式 可简化报表并提升查询速度。

随意尝试示例数据集,尝试不同的连接类型,并玩转关系设置。练习得越多,Power BI 越直观!

分析愉快!

Source:

数据建模概述

  • 查找表 – customers(客户),products(产品),stores(门店)
  • 中心(事实)表 – 存储可度量(定量)数据,如 quantity sold(销售数量)、price(价格)、stock levels(库存水平)等。

查找表也称为 维度表,因为它们为事实提供上下文。它们包含描述性(定性)信息,如 names(名称)、cities(城市)、categories(类别)、email addresses(电子邮件地址)等。

雪花模型

雪花模型 是星型模型的一种变体,其中维度表进一步规范化为子维度表。在实际操作中,你会在星型模型的维度表上进行扩展,以创建这些额外的层级。

平面表(DLAT)

平面表(或 DLAT – 数据湖访问表)将通常在事实表和维度表之间拆分的所有内容合并为单个表。
示例: 一个包含所有业务信息并充当自身数据库的单个 Excel 工作表。

关键要点

  • 首先清理数据 – 在构建模型之前使用 Power Query(或任何 ETL 工具)。
  • 优先使用星型模型 – 它使关系易于理解,并帮助避免多对多连接,这会使计算复杂化并导致错误。
0 浏览
Back to Blog

相关文章

阅读更多 »

消息与通知工具比较 (2026)

PostgreSQL LISTEN/NOTIFY ✅ 优点 - 内置于数据库,无需额外安装。 - 严格事务化:只有在数据满足条件时才会发送消息。