Coalesce

coalesce 查找列表中的值(按顺序),并返回第一个非空值。

当您想要执行以下操作时,此函数非常有用

语法 示例
coalesce(值 1, 值 2, …) coalesce("null", "null", "bananas", "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 函数中使用相同的数据类型。如果您想合并具有不同数据类型的值

如果您想将 coalesce 与 JSON 或 JSONB 数据类型一起使用,您需要先展平 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 版本的文档。