Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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.…
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({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)
Conta il numero di prodotti, eccetto per quelli definiti dalla selezione corrente
01 Tutti i Valori
Nota:
* Numeri
“*” Stringhe
Oppure si può utilizzare:
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)
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
Sintassi:
Esempio:
Count ({<[Product Group] = {'Baked Goods', 'Baking Goods'}}, [Product Type] = {'Bread'}>} [Item
Number])
Se tra le graffe non indichiamo nulla, il Set sarà vuoto:
Questo Modificatore è molto utile nel caso si voglia utilizzare un Flag definito a livello dati:
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:
Sintassi:
Esempio:
Oppure tutti i prodotti, tranne quelli che hanno il gruppo che inizi per Bak
Oppure tutti i prodotti nella selezione corrente, inclusi quelli che hanno il gruppo che inizi per Bak
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:
Ritorna tutti i prodotti per il totale rispetto alla dimensione Product Group.
Oppure voglio tutti i valori pari a 4, 5 e 6 e tutti i valori tra 12 (incluso) ed inferiori a 20:
Oppure
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.
Variabile v_Search
Valore: “E*”
Variabile v_Int
Valori: 1, 2, 3
Variabile v_Dim
Valore: [Product Group]
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
Variabile v_Funct
Valore: [Product Group] = {'Baked Goods', 'Baking Goods'}}, [Product Type] = {'Bread'}
Count ({<$(v_Funct)>} [Item Number])
Variabile v_Funct
Valore: [Product Group] = {'Baked Goods', 'Baking Goods'}}
<Dimensione = {“$(=f(args))”}>
Example:
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
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:
Per lo YTD:
Nota: il set analysis viene calcolato una volta prima della computazione del grafico.
=Sum(Valori * Flag)
Risulta molto più dispendioso in termini computazionali di:
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:
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])
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.
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( {$< 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.
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:
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.
Sintassi:
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.
Esiste un equivalente per la sintassi sopra, ma è più dispendioso a livello computazionale in quanto
agisce su tutti record dello scope:
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.
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] >}
Esempio:
Se voglio utilizzare lo Stato Alternato, ma voglio anche prendere in considerazione tutti gli Anni:
{ [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}
$( =Max( { 1 } YEAR) )
=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.
Oppure
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: