Ir para conteúdo principal Pular para conteúdo complementar

Expressões de conjunto internos e externos

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

{<Year={2023}>} 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 {<Year={2023}>} não é aplicado.

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

{<Year={2023}>} Sum ({<Status={'Confirmed'}>} Sales_Stream1) + Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2)

Na expressão acima, as expressões de conjunto interno Sum ({<Status={'Confirmed'}>} Sales_Stream1) e Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2) não contêm identificadores de conjunto. Portanto, a expressão de conjunto externo {<Year={2023}>} 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.

  • {<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.

Herança para cadeias de expressões de conjuntos internos e externos

Há considerações adicionais sobre herança ao usar várias expressões de conjunto em cadeias complexas, especialmente quando uma expressão de conjunto externo é seguida por outras expressões de conjunto externo e/ou uma expressão de conjunto interno. Para obter detalhes, consulte Cadeias de múltiplas expressões de conjuntos externos e internos.

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.

Cadeias de múltiplas expressões de conjuntos externos e internos

Observe que é possível ter mais de uma expressão de conjunto externo. Neste exemplo, temos duas expressões de conjunto externo e uma de conjunto interno:

{<Year={2021}>} {<Region={"Europe"}>} Sum( {$<Product={"XI345"}>} Sales )

As expressões de conjunto serão aplicadas da esquerda para a direita. Isso significa que, se duas expressões de conjunto estiverem usando conjuntos conflitantes, a expressão mais à direita terá precedência.

Embora não haja limite para o número de expressões de conjunto externo encadeadas dessa forma, o número de expressões de conjunto interno é limitado a um. Ter mais de uma expressão de conjunto interno uma ao lado da outra não produzirá nenhum erro, mas somente a expressão mais à direita será usada quando avaliada.

Herança de expressão de conjunto

Quando uma expressão de agregação contém mais de uma expressão de conjunto como parte de uma cadeia, as expressões de conjunto são avaliadas uma a uma, da esquerda para a direita. O resultado de cada expressão de conjunto é um grupo de conjuntos, potencialmente um para cada dimensão. Os conjuntos são passados para a próxima expressão de conjunto, que pode fazer outras alterações antes de ser passada para a próxima.

Desde que cada expressão de conjunto esteja operando em dimensões diferentes, não haverá conflitos entre elas, e todos os conjuntos serão preservados até o final da cadeia (e aplicados durante a agregação). Há uma exceção a essa regra, que às vezes se aplica quando uma dimensão em uma expressão de conjunto produziu um conjunto vazio. Para obter mais informações, consulte o seguinte:

Conjuntos de seleção vazios

Quando uma dimensão em uma expressão de conjunto é avaliada, é possível que o conjunto não contenha dados. Isso é chamado de conjunto vazio. Conjuntos vazios podem ocorrer em muitos cenários, como por exemplo:

  • Definição incorreta da expressão. Por exemplo, ao tentar procurar um valor 2025 com uma expressão de conjunto {<OrderYear={‘2025’}>}, a expressão é escrita como {<OrderYear={‘0025’}>}.

  • Durante a análise, é feita uma seleção em uma dimensão diferente daquela referenciada na expressão e essa seleção resulta em nenhum dado disponível para a dimensão de expressão de conjunto. Por exemplo, um usuário faz uma seleção para Region='Europe' e um filtro de expressão de conjunto para {<ProductCategory={‘Shirts’}>} Sum (Sales). Se nenhuma camisa for vendida na Europa, a expressão de conjunto conterá um conjunto vazio.

  • O conjunto vazio é definido explicitamente na expressão. Isso não é comum nem útil, mas é tecnicamente possível. Por exemplo: {<Year={}>}

Limpeza implícita do conjunto de seleção

Se o resultado após a aplicação de uma expressão de conjunto for um conjunto vazio para qualquer uma das dimensões (consulte Conjuntos de seleção vazios), e houver mais uma expressão de conjunto sendo aplicada depois disso, o conjunto de seleção para essa dimensão será limpo (restaurado para o conjunto completo) logo antes da próxima expressão de conjunto ser aplicada. Um conjunto de seleção limpo significa que todos os valores estão incluídos. No entanto, observe que essa limpeza só ocorre se houver uma ou mais expressões de conjunto externo adicionais sendo aplicadas após a expressão de conjunto onde o conjunto vazio está sendo produzido.

Aqui está um exemplo de quando um conjunto de seleção limpo ocorrerá:

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

Year={} criará o conjunto vazio para a dimensão Year. Isso significa que o conjunto de seleção para Year é limpo quando o conjunto é passado para a próxima expressão de conjunto, que contém Region={Europe}. Observe que a limpeza da seleção só acontece para uma única dimensão. Os conjuntos em outras dimensões – incluindo conjuntos dentro da mesma expressão de conjunto – ainda serão transmitidos sem modificação.

Aqui está outro exemplo de um conjunto de seleção limpo:

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

No exemplo acima, acontece o seguinte:

  • Os conjuntos de seleção Product={"XI345"} e Region={"Europe"} são aplicados.

  • Year={} não é aplicado. Isso ocorre porque esse conjunto é limpo quando a última expressão de conjunto -{<Region={"Europe"}>}- é aplicada.

Mover um componente de expressão de conjunto para a última expressão de conjunto externo impedirá que você limpe implicitamente. Veja este exemplo:

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

Aqui, movemos a expressão Year para a última expressão de conjunto na cadeia. Isso evitará que a limpeza implícita aconteça, e o conjunto vazio para dimensão Year será realmente usado para a agregação Sum.

Em qualquer caso, pode ocorrer um comportamento indesejável quando os conjuntos de seleção são limpos. Para melhorar a experiência de análise e facilitar a criação de cadeias de expressões de conjunto, use o sinalizador de preservação de conjunto vazio. Para obter mais informações, consulte Sinalizador de preservação de conjunto vazio (expressões de conjunto externo).

Sinalizador de preservação de conjunto vazio (expressões de conjunto externo)

Use o símbolo & (o sinalizador de preservação de conjunto vazio) para simplificar o modelo de avaliação das expressões de conjunto externo. Por exemplo:

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

Neste exemplo, Year={} define um conjunto de seleção vazio para Year. Sem o símbolo &, a expressão {<Region={Europe}>} faria com que o conjunto de seleção vazio Year fosse limpo, resultando no uso de todos os dados no cálculo de agregação. O símbolo & força a agregação a respeitar o conjunto de seleção vazio Year, resultando em um resultado mais compreensível.

Para obter detalhes completos sobre o sinalizador de preservação de conjunto completo, consulte Sinalizador de preservação de conjunto vazio.

Esta página ajudou?

Se você encontrar algum problema com esta página ou seu conteúdo – um erro de digitação, uma etapa ausente ou um erro técnico – avise-nos!