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
函數中使用相同的資料類型。如果您想要合併具有不同資料類型的值
- 使用 SQL
CAST
運算子。 - 從「表格中繼資料」頁面變更資料類型.
如果您想要搭配 JSON 或 JSONB 資料類型使用 coalesce
,您需要先將 JSON 物件扁平化。如需詳細資訊,請查詢 SQL 方言中可用的 JSON 函數。您可以在此處找到一些常見的 SQL 參考指南。
相關函數
本節涵蓋可與 Metabase coalesce
表示式互換使用的函數和公式,並附註如何為您的使用案例選擇最佳選項。
Metabase 表示式
其他工具
所有範例皆使用自訂表示式和「合併值」範例中的範例資料
附註 | 註解 | coalesce([附註], [註解] "無附註或註解。") |
---|---|---|
我有一個附註。 | 我有一個註解。 | 我有一個附註。 |
我有一個註解。 | 我有一個註解。 | |
我有一個附註。 | 我有一個附註。 | |
無附註或註解。 |
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 版本的文件。