Vai al contenuto principale Skip to complementary content

Espressioni set interne ed esterne

Le espressioni set possono essere utilizzate all'interno e all'esterno delle funzioni di aggregazione, racchiudendole tra parentesi graffe.

Quando si utilizza un'espressione set all'interno di una funzione di aggregazione, l'aspetto può essere il seguente:

Esempio: Espressione set interna

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

Utilizzare un'espressione set al di fuori della funzione di aggregazione se si hanno espressioni con più aggregazioni e si vuole evitare di scrivere la stessa espressione set in ogni funzione di aggregazione.

Se si utilizza un'espressione di set esterna, questa deve essere posizionata all'inizio dell'ambito.

Esempio: Espressione set esterna

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

Se si utilizza un'espressione set al di fuori della funzione di aggregazione, è possibile applicarla anche alle misure principali esistenti.

Esempio: Espressione set esterna applicata alla misura principale

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

Un'espressione set utilizzata al di fuori delle funzioni di aggregazione influisce sull'intera espressione, a meno che non sia racchiusa tra parentesi; in tal caso le parentesi definiscono l'ambito. Nell'esempio di scoping lessicale che segue, l'espressione set viene applicata solo all'aggregazione all'interno delle parentesi.

Esempio: Scoping lessicale

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

Regole

Ambito lessicale

L'espressione set influisce sull'intera espressione, a meno che non sia racchiusa tra parentesi. In tal caso, le parentesi definiscono l'ambito lessicale.

Posizione

L'espressione set deve essere collocata all'inizio dell'ambito lessicale.

Contesto

Il contesto è la selezione rilevante per l'espressione. Tradizionalmente, il contesto è sempre stato lo stato predefinito della selezione corrente. Ma se un oggetto è impostato su uno stato alternativo, il contesto è lo stato alternativo della selezione corrente.

È possibile definire un contesto anche sotto forma di espressione set esterna.

Eredità

Le espressioni set interne hanno la precedenza su quelle esterne. Se l'espressione set interna contiene un identificatore set, sostituisce il contesto. Altrimenti, il contesto e l'espressione set verranno uniti.

  • {$<SetExpression>} - sovrascrive l'espressione set esterna

  • {<SetExpression>} - viene unito all'espressione set esterna

Assegnazione set elementi

L'assegnazione set elementi determina il modo in cui le due selezioni vengono unite. Se viene utilizzato un normale segno di uguale, la selezione nell'espressione set interna ha la precedenza. Altrimenti, verrà utilizzato l'operatore set implicito.

  • {<Field={value}>} - questa selezione interna sostituisce qualsiasi selezione esterna in “Field”.

  • {<Field+={value}>} - questa selezione interna viene unita alla selezione esterna in “Field”, utilizzando l'operatore di unione.

  • {<Field*={value}>} - questa selezione interna viene unita alla selezione esterna in “Field”, utilizzando l'operatore di intersezione.

Ereditarietà in più fasi

L'ereditarietà può avvenire in più fasi. Esempi:

  • Selezione corrente → Sum(Amount)

    La funzione di aggregazione utilizzerà il contesto, che in questo caso è la selezione corrente.

  • Selezione corrente → {<Set1>} Sum(Amount)

    Set1 erediterà dalla selezione corrente e il risultato sarà il contesto per la funzione di aggregazione.

  • Selezione corrente → {<Set1>} ({<Set2>} Sum(Amount))

    Set2 erediterà da Set1, che a sua volta eredita dalla selezione corrente e il risultato sarà il contesto per la funzione di aggregazione.

La funzione Aggr()

La funzione Aggr() crea un'aggregazione nidificata con due aggregazioni indipendenti. Nell'esempio in basso, viene calcolato un Count() per ciascun valore di Dim, e l'array risultante viene aggregato utilizzando la funzione Sum().

Esempio:  

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

Count() è un'aggregazione interna mentre Sum() è un'aggregazione esterna.

  • L'aggregazione interna non eredita alcun contesto dall'aggregazione esterna.

  • L'aggregazione interna eredita il contesto dalla funzione Aggr(), che può contenere un'espressione set.

  • Sia la funzione Aggr() sia la funzione di aggregazione esterna ereditano il contesto da un'espressione set esterna.