连接数据

Joining

您可以联接数据,将当前数据与另一个表,甚至与一个已保存的问题进行组合。

在您点击“联接数据”按钮添加联接步骤后,您需要选择要联接的数据(来自同一数据库)。您只能选择与起始数据来自同一数据库的表和已保存的问题。

Picking the data to join

接下来,您需要选择要联接的列。这意味着您需要从第一个表中选择一列,从第二个表中选择一列,联接操作会将第一个列的值与第二个列的值相等的行拼接在一起。一个非常常见的例子是在每个表中都以 ID 列进行联接。如果您选择联接的表之间存在外键关系,Metabase 会自动为您选择相应的 ID 列。在联接步骤的最后,您可以点击“列”按钮,选择要包含的联接数据的列。

默认情况下,Metabase 会执行左外联接,但您可以点击维恩图图标来选择不同类型的联接。并非所有数据库都支持所有类型的联接,因此 Metabase 只会显示您正在使用的数据库支持的选项。

以下是基本的联接类型:

  • 左外联接:选择表 A 的所有记录,以及表 B 中满足联接条件的记录(如果有的话)。
  • 右外联接:选择表 B 的所有记录,以及表 A 中满足联接条件的记录(如果有的话)。
  • 内联接:仅选择表 A 和表 B 中满足联接条件的记录。
  • 全外联接:选择两个表中的所有记录,无论是否满足联接条件。

一个左外联接的例子: 如果表 A 是 Orders(订单),表 B 是 Customers(客户),并且您进行一个联接,其中 Orders 表中的 customer_id 列等于 Customers 表中的 ID 列,那么当您进行左外联接时,结果将是您所有订单的完整列表,并且每个订单行还将显示下该订单的客户的列。由于一个客户可以下多个订单,因此特定客户的信息可能会在不同的订单行中重复多次。如果某个订单没有对应的客户,该订单的信息仍会显示,但该行的客户列将为空白。

多阶段联接

在很多情况下,您可能有表 A、B 和 C,其中 A 和 B 有关联,B 和 C 有关联,但 A 和 C 没有。如果您想将 A 联接到 B,再联接到 C,您只需添加多个联接步骤即可。点击“联接数据”,将表 A 联接到表 B,然后点击该已完成联接块下方的“联接数据”步骤来添加第二个联接步骤,并将上一次联接的结果与表 C 联接。

An A to B to C join

基于多个条件的联接

您的联接还可以包含多个条件来优化结果。Metabase 将使用 AND 运算符组合多个条件。

Joining tables on multiple columns

使用不同运算符进行联接

您可以使用比较条件来联接表,例如

  • =(等于)
  • (不等于)
  • >(大于)
  • (大于或等于)
  • <(小于)
  • (小于或等于)

Join operators

使用自定义表达式进行联接

有时您希望使用常量值、相对日期或其他一些自定义条件来联接数据。

例如,假设您有一个评论表,并希望添加一列,其中包含所有产品的平均评分。

您可以先计算平均评分,然后通过 1=1 将结果联接到评论表。

Join with custom expression

要使用自定义表达式定义联接键:

  1. 点击其中一个联接键。
  2. 选择自定义表达式
  3. 输入您的表达式(包括像 1 这样的常量)。
  4. 点击完成

另一个例子:假设您有

  • 一个 customers 表,将名字存储在 first_namelast_name
  • 一个 accounts 表,将名字和姓氏存储在一个单独的列 full_name

您可以使用自定义表达式来联接这些表。customers 表的联接键看起来会是这样

concat([first_name], " ", [last_name])

accounts 表的联接键则简单地是 full_name 列。

请查看我们的表达式列表

延伸阅读

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想要改进这些文档吗?提出更改建议。
© . This site is unofficial and not affiliated with Metabase, Inc.