# 内部と外部の set 数式

set 数式は中括弧で囲まれた集計関数内外で使用できます。

集計関数内で set 数式を使用すると、次のようになります。

内部の set 数式

```
Sum( {$<Year={2021}>} Sales )
```

複数の集計を行う式があり、すべての集計関数で同じ set 数式を書くことを回避する場合、集計関数の外で set 数式を使用します。

外部の set 数式を使用する場合、スコープの始めに配置する必要があります。

外部の set 数式

```
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
```

集計関数の外で set 数式を使用する場合、既存のマスター メジャーに適用することもできます。

マスター メジャーに適用された外部の set 数式

```
{<Year={2021}>} [Master Measure]
```

集計関数の外で使用される set 数式は、括弧で囲まれていない限り、式全体に影響を及ぼします。以下の語彙範囲の例では、set 数式が括弧内の集計にのみ適用されます。

語彙範囲

```
( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)
```

## ルール

#### 語彙範囲

set 数式は、括弧で囲まれていない限り、数式全体に影響します。その場合、括弧が語彙範囲を定義します。

#### 位置

set 数式は、語彙範囲の最初に配置する必要があります。

#### コンテキスト

コンテキストは、数式に関連性のある選択です。従来、コンテキストは常に現在の選択状態を既定としています。しかしオブジェクトが代替ステートに設定されている場合、コンテキストは現在の選択状態の代替ステートとなります。

外部の set 数式の形式でコンテキストを定義することもできます。

#### 継承

内部の set 数式は、外部の set 数式よりも優先されます。内部の set 数式に set 識別子が含まれている場合、外部の set 数式で定義されたコンテキストがオーバーライドされます。それ以外の場合は、内部の set 数式と外部の set 数式の両方が評価されます。

例1： set 識別子を持つ内部の set 数式

{&lt;Year={2023}&gt;} Sum(Sales) / Count({1} distinct OrderNumber)

上記の数式では、内部の set 数式 Count({1} distinct OrderNumber) は set 識別子 {1} で構成されています。この内部の set 数式が評価されるとき、外部の set 数式 {&lt;Year={2023}&gt;} で定義されたスコープは適用されません。

例2： set 識別子を持たない内部の set 数式

{&lt;Year={2023}&gt;} Sum ({&lt;Status={'Confirmed'}&gt;} Sales\_Stream1) + Sum ({&lt;UpdatedStatus={'Confirmed'}&gt;} Sales\_Stream2)

上記の数式では、内部の set 数式 Sum ({&lt;Status={'Confirmed'}&gt;} Sales\_Stream1) と Sum ({&lt;UpdatedStatus={'Confirmed'}&gt;} Sales\_Stream2) には set 識別子が含まれていません。したがって、結果を評価するときには、外部の set 数式 {&lt;Year={2023}&gt;} と両方の内部の set 数式がすべて適用されます。

#### 要素セットの割り当て

要素セットの割り当ては、2 つの選択肢がどのようにマージされるかを決定します。通常の等号が使用される場合、内部の set 数式の選択が優先されます。そうでない場合、暗黙の set 演算子が使用されます。

* {&lt;Field={value}&gt;} - この内部選択肢は “Field” の任意の外部選択肢を置換します。

* {&lt;Field+={value}&gt;} - この内部選択肢は、union 演算子を使用して “Field” の外部選択肢とマージされます。

* {&lt;Field\*={value}&gt;} - この内部選択肢は、intersection 演算子を使用して “Field” の外部選択肢とマージされます。

#### 複数のステップの継承

継承は複数のステップで発生する可能性があります。例:

* 現在の選択 → Sum(Amount)

  集計関数はコンテキストを使用します。ここでは現在の選択です。

* 現在の選択 → {&lt;Set1&gt;} Sum(Amount)

  Set1 は現在の選択から継承され、結果は集計関数のコンテキストとなります。

* 現在の選択 → {&lt;Set1&gt;} ({&lt;Set2&gt;} Sum(Amount))

  Set2 は Set1 から継承され、結果は集計関数のコンテキストとなります。

#### Aggr() 関数

Aggr() 関数は、2 つの独立した集計を持つネストされた集計を作成します。下の例では、Count() が Dim の各値に対して計算され、算出された配列は Sum() 関数を使用して集計されます。

```
Sum(Aggr(Count(X),Dim))
```

Count() は内部集計であり、Sum() は外部集計です。

* 内部集計は、外部集計からどのコンテキストも継承しません。

* 内部集計は Aggr() 関数からコンテキストを継承しますが、これには set 数式が含まれている可能性があります。

* Aggr() 関数と外部集計関数の両方とも、外部の set 数式からコンテキストを継承します。

## 詳細を見る

* [内部と外部の set 数式](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#)

* [ドル記号展開](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/dollar-sign-expansions.htm)

* [変数の作成](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Variables/create-variable-using-dialog.htm)

* [変数ダイアログ](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Sheets/variables-dialog.htm)

* [外部の set 数式とドル記号展開](https://help.qlik.com/ja-JP/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/outer-set-expression-dollar-sign-expansion.htm)