使用 SQL 问题向仪表盘添加筛选器

如何向仪表板添加筛选器小部件,并将其连接到 SQL 查询中的字段筛选器变量。

本文介绍如何创建仪表板小部件以筛选原生查询中的数据。在仪表板筛选器中选择一个值将更新 SQL 查询的结果。

A dashboard with a SQL question wired up to a filter.

这里的目标是了解如何将仪表板筛选器小部件连接到一种特殊的变量类型,称为字段筛选器,我们将其插入到查询的 SQL 代码中。

我们将介绍两个示例:一个日期筛选器(下一个),以及一个带下拉列表的文本筛选器

向 SQL 查询添加字段筛选器变量

让我们从一个用 SQL 编写的查询开始,它显示了 Metabase 附带的示例数据库中每月的订单。在任何 Metabase 页面的右上角导航栏中,点击 + 新建 并选择 SQL 查询(或 原生查询)。

A question written in SQL showing orders per month, visualized as a line chart.

以下是 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字段。

Setting the variable type for our SQL variable created_at to Field Filter, then setting the Field to map to option to the created_at field (column) of the orders table.

请注意,我们可以随意命名 SQL 变量,但为了使仪表板筛选器正常工作,我们必须将变量映射到相应的字段。

目前,我们将筛选器小部件标签保留为 Created at,并保留必填?开关不动。如果变量的筛选器小部件缺少值,Metabase 将运行查询,就像不存在 WHERE 子句一样。

我们还可以选择一个筛选器小部件类型,尽管此小部件仅适用于我们的问题。让我们选择 日期筛选器 类型。

我们来保存我们的问题。我们将其命名为 每月订单数量 - SQL

在我们将问题添加到仪表板之前,我们先快速绕个弯。

数据类型旁白

当我们选择 created_at 字段时,Metabase 知道该字段类型是 创建时间戳(请注意日历图标)。您可以通过浏览数据来了解每个表具有的字段(列)类型。

View information about your data by clicking on Browse Data from the top navigation bar, selecting your database---in this case, Sample Database---clicking on the information icon next to a table, and clicking on the book icon to learn about this table.

Viewing information on the fields in the Orders table of the Sample Database.

管理员可以在管理面板数据模型选项卡中编辑字段类型以及其他元数据设置。要了解更多信息,请查看我们的元数据编辑文档

将仪表板筛选器小部件连接到字段筛选器变量

所以我们已经有了带有 WHERE 子句中字段筛选器变量的 SQL 查询,现在是时候将该查询添加到仪表板了。

接下来,我们需要:

  • 创建仪表板。
  • 将我们的问题添加到仪表板。
  • 向该仪表板添加一个筛选器小部件。
  • 将该仪表板筛选器小部件连接到我们 SQL 查询中的字段筛选器变量。

让我们创建一个仪表板(我们将给我们的仪表板起一个非常缺乏想象力的名字带筛选器小部件的仪表板)。

然后我们将将我们的 SQL 查询添加到仪表板

接下来,我们将向仪表板添加一个筛选器小部件。点击铅笔图标进入仪表板编辑模式,然后

  • 点击筛选器图标,向仪表板添加筛选器小部件。
  • 我们想筛选什么 下,我们将选择 时间
  • 对于 什么类型的筛选器?,我们将选择 日期筛选器
  • 接下来,我们需要将我们的小部件连接到我们问题中的字段筛选器变量。点击我们问题中央的下拉菜单,然后选择我们的 创建于 字段筛选器变量。
  • 点击屏幕顶部的完成按钮。
  • 然后保存仪表板。

Adding a Date filter (Time → All options) to a dashboard, and connecting the filter widget to the Field Filter variable, Created at in our SQL question.

现在我们已经全部连接好了,可以测试我们的新日期筛选器了。这种特定的小部件类型为我们提供了丰富的选项。让我们看看过去六个月的订单。

Using a dashboard filter to filter orders for the last six months.

将 SQL 查询连接到仪表板上的下拉筛选器小部件

假设我们想要一个仪表板筛选器小部件来按类别筛选产品,并且我们希望人们能够从下拉列表中选择可用的类别。要设置此功能,我们将在 SQL 查询中放置一个字段筛选器变量,并将其映射到 products 表中的 category 字段。然后我们将仪表板筛选器映射到该变量。我们来逐步操作一下。

A dashboard with a dropdown filter connected to a SQL question card.

首先,创建一个仪表板。我们将其命名为“带有 SQL 查询和下拉筛选器的仪表板”(这样我们的任务就很明确了)。保存仪表板。

接下来,询问一个新的原生/SQL 查询以获取 products 表中的所有字段。为了按类别筛选产品,我们将在方括号中包含一个变量,我们将其命名为 category


SELECT
  *
FROM
  products
WHERE {{category}}

在 Metabase 弹出的变量侧边菜单中,我们将如下配置此变量:

  • 变量类型:字段筛选器。
  • 要映射的字段:产品表中的类别字段。
  • 筛选器小部件类型:字符串。
  • 筛选器小部件标签:类别(或您想要的任何名称)。
  • 用户应如何在此变量上进行筛选:下拉列表。
  • 必填:否。
  • 默认筛选器值:留空(这样默认不会筛选任何产品类别)。

Creating a SQL question that includes a field filter mapped to the products.category field. The field filter variable is then connected to a filter widget that

保存问题并将其添加到您的仪表板。编辑您的仪表板,并添加一个文本或类别筛选器。

Adding a text or category filter widget to a dashboard.

选择,以便用户可以从列表或搜索框中选择一个或多个值。

Setting up a dropdown dashboard filter connected to a field filter variable in a SQL question.

将仪表板筛选器小部件映射到问题卡上的类别变量。确保用户应如何在此列上进行筛选选项设置为“下拉列表”。

点击侧边栏底部的完成按钮,然后保存您的仪表板。您应该可以开始了。

延伸阅读

这有帮助吗?

感谢您的反馈!
分析师每周技巧
获取可行的见解
关于 AI 和数据的资讯,直接发送到您的收件箱
© . This site is unofficial and not affiliated with Metabase, Inc.