了解 Power BI 中的数据建模:Joins、Relationships 和 Schemas 解析
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。 |
| 模型视图 | 点击 模型 图标(截图中已高亮) | 用于创建和管理表之间关系的可视化画布。 |
| 报表视图 | 点击 报表 图标(位于表视图图标上方的那个) | 构建可视化;也可以在此管理关系。 |
提示: 三种视图均可通过功能区或左侧导航窗格访问。
🔗 管理关系
- 加载数据后,转到 Model View(或在任意视图中使用 Manage Relationships)。
- 单击 Manage Relationships → 会弹出一个带有绿色 + New Relationship 按钮的弹窗。
- 在对话框中,选择要关联的两个表,并选择共享列(例如,
CustomerID在 Sales 与 Customers 之间)。 - 对其他表对重复上述操作。
结果是一个 Data Model,大致如下所示:
Insert a diagram of the model showing Sales at the centre linked to Customers, Products, and Stores.
🔀 Joins vs. Relationships
| Concept | What It Does |
|---|---|
| Join | 将两个表中的行合并为一个表(在 Power Query 中通过 Merge Queries 执行)。 |
| Relationship | 定义表之间的关联方式,同时保持表的独立性;Power BI 利用这些关联自动过滤和聚合数据。 |
🔧 Power BI 中的连接类型(Power Query → Merge Queries)
| 连接类型 | 描述 |
|---|---|
| 左外连接 | 保留 所有 左表的行并匹配右表的行。未匹配的行返回 null。 |
| 右外连接 | 保留 所有 右表的行并匹配左表的行。未匹配的行返回 null。 |
| 全外连接 | 保留 两个 表的 所有 行;未匹配的行返回 null。 |
| 内连接 | 只返回在 两个 表中都有匹配的行(行数会减少)。 |
| 左反连接 | 返回左表中 没有 在右表中匹配的行。 |
| 右反连接 | 返回右表中 没有 在左表中匹配的行。 |
在 Merge Queries 对话框中,窗口底部会显示匹配了多少行——快速的合理性检查。
🔗 Power BI 中的关系类型
-
One‑to‑Many (1:M) – 主表中的一行对应次表中的多行。
示例: Sales → Customers, Sales → Products, Sales → Stores. 这是最常见的关系,能够实现平滑的聚合。 -
Many‑to‑many (M:M) – 一个表中的多行对应另一个表中的多行。
注意: 可能导致计算错误;尽量避免。 -
One‑to‑one (1:1) – 表中的一行恰好对应另一表中的一行。虽少见,但在将大表拆分为逻辑部分时很有用。
-
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 工具)。
- 优先使用星型模型 – 它使关系易于理解,并帮助避免多对多连接,这会使计算复杂化并导致错误。