# Only - 图表函数

Only() 用于返回一个值（如果从聚合数据得出一个且只有一个可能值）。例如，如果有多个产品的单价为 9，则只搜索单价为 9 的产品将会返回 NULL。

语法：

Only([{SetExpression}] [TOTAL [&lt;fld {,fld}&gt;]] expr)

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| expr | 表达式或字段包含要度量的数据。 |
| SetExpression | 聚合函数会默认聚合选择项定义的可能记录集合。可选记录集合可由集合分析表达式定义。 |
| TOTAL | 如果在函数参数前面出现单词 TOTAL，则计算给出当前选择项的所有可能值，而不只是属于当前维度值的那些值，即它会忽略图表维度。<br><br>通过使用 TOTAL [&lt;fld {.fld}&gt;]（其中 TOTAL 限定符后跟一个或多个字段名称作为图表维度变量的子集的列表），您可以创建总可能值的子集。<br><br>[定义聚合范围](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

提示注释如果在样本数据中有多个可能的值时您想要 NULL 结果，则使用 Only()。

示例 - 图表表达式

| 示例 | 结果 |
| --- | --- |
| `Only(Category)` | 只要它在上下文中是唯一的，就显示 `Category`。 |

## 示例 - Only 基本原理

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/only.htm)

#### 图表表达式

概述

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Customer`

  * `Product`

  * `UnitSales`

  * `UnitPrice`

加载脚本

```
Example:
LOAD * inline [
Customer|Product|UnitSales|UnitPrice
Astrida|AA|4|16
Astrida|AA|10|15
Astrida|BB|9|9
Betacab|BB|5|10
Betacab|CC|2|20
Betacab|DD||25
Canutility|AA|8|15
Canutility|CC||19
] (delimiter is '|');
```

结果

加载数据并打开工作表。使用以下度量创建新表：

* `=Only({<UnitPrice={9}>} Product)`，计算唯一的 `Product`，其具有 `UnitPrice` `9`。

* `=Only({<Product={DD}>} Customer)`，计算唯一的 `Customer`，其销售名为 `DD` 的 `Product`。

* `=Only({<UnitPrice={20}>} UnitSales)` 用于计算 `UnitSales` 的数目，其中 `UnitPrice` is `20`.

* `=Only({<UnitPrice={15}>} UnitSales)`，计算 `UnitSales` 的值，其中`UnitPrice = 15` 。

Results table

| Only({&lt;UnitPrice={9}&gt;} Product) | Only({&lt;Product={DD}&gt;} Customer) | Only({&lt;UnitPrice={20}&gt;} UnitSales) | Only({&lt;UnitPrice={15}&gt;} UnitSales) |
| --- | --- | --- | --- |
| BB | Betacab | 2 | - |

在此示例中，请注意以下几点：

* 第一列返回值 `BB` ，因为这是具有 `UnitPrice` 为 `9` 的唯一 `Product`。

* 第二列返回 `Betacab`，因为它是销售 `Product` 的唯一 `Customer`，该产品名为 `DD`。

* 第三列返回 `2` ，因为这是 `UnitSales` 的唯一值，其中 `UnitPrice = 20`。

* 第四列返回`NULL` ，因为`UnitPrice = 15`. 在这个数据集中，有两个`UnitSales` 的值，其中 `UnitPrice =15` 。

## 示例 – 仅限场景

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/only.htm)

#### 图表表达式

概述

数据集包含按期间划分的产品销售额。该公司希望确定一种产品是在一家商店销售还是在多家商店销售。

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

加载脚本包含：

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

* 数据表中有以下字段：

  * `Date`

  * `RecordID`

  * `StoreProduct`

  * `Sales`

加载脚本

```
Example:
Load * inline [
Date, RecordID, StoreProduct, Sales, Store
2024-01-01, 1, Apple, 100, A
2024-01-15, 2, Banana, 80, B
2024-01-30, 3, Carrot, 50, C
2024-02-05, 4, Apple, 120, A
2024-02-20, 5, Banana, 90, B
2024-02-28, 6, Carrot, 60, D
2024-03-10, 7, Apple, 110, A
2024-03-22, 8, Banana, 85, B
2024-03-31, 9, Carrot, 55, C
];
```

结果

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

* `StoreProduct`

创建以下度量：

* `=Only(Store)`，计算销售产品的唯一商店。

* `=If(IsNull(Only(Store)), 'Multiple Stores', 'Single Store')`，计算产品是在单个商店销售还是在多个商店销售。

* `=Sum(Sales)`，计算产品总销售额。

Results table

| StoreProduct | Only(Store) | If(IsNull(Only(Store)), 'Multiple Stores', 'Single Store') | Sum(Sales) |
| --- | --- | --- | --- |
| Apple | A | Single Store | 330 |
| Banana | B | Single Store | 255 |
| Carrot | - | Multiple Stores | 165 |

结果表明，`Apples` 和 `Bananas` 仅在单个商店中销售，而 `Carrots`在多个商店中销售。

## 示例 - 创建单月记录表的进阶场景

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/only.htm)

#### 图表表达式

概述

此示例使用 `Only` 函数逐行显示一个月的记录表。为了实现这一点，使用集合分析来确定所需记录集的范围。集合分析至少需要一个度量，尽管由于我们实际上不需要聚合记录集合，我们可以有效地使用 `Only` 聚合函数来承载集合分析范围。

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

加载脚本包含：

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

* 前一个加载语句，通过使用 `MonthStart` 函数截断月份中的某一天，并返回每月 1 日的日期表示形式，从 `Date` 字段中衍生 `MonthYear` 字段。这一结果将提供给 `Date` 函数，以将显示格式设置为 `MMM YY` ，例如 `Jan 24` 。

* 数据表中有以下字段：

  * `Date`

  * `RecordID`

  * `StoreProduct`

  * `Sales`

  * `Store`

加载脚本

```
Example:
Load
*,
date(MonthStart (Date),'MMM YY') AS MonthYear
inline [
Date, RecordID, StoreProduct, Sales, Store
2024-01-01, 1, Apple, 100, A
2024-01-15, 2, Banana, 80, B
2024-01-30, 3, Carrot, 50, C
2024-02-05, 4, Apple, 120, A
2024-02-20, 5, Banana, 90, B
2024-02-28, 6, Carrot, 60, D
2024-03-10, 7, Apple, 110, A
2024-03-22, 8, Banana, 85, B
2024-03-31, 9, Carrot, 55, C
];
```

结果

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

* `MonthYear`

* `RecordID`

* `Date`

* `StoreProduct`

* `Store`

创建以下度量：

* `=Only({$<MonthYear={'$(=MaxString(MonthYear))'}>} Sales)`，对 `Sales` 值进行评估，并根据表格中的当前选择，只返回 `MonthYear` 为最新（最近）`MonthYear` 的值。美元符号 ($) 扩展使用 `MaxString` 函数 `$(=MaxString(MonthYear))` 执行内联计算，该函数返回最新 `MonthYear` 值的文本表示。

信息注释尝试基于数值表示筛选 `MonthYear`，例如使用 ` Max  ` 函数 `Max(MonthYear)`，将不会产生任何结果。集合分析仅基于任何双数据类型的文本表示应用筛选器选择； 具有数字和文本表示的数据类型，如 `Date`。

Results table

| MonthYear | RecordID | Date | StoreProduct | Only({$&lt;MonthYear={‘$(=MaxString(MonthYear))’}&gt;} Sales) |
| --- | --- | --- | --- | --- |
| Mar 24 | 7 | 2024-03-10 | Apple | 110 |
| Mar 24 | 8 | 2024-03-22 | Banana | 85 |
| Mar 24 | 9 | 2024-03-31 | Carrot | 55 |

`Only` 函数的输出生成一个记录表，默认显示数据中可用的最新或最近 `MonthYear` 的销售值。如果从 `MonthYear` 列中选择较早的月份，例如 `Feb 24`，则将显示该月的最新销售值。

## 了解详情

* [集合分析](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-analysis-expressions.htm)
* [定义聚合范围](https://help.qlik.com/zh-CN/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm)