Funções de sequência
Para algumas operações, a sequência de eventos é importante.
O aplicativo permite que você trabalhe com as seguintes sequências de registros:
- Sequências e séries temporais
- Funções de sequência
- Indexação de registros
- Cálculo da média, soma e comparação de valores
- Monitoramento da mudança-diferenciação
@SINCE- Valores de deslocamento
- Instalações de sequência adicionais
Para muitos aplicativos, cada registro que passa por um fluxo pode ser considerado como um caso individual, independente de todos os outros. Nessas situações, a ordem dos registros geralmente não é importante.
No entanto, para algumas classes de problemas, a sequência de registros é 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 um instantâneo em um determinado momento; muitas das informações mais ricas, no entanto, podem estar contidas não em valores instantâneos, mas na maneira como esses valores estão mudando e se comportando ao longo do tempo.
É claro que o parâmetro relevante pode ser algo diferente de tempo. Por exemplo, os registros poderiam representar análises realizadas a distâncias ao longo de uma linha, mas os mesmos princípios seriam aplicados.
As funções especiais e de sequência são imediatamente reconhecidas pelas seguintes características:
- Todos eles são prefixados por
@ - Seus nomes são dados em maiús-maiúsculas
As funções de sequência podem se referir ao registro que está sendo processado atualmente por um nó, aos registros que já passaram por um nó e até mesmo, em um caso, aos registros que ainda não passaram 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 argumento.
Exemplos
Você pode achar útil saber quanto tempo se passou desde que um determinado evento ocorreu ou uma condição foi verdadeira. Use a função @SINCE para fazer isso - 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 anteriores a esse em que a condição era verdadeira. Se a condição nunca tiver sido verdadeira, @SINCE retornará @INDEX + 1.
Às vezes, você pode querer fazer referência 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 encontrar o deslocamento do último registro que tinha um valor de campo Concentration maior que o dobro do valor do registro atual, você pode usar:
@SINCE(Concentration > 2 * @THIS(Concentration))
Em alguns casos, a condição fornecida para @SINCE é verdadeira para o registro atual por definição - por exemplo:
@SINCE(ID == @THIS(ID))
Por esse motivo, o site @SINCE não avalia sua condição para o registro atual. Use uma função semelhante, @SINCE0, se quiser avaliar a condição para o registro atual e também para os anteriores; se a condição for verdadeira no registro atual, @SINCE0 retorna 0.
| Função | Resultado | Descrição |
|---|---|---|
MEAN(FIELD) |
Real | Retorna a média dos valores para o FIELD ou FIELDS especificado. |
@MEAN(FIELD, EXPR) |
Real | Retorna a média dos valores de FIELD nos ú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 que seja avaliada como 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 média de todos os registros recebidos até o momento. |
@MEAN(FIELD, EXPR, INT) |
Real | Retorna a média dos valores de FIELD nos ú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 que seja avaliada como 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 média de todos os registros recebidos até o momento. INT especifica o número máximo de valores a serem pesquisados. Isso é muito mais eficiente do que usar apenas dois argumentos. |
@DIFF1(FIELD) |
Real | Retorna o primeiro diferencial de FIELD. Assim, o formulário de argumento único simplesmente retorna a diferença entre o valor atual e o valor anterior do campo. Retorna $null$ se os registros anteriores relevantes não existirem. |
@DIFF1(FIELD1, FIELD2) |
Real | A forma de dois argumentos fornece o primeiro diferencial de FIELD1 com relação a FIELD2. Retorna $null$ se os registros anteriores relevantes não existirem. Ele é calculado como @DIFF1(FIELD1)/@DIFF1(FIELD2). |
@DIFF2(FIELD) |
Real | Retorna o segundo diferencial de FIELD. Assim, o formulário de argumento único simplesmente retorna a diferença entre o valor atual e o valor anterior do campo. Retorna $null$ se os registros anteriores relevantes não existirem. @DIFF2 é calculado como @DIFF(@DIFF(FIELD)). |
@DIFF2(FIELD1, FIELD2) |
Real | A forma de dois argumentos fornece o segundo diferencial de FIELD1 com relação a FIELD2. Retorna $null$ se os registros anteriores relevantes não existirem. Esse é 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 eles chegam ao nó atual. O primeiro registro recebe o índice 1, e o índice é incrementado em 1 para cada registro subsequente. |
@LAST_NON_BLANK(FIELD) |
Qualquer | Retorna o último valor de FIELD que não estava em branco, conforme definido em uma fonte upstream ou nó Type. Se não houver valores não em branco para FIELD nos registros lidos até o momento, $null$ será retornado. Observe que os valores em branco, também chamados de valores ausentes do usuário, podem ser definidos separadamente para cada campo. |
@MAX(FIELD) |
Número | Retorna o valor máximo do FIELD especificado. |
@MAX(FIELD, EXPR) |
Número | Retorna o valor máximo de FIELD nos ú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 que seja avaliada como um número inteiro maior que 0. |
@MAX(FIELD, EXPR, INT) |
Número | Retorna o valor máximo de FIELD nos ú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 que seja avaliada como 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 de todos os registros recebidos até o momento será retornado. INT especifica o número máximo de valores a serem pesquisados. Isso é muito mais eficiente do 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 de FIELD nos ú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 que seja avaliada como um número inteiro maior que 0. |
@MIN(FIELD, EXPR, INT) |
Número | Retorna o valor mínimo de FIELD nos ú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 que seja avaliada como um número inteiro maior que 0. Se EXPR for omitido ou se exceder o número de registros recebidos até o momento, será retornado o valor mínimo de todos os registros recebidos até o momento. INT especifica o número máximo de valores a serem pesquisados. Isso é muito mais eficiente do que usar apenas dois argumentos. |
@OFFSET(FIELD, EXPR) |
Qualquer | Retorna o valor de FIELD no registro deslocado do registro atual pelo valor de EXPR. Um deslocamento positivo refere-se a um registro que já passou (um "lookback"), enquanto um negativo especifica um "lookahead" para um registro que ainda não chegou. Por exemplo, @OFFSET(Status, 1) retorna o valor do campo Status no registro anterior, enquanto @OFFSET(Status, –4) "olha para frente" quatro registros na sequência (ou seja, para registros que ainda não passaram por esse nó) para obter o valor. Observe que um deslocamento negativo (olhar para frente) deve ser especificado como uma constante. Apenas para offsets positivos, EXPR também pode ser uma expressão CLEM arbitrária, que é avaliada para o registro atual para fornecer o offset. 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 algo diferente de um número inteiro não negativo, isso causará um erro, ou seja, não é legal ter calculado os deslocamentos de lookahead. Observe que uma função autorreferencial @OFFSET 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ó Filler, ao preencher um campo, há 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 pós-preenchido. Esse valor pós-preenchido só existe para linhas passadas, portanto, o autorreferencial @OFFSET só pode se referir a linhas passadas. Como o autorreferencial @OFFSET não pode se referir ao futuro, ele realiza as seguintes verificações do deslocamento:
|
@OFFSET(FIELD, EXPR, INT) |
Qualquer | Executa a mesma operação que a função @OFFSET com a adição de um terceiro argumento, INT, que especifica o número máximo de valores a serem pesquisados. Nos casos em que o deslocamento é computado a partir de uma expressão, esse terceiro argumento deve melhorar o desempenho. Por exemplo, em uma expressão como@OFFSET(Foo, Month, 12), o sistema sabe que deve manter apenas os últimos doze valores de Foo; caso contrário, terá de armazenar todos os valores por precaução. Nos casos em que o valor de deslocamento é uma constante - incluindo deslocamentos negativos "lookahead", que devem ser constantes - o terceiro argumento é inútil e a versão de dois argumentos dessa função deve ser usada. Consulte também a observação sobre funções autorreferenciais na versão de dois argumentos descrita anteriormente. Observe que não há suporte para o uso de "lookahead" e "lookback" em um único nó. |
@SDEV(FIELD) |
Real | Retorna o desvio padrão dos valores para o FIELD ou FIELDS especificado. |
@SDEV(FIELD, EXPR) |
Real | Retorna o desvio padrão dos valores de FIELD nos ú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 que seja avaliada como um número inteiro maior que 0. Se EXPR for omitido ou se exceder o número de registros recebidos até o momento, será retornado o desvio padrão de todos os registros recebidos até o momento. |
@SDEV(FIELD, EXPR, INT) |
Real | Retorna o desvio padrão dos valores de FIELD nos ú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 que seja avaliada como um número inteiro maior que 0. Se EXPR for omitido ou se exceder o número de registros recebidos até o momento, será retornado o desvio padrão de todos os registros recebidos até o momento. INT especifica o número máximo de valores a serem pesquisados. Isso é muito mais eficiente do que usar apenas dois argumentos. |
@SINCE(EXPR) |
Qualquer | Retorna o número de registros que passaram desde que EXPR, uma expressão CLEM arbitrária, foi verdadeira. |
@SINCE(EXPR, INT) |
Qualquer | A adição do segundo argumento, INT, especifica o número máximo de registros a serem pesquisados. Se EXPR nunca foi verdadeiro, INT é @INDEX+1. |
@SINCE0(EXPR) |
Qualquer | Considera o registro atual, enquanto @SINCE não considera; @SINCE0 retorna 0 se EXPR for verdadeiro para o registro atual. |
@SINCE0(EXPR, INT) |
Qualquer | Ao adicionar o segundo argumento, INT especifica o número máximo de registros a serem pesquisados. |
@SUM(FIELD) |
Número | Retorna a soma dos valores do FIELD ou FIELDS especificado. |
@SUM(FIELD, EXPR) |
Número | Retorna a soma dos valores de FIELD nos ú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 que seja avaliada como um número inteiro maior que 0. Se EXPR for omitido ou se exceder o número de registros recebidos até o momento, a soma de todos os registros recebidos até o momento será retornada. |
@SUM(FIELD, EXPR, INT) |
Número | Retorna a soma dos valores de FIELD nos ú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 que seja avaliada como um número inteiro maior que 0. Se EXPR for omitido ou se exceder o número de registros recebidos até o momento, a soma de todos os registros recebidos até o momento será retornada. INT especifica o número máximo de valores a serem pesquisados. Isso é muito mais eficiente do que usar apenas dois argumentos. |
@THIS(FIELD) |
Qualquer | Retorna o valor do campo chamado FIELD no registro atual. Usado somente em expressões @SINCE . |