Metabase学习教程:仪表盘-5 SQL本地查询筛选器
-
SQL查询仪表盘添加筛选器
如何将过滤器小部件添加到仪表盘,并将它们连接到多个SQL查询中的字段过滤器变量。
本文介绍如何创建仪表盘小工具到过滤器数据输入SQL查询。图1显示了我们将要构建的仪表盘:
图1。我们将要构建的:一个仪表盘,其中两个过滤器连接到两个用SQL编写的问题。
此仪表盘具有以下功能:
• 用SQL写的两个问题,
• 二筛选小部件:一个日期过滤器和一个州`过滤器。
在任意一个过滤器(或两个过滤器)中选择一个值将更新这两个问题的结果。
我们的目标是了解如何连接仪表盘筛选器小部件到一个特殊的变量类型,称为字段过滤器,我们将其插入到问题的SQL代码中。以下是我们的行程:
为了了解一些背景,请查看我们的文章SQL变量尤其是字段筛选器.
向SQL查询添加字段筛选器变量
让我们从一个问题用SQL编写,显示来自示例数据库包括在Metabase中。在任何Metabase页面的导航栏右上角,单击控制台图标访问SQL查询编辑器.
图2。用SQL编写的问题,显示每月的订单,以折线图的形式显示。
以下是SQL代码:
SELECT
PARSEDATETIME(FORMATDATETIME(orders.created_at, 'yyyyMM'), 'yyyyMM') AS "Created at",
COUNT() AS "Number of orders"
FROM orders
GROUP BY "Created at"
ORDER BY "Created at" ASC
现在,我们讨论的是过滤数据,精明的读者可能已经意识到我们的SQL代码中没有filter语句。没有Where子句。意思:即使我们要将这个问题添加到仪表盘,并向该仪表盘添加一个过滤器小部件,该过滤器也不会对我们的SQL查询产生任何影响,因为在我们的代码中没有指定的位置让小部件插入其值。
让我们通过在SQL查询中添加一个称为字段过滤器.字段过滤器是一种特殊类型的变量,它将变量映射到数据表的字段(或列) 上。
下面是我们要添加的SQL代码:
WHERE {{created_at}}
你可能会注意到=在Where子句。之所以存在这种缩写语法,是因为字段过滤器在幕后为您处理一些SQL代码。关于这里发生的事情的更多信息,请查看字段筛选器.
和Where子句,我们的代码如下所示:
SELECT
PARSEDATETIME(FORMATDATETIME(orders.created_at, 'yyyyMM'), 'yyyyMM') AS "Created at",
COUNT() AS "Number of orders"
FROM orders
WHERE {{created_at}}
GROUP BY "Created at"
ORDER BY "Created at" ASC
既然我们的SQL代码中有了变量,我们需要告诉Metabase如何使用该变量。当我们在代码中添加变量时,Metabase将滑出变量提要栏我们将设置变量类型到字段过滤器,然后将该变量映射到数据库中的一个字段,以便Metabase知道它应该向问题添加什么样的过滤器小部件。在本例中,我们将变量映射到created_at字段用于Orders表。
图3。正在为SQL变量设置变量类型created_at到字段过滤器,然后设置映射到的字段created_at的字段(列)Orders表。
请注意,我们可以随意调用SQL变量,但必须将变量映射到适当的字段,以便仪表盘过滤器正常工作。
现在,我们将过滤器小部件标签保留为created_at,然后不选择必需的选项。这样,如果变量的filter小部件为空值,那么问题将像Where子句不存在。
我们也可以选择一个过滤器小部件类型,尽管这个小部件只适用于我们的问题。让我们选择日期筛选器类型,这是小部件中最具表现力的。
让我们保存我们的问题。我们称之为每月订单数-SQL.
接下来,我们需要:
• 创建仪表盘
• 将我们的问题添加到仪表盘,
• 在仪表盘中添加一个不同的过滤器小部件,
• 然后将仪表盘小部件连接到SQL查询中的字段过滤器变量。
但首先,绕道而行。
数据类型绕道而行
当我们选择created_at字段,Metabase知道字段类型是一个时间戳(注意日历图标). 通过浏览数据,可以了解每个表的字段(列)类型。
图4。通过单击查看有关数据的信息浏览数据在顶部导航栏中,选择您的数据库(在本例中是示例数据库),单击表旁边的信息图标,然后单击书本图标去了解这张桌子。
图5。查看中字段的信息Orders示例数据库的表。
管理员可以编辑字段类型以及其他元数据设置,在“数据模型”选项卡的管理面板。要了解更多信息,请查看我们的元数据编辑文档.
将仪表盘筛选器小部件连接到字段筛选器变量
所以我们有一个SQL查询(图6),在Where子句,现在是将该问题添加到仪表盘的时候了。
图6。我们的SQL查询带有字段筛选器变量,显示每月创建的订单。
让我们创建仪表盘(我们会给我们的仪表盘起一个不可思议的名字带过滤器小部件的仪表盘).
那我们就将我们的SQL查询添加到仪表盘.
接下来,我们要将过滤器小部件添加到我们的仪表盘。在仪表盘编辑模式下(单击铅笔图标进入编辑模式):
• 单击过滤器图标向仪表盘添加新的过滤器小部件。
• 低于我们要过滤什么,我们将选择时间.
• 为什么样的过滤器?,我们将选择所有选项,它将向仪表盘添加日期筛选器。
• 接下来,我们需要将小部件连接到问题中的字段过滤器变量。单击问题中心的下拉菜单,然后选择创建于字段过滤器变量(图7)。
• 单击多恩屏幕顶部的按钮。
• 那么保存仪表盘。
图7.添加日期过滤器(时间→ 所有选项)连接到仪表盘,并将过滤器小部件连接到字段过滤器变量,创建于在我们的SQL查询中。
现在我们都准备好了,准备测试我们的新日期过滤器。这种特殊的小部件类型为我们提供了丰富的选择。让我们选择双方选择日期范围的选项。在这种情况下,我们将选择2019年(2019年1月1日至2019年12月31日)的订单。
图8.使用双方我们的日期过滤器小部件中的选项,用于选择2019年1月1日至2019年12月31日的订单。
使用我们的仪表盘过滤器集,我们的SQL查询更新以筛选创建于列落在仪表盘上筛选器小部件指定的日期范围内。
图9。在我们的过滤器小部件中设置了日期范围,我们的SQL查询,每月订单数-SQL,将只显示该范围内的订单。
在仪表盘上筛选多个SQL查询
让我们向仪表盘添加一个额外的SQL查询。为了简单起见,让我们创建一个问题,返回每月创建的新帐户。此问题的SQL与我们的第一个问题类似:
SELECT
PARSEDATETIME(FORMATDATETIME(people.created_at, 'yyyyMM'), 'yyyyMM') AS "Created at",
COUNT() AS "Number of new accounts"
FROM people
WHERE {{created_at}}
GROUP BY "Created at"
ORDER BY "Created at" ASC
再一次,为了我们{{created_at}}变量,我们将:
• 设置变量类型到字段过滤器.
• 设置映射到的字段选择created_at领域People表(不是Orders表)。
• 离开过滤程序类型或者改成日期筛选器(请注意,此设置仅适用于问题的筛选器小部件,而不是仪表盘。)
• 不选择必需选项(如:不需要变量)。
省省你的问题,给它起个标题新帐户数-SQL,并将问题添加到仪表盘。
现在,现有的日期筛选器不会自动连接到新添加的问题,新帐户数-SQL。如果我们更新日期筛选器小部件中的值,则只更新连接问题中的数据,每月订单数-SQL,将更新以显示筛选的数据。
因此,让我们将新问题连接到仪表盘过滤器小部件:
• 单击铅笔图标进入仪表盘编辑模式。
• 选择编辑上日期筛选器小装置。
• 然后选择created_at选项(唯一的选项)从下拉菜单的中心新帐户数-SQL卡片(见图10)。
• 保存仪表盘。
图10。正在将另一个问题连接到同一个日期筛选器小部件。
当两个字段过滤器变量都连接到仪表盘过滤器小部件时,当我们在小部件中选择一个值时,两个问题都会用过滤后的数据更新它们的图表。
将另一个筛选器小部件添加到仪表盘
现在我们在仪表盘上有两个问题连接到一个过滤器。让我们添加另一个过滤器。既然我们已经征服了时间,就让我们控制空间吧。让我们向仪表盘添加一个小部件,它允许我们按美国的州进行筛选。
首先,我们需要添加一个{{state}}变量Where子句到每月订单数-SQL查询。
SELECT
PARSEDATETIME(FORMATDATETIME(orders.created_at, 'yyyyMM'), 'yyyyMM') AS "Created at",
COUNT() AS "Number of orders"
FROM orders
LEFT JOIN people
ON orders.user_id = people.id
WHERE {{created_at}} AND {{state}}
GROUP BY "Created at"
ORDER BY "Created at" ASC
接下来,我们将指定{{state}}变量是类型为的字段筛选器州(见图11)。
注意:如果小部件类型不可用,则数据类型与字段筛选器兼容,管理员可能需要在“数据模型”选项卡。了解更多编辑文档中的元数据.
图11。添加连接到People表State字段。
既然我们的问题可以从People表中的State列,我们可以返回到仪表盘并向仪表盘添加新的筛选器并将其称为State。我们将把这个新的仪表盘过滤器连接到问题的字段过滤器变量,{{state}}.
图12。正在将状态字段筛选器连接到仪表盘状态筛选器小部件。
请看:我们的仪表盘包含两个SQL查询和两个过滤器小部件:一个日期过滤器和一个州过滤器。
图13.Dashboard包含两个过滤器小部件:一个日期过滤器和一个状态过滤器。加利福尼亚(CA)2018年创建的订单/账户的日期过滤器。
为了匹配图1中的仪表盘,剩下的工作就是添加文本框.