Oggi vedremo 3 modi diversi per far capire a Tableau quando in un filtro abbiamo selezionato “All” e quando invece abbiamo selezionato delle voci.
A che scopo?
Recentemente mi è capitato di dover risolvere proprio un problema del genere, che ora tenterò di riproporvi utilizzando il fidato Sample Superstore.
Abbiamo una tabella: le vendite per mese e per segmento:
I numeri sono talmente grandi che non entrano nello spazio che abbiamo a disposizione, vediamo i cancelletti. Se però selezioniamo uno stato alla volta, scendiamo talmente tanto nel dettaglio che i numeri diventano visibili, sono cifre più basse:
Potremmo pensare di dividere per 1000 il valore di SUM(Sales) e guardare quindi le vendite di tutti gli stati in unità di misura K, ma se lo facessimo, nel momento in cui poi ne scegliamo un solo… vedremmo una montagna di zeri:
Abbiamo bisogno di una via di mezzo. Se ho selezionato “All” nel filtro, allora voglio vedere le vendite/1000, altrimenti le vendite originali.
Io ho trovato almeno 3 differenti modi per farlo, ognuno con i suoi pro e i suoi contro. Vediamoli a uno a uno.
Table Calculation SIZE()
La formula SIZE() è una Table Calculation che ci restituisce il numero di righe che fanno parte della partizione su cui è computata.
Supponiamo di aver la possibilità di inserire “State” nella nostra viz – cosa che raramente accadrà – se computiamo il Size() sulla dimensione “State”, otterremo come risultato 1 se stiamo filtrando un solo stato, un numero > 1 se selezioniamo “All”:
Potremo quindi creare un calcolo del tipo: IF SIZE() = 1 then SUM([SALES]) else [Sales per totale] END ed utilizzare quest’ultimo calcolo come numero della tabella.
PRO: è una table calculation semplicissima
CONTRO: non sempre si può inserire la dimensione di cui contare la dimensione, causa splittamento dei dati a un dettaglio troppo basso.
LOD calculation
Possiamo utilizzare le level of details calculation per andare a calcolare le vendite come se “All” fosse selezionato, fissando tutte le dimensioni che vediamo a video:
Se ora proviamo a filtrare un solo stato, la Calculation1 resterà identica, il valore non cambierà, mentre il Sales per totale filtrerà solo il dato per lo stato da noi scelto:
Se i due valori sono uguali, sto selezionando “All”, altrimenti un solo stato.
Ora possiamo creare un calcolo del tipo: IF [Calculation1]=[Sales per totale] then [Sales per totale] else SUM([Sales]) END.
PRO: lavoriamo con numeri, che sono sempre preferibili per questioni di performance
CONTRO: se la misura che vogliamo fissare con la LOD fosse una table calculation, non possiamo utilizzare le LOD.
Aggregazioni Min & Max
Possiamo sfruttare le due aggregazioni MIN e MAX per stabilire cosa abbiamo scelto nel filtro. MIN e MAX, che utilizzati con numeri continui ci restituiscono il valore più basso e più alto, utilizzati con stringhe di testo ci restituiscono la prima e l’ultima voce in ordine alfabetico.
Se ho selezionato un solo stato, il MIN e il MAX saranno ben uguali:
E’ una sola voce, sarà sia la prima che l’ultima in ordine alfabetico. Se invece abbiamo selezionato “All” min e max non potranno essere uguali:
Potremo quindi creare un calcolo tipo: IF MIN([State])=MAX([State]) then SUM([Sales]) else [Sales per totale] END
PRO: può essere utilizzato senza dover inserire la dimensione da filtrare nella visualizzazione e può essere utilizzata in presenza di table calculation.
Bene, abbiamo visto ben 3 modi diversi per capire quanti elementi sono stati selezionati in un filtro.
Ne esistono in realtà almeno altri 2 di modi, uno prevede l’utilizzo di parametri, l’altro l’aggregazione count distinct. E chissà, magari esistono anche altri metodi!
Se ne trovi altri, lasciaci un commento per dirci il tuo procedimento!