# EmptyIsNull 脚本和图表功能

EmptyIsNull 函数将空字符串转换成 NULL。因此，如果参数是空字符串，则返回 NULL，否则返回参数。

语法：

EmptyIsNull(exp )

返回数据类型： 如果参数为空字符串，则返回 NULL，否则返回参数

参数

| 参数 | 描述 |
| --- | --- |
| expr | 表达式或字段包含要度量的数据。 |

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| `EmptyIsNull(AdditionalComments)` | 此表达式将对 `AdditionalComments` 字段的任何空字符串值返回 NULL，而不是空字符串。返回非空字符串和数字。 |
| `EmptyIsNull(PurgeChar(PhoneNumber, ' -()'))` | 此表达式将从 `PhoneNumber` 字段中删除任何破折号、空格和括号。如果没有剩余字符，`EmptyIsNull` 函数将返回 NULL 形式的空字符串； 空的 phone number 和没有 phone number 是一样的。 |

## 示例 - EmptyIsNull 基本原理

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/NULLFunctions/EmptyIsNull.htm)

#### 图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有以下字段：

  * `CustomerID`

  * `OrderID`

  * `Product`

  * `Status`

  * `PhoneNumber`

加载脚本

```
Example:
LOAD * inline [
CustomerID, OrderID, Product, Status, PhoneNumber
1, 1001, Widget,, (0123) 456 789
2, 1002, Gizmo, Open,-
3, 1003, Gadget, Closed,()
4, 1004, Widget,,678-9888
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `CustomerID`

* `OrderID`

* `Product`

* `Status`

创建以下计算维度：

* `=EmptyIsNull(Status)`，以 NULL 的形式在 `Status` 字段中返回任何空字符串值。

* `=EmptyIsNull(PurgeChar(PhoneNumber, ' -()'))`，从 `PhoneNumber` 字段中删除所有破折号、空格和括号。如果没有剩余字符，则 `EmptyIsNull` 函数将空字符串返回为 NULL；空电话号码与没有电话号码相同。

信息注释下表包含空白单元格，用于演示 `EmptyIsNull` 函数的使用。

Results table

| CustomerID | OrderID | Product | Status | EmptyIsNull(Status) | EmptyIsNull(PurgeChar(PhoneNumber, ' -()')) |
| --- | --- | --- | --- | --- | --- |
| 1 | 1001 | Widget |  | - | 0123456789 |
| 2 | 1002 | Gizmo | Open | Open | - |
| 3 | 1003 | Gadget | Closed | Closed | - |
| 4 | 1004 | Widget |  | - | 6789888 |

在 `Status` 列中，请注意空值记录显示为有默认透明背景色的空单元格。对于这些空值，`EmptyIsNull(Status)` 测量的输出将返回 NULL，如带有灰色单元格背景的破折号 (-) 字符所示。

第二种度量使用 `EmptyIsNull` 函数与 [PurgeChar 脚本和图表功能](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/StringFunctions/PurgeChar.htm)，以删除 `PhoneNumber` 字段中的任何破折号 (-)、空格和括号 () ，然后将任何剩余的空字符串以 NULL 形式返回。现在，具有空值的单元格显示为破折号 (-) 和灰色背景格式。

## 示例 - 用文本替换空值并添加条件格式设定

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/NULLFunctions/EmptyIsNull.htm)

#### 图表表达式

概述

销售经理希望分析销售数据，并轻松识别包含缺失值的记录。

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 加载到名为 `Example` 的数据表中的数据集。

* 数据表中有以下字段：

  * `ID`

  * `Name`

  * `Age`

  * `Email`

  * `Sales`

  * `Region`

  * `OrderStatus`

加载脚本

```
Example:
LOAD * inline [
ID,Name, Age, Email, Sales, Region, OrderStatus
1, John Smith, 30, john@email.com, 1000, North, Active
2, Jane Doe, '', jane@email.com, 1500, South, Active
3, Bob Johnson, 45, '', 800, East, Inactive
4, Alice Brown, 28, alice@email.com, '', West, Active
5, Charlie Lee, '', charlie@email.com, 1200, '', Active
6, Eva Green, 35, eva@email.com, 950, North, ''
7, David White, 50, '', '', South, Inactive
8, Fiona Black, 42, fiona@email.com, 1100, East, Active
];
```

结果

加载数据并打开工作表。创建新表并将该字段添加为维度：

* `ID`

创建以下计算维度：

* `=If(IsNull(EmptyIsNull(Age)), 'NULL', EmptyIsNull(Age))`，以 `Age` 字段中的任何空字符串值 NULL 的形式返回，然后用值 `NULL`而不是短横 (`-`) 字符标识并填充所有空值。

* `=If(IsNull(EmptyIsNull(Email)), 'NULL', EmptyIsNull(Email))`，以 `Email` 字段中的任何空字符串值 NULL 的形式返回，然后用值 `NULL`而不是短横 (`-`) 字符标识并填充所有空值。

* `=If(IsNull(EmptyIsNull(Sales)), 'NULL', EmptyIsNull(Sales))`，以 `Sales` 字段中的任何空字符串值 NULL 的形式返回，然后用值 `NULL`而不是短横 (`-`) 字符标识并填充所有空值。

* `=If(IsNull(EmptyIsNull(Region)), 'NULL', EmptyIsNull(Region))`，以 `Region` 字段中的任何空字符串值 NULL 的形式返回，然后用值 `NULL`而不是短横 (`-`) 字符标识并填充所有空值。

* `=If(IsNull(EmptyIsNull(OrderStatus)), 'NULL', EmptyIsNull(OrderStatus))`，以 `OrderStatus` 字段中的任何空字符串值 NULL 的形式返回，然后用值 `NULL`而不是短横 (`-`) 字符标识并填充所有空值。

设置条件单元格格式，将 `NULL` 值的背景颜色更改为红色，将所有其他数值的背景颜色更改为绿色。在每个维度和度量的属性面板中，输入以下表达式作为背景颜色表达式：

* `ID` (dimension): `=RGB(200,255,200)`

* `Age` (measure): `=If(IsNull(EmptyIsNull(Age)), RGB(255,200,200), RGB(200,255,200))`

* `Email` (measure): `=If(IsNull(EmptyIsNull(Email)), RGB(255,200,200), RGB(200,255,200))`

* `Sales` (measure): `=If(IsNull(EmptyIsNull(Sales)), RGB(255,200,200), RGB(200,255,200))`

* `Region` (measure): `=If(IsNull(EmptyIsNull(Region)), RGB(255,200,200), RGB(200,255,200))`

* `OrderStatus` (measure): `=If(IsNull(EmptyIsNull(OrderStatus)), RGB(255,200,200), RGB(200,255,200))`

Results table

| ID | If(IsNull(EmptyIsNull(Age)), 'NULL', EmptyIsNull(Age)) | If(IsNull(EmptyIsNull(Email)), 'NULL', EmptyIsNull(Email)) | If(IsNull(EmptyIsNull(Sales)), 'NULL', EmptyIsNull(Sales)) | If(IsNull(EmptyIsNull(Region)), 'NULL', EmptyIsNull(Region)) | If(IsNull(EmptyIsNull(OrderStatus)), 'NULL', EmptyIsNull(OrderStatus)) |
| --- | --- | --- | --- | --- | --- |
| 1 | 30 | john@email.com | 1000 | North | Active |
| 2 | NULL | jane@email.com | 1500 | South | Active |
| 3 | 45 | NULL | 800 | East | Inactive |
| 4 | 28 | alice@email.com | NULL | West | Active |
| 5 | NULL | charlie@email.com | 1200 | NULL | Active |
| 6 | 35 | eva@email.com | 950 | North | NULL |
| 7 | 50 | NULL | NULL | South | Inactive |
| 8 | 42 | fiona@email.com | 1100 | East | Active |

结果表明，通过使用`EmptyIsNull` 函数并添加条件格式设定，可以轻松识别缺失值记录。