自訂動作

撰寫 SQL 以更新資料庫中的記錄。

Custom action

建立自訂動作

您必須在具有原生查詢編輯權限的群組中才能建立動作

有兩種方式可以建立自訂動作

  1. 按一下 + 新增 > 動作。當您儲存動作時,系統會提示您將該動作與模型建立關聯。(注意:只有在您先在 Metabase 中建立模型或有權存取模型的情況下,「動作」選項才會顯示在「+ 新增」選單中。)
  2. 透過模型詳細資料頁面:從模型中,按一下右上角的 資訊 按鈕。在側邊欄的右上角,按一下 模型詳細資料 > 動作 > 新增動作

在動作編輯器中,您可以撰寫自己的程式碼來建立動作,例如撰寫一個只會更新表格中部分欄位的動作。請參閱動作範例

動作變數的欄位類型

針對您在動作中設定的每個 {{ variable }},您都需要設定欄位類型。

這些變數欄位類型中的每一個都提供不同的選項。按一下齒輪圖示以變更選項。

如果您不需要變數,您可以選擇性地指定預設值,以便在人們未填寫欄位時讓 Metabase 使用。在 SQL 程式碼中,請記住將任何選用變數和逗號括在方括號中,例如 [[,欄位 = {{ optional_variable }}]]

您可以在動作表單中包含所有欄位的預留位置文字。

文字

  • 文字
  • 長文字
  • 下拉式選單
  • 內嵌選取器

數字

  • 數字
  • 下拉式選單
  • 內嵌選取器

日期

  • 日期
  • 日期 + 時間

針對下拉式選單內嵌選取器,您可以指定要在表單上呈現的選項清單,每個選項各佔一行。

Dropdown select

外觀

動作編輯器模式中的「外觀」索引標籤會顯示變數表單元素的預覽。在下圖中,我們按一下變數的齒輪,並將變數設定為使用文字 > 下拉式清單。「外觀」區段會提供表單元素外觀的預覽

Appearance gives a preview of the form element

動作設定

從模型詳細資料頁面,按一下動作旁邊的 三個點選單 (…)。進入動作編輯器後,按一下齒輪圖示以顯示動作設定。

設為公開

建立動作表單的公開共用連結。任何有權存取該連結的人都可以填寫表單並執行動作。適用於建立問卷調查。

Public action form

設定成功訊息

您可以在此處編輯成功訊息,這是 Metabase 在收到資料庫回覆表示一切順利後,會在快顯訊息中顯示的訊息。

如果發生錯誤,Metabase 會顯示從資料庫收到的錯誤訊息。

自訂動作範例

UPDATE 動作範例

您可以撰寫一個動作,以更新範例資料庫中 invoices 表格中記錄的 plan 欄位


UPDATE invoices
SET plan = {{ plan }}
   [[, payment = {{ payment }}]]
WHERE
   id = {{ id }}

上述程式碼會建立一個表單,提示人們輸入 (必要) plan 欄位的更新值,以及 (選用) payment 欄位的值,以指定 ID 的指定記錄。

方括號 [[ ]] 中的程式碼使陳述式成為選用項目:只有在有人在付款欄位中插入值時,才會執行括號括住的陳述式。請注意,分隔陳述式的逗號位於括號

Example action form

INSERT 動作範例

Insert 陳述式非常簡單明瞭


INSERT INTO invoices (
  account_id
  ,payment
  ,expected_invoice
  ,plan
  ,date_received
)
VALUES (
  {{ account_id }}
  ,{{ payment }}
  ,CAST ({{expected_invoice}} AS boolean)
  ,{{plan}}
  ,({{date_received}}
);

在動作中轉換欄位值

如果您在提交表單時收到類型錯誤,您可能需要在查詢中 CAST 資料類型,使其與資料庫中目標欄位的資料類型相符。在這裡,我們將值轉換為 boolean


UPDATE invoices
SET expected_invoice = CAST({{expected_invoice}} AS boolean)
WHERE id = {{id}};

在動作中參考儲存的問題

您也可以在動作中參考儲存的問題。在這裡,我們採用儲存的問題 («潛在客戶») 上 SELECT 陳述式的結果,並將結果插入 people_to_write 表格中。


WITH prospects AS {{#6-potential-customers}}

INSERT INTO
  people_to_write (
  first_name
  ,last_name
  ,email
  )
SELECT
  first_name
  ,last_name
  ,email
FROM prospects;

延伸閱讀

閱讀其他 Metabase 版本的文件。