# CalcDim - チャート関数

CalcDim() を軸の数式で使用すると、数式の内部処理方法に関するエンジンの自動解釈がオーバーライドされます。具体的には、この関数はデータ モデルに新しい内部項目が作成されるのを防ぎます。代わりに、アプリケーションで実行された選択は、元のデータ モデルの該当する項目の選択として扱われます。

この関数はロードスクリプトでは使用できません。さらに、システム パフォーマンスのベスト プラクティスとして、計算軸で使用される項目を、可能な場合はロード スクリプトを使用して論理項目としてロードすることが挙げられます。CalcDim() は、スクリプトから計算された項目をロードできないシナリオで、エンジンの動作を制御する方法を提供します。

Qlik Sense では、軸の式は既定でオンザフライの項目として扱われます。つまり、必要に応じて生成され、現在の選択バーに表示される実際の項目として扱われます。スクリプトの論理項目と同様に、この項目にもスクリプトによる選択が適用され、推論されます。

CalcDim() で囲まれた式は、QlikView でのすべての計算軸式と同じように動作します。つまり、計算された値を基に、元のソース項目の値に対してアドホックなマッピングが行われます。すべてのオンザフライ計算項目は、CalcDim() 関数を使用して計算軸に変換できます。これは、計算軸のほうが、対応するオンザフライ計算項目に比べて、データモデルに基づく要件が少なくて済むためです。この変換は望ましい場合があります。データ モデルによっては、オンザフライ計算項目の使用がある場合には可能でも、別の場合には不可能になることがあるため、すべての計算軸で同様の動作を保証するためです。

[計算された項目](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

構文:

CalcDim(expr)

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

引数

| 引数 | 説明 |
| --- | --- |
| expr | 軸として、または軸式内のセグメントとして使用される式。 |

## CalcDim の使用目的

CalcDim() は、軸式で呼び出す項目の処理方法を Qlik エンジンでさらに制御する必要がある場合に便利です。

既定では、Qlik Sense は、カスタム軸式を使用するときに、データ モデルで内部項目を作成して参照するかどうかを自動的に決定します。Qlik Sense は、可能な場合はいつでもこれらの内部項目を作成して使用します。不可能な場合は、式はそれが依存する既存のデータ モデル項目を参照して処理されます。

ユースケースによっては、この自動処理が必ずしも望ましいとは限りません。たとえば、軸式で変数を使用している場合、新しい項目の自動作成に問題が発生する可能性があります。この場合、CalcDim() を使用して、この方法を使わずに式を処理するようにします。

一般的なユース ケースをいくつか紹介します。

* QlikView のコンテンツを Qlik Sense に移行しましたが、計算軸に対する QlikView の処理方法を維持するとします。

* アプリケーションでの選択動作を簡素化したいと考えています。たとえば、新しい項目での選択として表示するのではなく、元のデータモデルの項目での選択として表示したい場合などです。

* このユースケースでは、一貫性とパフォーマンスのためにアドホックな式が必要です。たとえば、軸式にユーザーが操作可能な動的ビジュアライゼーションのパラメーター (調整可能な書式、しきい値、期間など) が含まれている場合です。

関数の例

| 例 | 結果 |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | この軸を使用するビジュアライゼーションでの選択は、データ モデルからの関連する Year 項目値の選択として処理され、表示されます。<br><br>逆に、式を CalcDim() で囲まないとします。この場合、次のようになります。<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>上記の式で選択を行うと、データ モデルにはない内部項目 =if(Year &lt; 2023, 'Older', Year) の選択として処理され、表示されます。 |

## 例 1 - 単純比較

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemFunctions/calcdim.htm)

#### チャートの数式と結果

概要

この例では、次を実行します。

* インライン テーブルを追加し、アプリケーションにデータをロードします。

* テーブルを作成して、データをビジュアライゼーションし、計算を実行します。

* テーブル内で選択を実行して、動作の違いを観察します。

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

ロード スクリプトはインライン テーブルをロードします。このテーブルには、個人の名を入力する項目と個人の姓を入力する項目の 2 つの項目が含まれます。

ロード スクリプト

```
Names:

Load * inline [
FirstName,LastName
John,Doe
Amanda,Honda
Amalia,Craig
Cart,Lynch
];
```

テーブルの作成

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

* FirstName

* LastName

次に、次の各式をテーブル内の軸として追加します。

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

テーブルは次のようになります。

結果例の Qlik SenseQlik Sense テーブル

| FirstName | LastName | =FirstName & ' ' & LastName | =CalcDim(FirstName & ' ' & LastName) |
| --- | --- | --- | --- |
| John | Doe | John Doe | John Doe |
| Amanda | Honda | Amanda Honda | Amanda Honda |
| Amalia | Craig | Amalia Craig | Amalia Craig |
| Cart | Lynch | Cart Lynch | Cart Lynch |

比較: 選択の実行

テーブルの =FirstName & ' ' & LastName 列で、値 John Doe を選択します。選択ツール バーで、値が =FirstName&' '&LastName という項目の値として選択されていることに注目してください。

選択をクリアします。

テーブルの =CalcDim(FirstName & ' ' & LastName) 列で、値 John Doe を選択します。選択ツール バーでは、FirstName と LastName という 2 つの異なる項目からの値として値が選択されます。

これら 2 つの式は、FirstName 項目と LastName 項目の連結という同じ情報を表します。違いは、CalcDim() がない場合、計算を保存するために合成項目が作成されることです。CalcDim() では、データ モデルの元の項目が計算軸の基礎として使用されます。

## 例 2 – 既定の動作を変更する実用的なユースケース

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemFunctions/calcdim.htm)

#### チャートの数式と結果

概要

この例では、静的な値への参照ではなく、変数を参照する動的な軸式を作成します。

この例では、次を実行します。

* インライン テーブルを追加し、アプリケーションにデータをロードします。

* 値を動的に保存するための変数を作成します。

* テーブルを作成して、データをビジュアライゼーションし、計算を実行します。

* テーブル内で選択を実行して、動作の違いを観察します。

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

ロード スクリプトはインライン テーブルをロードします。このテーブルには、日付項目と、生の日付から計算された項目 Year があります。

ロード スクリプト

```
SET DateFormat='MM/DD/YYYY';
						
Transactions:

Load *,

RowNo() as ID,
Year(date) as Year
;

Load * Inline
[
date,amount
'1/19/2022',37.23
'2/28/2022',88.27
'3/16/2022',53.80
'4/1/2022',82.06
'5/16/2022',87.21
'6/26/2022',45.89
'7/9/2022',36.23
'8/2/2022',76.11
'9/26/2022',84.21
'10/29/2022',67.67
'1/1/2023',100.49
'2/24/2023',99.47
'3/6/2023',50.02
'4/10/2023',2.05
'5/20/2023',75.64
'6/25/2023',98.11
'7/19/2023',30.00
'9/27/2023',76.11
'10/26/2023',43.21
'11/12/2023',135.41
'1/15/2024',67.24
];
```

変数の作成

データをロードしてシートを開きます。vCutoffYear という名前の変数を作成し、次の [定義] を指定します。 2023

テーブルの作成

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

* date

* Year

* amount

次に、次の各式をテーブル内の軸として追加します。

* =if(Year &lt; $(vCutoffYear), 'Older', Year)

* =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year))

テーブルは次のようになります。

結果例の Qlik SenseQlik Sense テーブル

| date | Year | amount | if(Year &lt; $(vCutoffYear), 'Older', Year) | =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) |
| --- | --- | --- | --- | --- |
| 1/19/2022 | 2022 | 37.23 | Older | Older |
| 2/28/2022 | 2022 | 88.27 | Older | Older |
| 3/16/2022 | 2022 | 53.80 | Older | Older |
| 4/1/2022 | 2022 | 82.06 | Older | Older |
| 5/16/2022 | 2022 | 87.21 | Older | Older |
| 6/26/2022 | 2022 | 45.89 | Older | Older |
| 7/9/2022 | 2022 | 36.23 | Older | Older |
| 8/2/2022 | 2022 | 76.11 | Older | Older |
| 9/26/2022 | 2022 | 84.21 | Older | Older |
| 10/29/2022 | 2022 | 67.67 | Older | Older |
| 1/1/2023 | 2023 | 100.49 | 2023 | 2023 |
| 2/24/2023 | 2023 | 99.47 | 2023 | 2023 |
| 3/6/2023 | 2023 | 50.02 | 2023 | 2023 |
| 4/10/2023 | 2023 | 2.05 | 2023 | 2023 |
| 5/20/2023 | 2023 | 75.64 | 2023 | 2023 |
| 6/25/2023 | 2023 | 98.11 | 2023 | 2023 |
| 7/19/2023 | 2023 | 30.00 | 2023 | 2023 |
| 9/27/2023 | 2023 | 76.11 | 2023 | 2023 |
| 10/26/2023 | 2023 | 43.21 | 2023 | 2023 |
| 11/12/2023 | 2023 | 135.41 | 2023 | 2023 |
| 1/15/2024 | 2024 | 67.24 | 2024 | 2024 |

比較 (パート1): CalcDim() なしの動作

上のテーブルでは、2 つの計算軸の列に違いはありません。

テーブルの if(Year &lt; $(vCutoffYear), 'Older', Year) 列で、値 2023 を選択します。選択ツール バーで、値が =if(Year&lt;2023,'Older',Year) という項目の値として選択されていることに注目してください。

次に、vCutoffYear 変数の [定義] を2024 に変更します。選択項目 =if(Year&lt;2023,'Older',Year) は同じで、選択された値 2023 を保持していますが、テーブルのデータは変更されていることに注意してください。値 2023 は値 Older に変更されました。 if(Year &lt; $(vCutoffYear), 'Older', Year) 列で Older を選択すると、新しい次の項目で Older が選択されます。=if(Year&lt;2024,'Older',Year)。

要するに、vCutoffYear 変数の値ごとに新しい項目が内部的に作成されます。同時選択と変更選択を扱う場合、この動作は望ましくない可能性があり、データの解釈が複雑になる可能性があります。

比較 (パート2): CalcDim() ありの動作

CalcDim() で囲まれていない場合の式の動作を確認したので、アプリケーション内のすべての選択を解除します。変数 vCutoffYear を値 2023 にリセットします。

テーブルの =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) 列で、値 2023 を選択します。選択ツール バーで、値が基になる項目 Year からの値として選択されていることに注目してください。

次に、vCutoffYear 変数の [定義] を2024 に変更します。選択項目 Year は同じで、選択された値 2023 が保持され、CalcDim() がない場合と同じようにテーブル内のデータは変更されています。ただし、=CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) 列で Older を選択すると、Year では値 2024 が選択されます。

CalcDim() で囲まれた計算軸で行うすべての選択は、元のデータ モデルから参照される基礎フィールドの選択として反映されます。これにより、データの解釈が簡素化され、ユーザーが分析コンテンツを使用するときに、選択ツール バーに雑然とした複雑な式が表示されるのを防ぐことができます。

## 詳細を見る

* [計算された項目](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

* [計算軸](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)