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