合并
coalesce
查看列表中的值(按顺序),并返回第一个非空值。
此函数在您想
- 填充缺失数据,
- 时很有用,或
- 在多个列之间创建计算.
语法 | 示例 |
---|---|
coalesce(value1, value2, …) |
coalesce("null", "null", "bananas", "null" …) |
从一系列值中返回第一个非空值。 | “bananas” |
填充空或空值
left_table_col | right_table_col | coalesce([right_table_col], 0) |
---|---|---|
1 | 1 | 1 |
2 | null |
0 |
3 | null |
0 |
4 | 4 | 4 |
如果您有
- 稀疏数据,可能需要填写空或空值。
- 由左连接创建的
null
值(如上例所示)。
更多示例,请参阅为缺失的报表日期填写数据。
合并不同列的值
注释 | 评论 | coalesce([Notes], [Comments] "No notes or comments.") |
---|---|---|
我有一条备注。 | 我有一条评论。 | 我有一条备注。 |
我有一条评论。 | 我有一条评论。 | |
我有一条备注。 | 我有一条备注。 | |
没有备注或评论。 |
跨不同列创建计算
小计 | 折扣 | coalesce([Subtotal], 0) - coalesce([Discount], 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
操作符。 - 在表元数据页面更改数据类型.
如果您想使用 coalesce
与 JSON 或 JSONB 数据类型,您需要首先展开 JSON 对象。有关更多信息,请查阅您 SQL 方言中可用的 JSON 函数。您可以在以下位置找到一些常见的 SQL 参考指南。
相关函数
本节介绍可以与 Metabase 的 coalesce
表达式互换使用的函数和公式,并附带有关如何根据您的用例选择最佳选项的说明。
Metabase 表达式
其他工具
所有示例均使用合并值示例中的自定义表达式和样本数据。
注释 | 评论 | coalesce([Notes], [Comments] "No notes or comments.") |
---|---|---|
我有一条备注。 | 我有一条评论。 | 我有一条备注。 |
我有一条评论。 | 我有一条评论。 | |
我有一条备注。 | 我有一条备注。 | |
没有备注或评论。 |
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
的写法会更简洁。如果您想定义特定的输出(例如,如果您想返回“I have a note and a comment”而不是“I have a note”),请使用 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版本的文档。