<< Back

Incremento alfabetico con Alteryx

Esiste la parola incremento alfabetico? È italiano? Non saprei, ma non saprei neanche come altro definirlo!

Con Alteryx già sappiamo che esiste la possibilità di creare delle righe i cui valori sono valori numerici o date che aumentano (o diminuiscono) rispetto al valore precedente, seguendo una certa logica.

Possiamo usare il Running total per calcolare la somma cumulativa (somma tra una riga e la precedente), possiamo usare il Multi-Row Formula per creare un ID che aumenta di +1 ad ogni riga, o anche il Generate Rows Tool per aggiungere x giorni a una data. Ma se avessimo bisogno di creare delle righe in cui ad aumentare in modo incrementale siano delle lettere, delle stringhe di testo?

Vogliamo scaricare da internet dei dati che riguardano le canzoni. Il sito che abbiamo scelto suddivide il proprio database in base al nome dell’artista e ci permette di fare una ricerca per lettera:

Cattura

La prima parte dell’indirizzo web è sempre uguale, cambia solo l’ultimo carattere, la lettera scelta.

Quello che dobbiamo fare è creare 26 differenti indirizzi, che sono tutti uguali tranne l’ultima lettera:

http://lyricstranslate.com/it/artists-letter-A
http://lyricstranslate.com/it/artists-letter-B
http://lyricstranslate.com/it/artists-letter-C
http://lyricstranslate.com/it/artists-letter-D
.
.
.
http://lyricstranslate.com/it/artists-letter-Z

e utilizzare questo elenco come input per il Download Tool. Abbiamo voglia di scrivere a mano 26 indirizzi? NO!

Vediamo come fare con Alteryx.

Trasciniamo nell’area di lavoro un Text Input Tool e scriviamo la prima parte dell’indirizzo web, quella che resta fissa:

Cattura

Per creare la successione di lettere dobbiamo creare 26 righe che contengano la successione alfabetica delle lettere, dalla a alla z. Per farlo useremo il Generate Rows Tool, che permette di creare delle nuove righe, seguendo una condizione logica ben precisa, e che continua a creare righe in loop, finché non è soddisfatta una certa condizione.

Detto in soldoni: vogliamo creare una formula per la quale partendo dalla prima riga che contiene la lettera “a”, ogni riga successiva contenga la lettera successiva, e vada avanti a creare righe con lettere successive finché non viene creata la riga con la lettera “z”. Quando arriva a “z” si deve fermare.

Prendiamo un altro Text Input Tool e creiamo due colonne: Inizio = a e Fine = z

Cattura

Ora arriva la parte divertente.

Cattura

Connettiamo il Generate Rows al Text Input Tool che contiene le due colonne Inizio/Fine e creiamo una nuova colonna che io ho chiamato “Increm. Lettere”.

La nostra espressione deve iniziare dal campo [Inizio] (la lettera a) e finire quando il risultato sarà minore o uguale a [Fine] (la lettera z).

Quindi:

Riga n. 1 = a (Initialization Expression)
Riga n. 2 = a+1 = b
Riga n. 3 = b+1 = c
Riga n. 4 = c+1 = d
.
.
.
.
Riga n. 26 = y+1 = z (Condition Expression)

E va bene, ora abbiamo capito come funziona il loop! Ma come facciamo a calcolare la lettera a+1?

Ogni lettera, a seconda del set di caratteri di cui fa parte, è in realtà un codice numerico. Nel codice ANSI, ad esempio, la lettera “a” è il codice numero 97. La lettera “b” è il codice 98. La lettera “c” è il codice 99, e così via…(se vi interessa sapere l’intera mappatura delle lettere, vi basta fare una ricerca su google).

Possiamo trasformare la lettera in codice, aggiungere + 1 al codice e poi ritrasformare il tutto in lettera. Le funzioni che abbiamo bisogno si trovano tutte nella categoria “Conversion”.

Guardiamo i vari passaggi con un Formula Tool, per cercare di capire come funzionano:

Senza titolo-1

Da lettera a codice –> CharToInt([Inizio]) –> Ci restituisce il codice numerico della lettera “a” (97)

Codice più uno –> CharToInt([Inizio])+1 –> Ci restituisce il codice numerico della lettera “a” aumentato di 1 (98)

Da codice a lettera –> CharFromInt(CharToInt([Inzio])+1) –> Ci restituisce la lettera corrispondente al codice numerico di “a” aumentato di 1 (98 = b)

Andiamo ad inserire la formula completa CharFromInt(CharToInt([Increm. Lettere])+1) nel campo “Loop Expression” del Generate Rows Tool e avremo le nostre 26 righe con le 26 lettere dell’afabeto:

Cattura

Ora non ci resta che abbinare le 26 lettere alla parte iniziale del link che avevamo creato con il primo Text Input Tool, per creare l’elenco di 26 indirizzi. Dobbiamo creare una sorta di Join che abbini tutte le righe della prima tabella con tutte le righe della seconda tabella. Possiamo usare l’Append Field Tool:

Cattura

Il tool non ha bisogno di particolari configurazioni. Abbina tutto a tutto. Possiamo scegliere quali colonne vogliamo facciano parte dell’output e l’unico campo a cui dobbiamo prestare attenzione è il menù a tendina in fondo alla finestra.

Proprio per il fatto che con questo tool vengono create tutte le combinazioni possibili tra le righe di due tabelle, è settato di default che venga proposto un messaggio di errore o di warning se vengono create più di 16 righe. Noi in questo caso sappiamo esattamente cosa stiamo facendo e creare tutte le combinazioni possibili è il nostro obiettivo. Di righe ne vogliamo 26, quindi possiamo scegliere di permettere tutte le combinazioni, senza alcun messaggio di errore/avvertimento.

Ora possiamo unire le due colonne in un’unica stringa, usando una semplice formula [Prima parte]+[Increm. Lettere] e avremo la lista di indirizzi web da far scaricare al Download Tool, che ci scaricherà le relative pagine html.

Senza titolo-2

Potremmo, ad esempio, con delle operazioni di parsing andare ad estrarre tutti gli indirizzi delle pagine di ogni singolo cantante e scaricare con un secondo Download Tool tutte le pagine html, da cui andare poi a reperire gli indirizzi di ogni singola canzone e scaricare con un ultimo download tool i testi di tutte le canzoni di tutti i cantanti… o qualsiasi analisi avessimo intenzione di fare inizialmente!

Federica Ferrarini

Trainer - Milano

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.