字段筛选器

字段筛选器是可以直接连接到数据库字段的特殊变量。

何时使用字段筛选器变量与基本变量

总的来说,优先使用字段筛选器变量。它们提供带有下拉菜单和动态日期选择器的“智能”筛选小组件。

然而,如果您的查询缺少可供筛选器连接的数据库字段,则需要使用基本变量。例如,如果您想按您创建的自定义列进行筛选,则需要使用基本变量。

字段筛选器变量

如何添加字段筛选器

  1. WHERE 子句中添加变量.
  2. 将字段筛选器连接到数据库字段.
  3. 配置筛选小组件.

字段筛选器语法

假设您想创建一个字段筛选器变量,用于按 state 字段筛选 People 表。

以下是字段筛选器语法


SELECT
  *
FROM
  PEOPLE
WHERE
  {{state}}

请注意,这里缺少列和运算符(不是 WHERE state = {{state}},而只是 WHERE {{state}})。您需要以这种方式构造字段筛选器变量的原因是为了处理 Metabase 为您生成代码的情况。例如,为了处理某人在筛选小组件中选择*多个*值或日期*范围*的情况,Metabase 将不得不插入 SQL 代码来处理这些输入到变量中。

在 MongoDB 原生查询中,您需要将字段筛选器放在 $match 子句中。

[ {$match: {{date_var}} } ]

将字段筛选器连接到数据库字段

为了使字段筛选器变量能够正常工作,您需要将该变量与数据库字段关联起来。

  1. 转到变量和参数侧边栏。
  2. 变量类型下,选择“字段筛选器”变量类型。
  3. 选择要映射到变量的字段(在本例中,我们将映射到产品表中的 Category 字段)。

您只能将字段筛选器映射到数据库字段。如果您无法使用字段筛选器,可以退而使用基本变量

指定表和字段别名

如果将筛选器映射到来自别名表的字段,则需要告知 Metabase 该别名,否则筛选器将无法工作。

例如,假设您想将字段筛选器映射到 products 表中的 category 字段,但在查询中您对 products 表使用了别名 p,如下所示:


SELECT
  *
FROM
  products AS p
WHERE
  {{category_filter}}

如果映射到产品表中的 category 字段,您还需要填写表和字段别名输入框,以告知 Metabase 该别名。在这种情况下,您输入 p.category

只有当您的查询使用别名来引用包含您要映射筛选器的字段的表时,才需要设置此表和字段别名

这是另一个例子,这次使用 CTE


WITH
  expensive_products AS (
    SELECT
      *
    FROM
      products
    WHERE
      price > 50
  )
SELECT
  *
FROM
  expensive_products
WHERE
  {{category_filter}}

在这里,我们再次将字段筛选器映射到 products 表中的 category 字段。但由于我们使用了一个别名为 expensive_products 的 CTE,我们需要在表和字段别名输入框中输入 expensive_products.category,以使映射正确工作。

字段筛选器必须连接到查询中包含的数据库字段

您的主查询应知道字段筛选器变量指向的所有表,否则您将收到 SQL 语法错误。例如,假设您的主查询包含如下字段筛选器:


SELECT
  *
FROM
  ORDERS
WHERE
  {{ product_category }}

假设 {{ product_category }} 变量引用了另一个使用 Products 表的问题。为了使字段筛选器正常工作,您需要在主查询中包含一个到 Products 的联接。


SELECT
  *
FROM
  ORDERS
  JOIN PRODUCTS ON ORDERS.product_id = PRODUCTS.id
WHERE
  {{ product_category }}

如果您无法使用字段筛选器,可以转而使用基本变量

BigQuery 和 Oracle 中的字段筛选器

请确保您的 SQL 方言与所选数据库匹配。常见问题涉及查询中表的引用方式

数据库 方言特性 示例
BigQuery 模式和表必须用反引号括起来。 FROM `dataset.table`
Oracle 模式和表必须用双引号括起来。 FROM "schema.table"

如需更多帮助,请参阅SQL 错误消息故障排除

使字段筛选器成为可选

请参阅可选变量

阅读其他版本的 Metabase 的文档。

这有帮助吗?

感谢您的反馈!
想要改进这些文档吗?提出更改建议。
© . This site is unofficial and not affiliated with Metabase, Inc.