# 内部 set 数式と外部 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 から継承され、結果は集計関数のコンテキストとなります。

#### 内部および外部の set 数式のチェーンの継承

複雑なチェーンで複数の set 数式を使用する場合、特に外部の set 数式に他の外部の set 数式や内部の set 数式が続く場合は、継承に関する追加の考慮事項があります。詳細については、「[複数の外部および内部の set 数式のチェーン](https://help.qlik.com/ja-JP/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#Chains)」を参照してください。

#### Aggr() 関数

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

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

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

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

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

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

## 複数の外部および内部の set 数式のチェーン

外部の set 数式は複数使うことができます。次の例では、2 つの外部 set 数式と 1 つの内部 set 数式があります。

{&lt;Year={2021}&gt;} {&lt;Region={"Europe"}&gt;} Sum( {$&lt;Product={"XI345"}&gt;} Sales )

set 数式は左から右へ適用されます。つまり、set 数式同士が相反するデータセットを指定していた場合、右側の式が優先されます。

外部 set 数式はこのようにいくつでもチェーンできますが、内部 set 数式は 1 つだけに制限されています。内部 set 数式を複数並べてもエラーにはなりませんが、評価時には最も右側のものだけが使用されます。

### set 数式の継承

集計式の中で複数の set 数式がチェーンされている場合、それらは左から右へ順番に評価されます。各 set 数式の結果は、軸ごとに 1 つ、または複数のセットのグループとなります。セットは、次の set 数式へと渡され、そこでさらに変更が加えられ、連鎖して処理されていきます。

各 set 数式が異なる軸で動作している限り、それらの間で競合は発生せず、すべてのセットはチェーンの最後まで保持されます (集計時に適用されます)。ただし、set 数式内の軸が空のセット (データなし) を返す場合は、このルールに例外が生じることがあります。詳細については、次を参照してください。

* [空の選択セット](https://help.qlik.com/ja-JP/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#Empty)

* [暗黙的な選択セットのクリア](https://help.qlik.com/ja-JP/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#Implicit)

### 空の選択セット

set 数式の中で軸が評価される際、そのセットにデータが含まれていない場合があります。これを空のセットと呼びます。空のセットは、次のようなさまざまな状況で発生する可能性があります。

* 式の定義が誤っている場合。例: 2025 年の値を探そうとしたときに、set 数式 {&lt;OrderYear={‘2025’}&gt;} ではなく 、誤って {&lt;OrderYear={‘0025’}&gt;} と記述する。

* 分析中に、式で参照されている軸とは異なる軸が選択された場合。この選択により、set 数式の軸にデータが存在しなくなることがあります。例: ユーザーが Region='Europe' を選択し、set 数式で {&lt;ProductCategory={‘Shirts’}&gt;} Sum (Sales) をフィルターするとします。ヨーロッパでシャツが販売されていない場合、set 数式には空のセットが含まれます。

* 式の中で明示的に空のセットが指定されている場合。これは一般的ではなく、実用的でもありませんが、技術的には可能です。例: {&lt;Year={}&gt;}

### 暗黙的な選択セットのクリア

set 数式を適用した後の結果が軸の 1 つに対して空のセットである場合 ([空の選択セット](https://help.qlik.com/ja-JP/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#Empty) を参照)、その後にさらに 1 つの set 数式が適用されると、その次の set 数式が適用される直前にその軸の選択がクリアされます (完全なセットに戻されます)。選択セットのクリアとは、すべての値が含まれることを意味します。ただし、このクリアは、空セットが生成された set 数式の後に、1 つ以上の追加の外部 set 数式が適用されている場合にのみ実行されます。

選択セットがクリアされる状況の例を次に示します。

```
{<Year={}>} {<Region={"Europe"}>} Sum( Sales )
```

Year={} は、Year の軸に対して空のセットを作成します。これにより、Year の選択セットが、Region={Europe} を含む次の set 数式に渡されるときにクリアされます。選択のクリアは 1 つの軸に対してのみ実行されます。他の軸のセット (同じ set 数式内のセットを含む) は、変更されずにそのまま引き継がれます。

選択セットのクリアにおける、別の例を次に示します。

```
{<Year={}, Product={"XI345"}>} {<Region={"Europe"}>} Sum(Sales)
```

上記の例では、次のことが起こります。

* 選択セット Product={"XI345"} と Region={"Europe"} が適用されます。

* Year={} は適用されません。これは、最後の set 数式 ({&lt;Region={"Europe"}&gt;}) が適用される際に、セットがクリアされるためです。

set 数式の構成要素を最後の外部 set 数式に移動すると、暗黙的なクリアは実行されなくなります。次の例を参照してください。

```
{<Product={"XI345"}>} {<Year={}, Region={"Europe"}>} Sum(Sales)
```

ここでは、Year 式をチェーン内の最後の set 数式に移動しています。これにより、暗黙的なクリアは実行されず、Year 軸の空のセットが実際に Sum 集計に使用されます。

いずれの場合でも、選択セットがクリアされると望ましくない動作が発生する可能性があります。分析エクスペリエンスを向上させ、set 数式のチェーンを簡単に記述できるようにするには、空セット保持フラグを使用します。詳細については、「[空セット保持フラグ (外部の set 数式)](https://help.qlik.com/ja-JP/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#Flag)」を参照してください。

## 空セット保持フラグ (外部の set 数式)

& 記号 (空セット保持フラグ) を使用すると、外部の set 数式の評価モデルを簡素化できます。例:

```
{& <Year={}, Product={XI345}>} {<Region={Europe}>} Sum( Sales )
```

この例では、Year={} は Year の空の選択セットを定義しています。& 記号がない場合、{&lt;Region={Europe}&gt;} 式によって Year の空の選択セットがクリアされ、すべてのデータが集計の計算に使用されることになります。& 記号を使用することで、集計で Year の空の選択セットを尊重するように強制し、よりわかりやすい出力を生成します。

空セット保持フラグの詳細については、「[空セット保持フラグ](https://help.qlik.com/ja-JP/qlikview/September2026/Subsystems/Client/Content/QV_QlikView/ChartFunctions/SetAnalysis/empty-set-preserve-flag.htm)」を参照してください。