Confronto anno precedente

Molto spesso si comincia a sviluppare con QlikView per prendere confidenza con lo script, basandosi su analisi di dati aziendali e su normali richieste che il management fa all’IT. La più frequente in assoluto è forse la domanda “Come andiamo rispetto all’anno scorso?“.

Il primo, facile, approccio è mettere in piedi una banale tabella pivot con la dimensione anno in verticale che mostra l’andamento delle misure che rappresento per ogni anno presente nel DB. Si sa però che la domanda normalmente non finisce lì, ma prosegue chiedendosi: “…e qual’è l’indice di crescita (si spera) rispetto all’anno scorso?“.

È qui che normalmente “casca l’asino”… senza, ovviamente, voler dare dell’ “asino” a tutti quelli che qui non sanno come procedere! :)

La soluzione del confronto fra anni è data dalla Set Analysis: si tratta di uno strumento molto potente introdotto a partire dalla versione 8.50 che permette allo sviluppatore di utilizzare l’intera base dati che il foglio QlikView mette a disposizione ignorando alcune, o anche tutte, le selezioni attive e permettendo così l’accesso anche a quell’area di dati che fa parte degli “esclusi”.

La sintassi non è delle più semplici, ma il risultato è davvero sorprendente. Qui di seguito, senza voler fare un trattato completo ed esaustivo, cercherò di descrivere le regole base per poi applicarle al caso in esame.

Una Set Analysis può essere applicata a funzioni di aggregazione quali Sum(), Avg(), Count() e indicativamente può essere così definita:

SUM({ op_selezione<istruzione> } QTA)

In parole povere tra parentesi graffe viene definita un’istruzione di selezione su alcuni campi che segue anche un “operatore di selezione” globale. Cominciamo col capire come si può utilizzare tale operatore; i valori che esso può assumere sono principalmente 2, ovvero:

  • $ – che sta per “selezione corrente”
  • 1 – che sta per “tutto il DB a prescindere dalle selezioni applicate”

Dunque la prima cosa che possiamo fare è dire alla “SUM” dell’esempio se deve sommare il valore “QTA” basandosi sulla selezione corrente (funzionamento normale di QlikView), oppure su TUTTA la base dati ignorando qualsiasi selezione. Viene facile capire che può essere già introdotta una terza possibilità:

  • 1-$ – corrisponde all’inverso della selezione corrente, ovvero TUTTI gli esclusi

A partire dalle indicazioni dell’operatore generale si possono, all’interno delle parentesi angolari, definire delle ulteriori regole che escludono o introducono ulteriori filtri.

Nel caso in esame, noi vogliamo ottenere un’espressione che mostri il dato dell’anno corrente ed una che mostri il dato dell’anno precedente così da poter introdurre una terza che sia una percentuale calcolata sulla base di queste due. Ipotizziamo quindi che esista un campo QTA che dobbiamo usare come misura, un campo ANNO che indica l’anno e di avere, per semplicità, due variabili che contengano l’anno corrente (anno_curr) e l’anno precedente (anno_prec) e vediamo la semplice set analysis da costruire:

//ANNO CORRENTE Sum({$<ANNO = {$(anno_curr)}>} QTA)
//ANNO PRECEDENTE Sum({$<ANNO = {$(anno_prec)}>} QTA)

Cerchiamo di “leggere” la prima delle due espressioni:
stiamo chiedendo la somma del valore QTA relativo alla selezione corrente (qualunque essa sia), ma con la condizione che l’anno sia quello corrente; la parte “blu” della formula è dominante rispetto all’operatore “$”, dunque anche se fra le selezioni correnti fosse selezionato un anno diverso dal corrente questo verrebbe ignorato.

Naturalmente in questo modo si può facilmente rispondere alla domanda che ci eravamo fatti scrivendo una terza espressione del tipo:

(Sum({$<ANNO = {$(anno_curr)}>} QTA) - Sum({$<ANNO = {$(anno_prec)}>} QTA))/ Sum({$<ANNO = {$(anno_curr)}>} QTA)