Metabase学习教程:提问-4 Join 连接
-
Metabase中的连接
如何在简单和自定义问题中使用查询编辑器连接Metabase中的表。
当涉及到分析数据时,必须要使用连接是一个事实,在Metabase,我们试图使您的问题的答案尽可能简单,即使这需要一些更复杂的策略。在本文中,我们将介绍如何使用查询编辑器,并给出一些上下文关系数据库给你一个更好的理解和理解。
自动联接
加入SQL语言允许您合并来自多个表的数据。在可能的情况下,Metabase为您建立这些连接,使人们能够轻松地跨多个表处理数据。你必须要在您的数据模型允许外键,Metabase检测这些关系并在数据模型中连接这些表。如果未配置这些外键,则管理员可以始终使用数据模型节来指定这些关系。
我们将在下面深入讨论关键点,但现在,让我们看一个隐式join的操作。我们将使用示例数据库包含在Metabase中作为我们的数据,以便您可以自己尝试。
• 从顶部导航栏中,选择+新的.
• 选择问题.
• 选择原始数据>示例数据库作为你的数据源。
• 然后选择Orders表。
• 选择可视化,Metabase将显示来自Orders表。
• 单击设置按钮在屏幕的左下角。如图1所示,Metabase将滑出表格选项并提供一个列列表供您选择。
图1.Orders带设置侧边栏打开表格选项节。您可以添加、删除和编辑列,包括更多列从Metabase可以自动联接到Orders表。
这个可见列是当前列在问题的查询中,在本例中包括来自Orders表。您可以添加和删除列,以及更改列设置(根据列的不同而有所不同)字段类型).
除了可见列你会看到一个叫做更多列。此部分将包括其他两个表中的列:Products和Peoples(我们会找到为什么Reviews表在后面的文章中明显缺失)。
Metabase已“加入”了Orders表Products和Peoples表,它允许您从这些表中添加列。
例如,从这个设置侧边栏,向下滚动以找到Products表,然后单击+旁边Category要添加到的列可见列你会看到一个新的专栏,Products → Category,在可见列中,使用Products→前缀,指示列不是Orders表。
单击ID列中的值并选择查看详细信息,可以检查哪些表连接到该数据。例如,从Orders表中,可以查看Product ID列。在图2中的例子中,Metabase告诉我们产品“Lightweight Wool Computer”(ID:146)连接到OrdersTable和Reviews表。
图2。单击ID列中的值并选择查看详细信息在其他数据中,将显示记录连接到哪些表。
请注意,实际的产品ID值是146,而不是“轻量级羊毛计算机”更改列值的显示方式.
图3。的字段设置产品编号在Orders表。管理员可以使用显示值设置为显示可读标题而不是ID。
如图3所示,当查看Orders外键,外键,PRODUCT_ID,显示TITLE的列Products表。
我们会深入挖掘外键,但首先让我们看看显式连接。
显式联接示例
让我们尝试一个简单的连接。我们将通过单击创建一个新问题+新的>问题>原始数据>示例数据库。我们将选择Orders表。在数据部分,单击加入图标添加另一个表。
图4。若要向您的问题添加表格,请单击加入图标(维恩图)。
如果我们加上Products表,Metabase将自动填充外键关系,因为它知道字段,Product_ID,包含引用中的值的外键列(实体键)的Products表。
图5.加入Orders表Products通过链接外键(PRODUCT_ID)在Orders表实体键(ID)在Products表。
图5中的查询是这样说的:对于Orders表中,使用PRODUCT_ID列中查找具有相同值的相应行ID的列Products表,并返回一个新行,其中包含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的顶部导航栏转到浏览数据,然后单击示例数据库。如图6所示,您将看到每个表的卡片。将鼠标悬停在卡上以查看其他选项,然后单击书本图标出现在旁边了解这张数据表.
图6。转到浏览数据从顶部导航栏中,选择Sample Database,然后单击书本图标去了解这张数据表。
此表引用页包含多个选项卡:
• 细节
• 此表中的字段
• 关于这张数据表的问题
• 透视这张数据表
选择此表选项卡中的字段查看表中每个字段的字段名、字段类型和数据类型,如图7所示。
图7。选择此表选项卡中的字段查看字段名称、字段类型和数据类型。这个Orders表包含实体键(ID)还有两个外键,USER_ID 和PRODUCT_ID.
这个Orders表包含一个实体键(即主键),ID,和两个外键:USER_ID和PRODUCT_ID:
• 外键USER_ID与实体键关联ID的People表。
• 外键PRODUCT_ID与实体键关联ID的Products表。
我们可以合并Orders,People,Products通过连接这些键。联接只是指示Metabase对一个表中的记录进行排列,并使用每一行中的外键值通过查找具有匹配实体键值的相应行(或多行)来组合另一个表中的数据。
Metabase默认为左连接 left joins.
多重连接
使用表、键和联接的上下文,让我们看看是否可以将Orders表Reviews表。一般说来:如果我们的起始表(左表)不包含一个外键,它引用了我们要连接到的表,我们将如何连接它们?
如果我们想加入Orders表Reviews表,Metabase不知道该做什么(图8)。
图8。如果没有外键关系,Metabase将不知道该怎么做,它将提示您选择外键关系。在这种情况下Orders和Reviews表,不存在。
这个Orders表缺少Reviews表,这就是Metabase没有自动连接这两个表的原因。
让我们转到数据浏览器来找出哪些外键评论表包括(图9)。
图9。中唯一的外键Reviews表是PRODUCT_ID.
我们的情况是:
• 这个Orders表具有Products和People表。
• 这个Reviews表具有Products表。
连接Orders表Reviews我们需要通过Products表。我们将使用一个自定义问题来指定连接。这是我们的查询编辑器:
图10.加入Orders表Reviews表格通过Products表。
注意,在指定键之前,Metabase将显示“前一个结果集”作为要连接的左表。一旦您告诉Metabase将以前的结果加入Products.ID = Reviews.Product_ID,Metabase将在Join data部分显示与reviews表左连接的Products表(如图11所示)。
如果您将结果可视化,您将看到一个包含所有三个表中所有列的表:Orders, Products和Reviews。请注意,由于单个产品可以有多个审阅,因此我们将看到同一产品和订单的多行,每个审阅一行。
带多个条件的联接
现在让我们尝试加入多个条件。如果您想减少重复行或表达数据中单条件联接所不能表达的内容,这可能会很有用。假设我们希望看到在我们将该产品添加到库存中的同一个月的所有产品订单。
使用与上面相同的示例作为起点,单击蓝色+按钮,在第一个条件旁边添加另一个条件。你会想用内部联接在这里,因为它只返回两个表中匹配的值。
正如您在下面看到的,我们加入了Orders和Products表分为两列,产品ID和创建日期,因此现在我们可以看到在同一个月下的所有订单,该订单的产品被添加到我们的库存中。
注意,当CREATED_AT字段包括完整的日期和时间信息,这些结果指示月匹配,而不是精确的时间戳。
图11.加入Orders表Products通过链接外键(PRODUCT_ID)在Orders表实体键(ID)在Products表和按创建日期。
列选择
除了连接表之外,我们还可以选择哪些列在问题的结果中可见。在查询编辑器,您可以选择Metabase显示的列(图12)。
图12。在查询编辑器中选择列。
保存问题后,还可以从设置侧边栏就像我们上面做的那样。
图13。单击设置按钮在问题中添加或删除列。
您会注意到Metabase有助于从People表也可以添加,因此现在您可以使用完整的示例数据库。
在您自己的数据集中连接表很有趣,请记住:如果您遇到困难,请务必使用查看数据功能,以了解哪些表具有连接它们所需的外键。