Funções de sequência
Para algumas operações, a sequência de eventos é importante.
O aplicativo permite trabalhar com as sequências de registro a seguir:
- Sequências e séries temporais
- Funções de sequência
- Indexação de registro
- Valores de média, soma e comparação
- Monitorando a mudança - diferenciação
@SINCE- Valores de compensação
- Recursos de sequência adicionais
Para muitos aplicativos, cada registro passando por um fluxo pode ser considerado um caso individual, independente de todos os outros. Nessas situações, a ordem dos registros geralmente é irrelevante.
Para algumas classes de problemas, no entanto, a sequência de registro é muito importante. Normalmente são situações de séries temporais nas quais a sequência de registros representa uma sequência ordenada de eventos ou ocorrências. Cada registro representa uma captura instantânea em um determinado instante no tempo; muitas das informações mais ricas, porém, podem estar contidas não nos valores instantâneos, mas na maneira como esses valores estão mudando e se comportando ao longo do tempo.
É claro, o parâmetro relevante pode ser qualquer coisa além de tempo. Por exemplo, os registros poderiam representar análises executadas a distâncias ao longo de uma linha, mas os mesmos princípios se aplicariam.
Funções especiais e de sequência são imediatamente reconhecíveis pelas seguintes características:
- Todos eles são prefixados por
@ - Seus nomes são dados em maiús-maiúsculas
Funções de sequência podem se referir ao registro atualmente sendo processado por um nó, aos registros que já passaram por um nó e, até, em alguns casos, aos registros que ainda têm que passar por um nó. As funções de sequência podem ser misturadas livremente com outros componentes das expressões do CLEM, embora algumas tenham restrições sobre o que pode ser usado como seus argumentos.
Exemplos
Talvez você ache útil saber quanto tempo passou desde que ocorreu um certo evento ou que uma condição era verdadeira. Use a função @SINCE para fazer isto-por exemplo:
@SINCE(Income > Outgoings)
Essa função retorna o deslocamento do último registro em que essa condição era verdadeira - ou seja, o número de registros antes deste em que a condição era verdadeira. Se a condição nunca foi verdadeira, @SINCE retornará @INDEX + 1.
Às vezes você pode querer se referir a um valor do registro atual na expressão usada por @SINCE. Isso pode ser feito usando a função @THIS, que especifica que um nome de campo sempre se aplica ao registro atual. Para localizar o offset do último registro que tinha um valor de campo Concentration duas vezes maior que o do registro atual, você poderia usar:
@SINCE(Concentration > 2 * @THIS(Concentration))
Em alguns casos, é verdadeira a condição dada a @SINCE do registro atual por definição—por exemplo:
@SINCE(ID == @THIS(ID))
Por este motivo, @SINCE não avalia sua condição para o registro atual. Use uma função semelhante, @SINCE0, se desejar avaliar a condição para o registro atual, bem como anteriores; se a condição for
verdadeira no registro atual, @SINCE0 retornará 0.
| Função | Resultado | Descrição |
|---|---|---|
MEAN(FIELD) |
Real | Retorna a média dos valores para FIELD ou FIELDS especificados. |
@MEAN(FIELD, EXPR) |
Real | Retorna a média de valores para FIELD sobre os últimos registros EXPR recebidos pelo nó atual, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido ou se exceder o número de registros recebidos até o momento, a média de todos os registros recebidos até o momento é retornada. |
@MEAN(FIELD, EXPR, INT) |
Real | Retorna a média de valores para FIELD sobre os últimos registros EXPR recebidos pelo nó atual, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido ou se exceder o número de registros recebidos até o momento, a média de todos os registros recebidos até o momento é retornada. INT especifica o número máximo de valores a reconsiderar. Isso é muito mais eficiente que usar apenas dois argumentos. |
@DIFF1(FIELD) |
Real | Retorna o primeiro diferenciado de FIELD. O formulário de argumento único simplesmente retorna a diferença entre o valor atual e o valor anterior do campo. Retorna $null$ se registros relevantes anteriores não existirem. |
@DIFF1(FIELD1, FIELD2) |
Real | O formulário de dois argumentos fornece o primeiro diferenciado de FIELD1 com relação ao FIELD2. Retorna $null$ se registros relevantes anteriores não existirem. É calculado como @DIFF1(FIELD1)/@DIFF1(FIELD2). |
@DIFF2(FIELD) |
Real | Retorna o segundo diferenciado de FIELD. O formulário de argumento único simplesmente retorna a diferença entre o valor atual e o valor anterior do campo. Retorna $null$ se registros relevantes anteriores não existirem. @DIFF2 é calculado como @DIFF(@DIFF(FIELD)). |
@DIFF2(FIELD1, FIELD2) |
Real | O formulário de dois argumentos fornece o segundo diferenciado de FIELD1 com relação ao FIELD2. Retorna $null$ se registros relevantes anteriores não existirem. Este é um cálculo complexo -- @DIFF1(FIELD1)/@DIFF1(FIELD2) -
@OFFSET(@DIFF1(FIELD1),1)/@OFFSET(@DIFF1(FIELD2))) / @DIFF1(FIELD2). |
@INDEX |
Número inteiro | Retorna o índice do registro atual. Os índices são alocados aos registros à medida que chegam ao nó atual. Ao primeiro registro é dado o índice 1, e o índice é incrementado em 1 para cada registro subsequente. |
@LAST_NON_BLANK(FIELD) |
qualquer um | Retorna o último valor para FIELD que não estava em branco, conforme definido na origem de envio de dados ou nó Tipo. Se não houver valores não em branco para FIELD nos registros lidos até o momento, $null$ será retornado. Observe que os valores não em branco, também chamados valores omissos de usuário, podem ser definidos separadamente para cada campo. |
@MAX(FIELD) |
Número | Retorna o valor máximo para o FIELD especificado. |
@MAX(FIELD, EXPR) |
Número | Retorna o valor máximo para FIELD sobre os últimos registros EXPR recebidos até o momento, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. |
@MAX(FIELD, EXPR, INT) |
Número | Retorna o valor máximo para FIELD sobre os últimos registros EXPR recebidos até o momento, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido, ou se exceder o número de registros recebidos até o momento, o valor máximo sobre todos os registros recebidos até agora é retornado. INT especifica o número máximo de valores a reconsiderar. Isso é muito mais eficiente que usar apenas dois argumentos. |
@MIN(FIELD) |
Número | Retorna o valor mínimo para o FIELD especificado. |
@MIN(FIELD, EXPR) |
Número | Retorna o valor mínimo para FIELD sobre os últimos registros EXPR recebidos até o momento, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. |
@MIN(FIELD, EXPR, INT) |
Número | Retorna o valor mínimo para FIELD sobre os últimos registros EXPR recebidos até o momento, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido, ou se exceder o número de registros recebidos até o momento, o valor mínimo sobre todos os registros recebidos até o momento é retornado. INT especifica o número máximo de valores a reconsiderar. Isso é muito mais eficiente que usar apenas dois argumentos. |
@OFFSET(FIELD, EXPR) |
qualquer um | Retorna o valor de FIELD no offset de registro do registro atual pelo valor de EXPR. Um offset positivo se refere a um registro que já passou (um "lookback"), enquanto um negativo especifica um "lookahead" para um registro que ainda vai chegar. Por exemplo,
@OFFSET(Status, 1) retorna o valor do campo Status no registro anterior, enquanto @OFFSET(Status, –4) representa um "lookahead" de quatro registros na sequência (ou seja, para registros que ainda não passaram por esse nó) para obter o valor. Observe que um offset negativo (lookahead) deve ser especificado como uma constante. Apenas para compensações positivas, EXPR também pode ser uma expressão arbitrária do CLEM, que é avaliada para o registro atual para fornecer a compensação. Nesse caso, a versão de três argumentos dessa função deve melhorar o desempenho (consulte a próxima função). Se a expressão retornar qualquer coisa que não seja um número inteiro não negativo, isso causará um erro—ou seja, não é legal ter offsets lookahead calculados. Observe que uma função @OFFSET autorreferencial não pode usar lookahead literal. Por exemplo, em um nó de Preenchimento, não é possível substituir o valor de field1 usando uma expressão como @OFFSET(field1,-2). No nó Preenchimento, ao preencher um campo, existem efetivamente dois valores diferentes desse campo, a saber, o valor pré-preenchido e o valor pós-preenchido. Quando @OFFSET se refere a si mesmo, ele se refere ao valor pré-preenchido. Esse valor pós-preenchido existe somente para linhas antigas, portanto, o @OFFSET de autorreferência só pode se referir a linhas antigas. Visto que @OFFSET autorreferencial não pode se referir ao futuro, ele realiza as seguintes verificações de compensação:
|
@OFFSET(FIELD, EXPR, INT) |
qualquer um | Executa a mesma operação que a função @OFFSET com a adição de um terceiro argumento, INT, o que especifica o número máximo de valor para lookback. Nos casos em que o offset é calculado a partir de uma expressão, o terceiro argumento deve melhorar o desempenho. Por exemplo, em uma expressão como @OFFSET(Foo, Month, 12), o sistema sabe manter somente os últimos doze valores de Foo; caso contrário, ele terá que armazenar cada valor se for o caso. Nos casos em que o valor do offset for uma constante—incluindo offsets "lookahead" negativos, que devem ser constantes—o terceiro argumento será sem pontos e a versão de dois argumentos dessa função deverá ser usada. Consulte também a nota sobre funções de autorreferência na versão de dois argumentos descrita anteriormente. Observe que o uso de "lookahead" e "lookback" em um nó não é suportado. |
@SDEV(FIELD) |
Real | Retorna o desvio padrão dos valores para FIELD ou FIELDS especificados. |
@SDEV(FIELD, EXPR) |
Real | Retorna o desvio padrão de valores para FIELD sobre os últimos registros EXPR recebidos pelo nó atual, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido, ou se exceder o número de registros recebidos até o momento, o desvio padrão sobre todos os registros recebidos até o momento é retornado. |
@SDEV(FIELD, EXPR, INT) |
Real | Retorna o desvio padrão de valores para FIELD sobre os últimos registros EXPR recebidos pelo nó atual, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido, ou se exceder o número de registros recebidos até o momento, o desvio padrão sobre todos os registros recebidos até o momento é retornado. INT especifica o número máximo de valores a reconsiderar. Isso é muito mais eficiente que usar apenas dois argumentos. |
@SINCE(EXPR) |
qualquer um | Retorna o número de registros que passaram desde que EXPR, uma expressão arbitrária do CLEM, era verdadeira. |
@SINCE(EXPR, INT) |
qualquer um | A inclusão do segundo argumento, INT, especifica o número máximo de registros para lookback. Se EXPR nunca foi verdadeira, INT será @INDEX+1. |
@SINCE0(EXPR) |
qualquer um | Considera o registro atual, enquanto @SINCE não; @SINCE0 retornará 0 se EXPR for verdadeira para o registro atual. |
@SINCE0(EXPR, INT) |
qualquer um | A inclusão do segundo argumento, INT, especifica o número máximo de registros para o lookback. |
@SUM(FIELD) |
Número | Retorna a soma de valores para o FIELD ou FIELDS especificados. |
@SUM(FIELD, EXPR) |
Número | Retorna a soma de valores para FIELD sobre os últimos registros EXPR recebidos pelo nó atual, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido, ou se exceder o número de registros recebidos até o momento, será retornada a soma de todos os registros recebidos até o momento. |
@SUM(FIELD, EXPR, INT) |
Número | Retorna a soma de valores para FIELD sobre os últimos registros EXPR recebidos pelo nó atual, incluindo o registro atual. FIELD deve ser o nome de um campo numérico. EXPR pode ser qualquer expressão avaliada para um número inteiro maior que 0. Se EXPR for omitido, ou se exceder o número de registros recebidos até o momento, será retornada a soma de todos os registros recebidos até o momento. INT especifica o número máximo de valores a reconsiderar. Isso é muito mais eficiente que usar apenas dois argumentos. |
@THIS(FIELD) |
qualquer um | Retorna o valor do campo denominado FIELD no registro atual. Usado somente em expressões @SINCE. |