# 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 externo.

#### Herança

Expressões de conjunto interno têm precedência sobre expressões de conjunto externo. Se a expressão de conjunto interno contiver um identificador de conjunto, ela substituirá o contexto definido na expressão de conjunto externo. Caso contrário, as expressões de conjunto interno e externo são ambas avaliadas.

Exemplo 1: Expressão de conjunto interno com identificador de conjunto

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

Na expressão acima, a expressão de conjunto interno Count({1} distinct OrderNumber) consiste no identificador de conjunto {1}. Quando essa expressão de conjunto interno é avaliada, o escopo definido na expressão de conjunto externo {&lt;Year={2023}&gt;} não é aplicado.

Exemplo 2: Expressões de conjunto interno sem identificadores de conjunto

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

Na expressão acima, as expressões de conjunto interno Sum ({&lt;Status={'Confirmed'}&gt;} Sales\_Stream1) e Sum ({&lt;UpdatedStatus={'Confirmed'}&gt;} Sales\_Stream2) não contêm identificadores de conjunto. Portanto, a expressão de conjunto externo {&lt;Year={2023}&gt;} e as duas expressões de conjunto interno são aplicadas ao avaliar o resultado.

#### 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 externo.

## Saiba mais

* [Expressões de conjunto internas e externas](https://help.qlik.com/pt-BR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/set-expressions-inner-and-outer.htm#)

* [Expansões de sinal de dólar](https://help.qlik.com/pt-BR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/dollar-sign-expansions.htm)

* [Criando uma variável](https://help.qlik.com/pt-BR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Variables/create-variable-using-dialog.htm)

* [Diálogo Variáveis](https://help.qlik.com/pt-BR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Sheets/variables-dialog.htm)

* [Expressões de conjunto externo e expansões de sinal de dólar](https://help.qlik.com/pt-BR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/SetAnalysis/outer-set-expression-dollar-sign-expansion.htm)