Coalesce

coalesce 會依序查看清單中的值,並傳回第一個非 Null 值。

當您想要執行下列操作時,此函數非常有用

語法 範例
coalesce(value1, value2, …) coalesce("null", "null", "bananas", "null" …)
從值清單中傳回第一個非 Null 值。 「bananas」

填入空白或 Null 值

left_table_col right_table_col coalesce([right_table_col], 0)
1 1 1
2 null 0
3 null 0
4 4 4

如果您有下列情況,您可能會想要填入空白或 Null 值

  • 稀疏資料。
  • 由左聯結建立的 null 值 (如上述範例所示)。

如需更詳細的範例,請參閱填入遺失報告日期的資料

合併來自不同欄位的資料

附註 註解 coalesce([附註], [註解] "無附註或註解。")
我有一個附註。 我有一個註解。 我有一個附註。
  我有一個註解。 我有一個註解。
我有一個附註。   我有一個附註。
    無附註或註解。

建立跨不同欄位的計算

小計 折扣 coalesce([小計], 0) - coalesce([折扣], 0)
10.00 0.15 9.85
21.00   21.00
16.00 1.60 14.40
4.00   4.00

如果任何輸入欄位為 null,Metabase 中的計算將會傳回 null。這是因為您資料中的 null 值代表「遺失」或「不明」資訊,這不一定與「0」的數量相同。也就是說,1 + 「不明」= 「不明」。

如果您想要將「不明」值視為零 (或在您的資料中代表「無意義」的其他值),我們建議使用 coalesce 來包裝計算中使用的欄位。

接受的資料類型

資料類型 可搭配 coalesce 使用
字串
數字
時間戳記
布林值
JSON

限制

在單一 coalesce 函數中使用相同的資料類型。如果您想要合併具有不同資料類型的值

如果您想要搭配 JSON 或 JSONB 資料類型使用 coalesce,您需要先將 JSON 物件扁平化。如需詳細資訊,請查詢 SQL 方言中可用的 JSON 函數。您可以在此處找到一些常見的 SQL 參考指南

本節涵蓋可與 Metabase coalesce 表示式互換使用的函數和公式,並附註如何為您的使用案例選擇最佳選項。

Metabase 表示式

其他工具

所有範例皆使用自訂表示式和「合併值」範例中的範例資料

附註 註解 coalesce([附註], [註解] "無附註或註解。")
我有一個附註。 我有一個註解。 我有一個附註。
  我有一個註解。 我有一個註解。
我有一個附註。   我有一個附註。
    無附註或註解。

Case

Metabase case 表示式

case(ISBLANK([Notes]) = FALSE AND ISBLANK([Comments]) = FALSE, [Notes],
     ISBLANK([Notes]) = TRUE  AND ISBLANK([Comments]) = False, [Comments],
     ISBLANK([Notes]) = FALSE AND ISBLANK([Comments]) = TRUE,  [Notes],
     ISBLANK([Notes]) = TRUE  AND ISBLANK([Comments]) = TRUE,  "No notes or comments")

相當於 Metabase coalesce 表示式

coalesce([Notes], [Comments] "No notes or comments.")

如果您不介意在您的兩個欄位皆非空白時採用第一個值,coalesce 會更易於撰寫。如果您想要定義特定輸出 (例如,如果您想要傳回「我有一個附註一個註解」而不是「我有一個附註」。),請使用 case

SQL

在大多數情況下 (除非您使用的是 NoSQL 資料庫),從筆記本編輯器建立的問題會轉換為針對您的資料庫或資料倉儲執行的 SQL 查詢。

SQL coalesce 函數

SELECT
    COALESCE(notes, comments, "no notes or comments")
FROM
    sample_table;

相當於 Metabase coalesce 表示式

coalesce([Notes], [Comments] "No notes or comments.")

試算表

如果您的附註和註解表格位於試算表中,其中「附註」位於 A 欄,「註解」位於 B 欄,則公式為

=IF(ISBLANK($A2),$B2,IF(ISBLANK($B2),$A2,"No notes or comments."))

相當於 Metabase coalesce 表示式

coalesce([Notes], [Comments] "No notes or comments.")

或者,如果您在試算表中「合併」跨三個或更多欄位的資料,您可能會習慣使用陣列公式中的 INDEX 和 MATCH。

Python

假設附註和註解表格位於名為 df 的資料框架中,則 pandas 函數 combine_first()fillna() 的組合

df['custom_column'] = df['notes'].combine_first(df['comments'])\
                                 .fillna('No notes or comments.')

相當於 Metabase coalesce 表示式

coalesce([Notes], [Comments] "No notes or comments.")

延伸閱讀

閱讀其他Metabase 版本的文件