为带有 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 变量,但为了使仪表板筛选器正常工作,我们必须将变量映射到适当的字段。

目前,我们将筛选器小部件标签保留为创建时间,并且不触动必填项?切换。如果变量的筛选器小部件缺少值,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.

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

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

因此,我们有一个带有字段筛选器变量的 SQL 问题,位于WHERE子句中,现在是时候将该问题添加到仪表板了。

接下来,我们需要

  • 创建仪表板。
  • 将我们的问题添加到仪表板。
  • 向该仪表板添加一个筛选器小部件。
  • 将该仪表板筛选器小部件连接到我们的 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 弹出的变量侧边菜单中,我们将按如下方式配置此变量

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

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.

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

单击侧边栏底部的完成,然后保存您的仪表板。您应该可以使用了。

延伸阅读

下一篇:SQL 技巧:图表中条形的排序

一个简单的技巧,可以保留您希望条形图出现的顺序。

下一篇文章
© . All rights reserved.