Metabase 中的连接
如何在 Metabase 中使用笔记本编辑器在简单和自定义问题中连接表。
在分析数据时,连接是不可避免的,而使用 Metabase,我们尝试尽可能轻松地获得您问题的答案——即使这需要一些更复杂的策略。在本文中,我们将介绍如何在 Metabase 中使用查询构建器连接表,并提供有关关系数据库、表和键的一些背景知识,以便您更好地了解连接的工作原理。
自动连接
SQL 中的连接允许您组合来自多个表的数据。在可能的情况下,Metabase 会为您建立这些连接,使人们可以轻松地跨多个表处理数据。您必须在数据模型中定义外键关系,以允许 Metabase 检测这些关系并在数据模型中连接这些表。如果未配置这些外键,管理员始终可以使用数据模型部分来指定这些关系。
我们将在下面深入介绍键,但现在,让我们来看一个隐式连接的实际操作。我们将使用 Metabase 随附的示例数据库作为我们的数据,以便您可以亲自试用。
- 从顶部导航栏中,选择 + 新建。
- 选择 问题。
- 选择 原始数据 > 示例数据库 作为您的数据源。
- 然后选择
Orders
表。 - 选择 可视化,Metabase 将显示来自
Orders
表的订单列表。 - 单击屏幕左下角的 设置按钮。Metabase 将滑出一个 表格选项 侧边栏,并向您显示一个列列表以供选择。
可见列 是当前在问题查询中的列,在本例中包括来自 Orders
表的所有列。您可以添加和删除列,以及更改列设置(这取决于列的字段类型而有所不同)。
除了 可见列 之外,您还会看到一个名为 更多列 的部分。此部分将包含来自另外两个表(Products
和 People
)的列。(稍后在文章中,我们将介绍为什么 Reviews
表明显缺失)。
Metabase 已经将 Orders
表“连接”到 Products
和 People
表,这使您可以从这些表中添加列。
例如,从此 设置侧边栏 中,向下滚动以查找 Products
表,然后单击 CATEGORY
列旁边的 +
以将其添加到 可见列。您将在可见列中看到一个新列 Products → Category
,其中 PRODUCT →
前缀表示该列不是 Orders
表的原生列。
通过单击 ID 列中的值并选择 查看详细信息,您可以检查以查看哪些表连接到该数据。例如,从 Orders
表中,您可以查看 Product ID
列中条目的详细信息。Metabase 告诉我们,产品“Lightweight Wool Computer”(ID:146)已连接到 Orders
表和 Reviews
表。
请注意,实际产品 ID 值为 146,而不是“Lightweight Wool Computer”。Metabase 允许管理员更改列值的显示方式。
查看 Orders
表时,外键 PRODUCT_ID
显示来自 Products
表的 TITLE
列的值。
我们将在下面深入探讨键,但首先让我们看一下显式连接。
显式连接示例
让我们尝试一个简单的连接。我们将通过单击 + 新建 > 问题 > 原始数据 > 示例数据库 来创建一个新问题。我们将选择 Orders
表。在 数据部分 中,单击 连接图标 以添加另一个表。
如果我们添加 Products
表,Metabase 将自动填充外键关系,因为它知道字段 PRODUCT_ID
包含引用 Products
表的 ID
列(实体键)中的值的外键。
对于 Orders
表中的每一行,使用 PRODUCT_ID
列中的值在 Products
表的 ID
列中查找具有相同值的相应行,并返回一个新行,其中包含来自 Orders
和 Products
表中列的值。
如果您有兴趣,这里是底层工作的基本 SQL
SELECT
*
FROM
Orders
LEFT JOIN Products ON Orders.PRODUCT_ID = Products.ID
(请注意,如果您将问题转换为 SQL,您将获得一个更复杂的 SQL 查询,但这两个查询都返回相同的数据。)
您可能已经在上面的问题模式中注意到,您无法从示例数据库中的表之一 Reviews
表中添加列。要了解原因,我们需要一些关于关系数据库的背景知识。
关系数据库
关系型数据库(如 PostgreSQL 和 MySQL)将数据存储在表格(关系)中,这些表格通常代表某种实体,例如订单或产品。这些表格包含列(实体的属性)和行(有时称为记录)。如果您以前使用过电子表格软件,则表格类似于带有列和行的工作表。
术语 | 描述 | 示例 |
---|---|---|
表格 | 实体 | 人、订单、产品 |
列 | 该实体的属性 | 地址、描述、ID |
行 | 该属性的实例 | CA、7、“轻量羊毛电脑” |
其中一些列包含特殊的属性,称为键。
连接的键
每个表格都有一个特殊的列,其中包含不同的键,称为实体键或主键,用于唯一标识表格中的每一行。这些列通常包含 ID 号,它们可以由数据库自动生成,也可以由应用程序生成(例如,员工 ID)。
第二种类型的键,称为外键,存储对另一个表格中某行实体键的引用。要连接表格,您将使用外键和实体键来告诉数据库如何组合来自多个表格的数据。
让我们使用 Metabase 的数据浏览器来查看示例数据库中某个示例表格中的一些键。在 Metabase 的顶部导航栏中,转到浏览数据,然后单击示例数据库。您将看到每个表格的卡片。将鼠标悬停在卡片上以查看其他选项,然后单击了解此表旁边的图书图标。
此表格参考页面包含多个标签页
- 详情
- 此表中的字段
- 关于此表的问题
- X 光透视此表
选择此表中的字段标签页以查看表格中每个字段的字段名称、字段类型和数据类型。
Orders
表包含一个实体键(也称为主键),ID
,以及两个外键:USER_ID
和 PRODUCT_ID
- 外键
USER_ID
与People
表的实体键ID
关联。 - 外键
PRODUCT_ID
与Products
表的实体键ID
关联。
我们可以通过连接这些键来组合来自 Orders
、People
、Products
的数据。连接只是指示 Metabase 排列来自一个表格的记录,并使用每行中的外键值,通过查找具有匹配实体键值的相应行(或多行)来组合来自另一个表格的数据。
Metabase 默认为左连接。
多重连接
了解了表格、键和连接的背景知识后,让我们看看是否可以将 Orders
表链接到 Reviews
表。概括来说:如果我们的起始表(左表)不包含引用我们要连接的表的外键,我们该如何连接它们?
如果我们尝试将 Orders
表连接到 Reviews
表,Metabase 将不知道该怎么做。
Orders
表缺少 Reviews
表的外键,这就是 Metabase 没有自动连接这两个表的原因。
让我们转到数据浏览器,找出 Reviews
表包含哪些外键。
所以,这是我们的情况
Orders
表具有指向Products
和People
表的外键。Reviews
表具有指向Products
表的外键。
要将 Orders
表连接到 Reviews
表,我们需要通过 Products
表连接它们。我们将使用查询构建器问题来指定连接。这是我们的问题
请注意,在您指定键之前,Metabase 会将“之前的结果”显示为要连接的左表。一旦您告诉 Metabase 基于 Products.ID = Reviews.Product_ID
连接之前的结果,Metabase 将在“连接数据”部分中显示左连接到 Reviews 表的 Products 表。
如果您可视化结果,您将看到一个包含所有三个表格(Orders
、Products
和 Reviews
)中所有列的表格。请注意,由于单个产品可以有多个评价,因此对于每个评价,我们将看到同一产品和订单的多行。
具有多个条件的连接
现在让我们尝试向连接添加多个条件。如果您想减少重复行或表达单条件连接无法表达的数据信息,这将非常有用。假设我们想查看所有产品订单,这些订单是在我们将该产品添加到库存的同月下的。
以上面的示例作为起点,单击第一个条件旁边的蓝色 + 按钮,在同一连接中添加另一个条件。您需要在此处使用内连接,因为它只会返回两个表中都匹配的值。
如下所示,我们基于“产品 ID”和“创建日期”这两列连接了 Orders
表和 Products
表,因此现在我们可以看到在订购产品添加到库存的同月下的所有订单。
请注意,虽然 CREATED_AT
字段包含完整的日期和时间信息,但这些结果表明月份匹配,而不是确切的时间戳。
列选择
除了连接表格外,我们还可以选择性地显示问题结果中可见的列。在查询构建器中,您可以选择 Metabase 显示的列。
保存问题后,您还可以从设置侧边栏中选择可见列,就像我们上面所做的那样。
您会注意到,Metabase 贴心地提供了来自 People
表的列,以便您也可以添加,因此您现在可以完全使用示例数据库。
在您自己的数据集中尽情享受连接表格的乐趣吧,请记住:如果您遇到困难,请务必查阅数据浏览器,以了解哪些表格具有您需要连接它们的外键。
相关阅读
下一步:多级聚合
如何使用查询构建器提出包含多个部分的问题。