引用模型和已保存的问题
使用 SQL 数据库时,我们可以使用 模型 或现有问题作为新查询的基础,或者作为通用表表达式 CTE。
例如,假设我们有大量数据分散在多个表中,但人们最感兴趣的是其中的一部分数据。我们可以进行一次复杂的查询来返回这些结果,然后将该问题保存为模型,这样人们就可以像引用其他表一样在他们的查询中引用它。
键入时搜索模型和问题
首先,创建并保存一个返回您希望提供给人们查询的结果集的问题或模型。
要在 SQL 查询中引用该问题或模型,请使用以 # 为前缀的变量进行自动完成搜索。
键入 {{#您的搜索词 }} ,Metabase 将显示与您的搜索词相关的模型和问题列表。

您还可以通过在 Metabase 中导航到您想在查询中引用的模型或问题来查找问题或模型 ID。ID 就在您浏览器地址栏的 URL 中。ID 将是 /model/ 或 /question/ 后面的数字。例如,对于 https://metabase.example.com/model/12345-example-name,该模型的 ID 将是 12345。
只需要 # 和 ID。Metabase 仅显示模型或问题名称以使查询更具可读性。
模型、表或已保存的问题作为通用表表达式 (CTE)
相同的语法可用于 通用表表达式 (CTEs)(适用于支持 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 的文档。