Isnull
isNull 检查一个值是否为 null,这是一种特殊的占位符,当某些内容缺失或未知时,数据库会使用它。
语法
isNull(text column)
您可以在 自定义过滤器 中使用 isNull,或者作为条件聚合 CountIf 和 SumIf 的条件。要使用 isNull 创建自定义列,您必须将 isNull 与接受布尔值的另一个函数(如 case)结合使用。
Metabase 如何处理 null 值
在 Metabase 表中,null 值显示为空白单元格。此外,对于字符串列,空字符串和仅包含空格字符的字符串也将显示为空白。
下表展示了 isNull 的输出示例。
| Metabase 显示 | 数据库值 | isNull(value) |
|---|---|---|
null |
true |
|
"" (空字符串) |
false* |
|
" " (空格) |
false |
|
| kitten | "kitten" |
false |
*在 Oracle 和 Vertica 数据库中,空字符串被视为 null 值。
创建布尔自定义列
要使用 isNull 创建自定义列,您必须将 isNull 与另一个函数结合使用。例如,如果您想创建一个自定义列,当 Discount 列为 null 时显示 true,否则显示 false,您可以使用 case 表达式。
case(isNull([Discount]), true, false)
将 null 值替换为另一个值
将 isNull 与 case 表达式结合使用,以用更具描述性的内容替换缺失的信息。
例如,您可以创建一个新的自定义列,当原始的 [Feedback] 列为 null 时,该列将包含 "Unknown feedback.",当 [Feedback] 有值时,将包含实际的反馈值。用于此的自定义表达式是:
case(isNull([Feedback]), "Unknown feedback.", [Feedback])
| Feedback | case(isNull([Feedback]), "Unknown feedback.", [Feedback]) |
|---|---|
null |
"Unknown feedback." |
"" |
"" |
"I like your style." |
"I like your style." |
支持的数据类型
| 数据类型 | 与 isNull 一起使用 |
|---|---|
| 字符串是 | ✅ |
| 数字 | ✅ |
| 时间戳 | ✅ |
| 布尔值 | ✅ |
| JSON | ✅ |
限制
- 在 Metabase 中,您必须将
isNull与接受布尔参数(即true或false)的另一个表达式结合使用。 isNull一次只能接受一个值。如果您需要处理多个列中的空白单元格,请参阅 coalesce 表达式。- 如果
isNull对您的空白单元格不起作用,您可能遇到了空字符串。请尝试改用isEmpty表达式。
相关函数
本节介绍可与 Metabase isNull 表达式互换使用的函数和公式,并附带说明如何为您的用例选择最佳选项。
所有下面的示例都使用“将 null 值替换为另一个值”示例中的表格。
| Feedback | case(isNull([Feedback]), "Unknown feedback.", [Feedback]) |
|---|---|
null |
"Unknown feedback." |
"" |
"" |
"I like your style." |
"I like your style." |
SQL
在大多数情况下(除非您使用的是 NoSQL 数据库),从 查询生成器创建的问题会被转换为 SQL 查询,在您的数据库或数据仓库上运行。
CASE WHEN Feedback IS NULL THEN "Unknown feedback",
ELSE Feedback END
相当于 Metabase isNull 表达式
case(isNull([Feedback]), "Unknown feedback.", [Feedback])
电子表格
电子表格中的 #N/A 等同于数据库的 null 值(“未知”或“缺失”信息的占位符)。
假设我们样本的 feedback 列在电子表格中,其中“Feedback”在 A 列,那么公式
=IF(ISNA(A2), "Unknown feedback.", A2)
相当于 Metabase isNull 表达式
case(isNull([Feedback]), "Unknown feedback.", [Feedback])
Python
Numpy 和 pandas 使用 NaN 或 NA 而不是 null。
假设我们样本的 feedback 列在名为 df["Feedback"] 的数据框列中
df["Custom Column"] = np.where(df["Feedback"].isnull(), "Unknown feedback.", df["Feedback"])
相当于 Metabase isNull 表达式
case(isNull([Feedback]), "Unknown feedback.", [Feedback])
延伸阅读
阅读其他版本的 Metabase 的文档。