# Only - チャート関数

Only() は、集計データに絞込結果が 1 つしか存在しない場合に値を返します。たとえば、単価 = 9 の製品を検索した場合、単価が 9 の製品が複数あると、NULL が返されます。

構文:

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

戻り値データ型： デュアル

引数

| 引数 | 説明 |
| --- | --- |
| expr | メジャーの対象となるデータが含まれている数式または項目。 |
| SetExpression | デフォルトでは、集計関数は選択されたレコード セットに対して集計を行います。Set 分析数式でレコード セットを定義することも可能です。 |
| TOTAL | 関数の引数の前に TOTAL の文字が配置されている場合、現在の軸の値に関連しているものだけでなく、現在の選択範囲内にあるすべての可能な値に対して計算が実行されます。つまりチャート軸は無視されます。<br><br>TOTAL [&lt;fld {.fld}&gt;] (ここで、TOTAL 修飾子の後には、1 つまたは複数の項目名のリストがチャート軸変数のサブセットとして続く) を使用して、合計絞込値のサブセットを作成できます。<br><br>[集計範囲の定義](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

ヒント メモ Only() は、サンプル データに可能な値が複数存在する場合に NULL を返すよう設定するために使用します。

例: チャートの数式

| 例 | 結果 |
| --- | --- |
| `Only(Category)` | コンテキスト内で一意である限り、`Category` を表示します。 |

## 例 - Only の基本

[](https://help.qlik.com/en-US/cloud-services/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)`、`UnitPrice` が `9` である唯一の `Product` を計算します。

* `=Only({<Product={DD}>} Customer)`、`DD` という `Product` を販売している唯一の `Customer` を計算します。

* `=Only({<UnitPrice={20}>} UnitSales)`、`UnitPrice` が `20` である `UnitSales` の数を計算します。

* `=Only({<UnitPrice={15}>} UnitSales)`、`UnitPrice = 15` である `UnitSales` の値を計算します。

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 | - |

この例では、次の点に注意してください。

* 最初の列は、`UnitPrice` が `9` である唯一の `Product` であるため、値 `BB` を返します。

* 2 番目の列は、`DD` という `Product` を販売している唯一の `Customer` であるため、`Betacab` を返します。

* 3 番目の列は、`UnitPrice = 20` である唯一の `UnitSales` の値であるため、`2` を返します。

* 4 番目の列は、`UnitPrice = 15` である単一の結果がないため、`NULL` を返します。このデータセットには、`UnitPrice =15` である `UnitSales` の値が 2 つあります。

## 例 - Only のシナリオ

[](https://help.qlik.com/en-US/cloud-services/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` は複数の店舗で販売されていることを示しています。

## 例 - 1 か月分のレコード テーブルを作成する高度なシナリオ

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

#### チャートの数式

概要

この例では、`Only` 関数を使用して、1 か月のレコードを行ごとに表示します。これを実現するには、set 分析を使用して、目的のレコード セットの範囲を指定します。set 分析には少なくとも 1 つのメジャーが必要ですが、実際にレコード セットを集計する必要はないため、`Only` 集計関数を効果的に使用して set 分析スコープをホストできます。

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 「`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` 値のテキスト表現を返します。

情報メモたとえば、` Max  ` 関数の `Max(MonthYear)` を使用して、数値表現に基づいて `MonthYear` をフィルタリングしようとしても、結果は返されません。set 分析では、`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` のような以前の月を選択すると、その月の最新の売上値が表示されます。

## 詳細を見る

* [set 分析](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-analysis-expressions.htm)
* [集計範囲の定義](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm)