Sei sulla pagina 1di 19

Set Analysis

01 Perché Usarla............................................1 06 Usare una Funzione...............................9


02 Identificatore.............................................2 01 Funzioni Numeriche..........................9
03 Gli Operatori.............................................2 02 Funzioni che Ritornano Numeri......12
04 I Modificatori............................................3 07 Usare P() e E().....................................13
01 Tutti i Valori..........................................3 08 Usare Due Campi................................14
02 – Valori Conosciuti...............................4 09 Usare il comando IF............................15
03 – Search String......................................5 10 Stati Alternati......................................15
04 Delimitare una Dimensione Intera........6 01 Singolo Stato Alternato...................15
05 Usare una Variabile...............................7 02 Usare Diversi Stati Alternati...........15
01 Uno o Più Valori...............................7 05 Risultati Estremi......................................16
02 Search String.....................................7 01 L’intera Applicazione.........................16
03 Valori Integer....................................7 02 I Sets Vuoti..........................................16
04 Dimensione.......................................8
05 Intero Set...........................................8

01 Perché Usarla
Il Set Analysis è un linguaggio nativo in Qlik utilizzato per implementare selezioni differenti da
quelle attive su chart ed oggetti – molto utile per poter eseguire delle comparazioni sullo stesso
sheet.

Ad esempio, possono esser comparate le vendite del mese corrente con quelle eseguite durante
l’anno precedente, creare valori YTD (Year to Date – periodo compreso da inizio anno alla data
corrente) oppure medie mobili (Moving Average – non è altro, ad esempio, che il prezzo medio
durante un periodo temporale).
Si possono creare inoltre valori che mostrano fette di mercato (market share), percentuali sui
prodotti, ecc.…

Il Set modifica il contesto soltanto dell’espressione dove viene usato.


Le altre espressioni presenti sulla pagina, se non utilizzano tale Set, forniranno i valori di default, in
funzione delle selezioni attivi o degli stati alternati introdotti.

Il Set è sempre racchiuso tra parentesi graffe: {}


Può influire sulla selezione di una o più dimensioni, e può esser composto da più Set annidati.

Un Set è compost da almeno uno o più di questi componenti:


 Identificatore
 Operatore
 Modificatore

Limite: Il Set Analysis è calcolato una sola volta per l’intero Chart o Tabella, non per ogni singolo
record. Pertanto, non può esser utilizzato quando si desira un calcolo diverso a seconda della riga.
02 Identificatore
0 – Set vuoto
1 – intero set delle dimensioni
$ - selezione corrente
Utilizzata in quanto, grafici o tabelle, possono esser impostati su Stati Alternati.
$1 – selezione precedente.
$2 …. $n: precedenti selezioni in ordine temporale
$_1 – selezione successiva
Bookmark01 – nome o ID di un bookmark
Group – nome di un gruppo (Stato Alternato)

Esempi:

Count({Book1} [Item Number])  Conta i prodotti utilizzando la selezione memorizzata nel


bookmark: Book1
Count({Stato1} [Item Number])  Conta i prodotti utilizzando la selezione memorizzata nello
Stato Alternato: Stato1

Count({1} [Item Number])  La misura è applicata su tutto. Ogni dimensione subisce un reset e
non verranno considerate le selezioni

Count({$} [Item Number])  La misura viene applicata sulla selezione correntemente attiva

03 Gli Operatori
+: unione di sets
*: intersezione di sets
-: esclusione di due sets
/: membri appartenenti soltanto ad uno di due sets (complementare opposto all’Intersezione)

Se gli operatori vengono utilizzati con il segno =:

<Dimensione += set diverso>: aggiunge il set alla selezione corrente


<Dimensione -= set diverso>: rimuove il set dalla selezione corrente

Count({1-$} [Item Number])

 Conta il numero di prodotti, eccetto per quelli definiti dalla selezione corrente

Count({Stato1 * Book1} [Item Number])


 Conta i prodotti risultanti dall’intersezione delle selezioni sullo stato alternato “Stato1”
ed il bookmark “Book1”

Il carattere <> può esser utilizzato per indicare un set in particolare:

{<set 1>} – {<set 2>} … oppure … {set 1} – {set 2}


 Membri di Set 1 a cui rimuoviamo i membri in set 2
04 I Modificatori
Con il Set Analysis si può allargare o ridurre il numero di valori di una, o più, selezioni.

Quando viene selezionato un set di una dimensione:


 Nelle ListBoxes avremmo la nuova selezione
 Questo non avverrà nelle visualizzazioni. La nuova dimensione verrà applicata ai
membri nell’oggetto, formando un’intersezione.

Il Set Analysis è calcolato prima che il grafico venga computato e ridisegnato.


Non verrà calcolata per ogni singolo record dei dati utilizzati.
Non si potrà determinare un altro set di una stessa dimensione che viene usata all’interno delle
dimensioni dell’oggetto.

01 Tutti i Valori

{“Starting Selection” <Dimensioni = {*} >}

Nota:
 *  Numeri
 “*”  Stringhe
Oppure si può utilizzare:

{“Starting Selection” <Dimensioni = >}

La “Starting Selection” può esser la selezione corrente ($ di default), o una qualsiasi altra selezione
specificata da un identificatore.

Per poter selezionare tutti i valori di una dimensione a prescindere delle selezioni fatte, basta
indicarlo con:
 * o un “*” per i valori stringa (vengono presi tutti i valori tranne il NULL)
 non scrivervi nulla ma solo Dimensione = (vengono presi tutti i valori, NULL incluso)

Count({<[Product Group] = {"*"}>} [Item Number])

Oppure se vogliamo includere anche il gruppo prodotti NULL

Count({<[Product Group] = >} [Item Number])

Bisogna fare attenzione quando operiamo con dimensioni tra loro correlate, come il tempo.
Se ho due ListBoxes, una con i mesi ed un’altra con gli anni posso introdurre dei comportamenti
combinati.

{<Year = {2012}>}
 Selezionerà l’anno 2012, per tutti i mesi che l’utente selezionerà o meno

{<Month=, Year = {2012}>}


 Selezionerà tutti i mesi a prescindere di quello che l’utente seleziona per la dimensione
Mese, ma specificamente i mesi correlati all’anno 2012
02 – Valori Conosciuti

Sintassi:

{Selezione <Dimensione 1 = {valore 1, valore2, …} [, Dimensione 2 = {valore 1, valore 2, …}] >}

Esempio:

Count ({<[Product Group] = {'Baked Goods'}>} [Item Number])

Count ({<[Product Group] = {'Baked Goods', 'Baking Goods'}}, [Product Type] = {'Bread'}>} [Item
Number])
Se tra le graffe non indichiamo nulla, il Set sarà vuoto:

Count ({<[Product Group] = { }>} [Item Number])

Questo Modificatore è molto utile nel caso si voglia utilizzare un Flag definito a livello dati:

Sum ({<Flag = {1}}, Year = {2020}, Month= >} Sales)

Nota: le stringhe vanno indicate includendole tra apici ‘, oppure doppi apici “, oppure parentesi
quadre []. Ma tale indicazione può essere omessa se la stringa non è formata da più parole.
03 – Search String
Nella definizione dei valori cercati possiamo includere delle regole di ricerca simil regex.

Sintassi:

{<Dimensione = {“*Search String*”}>}

 *: indica un qualsiasi carattere


Esempio: P1*  ritornerà tutte le parole come – P1, P11, P1ABC, ecc….
 ?: indica uno e soltanto un solo carattere
Esempio: P1?  ritornerà parole come P11 o P1B, ma non P1 o P1ABC

Possiamo utilizzare diverse stringhe di ricerca nello stesso set.

Sintassi:

{<Dimensione = {“*Search1*”, “Fixed Text”, “?Search2*”}>}

Esempio:

Count ({<[Product Group] = {'Bak*', ‘De??’}>} [Item Number])

Oppure tutti i prodotti, tranne quelli che hanno il gruppo che inizi per Bak

Count ({<[Product Group] = {“*”} - {'Bak*’ }>} [Item Number])

Questo può esser indicato anche come:

Count ({<[Product Group] -= {'Bak*’ }>} [Item Number])

In pratica abbiamo rimosso dalla selezione corrente tutti i valori cercati.


Possiamo anche eseguire, a livello computazionale, il processo contrario, ovvero, seleziona tutti i
valori eccetto quelli corrispondenti alla ricerca.

Count ({<[Product Group] =- {'Bak*’ }>} [Item Number])

Oppure tutti i prodotti nella selezione corrente, inclusi quelli che hanno il gruppo che inizi per Bak

Count ({<[Product Group] += {'Bak*’ }>} [Item Number])

Nota: apici, doppi apici o parentesi quadre sono accettati per indicare una ricerca.

Inoltre, possiamo utilizzare gli operatori per il calcolo dei Totali su colonna:
 TOTAL [<dimension>]
 Totale di tutti i valori a prescindere delle selezioni fatte o rispetto alla dimensione
indicata.
 ALL
 Totale a prescindere delle dimensioni e delle selezioni correnti. Simile a scrivere {1},
ma in questo caso viene ritornato il totale.
Esempio:

Count (Total< [Product Group] > [Item Number])

 Ritorna tutti i prodotti per il totale rispetto alla dimensione Product Group.

Altri esempi dell’utilizzo del Total

04 Delimitare una Dimensione Intera


Viene stabilito un valore di range nella definizione dei valori scelti.

Ad esempio, se vogliamo scegliere tutti i valori inferiori a 12:

{<Time = {“<12”} >}

Oppure tutti i valori tra 12 e 18, inclusi i limiti:

{<Time = {“>=12 <=18”} >}

Oppure voglio tutti i valori pari a 4, 5 e 6 e tutti i valori tra 12 (incluso) ed inferiori a 20:

{<Time = {4, 5, 6} + {“>=12 <20”} >}


05 Usare una Variabile
01 Usare una Variabile che Storicizza Uno o Più Valori
Sintassi:

<Dimensione = { $(Nome Variabile) }>

Oppure

<Dimensione = { $(=Nome Variabile) }>

In questo secondo caso Qlik interpreterà prima la variabile e poi riscriverà il comando prima di
eseguirlo.

I valori contenuti in una variabile possono essere ad esempio liste del tipo: Test1, Test2, …. oppure
liste composite da più parole: “Test 1”, “Test 2”, …
Però possono esser create anche variabile composte da funzioni.

02 Usare una Variabile per Storicizzare una Search String


Si può definire una variabile con il valore di una search string.
Ad Esempio:

Variabile v_Search
Valore: “E*”

Utilizzo: Count ({< [Product Group] = {$(v_Search)}>} [Item Number])

03 Usare una Variabile per Storicizzare Valori Integer


Quando una variabile contiene valori integer questa deve esser inclusa tra doppi apici se invocata.
Ad Esempio:

Variabile v_Int
Valori: 1, 2, 3

Utilizzo: Count ({< [Product ID] = { “$(v_Int)” }>} [Item Number])

Esempio – periodo tra due date:

({< Time_Key = { “>$(v_FirstPeriod) <$(=v_LastPeriod)” }>}


04 Usare una Variabile per Storicizzare una Dimensione
Una variabile può contenere anche l’etichetta di una dimensione.
Ad esempio:

Variabile v_Dim
Valore: [Product Group]

Count ({$< $(v_Dim) = {“*”}>} [Item Number])

In caso di dimensioni possiamo storicizzarla nella variabile anche senza parentesi quadre.
Dovranno esser aggiunte nella chiamata alla variabile in questo caso (solo se il nome è composito).

Variabile v_Dim
Valore: Product Group

Count ({$< [$(v_Dim)] = {“*”}>} [Item Number])

05 Usare una Variabile per Storicizzare un Intero Set


L’intera sintassi di chiamata di una funzione può esser storicizzata in una variabile.
Ad Esempio:

Variabile v_Funct
Valore: [Product Group] = {'Baked Goods', 'Baking Goods'}}, [Product Type] = {'Bread'}
Count ({<$(v_Funct)>} [Item Number])

Oppure possiamo memorizzare una parte della funzione.


Ad Esempio:

Variabile v_Funct
Valore: [Product Group] = {'Baked Goods', 'Baking Goods'}}

Count {<$((v_Funct) , [Product Type] = {'Bread'} >} [Item Number])


06 Usare una Funzione
Possono esser usate delle funzioni all’interno di un Set Analysis.
01 Funzioni Numeriche
Sintassi:

<Dimensione = {“$(=f(args))”}>

Nota: il simbolo $ indica che il contenuto verrà interpretato dal compilatore.

Ad esempio, possiamo calcolare il massimo valore di una lista di anni:

<Year = { “$(=Max({1} Year))” }>

Example:

Sum( {< Temperatura = { "$(=Max({1} Temperatura))" } >} Temperatura)

Note:
 La funzione Max tiene in considerazione, per default, la selezione corrente
 L’utilizzo di {1} permette di evitare la selezione corrente
 Il simbolo = prima della funzione Max permette di interpretare tale funzione prima
del suo utilizzo nel Set Analysis

Se volessimo selezionare l’anno precedente all’ultimo anno della selezione corrente:

<Year = { “$(=Max({$} Year)-1)” }>

Oppure possiamo anche omettere il {$}

<Year = { “$(=Max(Year)-1)” }>

In certi casi può esser d’aiuto il popolare alcuni campi direttamente nel modello dati.
Esempio, si vuole creare una tabella che contenga i dati correnti e quelli dell’anno precedente.
Sia il YTD (Year to Date), sia l’anno precedente iniziano a gennaio.
I valori saranno contenuti in un asse di TIME ANALYSIS selezionabile, il quale permetterà di
scegliere differenti range temporali: YTD o Rolling12 (meno dodici mesi rispetto ad un mese
specifico).
-----------------
Nell’esempio seguente abbiamo:

 A-1: Key del periodo Year Ago


 P-1: Key del periodo precedente
 YTD: Flag indicante se l’anno andrà preso in considerazione per calcolare il Year to Date

TIME_KEY MONTH YEAR A-1 P-1 YTD


13 Gennaio 2019 1 12 1
14 Febbraio 2019 2 13 1
15 Marzo 2019 3 14 1
16 Aprile 2019 4 15 1
17 Maggio 2019 5 16 1
18 Giugno 2019 6 17 1
19 Luglio 2019 7 18 0
20 Agosto 2019 8 19 0
Settembr
21 e 2019 9 20 0
22 Ottobre 2019 10 21 0
Novembr
23 e 2019 11 22 0
24 Dicembre 2019 12 23 0
25 Gennaio 2020 13 24 1
26 Febbraio 2020 14 25 1
27 Marzo 2020 15 26 1

Per ottenere tutti i valori corrispondenti al periodo Year Ago:

Sum({<MONTH=, YEAR=, TIME_KEY= { $(=Concat([A-1], ‘,’) ) } >} Valori)

Per lo YTD:

Sum({<MONTH=, YEAR=, YTD= {1} >} Valori)

Per lo YTD del Year Ago:

Sum({<MONTH=, YEAR = { $(=YEAR-1) }, YTD= {1} >} Valori)

Il MOVING TOTAL di 12 periodi, e Year Ago:

Sum({<MONTH=, YEAR=, TIME_KEY= { “>$(=Max(TIME_KEY)-24) <=$(=Max(TIME_KEY)-12)” } >}


Valori)

Nota: il set analysis viene calcolato una volta prima della computazione del grafico.

L’utilizzo di funzioni come:

=Sum(Valori * Flag)
Risulta molto più dispendioso in termini computazionali di:

=Sum({<Flag = {1} >}Valori)

Questo perché nel secondo caso, l’intero scope dei valori calcolati è ridotti a tutti quelli con Flag =
1, prima del calcolo della misura.
02 Funzioni che Ritornano Numeri
In questo caso il testo della funzione è senza il simbolo $.
Sintassi:

<Dimensione = { “=f(parametri)” }>

Esempio: vogliamo aggregare il volume delle vendite per la dimensione Manifattura, laddove il
valore delle vendite è superiore a 100.000 dollari, basandoci sulla selezione corrente:

Sum( {$< MANUFACATER_LDESC = { “=Sum( [Value Sales] > 100000 )” } >} [Volume Sales])

Possiamo anche sceglire le manifatture entro un periodo o prodotti specifici.


Ovvero un inner set:

Sum( {$< MANUFACATER_LDESC = {


“=Sum({1< TIME_DESC = { ‘P 01/13’ }, CATEGORY = { ‘ACC’, ‘CHEESE CAKE’ } >}
, [Value Sales] > 100000 )” } >} [Volume Sales])

Dato che la funzione deve esser inclusa tra doppi apici, useremo i singoli apici per evidenziare le
parole composite all’interno dell’inner set.

Altro Esempio: voglio scoprire le manifatture di cui vendite sono oltre 100.000 per le due categorie
viste sopra, per il periodo gennaio 2013 (P 01/13).
Però voglio rimuovere da tale lista tutte le vendite al di sotto di 50.000 dollari per tutte le
categorie presenti a Gennaio 2012.

Usero un: {< set1 > - <set 2>}

Set1:
1< MANUFACATER_LDESC = {
“=Sum({1< TIME_DESC = { ‘P 01/13’ }, CATEGORY = { ‘ACC’, ‘CHEESE CAKE’ } >}
[Value Sales] > 100000 )” } >

Set2:
< MANUFACATER_LDESC = {
“=Sum({1< TIME_DESC = { ‘P 01/12’ }, CATEGORY = { ‘*’ } >}
[Value Sales] < 50000 )” } >

Ovvero:

Sum( {1< MANUFACATER_LDESC = {


“=Sum({1< TIME_DESC = { ‘P 01/13’ }, CATEGORY = { ‘ACC’, ‘CHEESE CAKE’ } >}
[Value Sales] > 100000 )” }
- < MANUFACATER_LDESC = {
“=Sum({1< TIME_DESC = { ‘P 01/12’ }, CATEGORY = { ‘*’ } >}
[Value Sales] < 50000 )” } >
} [Volume Sales])
Questa formula può esser ridotta come:

Sum( {1< MANUFACATER_LDESC = {


“=Sum({1< TIME_DESC = { ‘P 01/13’ }, CATEGORY = { ‘ACC’, ‘CHEESE CAKE’ } >}
[Value Sales] > 100000 )” }
- { “=Sum({1< TIME_DESC = { ‘P 01/12’ }, CATEGORY = { ‘*’ } >}
[Value Sales] < 50000 )” } >
} [Volume Sales])

Se voglio ottenere i top 20 prodotti:

Sum( {$< PRODUCT = { “=Rank(Sum(Sales), 4) <= 20” } >} Sales)

Se voglio i top 20 per il Brand 10:

Sum( {$< PRODUCT = { “=Rank(Sum({< Brand = {10} >} Sales), 4) <= 20” } >} Sales)
Tenere sempre nota che la funzione viene computata una volta prima della computazione del
grafico. Pertanto, non si potrebbe calcolare la stessa funzione specificatamente per ogni valore di
una dimensione nel grafico stesso.

07 Usare P() e E()


Queste funzioni tornano i membri che hanno (o non hanno) dati.
Sono basate sul modello associativo.

Sintassi:

{< Dimensione1 = P({< {Set della dimensione da selezionare} Dimensione1 >}) [, Altre
dimensioni] >}

Note:
- P() ed E() hanno la stessa sintassi.
 P() ritorna i valori possibili
 E() ritorna i valori esclusi
- Sono da includere in un Set più grande

Esempio:

Cerco i Manufatturieri che vendono Croissant nel primo periodo del 2013.
Vogliamo mostrare, inoltre, tutte le Categorie associate:

Sum( {$< CATEGORY = {“*”}, MANUFACTURER = P({1< CATEGORY = { “CROISSANT” }


, TIME_DESC = { “P 01/13” } >} MANUFACTURER) >} Sales)

P() può anche esser usato quando ho due dimensioni, con gli stessi valori, ma non associate.
Si può utilizzare P() per propagare una selezione da una di queste dimensioni all’altra.

Esempio:
Ho due dimensioni, Client_ID e BClient_ID con gli stessi ID Cliente, ma che non sono associate.
L’utente seleziona Client_ID e vuole che la selezione sia propagata su BClient_ID.

Sum( {< BClient_ID = P( Client_ID ) >} Budget)

08 Usare Due Campi


Si può selezionare una dimensione attraverso due campi.
Esempio:
 Billed Client = Delivered Client
 Ordering Date = Delivery Client

Sintassi:

{< Dimensione = {“ =Condizione Boolean ”} >}

La condizione Boolean è creata dalla comparazione dei due campi.

Nota: la condizione di ricerca non può esser inclusa in quella boolean. Se questa è necessaria si
può impiegare una Key con Autonumber.

Esempio:
Vogliamo le vendite che sono state consegnate lo stesso giorno dell’ordine.
Abbiamo due campi: DayDelivery e DayOrder.

Sum( {< KeyAutonumber = { “=(DayDelivery = DayOrder)” } >} Sales)

Possiamo inoltre ottenere le vendite consegnate in ritardo, di 7 giorni di un valore storicizzato in


variabile:

Sum( {< KeyAutonumber = { “=(DayDelivery < DayOrder – 7 )” } >} Sales)

Sum( {< KeyAutonumber = { “=(DayDelivery < DayOrder – $( v_Delay ) )” } >} Sales)

Esiste un equivalente per la sintassi sopra, ma è più dispendioso a livello computazionale in quanto
agisce su tutti record dello scope:

Sum( If( DayDelivery = DayOrder, Sales ) )

La funzione IF() ritornerà NULL se il terzo parametro è omesso e il boolean ritorna un false.
L’unico vantaggio di questa sintassi è che non richiede di una Key aggiuntiva.
09 Usare il comando IF
Può capitare di dover usare differenti set analysis a seconda delle selezioni dell’utente.
Ad esempio, alla scelta di un prodotto specifico vogliamo eseguire dei calcoli su tutti i prodotti.
Se ne scegliamo diversi, vogliamo eseguire i calcoli normalmente.

Per far questo utilizziamo una variabile che contenga un IF, in quanto questa funzione non è
utilizzabile direttamente nel set analysis.

Creiamo una variabile v_Set con la formula:

=IF( GetSelectedCount( Product ) ) = 1, ‘Product’=, ‘$‘)

Ed utilizziamo la variabile nel Set Analysis:

Sum( {< $( v_Set ) >} Sales)

Nota: la funzione IF() viene calcolata una volta per grafico, pertanto non può agire in maniera
diversa per differenti righe o colonne.

10 Stati Alternati
01 Utilizzo di un Singolo Stato Alternato
Sintassi:

{ [Nome dello Stato Alternato] < Dimensione1 = { … } [, resto del Set] >}

Se si desidera che tutto sia calcolato con lo Stato Alternato:

Esempio:

Sum( {A} Sales)

Se voglio utilizzare lo Stato Alternato, ma voglio anche prendere in considerazione tutti gli Anni:

Sum( {A < Year = { * } >} Sales)

02 Usare Diversi Stati Alternati


Sintassi:

{ [Nome dello Stato Alternato] < Dimensione1 = [Nome dello Stato Alternato] ::
[Dimensione1] >}

Esempio: voglio utilizzare lo Stato Alternato B, eccetto sulla Dimensione Anno dove utilizzerò lo
Stato Alternato A.

Note:
 Se voglio comparare con la selezione di default, utilizzerò il simbolo $
 Racchiudo lo stato alternato tra parentesi quadre soltanto se il nome contiene caratteri
specifici
 La dimensione dopo il simbolo :: deve esser racchiusa tra parentesi quadre se è un nome
composito
 La sintassi va ripetuta per ogni dimensione da utilizzare

Esempio: in un grafico voglio colorare di rosso le compagnie appartenenti allo stato A, e di blu le
altre.

If( Match( ‘|’ & Company & ‘|’ , ‘!’ & Concat( {A} Company, ‘|’) & ‘|’ ), Red(), Blue() )

05 Risultati Estremi
01 L’intera Applicazione
Il valore 1 può esser usato entro le parentesi graffe {} : {1}

Sum( {1} Sales)

Per ottenere il valore dell’ultimo dell’anno:

$( =Max( { 1 } YEAR) )

Se si vogliono tutti i valori eccetto per due dimensioni: PRODUCT e MONTH

=Sum(
{ $< [ $( =Concat( { 1< $Field -= { ‘PRODUCT’, ‘MONTH’ } > } Distinct $Field,’] =, [‘ ) & ‘] =’ ) ]
>}
Value)

Utilizzando la funzione $Field entro la funzione Concat, sarà scritto: [dim1]=, [dim2]=, [dim3]= …
In questo modo tutti i valori saranno resettati tranne quelli specificati nel set analysis interno.

Un modo semplice per scrivere:

Sum( {1< Region = $::Region >} Budget)

Oppure

Sum( {1< Region = p(Region) >} Budget)

Permette di acquisire tutte le selezioni correnti, eccetto quelle sulla dimensione Region.

02 I Sets Vuoti
Può accadere che un Set sia vuoto. Il risultato sarà 0.
Questo può succedere sia perché è il risultato corretto voluto o per errori nel codice scritto.
Se si vuole il totale di un anno, per convenzione e per evitare errori, è corretto specificare tutte le
dimensioni correlate al Set:

Sum( {$< Year = { 2012 }, Quarter=, Month=, Day= >} Values)


In questo modo si otterrà l’intero anno, indipendentemente dalle selezioni ulteriori fatte
dall’utente.

Potrebbero piacerti anche