参考模型和已保存问题

在使用SQL数据库时,我们可以使用模型或现有的问题作为新查询的基础,或者作为公共表表达式CTE

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

在输入时搜索模型和问题

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

要在SQL查询中引用该问题或模型,请使用以#开头的前缀的typeahead搜索。

键入{{#your search term }},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)

相同的语法可以在公共表表达式(CTEs)中使用(对于支持CTEs的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其他版本的文档。

想改进这些文档吗?提出更改。