Insights / Blog

Tableau: dov’è la funzione PadLeft/Right?

Vi capita spesso di gestire stringhe di testo che in realtà non sono altro che sequenze di numeri a lunghezza fissa, come ad esempio i CAP o gli IBAN bancari?

Può capitare che, se la colonna che contiene i nostri CAP – o in generale le nostre stringhe a lunghezza fissa – viene interpretata o settata come numerica, perda gli zeri iniziali e ci ritroviamo con il cap di Roma che da 00118 diventa 118.

Se siete utilizzatori di Alteryx (e se non lo siete, vi consiglio di provarlo!) sapete già che esistono le due funzioni PadLeft e PadRight che permettono di forzare la lunghezza della stringa ad una lunghezza fissa, uguale per tutta la colonna, e i testi che hanno una lunghezza minore di quella specificata verranno completati con tanti caratteri X fino ad arrivare alla lunghezza specificata, che verranno aggiunti a sinistra se stiamo usando PadLeft o a destra se stiamo usando PadRight. Ad esempio:

PadLeft([CAP), 5, “0”)

Tutte le stringhe saranno di 5 caratteri e alle stringhe più corte saranno aggiunti N zeri a sinistra fino ad arrivare ad una lunghezza di 5.

La stessa cosa si può ottenere anche in excel combinando le funzioni TESTO e RIPETI.

E in Tableau? Se guardiamo le calculation di testo disponibili, pad left e pad right non esistono.

Dovremmo quindi metterci a scrivere degli intricati IF statement per andare a considerare tutte le combinazioni di “lunghezze/zeri da aggiungere” possibili… ma in realtà esiste un metodo più furbo!

Facciamo un esempio. Abbiamo una tabella che ha una colonna con il codice provincia, che però è diventato un numero e quindi gli zeri iniziali sono stati troncati. In realtà dovrebbe essere una stringa di testo con lunghezza 3:

data

Nella prima riga abbiamo 9, ma in relatà dovrebbe essere 009.

Non essendoci una funzione dedicata, dovremmo metterci a contemplare tutte le ipotesi possibili con una formula IF: se la lunghezza di Prov è 1 allora aggiungi 2 zeri, se la lunghezza è di 2, di zeri aggiungine uno, se la lunghezza è 3, non aggiungere niente.

IF LEN(STR([Prov]))=1 THEN “00” + STR([Prov])
ELSEIF LEN(STR([Prov]))=1 THEN “0” + STR([Prov])
ELSE STR([Prov])
END

In questo modo 9 diventerà 009, 32 diventerà 032 e 432 rimarrà 432 perché ha già lunghezza tre.

Che nel caso specifico non è nulla di complicato… sono 3 casi possibili. Ma pensate ad esempio ad un codice IBAN, dove l’ultimo pezzo, quello del numero di c/c, è una stringa fissa di 12 caratteri e quindi dovremmo contemplare 12 combinazioni di IF/ELSEIF!

In realtà esiste un metodo più semplice… e furbo!

Se io so che una stringa di testo deve avere sempre lunghezza fissa di 5, posso aggiungere 5 zeri a sinistra di tutta la colonna (indipendentemente dalla lunghezza originale delle stringhe) e poi tenere solo i 5 caratteri a partire da destra, con la funzione RIGHT:

RIGHT(“000” + STR([Prov]), 3)

Passo 1: aggiungere al codice un numero di zeri pari alla lunghezza fissa che voglio ottenere, tre:

000” + STR([Prov])

Che ci restituirà come risultato:

009
00032
000432

Passo2: estrarre i primi tre caratteri a partire da destra:

RIGHT(“000” + STR([Prov]), 3)

Che ci restituirà come risultato:

009
032
432

Allo stesso modo possiamo simulare il PadRight, nel caso in cui i caratteri per arrivare alla lunghezza fissa siano da aggiungere a destra. Se la lunghezza fissa fosse 12, possiamo aggiungere 12 zeri dopo la nostra stringa e poi tenere solo i primi 12 caratteri a partire da sinistra:

LEFT(STR([Prov]) + “000000000000”, 12)

Per qualsiasi domanda e/o aiuto contattateci al The Information Lab sito.

Blog
Geomarketing: perché serve e come farlo nel modo giusto

Geomarketing: perché serve e come farlo nel modo giusto

Il geomarketing rappresenta una leva formidabile per le aziende: un’attività strategica che permette di monetizzare...

Alteryx
Fastweb

Fastweb migliora la qualità dell’interazione con il cliente grazie ad Alteryx

Fastweb ha investito fortemente nella Data Analytics e con il supporto di The Information Lab...