Inre och yttre uppsättningsuttryck
Uppsättningsuttryck används i aggregeringsfunktioner och inom en klammerparentes.
När du använder ett uppsättningsuttryck i en aggregeringsfunktion så kan det se ut så här:
Exempel: Inre uppsättningsuttryck
Sum( {$<Year={2021}>} Sales )
Använd ett uppsättningsuttryck utanför aggregeringsfunktionen om du har uttryck med flera aggregeringar och vill undvika att skriva samma uppsättningsuttryck i varje aggregeringsfunktion.
Om du använder ett yttre uppsättningsuttryck så måste det placeras i början av omfattningen.
Exempel: Yttre uppsättningsuttryck
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
Om du använder ett uppsättningsuttryck utanför aggregeringsfunktionen så kan du även tillämpa den på befintliga originalmått.
Exempel: Yttre uppsättningsuttryck som tillämpas på originalmåttet
{<Year={2021}>} [Master Measure]
Ett uppsättningsuttryck som används utanför aggregeringsfunktionerna påverkar hela uttrycket, med undantag för om det är inom parentes eftersom parenteserna då definierar omfattningen. I exemplet på val av lexikal omfattning nedan så tillämpas ett uppsättningsuttryck endast på aggregeringen innanför parenteserna.
Exempel: Val av lexikal omfattning
( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)
Regler
Lexikal omfattning
Uppsättningsuttrycket påverkar hela uttrycket, med undantag för om det är inom parentes. Om detta är fallet så definierar parenteserna den lexikala omfattningen.
Läge
Uppsättningsuttrycket måste placeras i början av den lexikala omfattningen.
Kontext
Kontext är det urval som är relevant för uttrycket. Traditionellt sett har kontexten alltid varit standardtillståndet för det aktuella urvalet. Om ett objekt är inställt på ett parallellt tillstånd så är kontexten det parallella tillståndet för det aktuella urvalet.
Du kan också definiera en kontext genom ett yttre uppsättningsuttryck.
Arv
Inre uppsättningsuttryck ges företräde framför yttre uppsättningsuttryck. Om det inre uppsättningsuttrycket innehåller en uppsättningsidentifierare så ersätter det kontexten. Annars kommer kontexten och uppsättningsuttrycket att slås ihop.
-
{$<SetExpression>} – åsidosätter det yttre uppsättningsuttrycket.
-
{<SetExpression>} – slås ihop med det yttre uppsättningsuttrycket
Tilldelning av elementuppsättningar
Tilldelningen av elemenuppsättningar fastställer hur de två urvalen slås ihop. Om ett vanligt likhetstecken används så har det inre uppsättningsuttrycket högre prioritet. I övrigt används den impicita operatorn för uppsättningen.
-
{<Field={value}>} – detta inre urval ersätter eventuella yttre urval i “Field”.
-
{<Field+={value}>} – detta inre urval slås ihop med det yttre urvalet i “Field” med hjälp av unionoperatorn.
-
{<Field*={value}>} – detta inre urval slås ihop med det yttre urvalet i “Field” med hjälp av intersektionsoperatorn.
Arv i flera steg
Arv kan ske i flera steg. Exempel:
-
Aktuellt urval → Sum(Amount)
Aggregeringsfunktionen använder kontext, vilket här är aktuellt urval.
-
Aktuellt urval → {<Set1>} Sum(Amount)
Set1 ärver från aktuellt urval och resultatet blir kontexten för aggregeringsfunktionen.
-
Aktuellt urval → {<Set1>} ({<Set2>} Sum(Amount))
Set2 ärver från Set1, som i sin tur ärver från aktuellt urval och resultatet blir kontexten för aggregeringsfunktionen.
Funktionen Aggr()
Aggr()-funktionen skapar en nästlad aggregering som har två oberoende aggregeringar. I exempelet nedan beräknas en Count() för varje värde för Dim och den resulterande matrisen aggregeras med hjälp av Sum()-funktionen.
Exempel:
Sum(Aggr(Count(X),Dim))
Count() är den inre aggregeringen och Sum() är den yttre aggregeringen.
-
Den inre aggregeringen ärver inte någon kontext från den yttre aggregeringen.
-
Den inre aggregeringen ärver kontext från Aggr()-funktionen som kan innehålla ett uppsättningsuttryck.
-
Både Aggr()-funktionen och den yttre aggregeringsfunktionen ärver kontext från ett yttre uppsättningsuttryck.