<< Back

Dynamic Replace Tool

Il “Dynamic replace tool” permette di sostituire i valori di una tabella in base a una condizione, che può essere una formula booleana (vero/ falso) o valori fissi.

Ad esempio, abbiamo un elenco di studenti suddivisi in 3 sezioni (Sezione A, Sezione B, Sezione C) e dobbiamo assegnarli a una classe (A-B-C) in base alla lettera iniziale del cognome.

Tabelle
Tabelle

Dobbiamo costruire una formula che pressapoco dica:

se un nome di quelle tre colonne inizia con una lettera compresa tra la lettera A e la lettera F, allora la classe è “A”,
se inizia con una lettera compresa tra G e P, allora la classe è “B”,
in tutti gli altri casi la classe è “C”.

Perché non usare un “Multiformula field allora? Anche lui permette di fare calcoli su tutte le colonne (current field). E in effetti, otteniamo il risultato che vogliamo. Musso e Pavese devono andare nella classe B della loro sezione, Bonao nella classe A della sezione C.

Immagine2
Clicca per vedere a dimensione reale

Perché il Multifield formula non è dinamico e ha un solo connettore in entrata.

Usando il Multifield, la tabellina “Classe/Range di lettere” sarebbe del tutto inutile. Dobbiamo scrivere a mano la formula IF. Poco male, abbiamo solo 3 classi. Non è un problema. Ma se dovessimo suddividere i nostri dati in 15 classi? Vogliamo scrivere 15 righe di formula IF? No!

E se la tabellina “Classe/Range di lettere” fosse il risultato di un altro calcolo precedente che calcola i range di lettere in modo da avere delle classi da circa 25 persone? Se domani si iscrivono 50 nuovi studenti, saremo obbligati ad aggiungere altre classi e anche i range di lettere cambierebbero… ci toccherebbe aggiornare tutta la formula a mano? No!

Alteryx ci mette a disposizione un tool dinamico che, una volta impostato, funziona anche se cambia la composizione dei nostri dati: cerchiamo di capire come funziona!

Scarica il workflow d’esempio con commenti

Il tool ci chiede un campo che contenga il nome delle colonne in cui andare a fare le sostituzioni (Field name field), un campo in cui indicare la formula/condizione (Boolean expr. field) e un campo che contenga i valori da sostituire (Output value field).

Immagine3
Clicca per vedere a dimensione reale

Lasciamo perdere per un momento tutte le altre opzioni e andiamo a vedere i connettori del tool.

D è l’entrata della tabella originale.
R è l’entrata della tabella che contiene i 3 campi richiesti dal tool.
O è l’uscita della tabella con i dati sostituiti
S è un sommario che dice tutte le combinazioni Field name/Output value sostituite.

Dobbiamo creare la tabella da connettere al connettore R che contenga:

1) l’elenco delle colonne in cui andare a sostituire i valori
2) la formula che regola la sostituzione
3) i valori da sostituire

Il metodo più semplice per avere un elenco delle colonne che compongono una tabella è usare il Field Info Tool, che si trova nella categoria Developer, e ci fornisce un sommario con le info di tutte le colonne. Poi, usando un Select Tool, andremo a deselezionare tutti i campi tranne “Name” che è l’unico che ci interessa.

Immagine
Clicca per vedere a dimensione reale

Ora creiamo la formula.

Dobbiamo creare una formula dinamica, quindi che contempli tutte le combinazioni possibili Sezione/Classe (Sezione A/Classe A, Sezione A/Classe B, Sezione A/Classe C, Sezione B/Classe A…).

Dobbiamo usare un Append Fields Tool che fa una join tra tutti i dati della tabella di sinistra con tutti i dati della tabella di destra:

Immagine
Clicca per vedere a dimensione reale

Vi state per caso chiedendo perché io abbia messo la classe tra virgolette e il range di lettere tra parentesi quadre? Ve lo spiego subito.

Dobbiamo scrivere una formula per il Dynamic Tool. Che strumento possiamo usare per scrivere qualcosa? Il Formula Tool.

Che cosa succede se scrivo una formula nel Formula Tool? Lui esegue l’operazione! Noi abbiamo bisogno che la formula arrivi al Dynamic Tool senza che venga eseguita dal Formula tool.

Dobbiamo scrivere la formula come se fosse una stringa di testo, e le stringhe di testo si ottengono usando le virgolette.

Immagineg
Clicca per vedere a dimensione reale

Come potete vedere dall’immagine, la formula deve essere una stringa di testo, ma non il pezzettino che contiene il range di lettere. Quello deve restare il campo di una formula e aggiornarsi ad ogni riga con il relativo valore, per creare una formula per ogni combinazione sezione/classe. Infatti il Dynamic Replace non farà altro che provare tutte le formule che gli facciamo entrare e restituirci un risultato quando trova un match.

Cerchiamo di dare un senso alla formula:

REGEX_Match(Left([_CurrentField_], 1), ‘+‘”‘+[RANGE]+‘”)’

Dobbiamo eseguire il controllo solo sulla lettera iniziale. Quindi vogliamo il regex match della prima lettera a partire da sinistra. Sono due funzioni nidificate.

La sintassi della funzione LEFT è –> Left([Campo], n caratteri) –> Left([_CurrentField_], 1)

La sintassi del REGEX MATCH è –> REGEX_Match([Campo], “pattern”) –> REGEX_Match(Left([_CurrentField_], 1), “pattern”)

Il pattern è il campo [Range], però va messo tra virgolette –> REGEX_Match(Left([_CurrentField_], 1), “[Range]”)

Se proviamo questa formula, vedremo che il risultato sarà:

Cattura
Risultati della formula sbagliata

Ci stampa [Range] come se fosse una stringa di testo. Noi invece vogliamo che ci dia il range di lettere “[A-F]” tra virgolette:

Cattura
Risultati della formula corretta

Ma come si fa a rendere le virgolette una stringa? Se proviamo a mettere le virgolette tra virgolette, non funziona. Dato che le virgolette fanno parte della sintassi delle formule (significano che quello che c’è al loro interno è un testo), dobbiamo usare una sintassi alternativa e sostituire le virgolette per racchiudere una stringa di testo con gli apostrofi.

‘REGEX_Match(Left([_CurrentField_], 1), ‘ (la 1 parte della formula tra apostrofi)
+
‘”‘ (virgolette racchiuse tra due apostrofi)
+
[RANGE] (il campo range senza apostrofi)
+
‘”)’ (virgolette e parentesi chiusa racchiuse tra due apostrofi)

Abbiamo 3 stringhe di testo delimitate da apostrofi (rosso) e un campo formula, uniti con un operatore +.

Ora non ci resta che connettere al connettore D la tabella inziale, al connettore R la tabella con le formule e impostare in questo modo il tool.

Immaginer
Clicca per vedere a dimensione reale

Ecco che abbiamo una tabella uguale a quella iniziale ma con i valori sostituiti. Il Dynamic Replace va a provare i 3 regex_match su ogni colonna e quando/se trova una corrispondenza, scrive l’output.

Se provate a deselezionare la casellina “Values are Expressions/Formula“, vedrete che le lettere A, B, C avranno le virgolette, esattamente come sono nella tabellina originale. Questo perché nascono come valori fatti per entrare in una formula. Se vogliamo evitare che vengano restituite come output, ci basterà indicare che sono una formula/espressione e le virgolette spariranno.

Per quanto riguarda le altre opzioni del tool che ho saltato prima, abbiamo la possibilità di decidere se il tool debba rilevare da solo che tipo di campo sia, se vogliamo lasciare il tipo di campo originale o se vogliamo impostarne uno noi e, in caso, anche quale. L’ultima parte sotto permettere di riceve o meno dei warning quando il tool non è in grado di trovare un match e di sostituire un valore nelle tabelle, restituendoci valori Null.

Nel workflow d’esempio ci sono ancora un paio di passaggi per abbinare con una join la tabella originale e quella coi valori sostituiti e creare una classica tabella a 3 colonne:

Immagine
Risultato finale

Considerato che fin qui ho già scritto un poema e considerato che si tratta sempre dei soliti tool (cross tab, transpose, regex, filter…), che ormai conoscerete alla nausea se avete seguito i nostri tutorial, lascio a voi il compito di proseguire da soli con il workflow, che comunque è commentato.

E in caso di bisogno, non esistate a chiedere lasciando un commento!

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.