Per alcune operazioni, la sequenza degli eventi si rivela importante.
L'applicazione supporta le seguenti sequenze di record:
- Sequenze e serie temporali
- Funzioni sequenza
- Indicizzazione di record
- Calcolo della media, somma e confronto di valori
- Monitoraggio della differenziazione delle modifiche
@SINCE
- Valori di offset
- Funzionalità aggiuntive relative alle sequenze
In numerose applicazioni, ogni record in un flusso può essere considerato come un caso singolo, indipendente da tutti gli altri. In queste circostanze, l'ordine dei record è in genere irrilevante.
Per alcune classi di problemi, tuttavia, la sequenza di record è estremamente importante. Si tratta in genere di situazioni relative a serie temporali, in cui la sequenza di record rappresenta una sequenza ordinata di occorrenze ed eventi. Ogni record rappresenta una snapshot di un momento specifico nel tempo. È tuttavia possibile che la maggior parte delle informazioni utili non sia contenuta nei valori del momento, bensì risieda nella variazione e nel comportamento di tali valori nel corso del tempo.
Il parametro rilevante può anche non essere rappresentato dal tempo. Gli stessi principi possono essere applicati anche a record che rappresentano, per esempio, analisi eseguite a distanze diverse lungo una linea.
Le funzioni speciali e di sequenza sono immediatamente riconoscibili grazie alle seguenti caratteristiche:
- Sono tutti prefissati da
@
- I loro nomi sono indicati in maiuscolo
Le funzioni sequenza possono fare riferimento al record correntemente elaborato da un nodo, ai record che hanno già attraversato un nodo e anche, in un caso, ai record non ancora passati attraverso un nodo. Le funzioni di sequenza possono essere combinate liberamente con altri componenti delle espressioni CLEM, anche se alcune hanno restrizioni su ciò che può essere utilizzato come loro argomenti.
Esempi
Può rivelarsi utile conoscere da quanto tempo si è verificato un evento specifico o una condizione si è rivelata vera. A tale scopo, è possibile utilizzare la funzione @SINCE
, per esempio:
@SINCE(Income > Outgoings)
Questa funzione restituisce l'offset dell'ultimo record in cui questa condizione era vera, ovvero il numero di record prima di questo in cui la condizione era vera. Se la condizione non è mai stata rilevata come vera, @SINCE
restituirà @INDEX + 1
.
Talvolta può rivelarsi utile fare riferimento a un valore del record corrente nell'espressione utilizzata con @SINCE
. A questo scopo, è possibile utilizzare la funzione @THIS
, con cui si specifica che il nome di un campo deve essere sempre applicato al record corrente. Per trovare lo scostamento dell'ultimo record che aveva un valore del campo Concentration
più del doppio di quello del record corrente, è possibile utilizzare:
@SINCE(Concentration > 2 * @THIS(Concentration))
In alcuni casi, la condizione specificata per @SINCE
è vera per il record corrente per definizione, per esempio:
@SINCE(ID == @THIS(ID))
Per questo motivo @SINCE
non valuta la propria condizione per il record corrente. Per valutare la condizione per il record corrente così come per i precedenti, utilizzare l'analoga funzione @SINCE0
. Se la condizione è vera nel record corrente, @SINCE0
restituirà 0
.
Funzione | Risultato: | Descrizione |
---|---|---|
MEAN(FIELD) |
Reale | Restituisce la media dei valori per l'argomento FIELD o FIELDS specificato. |
@MEAN(FIELD, EXPR) |
Reale | Restituisce la media dei valori per FIELD negli ultimi record EXPR ricevuti dal nodo corrente, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino ad ora, viene restituita la media di tutti i record ricevuti fino ad ora. |
@MEAN(FIELD, EXPR, INT) |
Reale | Restituisce la media dei valori per FIELD negli ultimi record EXPR ricevuti dal nodo corrente, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino ad ora, viene restituita la media di tutti i record ricevuti fino ad ora. INT indica il numero massimo di valori da cercare all'indietro. Se si specifica questo terzo argomento, si otterrà un'operazione più precisa. |
@DIFF1(FIELD) |
Reale | Restituisce il primo differenziale di FIELD. La forma con un singolo argomento restituisce semplicemente la differenza tra il valore corrente e il valore precedente del campo. Restituisce $null$ se per il campo specificato non esiste alcun valore precedente. |
@DIFF1(FIELD1, FIELD2) |
Reale | La forma con due argomenti fornisce il primo differenziale di FIELD1 rispetto a FIELD2. Restituisce $null$ se per il campo specificato non esiste alcun valore precedente. Viene calcolato come @DIFF1(FIELD1)/@DIFF1(FIELD2) . |
@DIFF2(FIELD) |
Reale | Restituisce il secondo differenziale di FIELD. La forma con un singolo argomento restituisce semplicemente la differenza tra il valore corrente e il valore precedente del campo. Restituisce $null$ se per il campo specificato non esiste alcun valore precedente. @DIFF2 viene calcolato come @DIFF(@DIFF(FIELD)) . |
@DIFF2(FIELD1, FIELD2) |
Reale | La forma con due argomenti fornisce il secondo differenziale di FIELD1 rispetto a FIELD2. Restituisce $null$ se per il campo specificato non esiste alcun valore precedente. Questo è un calcolo complesso -- @DIFF1(FIELD1)/@DIFF1(FIELD2) -
@OFFSET(@DIFF1(FIELD1),1)/@OFFSET(@DIFF1(FIELD2))) / @DIFF1(FIELD2) . |
@INDEX |
Intero | Restituisce l'indice del record corrente. Gli indici vengono assegnati ai record mano a mano che arrivano al nodo corrente. Al primo record viene assegnato l'indice 1, che viene incrementato di 1 per ciascun record successivo. |
@LAST_NON_BLANK(FIELD) |
Qualsiasi | Restituisce l'ultimo valore per FIELD che non era vuoto, come definito in un nodo origine o Tipo a monte. Se i record letti non contengono valori non vuoti per FIELD, viene restituito $null$ . Si noti che è possibile definire separatamente per ogni campo valori vuoti, denominati anche valori mancanti definiti dall'utente. |
@MAX(FIELD) |
numero | Restituisce il valore massimo per il campo specificato con l'argomento FIELD. |
@MAX(FIELD, EXPR) |
numero | Restituisce il valore massimo per FIELD negli ultimi record EXPR ricevuti, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. |
@MAX(FIELD, EXPR, INT) |
numero | Restituisce il valore massimo per FIELD negli ultimi record EXPR ricevuti, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino ad ora, viene restituito il valore massimo su tutti i record ricevuti fino ad ora. INT indica il numero massimo di valori da cercare all'indietro. Se si specifica questo terzo argomento, si otterrà un'operazione più precisa. |
@MIN(FIELD) |
numero | Restituisce il valore minimo per il campo specificato con l'argomento FIELD. |
@MIN(FIELD, EXPR) |
numero | Restituisce il valore minimo per FIELD negli ultimi record EXPR ricevuti, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. |
@MIN(FIELD, EXPR, INT) |
numero | Restituisce il valore minimo per FIELD negli ultimi record EXPR ricevuti, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino ad ora, viene restituito il valore minimo su tutti i record ricevuti fino ad ora. INT indica il numero massimo di valori da cercare all'indietro. Se si specifica questo terzo argomento, si otterrà un'operazione più precisa. |
@OFFSET(FIELD, EXPR) |
Qualsiasi | Restituisce il valore di FIELD nel record con un offset dal record corrente pari al valore di EXPR. Un offset positivo fa riferimento a un record già passato (un "lookback"), mentre un offset negativo specifica un "lookahead" di un record non ancora pervenuto. Ad esempio, @OFFSET(Status, 1) restituisce il valore del campo Status nel record precedente, mentre @OFFSET(Status, –4) "guarda avanti" quattro record nella sequenza (ossia, ai record che non sono ancora passati attraverso questo nodo) per ottenere il valore. Si noti che un offset negativo (lookahead) deve essere specificato come costante. Solo per gli offset positivi, ESPR può anche essere un'espressione CLEM arbitraria, che viene valutata per il record corrente per fornire l'offset. In tal caso, l'utilizzo di una versione a tre argomenti di questa funzione dovrebbe migliorare la performance (vedere la funzione successiva). Se questa espressione restituisce un valore diverso da un numero intero non negativo, verrà generato un errore. Non è quindi consentito il calcolo di offset per il lookahead. Notare che una funzione @OFFSET autoreferenziale non può utilizzare il lookahead letterale. Ad esempio, in un nodo Riempimento, non è possibile sostituire il valore field1 utilizzando un'espressione come @OFFSET(field1,-2) . Nel nodo Riempimento, quando si riempie un campo, vi sono effettivamente due valori differenti di tale campo, vale a dire il valore pre - compilato e il valore post - riempito. Quando @OFFSET fa riferimento a se stesso, fa riferimento al valore inserito successivamente. Tale valore esiste solo per le righe precedenti, quindi l'@OFFSET autoreferenziato può fare riferimento solo alle righe precedenti. Poiché @OFFSET autoreferenziale non può fare riferimento al futuro, esegue le seguenti verifiche dell'offset:
|
@OFFSET(FIELD, EXPR, INT) |
Qualsiasi | Esegue la stessa operazione della funzione @OFFSET con l'aggiunta di un terzo argomento, INT, che specifica il numero massimo di valori da cercare all'indietro. In casi in cui l'offset viene calcolato da un'espressione, il terzo argomento dovrebbe migliorare le prestazioni. Ad esempio, in un'espressione come@OFFSET(Foo, Month, 12) , il sistema sa di conservare solo gli ultimi dodici valori di Foo ; altrimenti, deve memorizzare ogni valore solo nel caso. Per i casi in cui il valore di offset sia una costante, inclusi gli offset di "lookahead" negativi, che devono essere costanti, il terzo argomento è inutile ed è necessario usare la versione a due argomenti di questa funzione. Vedere anche la nota relativa alle funzioni autoreferenziali nella versione a due argomenti descritte sopra. Si noti che l'utilizzo di "lookahead" e "lookback" all'interno di un nodo non è supportato. |
@SDEV(FIELD) |
Reale | Restituisce la deviazione standard dei valori per l'argomento FIELD o FIELD specificato. |
@SDEV(FIELD, EXPR) |
Reale | Restituisce la deviazione standard dei valori per FIELD negli ultimi record EXPR ricevuti dal nodo corrente, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino a quel momento, viene restituita la deviazione standard su tutti i record ricevuti fino a quel momento. |
@SDEV(FIELD, EXPR, INT) |
Reale | Restituisce la deviazione standard dei valori per FIELD negli ultimi record EXPR ricevuti dal nodo corrente, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino a quel momento, viene restituita la deviazione standard su tutti i record ricevuti fino a quel momento. INT indica il numero massimo di valori da cercare all'indietro. Se si specifica questo terzo argomento, si otterrà un'operazione più precisa. |
@SINCE(EXPR) |
Qualsiasi | Restituisce il numero di record passati da quando l'espressione CLEM arbitraria rappresentata da ESPR è stata rilevata come vera. |
@SINCE(EXPR, INT) |
Qualsiasi | L'aggiunta del secondo argomento, INT, consente di specificare il numero massimo di record da cercare all'indietro. Se EXPR non è mai stata vera INT corrisponderà a @INDEX+1 . |
@SINCE0(EXPR) |
Qualsiasi | A differenza di @SINCE , considera il record corrente. @SINCE0 restituisce 0 se EXPR risulta vera per il record corrente. |
@SINCE0(EXPR, INT) |
Qualsiasi | L'aggiunta del secondo argomento, INT, consente di specificare il numero massimo di record da cercare all'indietro. |
@SUM(FIELD) |
numero | Restituisce la somma dei valori per l'argomento FIELD o FIELDS specificato. |
@SUM(FIELD, EXPR) |
numero | Restituisce la somma dei valori per FIELD negli ultimi record EXPR ricevuti dal nodo corrente, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino ad ora, viene restituita la somma di tutti i record ricevuti fino ad ora. |
@SUM(FIELD, EXPR, INT) |
numero | Restituisce la somma dei valori per FIELD negli ultimi record EXPR ricevuti dal nodo corrente, incluso il record corrente. FIELD deve essere il nome di un campo numerico. EXPR può essere qualsiasi valutazione di espressione per un numero intero maggiore di 0. Se ESPR viene omesso o se supera il numero di record ricevuti fino ad ora, viene restituita la somma di tutti i record ricevuti fino ad ora. INT indica il numero massimo di valori da cercare all'indietro. Se si specifica questo terzo argomento, si otterrà un'operazione più precisa. |
@THIS(FIELD) |
Qualsiasi | Restituisce il valore del campo denominato FIELD nel record corrente. Viene utilizzata solo nelle espressioni @SINCE . |