<< Back

Alteryx Macro Series: macro iterative

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

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 (per quelle di batch la sola presenza del Parameter Controller basta per far sì che Alteryx imposti automaticamente il workflow come batch macro) e bisognerà quindi impostare anche il workflow.

Ad esempio, vogliamo creare N numeri random:

Per il gruppo A vogliamo creare 3 numeri random, per il gruppo B ne vogliamo creare 5, per il gruppo C 2 numeri e per il gruppo D addirittura 50.

La nostra macro iterativa dovrà continuare a creare numeri random finché il numero di iterazioni non sarà = al numero scritto nella colonna “Numeri random da creare”. A quel punto dovrà fermarsi.

Copiamo l’input tool con la tabellina, apriamo un nuovo foglio di lavoro e incolliamo l’input, poi ci clicchiamo sopra col tasto destro e lo convertiamo in Macro Input:

Lo step successivo sarà utilizzare un Formula Tool per creare il numero random e per tracciare il numero di iterazioni:

Con il primo calcolo “N random generato” = RandInt(100) andiamo a calcolare un numero random intero compreso tra 0 e 100.

Con il secondo calcolo “Engine.InterationNumber” = [Engine.InterationNumber]+1 andiamo a stampare/tracciare il numero di iterazione, utilizzando una variabile che si trova nella categoria “Constants” e che si chiama Engine.InterationNumber, a cui andiamo a sommare 1, perché per Alteryx il primo giro, la prima iterazione, è in realtà 0.

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

Al primo giro è stato creato il numero 67 per il gruppo A, il 74 per il gruppo B e il 36 per il gruppo C. Ok, ora dobbiamo dire alla macro che servono degli altri “giri” per arrivare al numero specificato nella seconda colonna. Abbiamo bisogno di un Filter Tool per dichiarare la condizione per la quale la macro continuerà ad iterare finché non sarà soddisfatta: [Engine.IterationNumber] (il calcolo creato con la formula) = [Numeri random da creare]

Ora soffermiamoci un attimo sulla logica delle iterazioni.

  • Se la condizione è vera, connettore T del FIlter, il risultato della formula andrà a finire nell’output della macro ed il loop sarà finito.
  • Se la condizione è falsa, connettore F del Filter, il risultato della formula andrà a finire nell’output della macro, ma allo stesso tempo passerà di nuovo nel loop, dando vita al giro successivo.
  • Man mano che ad ogni loop/giro i risultati vanno ad inserirsi nell’ouput, verranno uniti uno sotto l’altro con l’Union tool.

  • Prima iterazione:
    1. Engine Iteration Number = 1.
    2. Numeri da creare=3.
    3. Immagazzina il risultato nell’Union Tool.
    4. 1 uguale a 3?
    5. Condizione falsa, manda il flusso anche all’output dell’iterazione.
    6. L’output dell’iterazione manda il flusso all’input dell’iterazione e il giro ricomincia.
  • Seconda iterazione:
    1. Engine Iteration Number = 2.
    2. Numeri da creare=3.
    3. Immagazzina il risultato nell’Union Tool e appendi la tabella a quella del giro precedente.
    4. 2 è uguale a 3?
    5. Condizione falsa, manda il flusso anche all’output dell’iterazione.
    6. L’output dell’iterazione manda il flusso all’input dell’iterazione e il giro ricomincia.
  • Terza iterazione:
    1. Engine Iteration Number = 3.
    2. Numeri da creare=3
    3. Immagazzina il risultato nell’Union Tool e appendi la tabella a quella del giro precedente.
    4. 3 è uguale a 3?
    5. . Condizione vera, manda il flusso SOLO all’Union Tool appendi la tabella a quella del giro precedente.
    6. Non esiste alcun False, l’output dell’iterazione non riceve nulla e l’itarazione 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 l’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 i nostri numeri random generati, appesi uno sotto l’altro iterazione dopo iterazione. Man mano che le iterazioni aumentano, ci saranno sempre meno gruppi che vengono processati perché quando raggiungono la condizione posta (numero iterazioni=numeri da creare) rientrano nel loop solo i gruppi che ancora devono raggiungere la condizione.

Scarica il workflow d’esempio: LINK

One thought on “Alteryx Macro Series: macro iterative

  1. After an iteration has completed, its output may be looped back into the input of the macro for the next iteration.

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.