Esempio: Campo derivato persistente
Si potrebbe avere un processo Seleziona configurato per scegliere gli ID sulla base di un vincolo su un campo derivato, collegato a un processo Snapshot per emettere i record selezionati che comprendono quel campo derivato. Se si contrassegna il campo derivato in modo che sia persistente, il valore calcolato viene trasmesso dal processo Seleziona al processo Snapshot.
Un altro uso dei campi derivati persistenti è con qualsiasi campo derivato di tipo aggregato (ad esempio AVG o GROUPBY). Questi campi aggregati vengono calcolati sulla base delle molteplici righe di dati all'interno della cella corrente, pertanto il valore di questi campi aggregati cambia, così come cambia il contenuto della cella. Con i campi derivati persistenti sarà possibile scegliere di mantenere il valore calcolato originale e poi di portarlo verso altri processi. Nel caso in cui si sceglie di ricalcolare invece il campo derivato, si ottiene un valore calcolato sulla base dei record restanti nella cella corrente.
Quando un processo prende più input, come ad esempio un processo di Snapshot che lavora con l'input da due processi Seleziona, tutti i campi derivati persistenti sono disponibili per il processo downstream.
Nel caso in cui un campo derivato non sia disponibile in tutti i processi Seleziona in ingresso, e sia compreso nell'output per un processo Snapshot, allora il processo Snapshot visualizza un valore ZERO per il campo derivato persistente in tutte le righe di output dal processo Seleziona che non aveva un campo derivato persistente.
Nel caso in cui un campo derivato persistente non sia disponibile in tutti i processi Seleziona in ingresso, e nel caso in cui venga usato per definire un processo Segmento, allora il processo Segmento contiene dei segmenti vuoti per i processi Seleziona che non avevano un campo derivato persistente.
Il processo Segmento rimane non configurato nel caso in cui si cerchi di definire un segmento con un'espressione che utilizza più di un campo derivato persistente non disponibile in tutti i processi Seleziona.
Le seguenti linee guida si applicano ai campi derivati persistenti (PDF):
*
*
*
*
*
*
Tuttavia, quando si usa un campo derivato sulla base di un campo tabella, l'output comprende un campo tabella indirettamente. Quindi, sarà disponibile un record per ogni istanza di un valore ID. In altre parole, se il valore ID si verifica sette volte nei dati, verranno emessi sette record.
I campi derivati persistenti archiviano solo un valore singolo per ciascun ID del destinatario, il quale viene selezionato in modalità casuale dai valori disponibili. Ciò significa che quando si sta lavorando con dati non normalizzati, sarà necessario servirsi di una funzione macro GROUPBY per ottenere il comportamento desiderato.
Ad esempio, ipotizziamo di voler trovare dalla tabella delle transazioni d'acquisto l'importo in dollari più alto in una singola transazione da un cliente e di volerlo salvare come campo derivato persistente per la lavorazione downstream. Si potrebbe scrivere un campo derivato (e poi contrassegnarlo come campo persistente) come segue:
Highest_purchase_amount = groupby(CID, maxof, Purch_Amt)
Rispetto ai dati delle transazioni d'acquisto non normalizzati come ad esempio questo, nel nostro caso si potrebbe scrivere così:
Quando il campo derivato viene reso persistente, sceglie (casualmente) un qualsiasi valore (sono tutti $300) e rende persistente il valore $300 per il cliente A.
Un secondo esempio, meno ovvio, potrebbe consistere nel selezionare un punteggio modello predittivo da una tabella di punteggio per uno specifico modello X. In questo caso il campo derivato potrebbe essere così:
ModelX_score = groupby(CID, maxof, if(Model = 'X', 1, 0), Score)
E i dati potrebbero essere:
Rendendo persistente il campo derivato, ModelX_Score, da' il valore desiderati al valore del punteggio di 80. Sarebbe sbagliato creare un campo derivato:
Bad_ModelX_score = if(Model = 'X', Score, NULL)
Ciò porterebbe a questo risultato:
Quindi, quando si rende persistente il campo derivato Bad_ModelX_score, il valore persistente potrebbe essere ZERO od 80. Nel caso in cui si stia lavorando con dati non normalizzati e i valori del campo derivato non siano tutti gli stessi, rendendo persistente il campo derivato potrebbe determinare la restituzione di un qualsiasi valore. Ad esempio, definendo Derived_field_Score = SCORE e rendendolo persistente si potrebbe ottenere il valore 57, 72, o 80 per il cliente A. Per garantire il comportamento desiderato, sarà necessario utilizzare la macro GROUPBY sull'ID cliente e garantire che il valore del campo derivato sia lo stesso per tutti i dati di quel cliente.