參考模型和已儲存問題

使用 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

限制和權衡

  • 只有在使用 SQL 資料庫 (如 PostgreSQL、MySQL、Snowflake 或 SQL Server) 時,您才能在查詢中參考模型或已儲存問題。
  • 您選擇的模型或已儲存問題必須是基於與您目前在本機查詢編輯器中選取的資料庫相同的資料庫。
  • 您無法在子查詢中參考變數。您只能存取模型或已儲存問題的結果,而不是模型或已儲存問題的查詢。例如,如果您有一個使用欄位篩選器的已儲存問題,您將無法參考該變數。如果您需要變更已儲存問題篩選結果的方式,您需要更新 (或複製) 該問題並套用篩選器。

延伸閱讀

閱讀其他Metabase 版本的說明文件。