# coalesce脚本和图表功能

coalesce 函数用于返回具有有效 non-NULL 表示法的参数中的第一个。可使用任何数目的参数。

语法：

coalesce(expr1[ , expr2 , expr3 , ...])

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| expr1 | 用于检查有效的非空呈现形式的第一个表达式。 |
| expr2 | 用于检查有效的非空呈现形式的第二个表达式。 |
| expr3 | 用于检查有效的非空呈现形式的第三个表达式。 |

示例：图表表达式

| 示例 | 结果 |
| --- | --- |
| `Coalesce(ProductDescription, ProductName, ProductCode, 'no description available')` | 此表达式将在三个不同的产品描述字段之间进行选择，因为某些字段没有产品的值。按照函数中列出的顺序，返回第一个有非空值的字段。如果所有字段都不包含值，则结果将为 `no description available`。 |
| `Coalesce(TextBetween(FileName, '"', '"'), FileName)` | 此表达式将从字段 `FileName` 中删除可能的括引号。如果给定的 `FileName` 是带引号的，则删除它们，并返回包含的、不带引号的 `FileName` 。如果 `TextBetween` 函数没有找到分隔符，它将返回 null，Coalesce 将拒绝该值，而是返回原始 `FileName`。 |

## 示例 - Coalesce 基本原理

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

#### 图表表达式

概述

加载了一个包含产品和价格数据的数据表。您希望确保任何空值都被替换为替代值。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `ProductID`

  * `ProductName`

  * `Price`

* `NullInterpret` 变量语句，用于确保任何缺失值都被视为 NULL。

加载脚本

```
Set NullInterpret = '';
Example:
LOAD * INLINE [
ProductID, ProductName, Price
1, Laptop, 1000
2, , 800
3, Desktop, 1200
4, , 500
5, Tablet, 600
];
```

结果

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

   * `ProductID`

   * `ProductName`

2. 创建以下计算维度：

   * `=Coalesce(ProductName, 'Unknown Product')`

3. 创建以下度量：

   * `=Sum(Price)`，用于返回一个有效的数字表示。

4. 创建一个新表，并添加以下表达式作为计算维度：

   * `=Coalesce(ProductName, 'Unknown Product')`

5. 创建以下度量：

   * `=Sum(Price)`，用于返回一个有效的数字表示。

下表中的结果显示了 `Coalesce` 函数如何用替代值 `Unknown Product` 替换原始数据集中的空值。

结果表 1

| ProductID | ProductName | Coalesce(ProductName, 'Unknown Product') | Sum(Price) |  |
| --- | --- | --- | --- | --- |
| Totals |  |  | 4100 |  |
| 1 | Laptop | Laptop | 1000 |  |
| 2 | - | Unknown Product | 800 |  |
| 3 | Desktop | Desktop | 1200 |  |
| 4 | - | Unknown Product | 500 |  |
| 5 | Tablet | Tablet | 600 |  |

结果表 2

| Coalesce(ProductName, 'Unknown Product') | Sum(Price) |
| --- | --- |
| Totals | 5 |
| Desktop | 600 |
| Laptop | 1000 |
| Tablet | 600 |
| Unknown Product | 1300 |

## 示例 - 用优先替代值替换空值

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

#### 图表表达式

概述

本例使用 `Coalesce` 函数，根据指定的优先逻辑，用替代值替换缺失位置数据。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `LocationID`

  * `Country`

  * `State`

  * `City`

* `NullInterpret` 变量语句，用于确保任何缺失值都被视为 NULL。

加载脚本

```
Set NullInterpret = '';
Example:
LOAD * INLINE [
LocationID, Country, State, City
L001, USA, California, Los Angeles
L002, USA, ,
L003, Canada, Ontario,
L004, , New South Wales, Sydney
L005, UK, , London
L006, , , London
];
```

结果

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

   * `LocationID`

   * `Country`

   * `State`

   * `City`

2. 创建以下计算维度：

   * `=Coalesce(Country, State, City)`，用于以替代值填充任何空值。

结果表

| LocationID | Country | State | City | Coalesce(Country, State, City) |
| --- | --- | --- | --- | --- |
| L001 | USA | California | Los Angeles | USA |
| L002 | USA | - | - | USA |
| L003 | Canada | Ontario | - | Canada |
| L004 | - | New South Wales | Sydney | New South Wales |
| L005 | UK | - | London | UK |
| L006 | - | - | London | London |

结果表明，尽管存在缺失值，但您可以使用 `Coalesce` 函数提供有关如何用替代值填充这些实例以完成数据集的逻辑。例如，`L004` 缺少一个 `Country` 值。`Coalesce` 函数返回 `New South Wales` ，因为 `State` 是优先逻辑中列出的第二个字段，当缺少 `Country` 的值时就会使用它。