<< Back

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.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.