# Expressões de conjunto internas e externas

Expressões de conjunto podem ser usadas dentro e fora das funções de agregação e são colocadas entre colchetes.

Quando você usa uma expressão de conjunto dentro de uma função de agregação, ela pode ter a seguinte aparência:

Exemplo: Expressão de conjunto interna

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

Use uma expressão de conjunto fora da função de agregação se você tiver expressões com várias agregações e quiser evitar escrever a mesma expressão de conjunto em cada função de agregação.

Se você usar uma expressão de conjunto externa, ela deverá ser colocada no início do escopo.

Exemplo: Expressão de conjunto externa

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

Se você usar uma expressão de conjunto fora da função de agregação, também poderá aplicá-la em medidas mestre existentes.

Exemplo: Expressão de conjunto externa aplicada à medida mestre

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

Uma expressão de conjunto usada fora das funções de agregação afeta toda a expressão, a menos que esteja entre colchetes, que então definem o escopo. No exemplo de escopo léxico abaixo, a expressão de conjunto apenas é aplicada à agregação dentro dos colchetes.

Exemplo: Definição do escopo lexical

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

## Regras

#### Escopo lexical

A expressão de conjunto afeta a expressão inteira, a menos que esteja entre colchetes. Nesse caso, os colchetes definem o escopo lexical.

#### Posição

A expressão de conjunto deve ser colocada no início do escopo lexical.

#### Contexto

O contexto é a seleção que é relevante para a expressão. Tradicionalmente, o contexto sempre foi o estado padrão da seleção atual. Porém, se um objeto estiver definido em um estado alternativo, o contexto será o estado alternativo da seleção atual.

Você também pode definir um contexto na forma de uma expressão de conjunto externa.

#### Herança

Expressões de conjunto internas têm precedência sobre expressões de conjunto externas. Se a expressão de conjunto interna contiver um identificador de conjunto, ela substituirá o contexto. Caso contrário, o contexto e a expressão de conjunto serão mesclados.

* {$&lt;SetExpression&gt;}: substitui a expressão de conjunto externa

* {&lt;SetExpression&gt;}: é mesclado com a expressão de conjunto externa

#### Atribuição de conjunto de elementos

A atribuição de conjunto de elementos determina como as duas seleções são mescladas. Se um sinal de igual normal for usado, a seleção na expressão do conjunto interno terá precedência. Caso contrário, o operador de conjunto implícito será usado.

* {&lt;Field={value}&gt;}: essa seleção interna substitui qualquer seleção externa em “Field”.

* {&lt;Field+={value}&gt;}: essa seleção interna é mesclada com a seleção externa em “Field”, usando o operador de união.

* {&lt;Field\*={value}&gt;}: essa seleção interna é mesclada com a seleção externa em “Field”, usando o operador de interseção.

#### Herança em várias etapas

A herança pode ocorrer em várias etapas. Exemplos:

* Seleção atual → Sum(Amount)

  A função de agregação usará o contexto, que aqui é a seleção atual.

* Seleção atual → {&lt;Set1&gt;} Sum(Amount)

  Set1 herdará da seleção atual, e o resultado será o contexto da função de agregação.

* Seleção atual → {&lt;Set1&gt;} ({&lt;Set2&gt;} Sum(Amount))

  Set2 herdará de Set1, que, por sua vez, herdará da seleção atual, e o resultado será o contexto da função de agregação.

#### A função Aggr()

A função Aggr() cria uma agregação aninhada que tem duas agregações independentes. No exemplo abaixo, um Count() é calculado para cada valor de Dim, e a matriz resultante é agregada usando a função Sum().

Exemplo:

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

Count() é a agregação interna e Sum() é a agregação externa.

* A agregação interna não herda nenhum contexto da agregação externa.

* A agregação interna herda o contexto da função Aggr(), que pode conter uma expressão de conjunto.

* Tanto a função Aggr() quanto a função de agregação externa herdam o contexto de uma expressão de conjunto externa.