<< Back

Alteryx Macro Series: macro iterative II

—————————————————–

ALTERYX MACRO SERIES:

MACRO STANDARD

MACRO DI BATCH senza Group By

MACRO DI BATCH Group By

MACRO ITERATIVE: numero iterazioni

MACRO ITERATIVE: clausola until

—————————————————–

 

Che cos’è una macro iterativa?

Una macro itarativa non è altro che un workflow racchiuso in un singolo tool che effettua una certa operazione con una clausola UNTIL, fino a che… fino a cosa? Fin quando una certa condizione non è soddisfatta.

A cosa serve una macro iterativa?

Il principale utilizzo delle macro iterative è quello di creare dei loop che eseguono una certa opearazione per un certo numero di volte, senza aver la necessità di sapere a priori quante volte il loop debba girare per ottenere il risultato che vogliamo.

Come si costruisce una macro iterativa?

Una macro iterativa è un insieme di tool classici (Input, output, data preparation…) con l’aggiunta di 2 Output Macro: uno per il risultato dell’elaborazione, uno per far ricominciare il loop. Le macro iterative sono inoltre le uniche macro che non vengono riconosciute in automatico e bisognerà quindi impostare anche il workflow.

Ad esempio, vogliamo simulare l’operazione della divisione.

Eseguire l’operazione 10/3 è come sottrarre a 10 il numero 3 finché il risultato non sarà minore di 3. A quel punto avremo trovato che:

  • 10 – 3 = 7 (prima iterazione)
  • 7 – 3 = 4 (seconda iterazione)
  • 4 – 3 = 1 (terza iterazione)
  • 1 è minore di tre, quindi abbiamo finito.
  • 10 diviso 3 fa 3 col resto di 1.

Quindi, a differenza delle macro iterative basate sul numero di iterazioni come parametro per far terminare il loop, qui dovremo:

  1. eseguire la sottrazione [Numero]-[Divisore]
  2. andare ad aggiornare la tabella di input che rientrerà nel loop (10 che poi diventa 7, che poi diventa 4, che poi diventa 1)
  3. controllare se il [Numero] aggiornato è maggiore o minore del [Divisore] per stabilire se debba rientrare nel loop o meno

Detto in poche parole, la nostra macro iterativa dovrà continuare a sottrarre la colonna [Divisore] alla colonna [Numero] finché [Numero] < [Divisore]. A quel punto dovrà fermarsi.

Apriamo Alteryx e creiamo una tabellina con il Text Input:

Le divisioni che vogliamo calcolare sono 10/3, 15/5 e 27/10.

Copiamo il Text Input, apriamo un nuovo foglio di lavoro e incolliamolo, poi ci clicchiamo sopra col tasto destro e lo convertiamo in Macro Input:

Lo step successivo sarà utilizzare un Formula Tool per calcolare la sottrazione (10-3):

“Risultato sottrazione” = [Numero]-[Divisore].

Ecco il risultato della formula se mandiamo in esecuzione la macro:

10 meno 3 fa 7, 15 meno 5 fa 10 e 27 meno 10 fa 17.

Possiamo andare ad “immaganizzare” questo primo risultato nel Macro Output:

Ora dobbiamo dire alla macro che servono degli altri “giri” per arrivare alla condizione finché [Numero] < [Divisore]. Abbiamo bisogno di un Filter Tool per dichiarare la nostra condizione. Ma prima di questo passaggio dovremo andare ad aggiornare la tabella originaria, di modo che durante la seconda iterazione andremo a sotrarre 3 a quello che è adesso il risultato della sottrazione (7).

Vi ricordate il percorso logico descritto all’inizio?

  • 10 – 3 = 7 (prima iterazione)
  • 7 – 3 = 4 (seconda iterazione)
  • 4 – 3 = 1 (terza iterazione)
  • 1 è minore di tre, quindi abbiamo finito.
  • 10 diviso 3 fa 3 col resto di 1.

Se non lo facessimo, la macro continuerebbe a sottrarre 3 a 10 e non arriveremmo mai alla condizione. Creiamo in sostanza un loop infinito.

Nel menù a tendina andiamo a scegliere la colonna [Numero], così sovrascriviamo il risultato della nuova formula, che dovrà essere uguale alla colonna [Risultato sottrazione].

Ora possiamo usare il Filter Tool per dichiarare la nostra condizione: [Numero]<[Divisore]

  • Se la condizione è vera, connettore T del Filter, i record non ha più bisogno di successivi loop, è già stato “immagazzinato” nell’Output Tool inserito precedentemente, possiamo abbandonare questo connettore.
  • Se la condizione è falsa, connettore F del Filter, i record hanno bisogno di un loop successivo di sottrazione e dovremo connetterlo ad un secondo Macro Output che farà ripartire il loop.

Prendiamo come esempio solo l’ID A.

  1. Prima iterazione:
    1. 10-3=7. Immagazzina questo risultato nel primo Macro Output.
    2. Rimpiazza 10 con 7.
    3. 7 è minore di 3? Condizione falsa, manda il flusso nel Macro Output dell’iterazione.
    4. L’output dell’iterazione manda il flusso all’input dell’iterazione e il giro ricomincia.
  2. Seconda iterazione:
    1. 7-3=4. Immagazzina questo risultato nel primo Macro Output e appendilo a quello dell’iterazione precedente.
    2. Rimpiazza 7 con 4.
    3. 4 è minore di 3? Condizione falsa, manda il flusso nel Macro Output dell’iterazione.
    4. L’output dell’iterazione manda il flusso all’input dell’iterazione e il giro ricomincia.
  3. Terza iterazione:
    1. 4-3=1. Immagazzina questo risultato nel primo Macro Output e appendilo a quello dell’iterazione precedente
    2. Rimpiazza 4 con 1.
    3. 1 è minore di 3? Condizione vera, il flusso si stoppa, muore nel connettore T.
    4. Non esiste alcun False, l’output dell’iterazione non riceve nulla e l’iterazione si blocca, la macro ha finito.

Ma come facciamo a far capire ad Alteryx quale dei due Macro Output è il vero output e quale quello che fa ripartire i loop?

Interface Designer

Clicchiamo su un punto bianco dell’area di lavoro e andiamo nelle configurazioni del Workflow.

Alteryx ha già capito che si tratta di una macro, perché abbiamo inserito i Macro Input e Output Tool, quello che non può capire da solo è che vogliamo creare una macro iterativa. Scegliamola noi dal menù a tendina:

Ora andiamo al menù View –> Interface Designer (Ctrl+Alt+D) e clicchiamo sull’ultima iconcina a forma di chiave inglese. Dobbiamo specificare da quale Macro Input inizia il loop e in quale Macro Output il loop finisce e di conseguenza, qualsiasi altro input o output macro saranno “normali” input e output.

In questa finestra di configurazioni possiamo anche specificare altre opzioni, tra cui il numero massimo di iterazioni permesse, che però non approfondiremo adesso. Ora è arrivato il momento di salvare la macro sul nostro pc, ritornare al workflow iniziale, quello che contiene solo il Text Input e inserire la macro appena creata.

Clic col tasto destro su un punto bianco del canvas e poi scegliamo “Insert…” e poi scegliamo l’ultima voce, “Macro” e andiamo a caricare la macro da dove l’abbiamo precedentemente salvata.

Connettiamo il nostro input alla macro e mandiamo in esecuzione:

La macro non richiede nessuna configurazione e il risultato saranno le nostre sottrazioni, appese una sotto l’altra iterazione dopo iterazione. Man mano che le iterazioni aumentano, ci saranno sempre meno ID Operazione che vengono processati perché quando raggiungono la condizione posta non rientrano nel loop.

Se ora vogliamo essere proprio puntigliosi, in realtà il risultato che ci interessa è solo quello dell’ultima iterazione per ogni ID Operazione. Possiamo inserire un Summarize impostato come nell’immagine di seguito per arrivare al risultato voluto:

Scarica il workflow d’esempio: LINK

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.