在表格中搜索

了解如何在使用过滤器和自定义表达式的 SQL 问题和简单问题中进行搜索。在表格中查找单词或短语现在比以往任何时候都更容易。

向问题添加过滤器可以使在问题中搜索文本变得轻而易举。您可以按照本文中的示例,使用每个 Metabase 安装都包含的示例数据库

在问题中搜索

我们将首先单击浏览数据按钮,选择 示例数据库,然后打开 产品 表格。

要在问题中搜索,我们使用可自定义的过滤器。我们将单击过滤器按钮,然后在列表中找到我们要按其进行过滤的列。

让我们使用列 标题。列名称旁边有一个下拉菜单,当前显示为 。将出现一个包含文本过滤器选项的弹出窗口,为我们提供

  • 不是
  • 包含
  • 不包含
  • 为空
  • 不为空
  • 开头是
  • 结尾是

我们将选择 开头是 并在过滤器侧边栏上的搜索框中键入“rustic”。我们将单击应用过滤器以将过滤器添加到我们的问题中。

Creating a search widget by adding a filter to a question.

应用过滤器后,我们的问题将仅列出以“rustic”开头的产品标题。

更新您的搜索过滤器

现在我们添加了一个过滤器,我们的搜索过滤器位于表格顶部。我们可以单击过滤器描述,其中显示 标题开头是 rustic

Close up picture of the question search filter.

在弹出窗口中,我们可以使用文本框替换当前搜索词,例如“Marble”。我们还可以通过单击当前显示 开头是 的下拉菜单来更改小部件过滤结果的方式,例如通过将我们的文本过滤器选项更改为 包含。我们将搜索小部件从 标题开头是 rustic 更新为 标题包含 Marble,并使搜索区分大小写。

Using the search widget to change what we

搜索多个值

Metabase 中的过滤器小部件允许您同时搜索多个值。假设我们要按包含“Marble”、“Clock”或“Wallet”的产品过滤结果。我们可以再次单击过滤器描述,键入“Clock”,然后键入逗号(这告诉 Metabase“我已完成键入值,现在将输入另一个值”),然后键入“Wallet”

Search with a filter widget

当您在“包含”过滤器(以及“开头是”和“结尾是”)中使用多个值时,Metabase 将搜索包含这些值中任何一个值的记录(隐式 ,而不是 )。如果您想查找包含所有这些值的记录(例如,包含“Marble”“Clock”的记录),则需要为每个值添加一个过滤器。或者您可以使用自定义表达式。

使用自定义表达式进行高级搜索

自定义表达式是一种使用数字或文本进行高级查询的方法。假设我们要按产品是 rustic 还是 clocks 来过滤结果。因此,我们想要标题以“Rustic”开头或以“Clock”结尾的记录。

让我们通过再次单击过滤器进行编辑,单击 <,然后在侧边栏底部选择自定义表达式来创建自定义表达式。

如果我们开始键入,我们将看到弹出建议,我们可以在自定义表达式中使用这些建议。

The Custom Expression sidebar is open and an expression beginning with `contains()` is visible.

我们将编写如下基本查询:(startsWith([Title] , "Rustic"))。

  • startsWith 是我们想要的过滤器类型
  • [Title] 是要过滤的列
  • "Rustic" 是要过滤的术语

我们将添加一个空格并键入 OR,然后我们将编写另一个文本搜索函数:OR endsWith([Title] , "Clock"),然后单击完成

Creating a Custom Expression that searches through the Title column of the Products table for the words

搜索外键

我们可以使用外键基于连接表中的数据搜索表格。为了能够使用字符串以及 ID 号搜索外键,管理员需要更改数据模型设置设置。从主 Metabase 导航栏中,单击齿轮图标以打开管理面板,单击数据模型选项卡,然后选择 示例数据库。接下来,单击 评论 表格,然后单击 Product_ID 字段旁边的齿轮图标

在我们的示例中,Product_ID 列设置为外键,具有 搜索框 过滤器设置,以及 标题 的显示值。这样,当我们按 Product_ID 过滤时,我们可以按标题而不是 ID 号进行过滤,并且表格将显示每个产品的标题而不是其 ID 号。

In the data model for the Product_ID field in the Reviews table, the admin has saved the Filtering on this field settings as Search box and the Display values as Title.

您可以在我们的文档中了解有关编辑元数据的更多信息。

设置元数据后,我们将能够按产品标题过滤评论

  1. 单击浏览 > 数据库按钮,选择 示例数据库,然后打开 评论 表格。
  2. 单击过滤器按钮。这将打开过滤器编辑器,其中包含 评论产品 表格中的所有列
  3. 过滤器编辑器的侧边栏中选择 产品 表格。
  4. 找到 标题 字段,键入“Practical”,然后在下拉列表中选择一个值,例如“Practical Bronze Computer”。

Creating a search widget for the Reviews table using the title of the product instead of the ID.

向 SQL 问题添加搜索小部件

在普通数据库中,我们需要为每个搜索词制作一个新的 SQL 查询,但 Metabase 使搜索我们的数据库变得容易,即使在使用 SQL 查询时也是如此。我们所需要做的就是在查询的 WHERE 子句中插入一个变量

在主导航栏的右上角,我们将单击铅笔图标以编写 SQL。

SELECT *
FROM REVIEWS
[[WHERE UPPER(Body) LIKE UPPER(CONCAT('%', {{search_term}}, '%'))]]

一旦我们开始在花括号 {{}} 内键入内容,搜索栏将出现在 SQL 输入区域上方,Metabase 将弹出变量侧边栏。

The SQL Editor with the example query typed into the SQL text area.

SQL 问题分解

用简单的英语来说,此 SQL 查询表示“显示评论正文包含搜索词的评论,无论两者是否以相同方式大写。”

让我们分解第三行中的元素

  • [[]] 方括号使过滤器成为可选。如果未向变量提供搜索词,则查询将返回未过滤的行。
  • WHERE 过滤结果。
  • UPPER() 将被搜索的文本和搜索词都大写,因此即使大小写存在差异,它们也会匹配。
  • BODY 是要过滤的列。
  • LIKE 搜索模式。
  • CONCAT() (concatenate 的缩写)组合字符串。
  • '%' 百分号是通配符。如果位于搜索词之前,则可以在该词之前添加文本。用 % 包裹搜索词,即使该词被文本包围,也会搜索该词。
  • {{}} 双花括号包裹一个变量。
  • search_term 过滤器小部件将为其提供文本以进行搜索的变量。

变量侧边栏

变量类型已选择 文本,但还有其他几个选项

  • 数字
  • 日期
  • 字段过滤器

过滤器既可以复杂又非常有用;查看过滤器小部件字段过滤器,以了解它们可以通过多种方式提供有价值的见解。

变量类型 下方是 过滤器小部件标签,它会自动使用我们在花括号之间键入的文本作为我们的标签。

有关支持搜索小部件的 SQL 查询的其他示例和建议,请点击侧边栏顶部的帮助选项卡

The variable type options, creating a new placeholder for the widget label, and scrolling through the

下一步:清理和格式化文本

如何使用自定义表达式清理不一致、非结构化或空白的文本。

下一篇文章