# Only — функция диаграммы

Only() возвращает значение, если есть только один возможный результат, который может быть получен из агрегированных данных. Например, при поиске одного продукта, где стоимость единицы = 9, будет возвращено значение NULL, если стоимость единицы 9 есть у нескольких продуктов.

Синтаксис:

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/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

Примечание к подсказкеИспользуйте функцию Only(), если необходимо получить значение NULL в случае нескольких возможных значений в данных образца.

Пример: выражение диаграммы

| Пример | Результат |
| --- | --- |
| `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`, который продает `Product` под названием `DD`.

* `=Only({<UnitPrice={20}>} UnitSales)`, чтобы подсчитать количество `UnitSales`, где `UnitPrice`=`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`, потому что это единственный элемент `Product`, который имеет `UnitPrice`=`9`.

* Второй столбец возвращает `Betacab`, поскольку это единственный клиент `Customer`, который продает `Product` под названием `DD`.

* Третий столбец возвращает значение `2`, потому что это единственный элемент `UnitSales`, где `UnitPrice = 20`.

* Четвертый столбец возвращает `NULL`, потому что нет ни одного результата, где `UnitPrice = 15`. В этом наборе данных есть два значения `UnitSales`, где `UnitPrice =15`.

## Пример. Сценарий использования функции Only

[](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`.

* Предшествующий оператор загрузки, который получает поле `MonthYear` на основе поля `Date` путем усечения дня месяца с помощью функции `MonthStart`, и возвращает представление даты 1-го числа каждого месяца. Этот результат передается в функцию `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`, исходя из текущей выборки в таблице. Pасширение со знаком доллара ($) выполняет встроенное вычисление с помощью функции `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/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-analysis-expressions.htm)
* [Определение объема агрегирования](https://help.qlik.com/ru-RU/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm)