In uno dei tutorial precedenti avevamo indicato come le formule che terminano con "X", esempio SUMX, MAXX, MINXX, ecc sono chiamate formule iterative. Capaci dunque di iterare una tabella, calcolando un'espressione, ed al termine dell'iterazione effettuare un'operazione di aggregazione.
Questo però non risulta del tutto esaustivo.
Infatti, esistono altre formule che operano in un contesto iterativo, ma che non terminano con la famosa "X".
Una di queste è FILTER(tabella, condizione).
Avete mai sentito parlare di DAXGuide?
Prima di addentrarci in un breve riepilogo di quelle che sono le caratteristiche base di quest'ultima funzione, vorrei porre la vostra attenzione su come riuscire a riconoscere quando una formula è in grado di attivare un contesto riga. Questo perché all'interno dei vari programmi che utilizzano il DAX (PowerPivot, DAX, ecc) o sulle guide online della Microsoft non viene esplicitamente indicata tale caratteristica.
Ecco che allora arrivano in nostro soccorso i ragazzi di SQLBI (e te pareva ), i quali hanno realizzato questa interessantissima guida online, la quale elenca le diverse formule che possono essere utilizzate all'interno del DAX, inserendo anche l'informazione se la formula selezionata agisce come iteratore, oppure no.
La guida la si può trovare al seguente indirizzo:
DaxGuide
Consiglio dunque di salvarsi questa pagina tra i preferiti, così da averla sempre a disposizione quando dovrete lavorare con le formule di DAX, anche perché, per la maggior parte delle funzioni, verranno inseriti in calce alla pagina i link di riferimento agli articoli riguardanti approfondimenti sul loro utilizzo (sempre realizzati da Marco Russo e Alberto Ferrari).
L'immagine che segue riporta uno spaccato della guida relativa alla formula che andremo ad analizzare.
Come si può osservare viene indicato chiaramente il fatto che la formula agisce seguendo un contesto riga:
Ma a cosa serve FILTER ?
Questa formula risulterà utilissima alla maggior degli utenti, in particolar modo in accoppiata con CALCULATE (ne avremo modo di discuterne in un futuro).
Come argomenti FILTER necessità di due informazioni:
1) La tabella da iterare
2) La condizione da verificare
Come si evince dal nome, questa formula filtra le righe di una tabella (con una o più colonne). Per farlo verifica la condizione (espressa in forma logica e pertanto il risultato dovrà essere TRUE/FALSE) scandendo riga per riga la tabella, ed eliminando tutte quelle righe che non soddisfano i requisiti indicati.
Vediamone qualche esempio. Abbiamo la seguente tabella chiamata Record:
Vogliamo ottenere le sole righe che presentano valori del campo [Quantità] maggiori di 3.
Andremo a scrivere (utilizzando DAX Studio per le nostre prove (ricordatevi EVALUATE prima di scrivere la formula )):
Codice: Seleziona tutto
FILTER ( Record, Record[Quantità] > 3 )
La formula è andata ad iterare la tabella Record, ogni volta che analizzava una riga controllava se il valore del campo [Quantità] (per la riga corrente) fosse superiore, oppure no a 3. Se la condizione risulta soddisfatta (TRUE) allora la riga analizzata rimane e pertanto rientrerà nell'output finale, altrimenti (FALSE) verrà eliminata.
E se volessimo aggiungere una condizione?
Abbiamo due possibilità:
1) Utilizzare l'operatore && se le vogliamo verificate entrambe, altrimenti ||
2) Inserire le condizioni all'interno della formula AND(), oppure OR()
Codice: Seleziona tutto
FILTER ( Record, Record[Quantità] > 3 && Record[Scarto] = 4 )
Codice: Seleziona tutto
FILTER ( Record, AND ( Record[Quantità] > 3, Record[Scarto] = 4 ) )
Ma se invece volessimo inserire 3 condizioni?
In questo caso non potremo fare affidamento sulla formula AND() o OR() poiché queste formule accettano un massimo di due parametri.
Possiamo quindi indicare tre o più condizioni tramite && o ||
Codice: Seleziona tutto
FILTER (
Record,
Record[Record] > 3
&& Record[Prodotto] = "Prodotto_003"
&& Record[Quantità] > 1
)
Se invece, avessimo provato a scrivere la condizione all'interno di un AND() il sistema avrebbe riportato un messaggio di errore. Infatti, utilizzando ancora una volta la guida sopracitata, e cercando la formula AND, avremmo potuto leggere questa nota:
Quello che abbiamo appena visto è l'utilizzo base che si può fare di questa formula. Con il proseguimento dei tutorial avremo modo di vedere condizioni via via più complesse facendo anche leva su concetti come il context transition, che al momento accenniamo solamente visto che per poterne parlare è necessario prima spiegare l'altro pilastro del contesto valutativo: il contesto filtro.
Come sempre per eventuali commenti, suggerimenti, o integrazioni al tutorial è possibile scrivere un messaggio all'interno della sezione "Feedback" --> Qui
Colgo l'occasione per ringraziare tutti coloro che hanno deciso di dedicare parte del loro tempo alla lettura di questo tutorial.
A presto,
Andrea