Expressões de conjunto interno e externo
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.
-
{$<SetExpression>}: substitui a expressão de conjunto externa
-
{<SetExpression>}: é 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.
-
{<Field={value}>}: essa seleção interna substitui qualquer seleção externa em “Field”.
-
{<Field+={value}>}: essa seleção interna é mesclada com a seleção externa em “Field”, usando o operador de união.
-
{<Field*={value}>}: 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 → {<Set1>} Sum(Amount)
Set1 herdará da seleção atual, e o resultado será o contexto da função de agregação.
-
Seleção atual → {<Set1>} ({<Set2>} 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.