# 內部和外部集合運算式

集合運算式可用於彙總函數內部和外部，並以大括弧括住。

使用彙總函數內部的集合運算式時，看起來會是如此：

範例： 內部集合運算式

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

若您的運算式有多個彙總並且想要避免在每個彙總函數寫入相同的集合運算式，請使用彙總函數外部的集合運算式。

若您使用外部集合運算式，必須置於範圍開頭。

範例： 外部集合運算式

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

若您使用彙總函數外部的集合運算式，也可以在現有的主量值套用。

範例： 套用至主量值的外部集合運算式

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

彙總函數外部使用的集合運算式會影響整個運算式，除非這以括弧括住，然後括弧定義範圍。在下面的語彙範圍範例中，集合運算式僅適用於括弧內部的彙總。

範例： 語彙範圍

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

## 規則

#### 語彙範圍

集合運算式會影響整個運算式，除非這以括弧括住。若如此，括弧會定義語彙範圍。

#### 位置

集合運算式必須置於語彙範圍開頭。

#### 內容

內容是與運算式相關的選項。傳統上，內容一直是目前選項的預設狀態。但若物件設定為替代狀態，則內容是目前選項的替代狀態。

您也能以外部集合運算式的形式定義內容。

#### 繼承

內部集合運算式優先於外部集合運算式。若內部集合運算式包含集合識別碼，則會取代內容。否則，將會合併內容和集合運算式。

* {$&lt;SetExpression&gt;} - 覆寫外部集合運算式

* {&lt;SetExpression&gt;} - 與外部集合運算式合併

#### 元素集合指派

元素集合指派決定如何合併兩個選項。若使用一般等號，則以內部集合運算式中的選項為優先。否則，將會使用隱含的集合運算子。

* {&lt;Field={value}&gt;} - 此內部選項會取代 “Field” 中的任何外部選項。

* {&lt;Field+={value}&gt;} - 此內部選項使用聯集運算子與 “Field” 中的外部選項合併。

* {&lt;Field\*={value}&gt;} - 此內部選項使用交集運算子與 “Field” 中的外部選項合併。

#### 多個步驟中的繼承

繼承可發生於多個步驟。範例：

* 目前選項 → Sum(Amount)

  彙總函數將會使用內容，在此為目前選項。

* 目前選項 → {&lt;Set1&gt;} Sum(Amount)

  Set1 將繼承自目前選項，結果將會是彙總函數的內容。

* 目前選項 → {&lt;Set1&gt;} ({&lt;Set2&gt;} Sum(Amount))

  Set2 將繼承自 Set1，這依次繼承自目前選項，結果將會是彙總函數的內容。

#### Aggr() 函數

Aggr() 函數建立具有兩個獨立彙總的巢狀彙總。在以下範例中，會為 Dim 的每個值計算 Count()，並使用 Sum() 函數彙總產生的陣列。

範例：

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

Count() 是內部彙總，而 Sum() 是外部彙總。

* 內部彙總沒有從外部彙總繼承任何內容。

* 內部彙總從 Aggr() 函數繼承內容，這可能包含集合運算式。

* Aggr() 函數和外部彙總函數都從外部集合運算式繼承內容。