合并

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 函数内使用相同的数据类型。如果想要合并不同数据类型的值

如果您想使用 coalesce 与 JSON 或 JSONB 数据类型,您需要首先展开 JSON 对象。有关更多信息,请查阅您 SQL 方言中可用的 JSON 函数。您可以在以下位置找到一些常见的 SQL 参考指南

本节介绍可以与 Metabase 的 coalesce 表达式互换使用的函数和公式,并附带有关如何根据您的用例选择最佳选项的说明。

Metabase 表达式

其他工具

所有示例均使用合并值示例中的自定义表达式和样本数据。

注释 评论 coalesce([Notes], [Comments] "No notes or comments.")
我有一条备注。 我有一条评论。 我有一条备注。
  我有一条评论。 我有一条评论。
我有一条备注。   我有一条备注。
    没有备注或评论。

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 的写法会更简洁。如果您想定义特定的输出(例如,如果您想返回“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版本的文档。

想要改进这些文档? 提出更改。