Gå till huvudinnehåll Gå till ytterligare innehåll

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 set-uttrycket innehåller en set-identifierare så ersätter det kontexten som har definierats i det yttre set-uttrycket. I annat fall utvärderas både det inre och det yttre set-uttrycket.

Exempel 1: Inre set-uttryck med set-identifierare

{<Year={2023}>} Sum(Sales) / Count({1} distinct OrderNumber)

I ovanstående uttryck består det inre set-uttrycket Count({1} distinct OrderNumber) av set-identifieraren {1}. När detta inre set-uttryck utvärderas tillämpas inte den omfattning som definieras i det yttre set-uttrycket {<Year={2023}>}.

Exempel 2: Inre set-uttryck utan set-identifierare

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

I ovanstående uttryck innehåller de inre set-uttrycken Sum ({<Status={'Confirmed'}>} Sales_Stream1) och Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2) inte set-identifierare. Därför tillämpas det yttre set-uttrycket {<Year={2023}>} och båda de inre set-uttrycken när resultatet utvärderas.

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.

Arv för kedjor av inre och yttre uppsättningsuttryck

Det finns ytterligare överväganden för arv när man använder flera uppsättningsuttryck i komplexa kedjor, särskilt när ett yttre uppsättningsuttryck följs av andra yttre uppsättningsuttryck och/eller ett inre uppsättningsuttryck. För mer information, se Kedjor av flera yttre och inre uppsättningsuttryck.

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.

Kedjor av flera yttre och inre uppsättningsuttryck

Observera att det är möjligt att ha fler än ett yttre uppsättningsuttryck. I det här exemplet har vi två yttre uppsättningsuttryck och ett inre:

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

Uppsättningsuttrycken kommer att tillämpas från vänster till höger. Detta innebär att om två uppsättningsuttryck använder motstridiga set, kommer det uttryck som står längst till höger att ha företräde.

Även om det inte finns någon gräns för antalet yttre uppsättningsuttryck som kedjas ihop på detta sätt, är antalet inre uppsättningsuttryck begränsat till ett. Om fler än ett inre uppsättningsuttryck står bredvid varandra uppstår inget fel, men endast det längst till höger kommer att användas vid utvärderingen.

Arv från uppsättningsuttryck

När ett aggregeringsuttryck innehåller fler än ett uppsättningsuttryck som en del av en kedja, utvärderas uppsättningsuttrycken ett efter ett från vänster till höger. Resultatet av varje uppsättningsuttryck är en grupp av set, potentiellt ett för varje dimension. Seten skickas vidare till nästa uppsättningsuttryck, som kan göra ytterligare ändringar innan de skickas vidare till nästa.

Så länge varje uppsättningsuttryck arbetar med olika dimensioner kommer det inte att finnas några konflikter mellan dem, och alla set kommer att bevaras till slutet av kedjan (och tillämpas under aggregeringen). Det finns ett undantag från denna regel, som ibland gäller när en dimension i ett uppsättningsuttryck har gett ett tomt set. Se följande för mer information:

Tomma urvalsuppsättningar

När en dimension i ett uppsättningsuttryck utvärderas är det möjligt att setet inte innehåller några data. Detta kallas för ett tomt set. Tomma set kan förekomma i många scenarier, t.ex:

  • Felaktig definition av uttryck. Till exempel, när man försöker leta efter ett värde 2025 med uppsättningsuttrycket {<OrderYear={‘2025’}>}, skrivs uttrycket som {<OrderYear={‘0025’}>}.

  • Under analysen görs ett urval i en annan dimension än den som refereras till i uttrycket och detta urval resulterar i att det inte finns några tillgängliga data för den angivna uttrycksdimensionen. En användare gör t.ex. ett urval för Region='Europe' och en uppsättning filter för uppsättningsuttryck för {<ProductCategory={‘Shirts’}>} Sum (Sales). Om inga skjortor säljs i Europa innehåller uppsättningsuttrycket ett tomt set.

  • Det tomma setet definieras uttryckligen i uttrycket. Detta är inte vanligt eller användbart, men det är tekniskt möjligt. Exempel: {<Year={}>}

Implicit radering av urvalsuppsättningar

Om resultatet efter tillämpning av ett uppsättningsuttryck är en tom uppsättning för en av dimensionerna (se Tomma urvalsuppsättningar) och det finns ytterligare ett uppsättningsuttryck som tillämpas efter detta, kommer urvalet för den dimensionen att raderas precis innan nästa uppsättningsuttryck tillämpas. En raderad urvalsuppsättning innebär att alla värden inkluderas (som om inget urval hade gjorts). Observera dock att denna radering endast sker om det finns ytterligare ett eller flera yttre uppsättningsuttryck som tillämpas efter uppsättningsuttrycket där den tomma uppsättningen produceras.

Här är ett exempel på när en raderad urvalsuppsättning kommer att ske:

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

Year={} kommer att skapa den tomma uppsättningen för dimensionen Year. Detta innebär att urvalsuppsättningen för Year raderas när uppsättningen överförs till nästa uppsättning uttryck, som innehåller Region={Europe}. Observera att raderingen av urvalet endast sker för en enda dimension. Uppsättningar i andra dimensioner – inklusive uppsättningar inom samma uppsättningsuttryck – kommer fortfarande att vidarebefordras utan ändring.

Här är ett annat exempel på en raderad urvalsuppsättning:

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

I ovanstående exempel händer följande:

  • Urvalsuppsättningarna Product={"XI345"} och Region={"Europe"} tillämpas.

  • Year={} tillämpas inte. Detta beror på att den uppsättningen raderas när det sista uppsättningsuttrycket – {<Region={"Europe"}>} – används.

Om du flyttar en komponent i ett uppsättningsuttryck till det sista yttre uppsättningsuttrycket förhindras implicit radering. Ta det här exemplet:

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

Här har vi flyttat Year-uttrycker till det sista uppsättningsuttrycket i kedjan. Detta förhindrar att den implicita raderingen sker, och den tomma uppsättningen för dimensionen Year kommer faktiskt att användas för Sum-aggregeringen.

I vilket fall som helst kan oönskat beteende inträffa när urvalsuppsättningar raderas. För att förbättra analysupplevelsen och göra det enklare att skriva kedjor av uppsättningsuttryck kan du använda flaggan bevara tom uppsättning. Mer information finns i Flaggan bevara tom uppsättning (yttre uppsättningsuttryck).

Flaggan bevara tom uppsättning (yttre uppsättningsuttryck)

Använd symbolen & (flaggan bevara tom uppsättning) för att förenkla utvärderingsmodellen för yttre uppsättningsuttryck. Exempel:

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

I det här exemplet definierar Year={} en tom urvalsuppsättning för Year. Utan symbolen & skulle uttrycket {<Region={Europe}>} leda till att den tomma urvalsuppsättningen Year raderas, vilket skulle leda till att alla data används i aggregeringsberäkningen. Symbolen & tvingar aggregeringen att respektera den tomma urvalsmängden Year, vilket resulterar i mer begripliga utdata.

För fullständig information om flaggan för bevarande av tomma mängder, se Flagga för att bevara tom mängd.

Var den här sidan till hjälp för dig?

Om du stöter på några problem med den här sidan eller innehållet på den, t.ex. ett stavfel, ett saknat steg eller ett tekniskt fel – meddela oss!