引用模型和已保存的问题

对于 SQL 数据库,我们可以使用模型或现有问题作为新查询的基础,或作为通用表表达式CTE

例如,假设我们的数据分布在多个表中,但人们最感兴趣的是其中一个子集。我们可以执行一次复杂的查询来返回这些结果,然后将该问题保存为模型,人们可以在他们的查询中像引用任何其他表一样引用该模型。

边输入边搜索模型和问题

首先,创建并保存一个问题或模型,使其返回您希望提供给人们查询的结果集。

要在 SQL 查询中引用该问题或模型,请在以 # 开头的变量中使用预输入搜索。

输入 {{#您的搜索词 }} ,Metabase 将显示与您的搜索词相关的模型和问题列表。

Typeahead search dropdown for referencing questions and models in SQL queries

您还可以通过在 Metabase 中导航到您希望在查询中引用的模型或问题来查找其 ID。ID 位于浏览器地址栏的 URL 中。ID 将是 /model//question/ 后面的数字。例如,对于 https://metabase.example.com/model/12345-example-name,该模型的 ID 将是 12345

只需要 #ID。Metabase 仅显示模型或问题名称以提高查询的可读性。

作为通用表表达式(CTE)的模型、表或已保存的问题

相同的语法也可用于通用表表达式 (CTE)(支持 CTE 的 SQL 数据库)

WITH gizmo_orders AS {{#5-gizmo-orders-in-2019}}
SELECT count(*)
FROM gizmo_orders

当此查询运行时,{{#5-gizmo-orders-in-2019}} 标签将替换为被引用问题的 SQL 查询,并用括号括起来。因此,其内部结构将如下所示

WITH
  gizmo_orders AS (
    SELECT
      *
    FROM
      orders AS o
      INNER JOIN products AS p ON o.product_id = p.id
    WHERE
      p.category = 'Gizmo'
      AND o.created_at BETWEEN '2019-01-01' AND '2019-12-31'
  )
SELECT
  count(*)
FROM
  gizmo_orders

限制与权衡

  • 您只能在使用 PostgreSQL、MySQL、Snowflake 或 SQL Server 等 SQL 数据库时,在查询中引用模型或已保存的问题。
  • 您选择的模型或已保存的问题必须基于您当前在原生查询编辑器中选择的数据库。
  • 您不能在子查询中引用变量。您只能访问模型或已保存问题的结果,而不能访问模型或已保存问题的查询。例如,如果您有一个使用字段筛选器的已保存问题,您将无法引用该变量。如果您需要更改已保存问题过滤结果的方式,您需要更新(或复制)该问题并应用筛选器。

延伸阅读

阅读其他Metabase 版本的文档。

© . All rights reserved.