<< Back

Trasformare righe in colonne

Può capitare di avere dei dati disposti in righe che in realtà vorremmo mostrare in colonna:

Cattura

Ad esempio Ellis Baillard ha effettuato un acquisto comprando 3 beni differenti, che hanno prezzi differenti e hanno prodotto dei valori di vendita diversi. I dati sono splittati su 3 righe perché si tratta di 1 acquisto composto da 3 beni.

Può nascere l’esigenza di avere questi dati riportati in colonne. Ossia: 1 singola riga che riporti Order ID, Order Date e Customer Name e poi 3 colonne che riportano ognuna la vendita di ogni singolo bene.

Con Alteryx è un’operazione che si effettua con un paio di tool e che diventa dinamica grazie alla possibilità di creare un campo che decreti da solo quante sono le colonne necessarie da creare.

Vediamo come.

Abbiamo 3 righe, vogliamo ottenere 3 colonne. Possiamo creare un numero, che chiameremo ID colonna, che scriva 1 accanto alla prima riga, 2 accanto alla seconda, 3 accanto alla 3, e che ricominci questo conteggio incrementale tutte le volte che cambia l’Order ID. Una sorta di segnaposto.

Se un Order ID ha 10 righe, creeremo un segnaposto che va da 1 a 10 (le nostre future 10 colonne), se un Order ID ha 5 righe, creeremo un segnaposto da 1 a 5, e così via.

Abbiamo 2 differenti metodi per arrivare a questo risultato (ma forse anche di più!):

METDODO 1: FORMULA TOOL + RUNNING TOTAL

Con il Formula Tool creiamo una funzione numerica (Int16 o o anche Byte, un ID non ha valori negativi) che scriva 1 in tutte le righe. Nel box “Expression” del Formula Tool scriviamo proprio 1, e basta.

Cattura

Con il Running Total Tool facciamo la somma cumulativa  del campo “ID colonna” (la somma tra un numero e il numero della riga precedente) raggruppando per Order ID (facendo ricominciare il calcolo al cambio di ogni ID ordine).

Cattura

Il risultato sarà un ID di colonna, il nostro segnaposto, che parte da 1 e aumenta di 1 per ogni riga in cui l’Order ID resta uguale e ricomincia a sommare da 1 quando l’Order ID cambia, e così via…

formula_e_running

METDODO 2: MULTI-ROW FORMULA TOOL

Creiamo una formula con il Multi-Row Formula Tool che crei un nuovo campo numerico il cui contenuto è il valore del nuovo campo stesso della riga precedente + 1. Impostando come 0 il valore per le righe inesistenti (il record #1 della nostra tabella non ha niente nella riga precedente, quindi partirà da 0+1=1) e che raggruppi il calcolo per Order ID.

Cattura

Il risultato sarà un ID di colonna, il nostro segnaposto, che parte da 1 e aumenta di 1 per ogni riga in cui l’Order ID resta uguale e ricomincia a sommare da 1 quando l’Order ID cambia, e così via…

Senza titolo-1

La differenza tra i due metodi è che il primo è più semplice (capire la logica di funzionamento del Multi-Row Formula è un pochino più difficile) ma ci costringe ad usare 2 tool e a creare una colonna inutile, quella che riporta 1 in tutte le righe, che serve solo per il calcolo successivo della somma cumulativa.

Ora che abbiamo creato il segnaposto, Alteryx saprà che, ad esempio, per l’ordine ES-2011-1401137 dovrà creare 2 colonne, mentre per l’ordine ES-2011-1406120 dovrà crearne 6. Ok, ma come si fa?

Con il Cross Tab Tool:

Senza titolo-2

  • Grouping Fields: sono le colonne che vogliamo restino fisse, che non vogliamo ribaltare. Order ID, Order Date, Customer Name.
  • Header Field: è il campo che contiene le righe che diventeranno le intestazioni delle colonne. Il nostro segnaposto, la colonna “Run Tot_ID colonna” se abbiamo usato il primo metodo, “ID colonna” se abbiamo usato il secondo.
  • Data Field: è il campo che contiene le righe che saranno i dati della tabella. La colonna “Sales”.
  • Methodologies: come vogliamo aggregare i dati nel caso in cui più valori confluiscano nella stessa cella. Non è il nostro caso, perché ogni riga di Sales diventerà una colonna separata, però è obbligatorio selezionare un metodo. Scegliamo “Sum”, è totalmente indifferente. Se ad esempio raggruppassimo i dati solo per Customer Name, nelle colonne avremmo la somma di tuttii Sales per ogni cliente, senza distizione di Order ID.

Ed ecco il risultato: l’ordine ES-2011-1401137 ha 2 colonne, mentre l’ordine ES-2011-1406120 ne ha 6.

Cattura

Ultimo passaggio: 1, 2, 3, 4, 5, 6 e 7 non sono dei titoli di colonna molto descrittivi. Possiamo rinominarli con il Dynamic Rename Tool, andando ad aggiungere semplicemente un prefisso a tutte le colonne che sono il segnaposto.

Senza titolo-3

E se avete intenzione di riutilizzare in futuro lo stesso workflow, con dati nuovi, aggiornati, ricordatevi di flaggare anche la voce “Dynamic or Unknown Fields”.

Se non lo fate, il Dynamic Rename rinominerà solo le colonne che si chiamano 1, 2, 3, 4, 5, 6 e 7. Se nei nostri dati nuovi c’è un Order ID da 8 oggetti, la colonna 8 resterà esclusa e non sarà rinominata. Se invece selezionate il “Dynamic or Unknown Fields” anche le nuove colonne (che per ora sono unknown, sconosciute) verranno rinominate nel modo corretto.

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.