# Top - チャート関数

Top() テーブルの列セグメント内の最初 (最上部) の行の数式を評価します。どの行が計算されるかは、offset 値により決定されますが、デフォルトは最上部の行です。テーブル以外のチャートでは、Top() 評価はチャートのストレート テーブルに相当する現在の列の最初の行を評価します。

構文:

Top([TOTAL] expr [ , offset [,count ]])

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

引数

| 引数 | 説明 |
| --- | --- |
| expr | メジャーの対象となるデータが含まれている数式または項目。 |
| offset | offset の n を 1 より大きい値にすると、数式の評価が先頭行から n 行下に移動します。<br><br>offset が負の値である場合、Top 関数は、相応する正の offset 値が付いた Bottom 関数と同様に機能します。 |
| count | 3 番目のパラメータである count を 1 より大い値に設定すると、この関数は count 値の範囲、つまり現在の列セグメントの最後の count 行の各値を返します。 この形式では、特別な範囲関数の引数として関数を使用できます。 [範囲関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/RangeFunctions/RangeFunctionsInCharts.htm) |
| TOTAL | テーブルが 1 軸の場合、または TOTAL 修飾子が引数として使用される場合は、現在の列セグメントは常に列全体と等しくなります。<br><br>[集計範囲の定義](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/define-aggregation-scope.htm) |

情報メモ列セグメントは、現在のソート順で軸に同じ値を持つ連続したセルのサブセットとして定義されます。レコード間チャート関数は、チャートのストレート テーブルに相当する右端の軸を除外して列セグメントで実行されます。チャートに軸が 1 つしかない場合、または TOTAL 修飾子が指定されていると、数式はテーブル全体を評価します。

情報メモテーブルまたはテーブルに相当するアイテムに複数の縦軸が含まれる場合、現在の列セグメントには、項目間ソート順の最後の軸を表示する列を除くすべての軸列の現在行と同じ値を持つ行だけが含まれます。

制限事項:

* 再帰呼び出しは NULL を返します。

* チャートの式いずれかにこのチャート関数が使用されている場合、チャートの y 値のソート、またはテーブルの式列ごとのソートは許可されません。よって、これらのソート機能は自動的に無効になります。ビジュアライゼーションまたはテーブルでこのチャート関数を使用すると、ビジュアライゼーションのソートは、レコード間の関数に対するソートされた入力の状態に戻ります。

例: チャートの数式

| 例 | 結果 |
| --- | --- |
| `Top( Sum(Sales) )` | テーブル内の列セグメントの最初の (一番上の) 行の `Sales` の値を返します。 |

## 例 - Top の基本

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

#### チャートの数式

概要

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

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

* 「`Example`」というデータ テーブルにロードされるデータセット。

* データ テーブル内の次の項目:

  * `Year`

  * `Sales`

ロード スクリプト

```
Example:
LOAD * INLINE [
Year, Sales
2019, 1000
2020, 1500
2021, 1200
2022, 1800
2023, 1700
];
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:

* `Year`

次のメジャーを作成します:

* `=Sum(Sales)`、年間売上高を見つけます。

* `=Top(Sum(Sales))`、テーブルの列の最初の行 (一番上の行) である、最初の年の売上高を見つけます。

* `=Sum(Sales) - Top(Sum(Sales))`、現在の行の `Sales` 値と列の最初の行 (一番上の行) の値の差異を計算します。

* `=Sum(Sales)-Top(Sum(Sales), 3)`、現在の行の売上値と上から 3 行目の値の差異を計算します。

* `=(Sales - Top(Sales)) / Top(Sales)`、最初の行と比較した `Sales` の変化を比率/パーセンテージとして返します。 この値をパーセンテージで表示するには、 [数値書式] で、 [数値] &gt; [書式設定 [シンプル]] &gt; [12.34%] を選択します。

テーブルを `Year` の軸で昇順にソートします。

結果テーブル

| Year | Sum(Sales) | Top(Sum(Sales)) | Sum(Sales) - Top(Sum(Sales)) | Sum(Sales)-Top(Sum(Sales), 3) | (Sales - Top(Sales)) / Top(Sales) |
| --- | --- | --- | --- | --- | --- |
| Totals | 7200 | 1000 | 6200 | 6000 | - |
| 2019 | 1000 | 1000 | 0 | -200 | 0.00% |
| 2020 | 1500 | 1000 | 500 | 300 | 50.00% |
| 2021 | 1200 | 1000 | 200 | 0 | 20.00% |
| 2022 | 1800 | 1000 | 800 | 600 | 80.00% |
| 2023 | 1700 | 1000 | 700 | 500 | 70.00% |

結果を見ると、現在の期間の `Sales` 値を一番上 (または最初) の期間と比較できます。

* `Sum(Sales) - Top(Sum(Sales))` メジャーは、現在の期間と最初の期間を比較して、`Sales` 値の変化を返します。

* `Sum(Sales)-Top(Sum(Sales), 3)` メジャーは、現在の行の `Sales` の合計から上から 3 番目の期間を差し引いた値を返します。

* `=(Sales - Top(Sales)) / Top(Sales)` メジャーは、最初の期間と比較した `Sales` の変化をパーセンテージで返します。

ヒント メモこの関数は、棒グラフなどテーブル以外のチャートでも使用できます。

次の手順を実行します。

棒グラフを作成し、この項目を軸として追加します。

* `Year`

次のメジャーを作成します:

* `=Sum(Sales)- Top(Sum(Sales))`、現在の期間と一番上の期間の売上高の差異を返します。

Top 関数の結果を示す棒グラフ

Top 関数の結果を示す棒グラフ

TopTop 関数の結果を示す棒グラフ ![現在の期間と一番上 (または最初) の期間の売上高の差異を示す棒グラフ。](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-top-example.png)

棒グラフで `Top` 関数を使用すると、現在の期間と一番上 (または最初) の期間の売上の差異を視覚的に比較できます。

## 例 - Top のシナリオ

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

#### チャートの数式

概要

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

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

* 「`Example`」というデータ テーブルにロードされるデータセット。

* データ テーブル内の次の項目:

  * `OrderID`

  * `Product`

  * `SalesValue`

  * `OrderDate`

ロード スクリプト

```
Example:
LOAD * INLINE [
OrderID, Product, SalesValue, OrderDate
1, "Product A", 500, '2023-01-10'
2, "Product B", 300, '2023-01-15'
3, "Product C", 450, '2023-02-01'
4, "Product D", 700, '2023-02-20'
5, "Product E", 350, '2023-03-05'
];
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:

* `Product`

次のメジャーを作成します:

* `=RangeAvg(Top(Sum(SalesValue),1,3))` は上位 3 行の平均を返します。

* `=Sum(SalesValue) - RangeAvg (Top(Sum(SalesValue),1,3))` は、現在の行と上から 3 行の平均との差異を計算します。

* `=Sum(SalesValue)` は現在の行の合計 `SalesValue` を計算します。

結果テーブル

| Product | RangeAvg(Top(Sum(SalesValue),1,3)) | Sum(SalesValue) - RangeAvg (Top(Sum(SalesValue),1,3)) | Sum(SalesValue) |
| --- | --- | --- | --- |
| Totals | 416.67 | 1883.33 | 2300 |
| 2019 | 416.67 | 83.33 | 500 |
| 2020 | 416.67 | --116.67 | 300 |
| 2021 | 416.67 | 33.33 | 450 |
| 2022 | 416.67 | 283.33 | 700 |
| 2023 | 416.67 | -66.67 | 350 |

結果は、`RangeSum` と `Top` 関数の組み合わせを使用して、売上値を分析および比較する方法を示しています。

## 例: Top を使用したチャートの数式

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

#### チャートの数式

概要

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

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

* `Monthnames` と `Sales2013` と呼ばれる 2 つのデータ テーブル。

ロード スクリプト

```
Monthnames:
LOAD *, Dual(MonthText,MonthNumber) as Month INLINE [
MonthText, MonthNumber
Jan, 1
Feb, 2
Mar, 3
Apr, 4
May, 5
Jun, 6
Jul, 7
Aug, 8
Sep, 9
Oct, 10
Nov, 11
Dec, 12
];

Sales2013:
Crosstable (MonthText, Sales) LOAD * inline [
Customer|Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec
Astrida|46|60|70|13|78|20|45|65|78|12|78|22
Betacab|65|56|22|79|12|56|45|24|32|78|55|15
Canutility|77|68|34|91|24|68|57|36|44|90|67|27
Divadip|57|36|44|90|67|27|57|68|47|90|80|94
] (delimiter is '|'); 
                                
```

結果

データをロードしてシートを開きます。新しいテーブルを作成し、この項目を軸として追加します:

* `Customer`

次のメジャーを作成します:

* `=Sum(Sales)`、売上の合計を計算します。

* `=Top(Sum(Sales))`、一番上の行に `Customer` の売上合計を表示します。

* `=Sum(Sales)+Top(Sum(Sales))`、現在の `Customer` の `Sum(Sales)` 値と一番上の行の `Customer` を加算します。

* `=Sum(Sales)+Top(Sum(Sales), 3)`、現在の `Customer` の `Sum(Sales)` 値と、上から 3 番目の `Customer` の値を加算します。

結果テーブル

| Customer | Sum(Sales) | Top(Sum(Sales)) | Sum(Sales)+Top(Sum(Sales)) | Sum(Sales)+Top(Sum(Sales), 3) |
| --- | --- | --- | --- | --- |
| Totals | 2566 | 587 | 3153 | 3249 |
| Astrida | 587 | 587 | 1174 | 1270 |
| Betacab | 539 | 587 | 1126 | 1222 |
| Canutilty | 683 | 587 | 1270 | 1366 |
| Divadip | 757 | 587 | 1344 | 1440 |

メジャー `Top(Sum(Sales))` は、一番上の行の値 `Astrida` であるため、すべての行に対して `587` を返します。

メジャー `Sum(Sales)+Top(Sum(Sales))` の場合、行 `Betacab` は `1126` を返します。これは、`Betacab` の `Sum(Sales)` 値と `Astrida` (一番上の行の `Customer`) を追加した結果です。

メジャー `Sum(Sales)+Top(Sum(Sales), 3)` の場合、引数 `offset` は `3` に設定されます。この数式は、現在の行の `Sum(Sales)` 値と上から 3 番目の行の `Canutility` 値を加算します。たとえば、顧客 `Divadip` に対しては、値 `1440` が返されます。これは、`Divadip` の `Sum(Sales)` 値と、`Canutility` の `SumSales` を加算した結果です (`757` + `683`)。

## 詳細を見る

* [Bottom - チャート関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/bottom.htm)
* [Above - チャート関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/InterRecordFunctions/above.htm)
* [Sum - チャート関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/BasicAggregationFunctions/sum.htm)
* [RangeAvg スクリプトおよびチャート関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/RangeFunctions/rangeavg.htm)
* [範囲関数](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/RangeFunctions/RangeFunctionsInCharts.htm)