使用 SQL 问题向仪表盘添加过滤器
如何在仪表板中添加筛选器小部件,并将它们连接到 SQL 问题中的字段筛选器变量。
本文介绍了如何创建仪表板小部件,以筛选 原生查询 中的数据。在仪表板筛选器中选择一个值将更新 SQL 问题中的结果。
这里的目标是了解如何将仪表板筛选器小部件连接到一种特殊的变量类型,称为字段筛选器,我们将其插入到问题的 SQL 代码中。
我们将介绍两个示例:一个日期筛选器(接下来),以及一个 带有下拉列表的文本筛选器。
向 SQL 问题添加字段筛选器变量
让我们从一个用 SQL 编写的问题开始,该问题显示来自 Metabase 随附的 示例数据库 的每月订单数。从任何 Metabase 页面,在导航栏的右上角,单击 + 新建 并选择 SQL 查询(或 原生查询)。
这是 SQL 代码
SELECT DATE_TRUNC('Month', CREATED_AT) AS "Created",
COUNT(*) AS "Number of orders"
FROM orders
GROUP BY "Created"
ORDER BY "Created" ASC
现在,我们正在讨论筛选数据,细心的读者可能已经认识到我们的 SQL 代码中没有筛选语句。没有 WHERE
子句。这意味着:即使我们将此问题添加到仪表板,并在该仪表板上添加筛选器小部件,该筛选器也对我们的 SQL 问题没有影响,因为我们的代码中没有指定位置供小部件插入其值。
让我们通过向我们的 SQL 问题添加一个称为 字段筛选器 的特殊变量来解决这个问题。字段筛选器是一种特殊的变量类型,它将变量映射到表中的字段(或列)。
这是我们将添加的 SQL 代码
WHERE {{created_at}}
您可能会注意到 WHERE
子句中缺少 =
运算符。这种简写语法存在的原因是字段筛选器在后台为您处理一些 SQL 代码。有关此处正在发生的事情的更多信息,请查看 字段筛选器。
在 WHERE
子句就位后,我们的代码如下所示
SELECT DATE_TRUNC('Month', CREATED_AT) AS "Created",
COUNT(*) AS "Number of orders"
FROM orders
WHERE {{created_at}}
GROUP BY "Created"
ORDER BY "Created" ASC
现在我们已经在 SQL 代码中有了变量,我们需要告诉 Metabase 如何使用该变量。当我们向代码中添加变量时,Metabase 将滑出变量侧边栏。我们将 变量类型
设置为 字段筛选器
,然后将该变量映射到数据库中的字段,以便 Metabase 可以知道它应该向问题添加哪种筛选器小部件。在本例中,我们将变量映射到 orders
表的 created_at
字段。
请注意,我们可以随意调用 SQL 变量,但为了使仪表板筛选器工作,我们必须将变量映射到相应的字段。
目前,我们将筛选器小部件标签保留为 Created at
,并且不理会 必填? 开关。如果变量的筛选器小部件缺少值,Metabase 将运行该问题,就好像 WHERE
子句不存在一样。
我们还可以选择筛选器小部件类型,尽管此小部件仅适用于我们的问题。让我们选择 日期筛选器
类型。
让我们保存我们的问题。我们将其称为 每月订单数 - SQL
。
在我们将问题添加到仪表板之前,让我们快速绕道一下。
关于数据类型的绕道
当我们选择 created_at
字段时,Metabase 知道该字段类型是 创建时间戳
(注意日历图标)。您可以通过浏览数据来了解每个表具有的字段(列)类型。
管理员可以在 管理面板 的 数据模型选项卡 中编辑字段类型以及其他 元数据 设置。要了解更多信息,请查看我们的 关于元数据编辑的文档。
将仪表板筛选器小部件连接到字段筛选器变量
因此,我们有一个带有 WHERE
子句中的字段筛选器变量的 SQL 问题,现在是时候将该问题添加到仪表板了。
接下来,我们需要
- 创建仪表盘。
- 将我们的问题添加到仪表板。
- 向该仪表板添加筛选器小部件。
- 将该仪表板筛选器小部件连接到我们的 SQL 问题中的字段筛选器变量。
让我们创建一个仪表盘(我们将为我们的仪表板起一个非常缺乏想象力的名字 带有筛选器小部件的仪表盘
)。
然后,我们将将我们的 SQL 问题添加到仪表板。
接下来,我们将向我们的仪表板添加筛选器小部件。单击铅笔图标进入仪表板编辑模式,然后
- 单击筛选器图标以向仪表板添加筛选器小部件。
- 在
我们要筛选什么
下,我们将选择时间
。 - 对于
筛选器类型?
,我们将选择日期筛选器
。 - 接下来,我们需要将我们的小部件连接到我们问题中的字段筛选器变量。单击我们问题中心位置的下拉菜单,然后选择我们的
Created At
字段筛选器变量。 - 单击屏幕顶部的 完成 按钮。
- 然后 保存 仪表板。
现在我们都已连接好,我们可以测试我们的新日期筛选器了。这种特定的小部件类型为我们提供了丰富的选项。让我们看看过去六个月的订单。
将 SQL 问题连接到仪表板上的下拉筛选器小部件
假设我们想要一个仪表板筛选器小部件来按类别筛选产品,并且我们希望人们能够从下拉列表中选择可用的类别。要设置此功能,我们将在我们的 SQL 查询中放置一个字段筛选器变量,并将其映射到 products
表中的 category
字段。然后我们将仪表板筛选器映射到该变量。让我们逐步完成它。
首先,创建一个仪表板。让我们称之为“带有 SQL 问题和下拉筛选器的仪表板”(以便我们的任务明确)。保存仪表板。
接下来,提出一个新的原生/SQL 问题,以获取 products
表中的所有字段。要按类别筛选产品,我们将在括号中包含一个变量,我们将其称为 category
SELECT
*
FROM
products
WHERE {{category}}
在 Metabase 弹出的变量侧菜单中,我们将这样配置此变量
- 变量类型:字段筛选器。
- 要映射到的字段: Products 表中的 Category 字段。
- 筛选器小部件类型:字符串。
- 筛选器小部件标签:类别(或任何您想要的)。
- 用户应如何在此变量上筛选:下拉列表。
- 必填:否。
- 默认筛选器值:留空(因此默认情况下不筛选任何产品类别)。
保存问题并将其添加到您的仪表板。编辑您的仪表板,并添加文本或类别筛选器。
选择 是,以便人们从列表或搜索框中选择一个或多个值。
将仪表板筛选器小部件映射到问题卡上的 Category 变量。确保 用户应如何在此列上筛选 选项设置为“下拉列表”。
单击侧边栏底部的 完成,然后保存您的仪表板。您应该一切就绪了。
延伸阅读
下一步:SQL 技巧:在图表中对条形进行排序
一个简单的技巧,可以保留您希望条形在图表中出现的顺序。