引用模型和已保存的问题
对于 SQL 数据库,我们可以使用模型或现有问题作为新查询的基础,或作为公用表表达式 CTE。
例如,假设我们有很多数据分散在多个表中,但人们最感兴趣的是这些数据的子集。我们可以执行一次复杂的查询来返回这些结果,并将该问题保存为模型,人们可以在查询中引用它,就像引用任何其他表一样。
输入时搜索模型和问题
首先,创建并保存一个问题或模型,该问题或模型返回您希望供人们查询的结果集。
要在 SQL 查询中引用该问题或模型,请在以 #
为前缀的变量中使用预输入搜索。
键入 {{#your search term }}
,Metabase 将显示与您的搜索词相关的模型和问题列表。
您也可以通过在 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 的文档。