Para algunas operaciones, la secuencia de eventos tiene su importancia.
La aplicación permite trabajar con las siguientes secuencias de registros:
- Secuencias y series temporales
- Funciones de secuencia
- Indización de registros
- Media, suma y comparación de valores
- Supervisión de cambios - diferenciación
@SINCE
- Valores de desplazamiento
- Recursos de secuencias adicionales
Para muchas aplicaciones, cada registro que pasa por una ruta se puede considerar como un caso individual, independiente de todos los demás. En estas situaciones, el orden de los registros suele no ser importante.
Sin embargo, para algunos tipos de problemas, la secuencia de registros es de gran importancia. Suelen ser situaciones de series temporales, en las que la secuencia de registros representa una secuencia de eventos o instancias ordenada. Cada registro representa una instantánea de un momento concreto; sin embargo, gran parte de la información más importante puede no estar contenida en valores instantáneos, sino en el modo en que tales valores cambian y se comportan durante un período de tiempo.
Por supuesto, el parámetro relevante puede no ser temporal. Por ejemplo, los registros podrían representar análisis realizados a distintas distancias a lo largo de una línea, pero se aplicarían los mismos principios.
Las funciones de secuencia y especiales se reconocen de inmediato por las siguientes características:
- Todos tienen el prefijo
@
- Sus nombres se dan en mayúsculas
Las funciones de secuencia pueden hacer referencia al registro que está siendo procesado actualmente por un nodo, los registros que ya han pasado por un nodo e, incluso, a los registros que aún tienen que pasar por un nodo. Las funciones de secuencia se pueden combinar libremente con otros componentes de expresiones CLEM, aunque algunas tienen restricciones en cuanto a lo que pueden utilizar como sus argumentos.
Ejemplos
Puede que le resulte útil saber cuánto tiempo ha pasado desde que se produjo un determinado evento o desde que una condición era true. Para ello, utilice la función @SINCE
, por ejemplo:
@SINCE(Income > Outgoings)
Esta función devuelve el desplazamiento del último registro en el que esta condición es verdadera, es decir, el número de registros antes que este en el que la condición es verdadera. Si la condición nunca ha sido verdadera, @SINCE
devuelve @INDEX + 1
.
Puede que en algunas ocasiones desee hacer referencia a un valor del registro actual en la expresión utilizada por @SINCE
. Puede hacerlo mediante la función @THIS
, que especifica que un nombre de campo siempre se aplique al registro actual. Para encontrar el desplazamiento del último registro que tenía un valor de campo de Concentration
como mínimo dos veces mayor que el del registro actual, puede utilizar:
@SINCE(Concentration > 2 * @THIS(Concentration))
En algunos casos, la condición especificada para @SINCE
es verdadera en el registro actual por definición; por ejemplo:
@SINCE(ID == @THIS(ID))
Por este motivo, @SINCE
no evalúa esta condición para el registro actual. Utilice una función similar, @SINCE0
, si desea evaluar la condición para el registro actual además de los anteriores; si la condición es verdadera en el registro actual, @SINCE0
devuelve 0
.
Función | Resultado | Descripción |
---|---|---|
MEAN(FIELD) |
Real | Devuelve el valor promediado de los valores para el CAMPO o CAMPOS especificados. |
@MEAN(FIELD, EXPR) |
Real | Devuelve el valor promediado de los valores para CAMPO en los últimos registros de EXPR recibidos por el nodo actual, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve el promedio de todos los registros recibidos hasta ahora. |
@MEAN(FIELD, EXPR, INT) |
Real | Devuelve el valor promediado de los valores para CAMPO en los últimos registros de EXPR recibidos por el nodo actual, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve el promedio de todos los registros recibidos hasta ahora. ENT especifica el número máximo de valores que buscar hacia atrás, lo que es mucho más eficaz que utilizar tan sólo dos argumentos. |
@DIFF1(FIELD) |
Real | Devuelve el primer diferencial de CAMPO. El formato de un único argumento devuelve simplemente la diferencia entre el valor actual y el valor anterior del campo. Devuelve $null$ si los registros anteriores relevantes no existen. |
@DIFF1(FIELD1, FIELD2) |
Real | El formato de dos argumentos proporciona el primer diferencial de CAMPO1 respecto a CAMPO2. Devuelve $null$ si los registros anteriores relevantes no existen. Se calcula como @DIFF1(FIELD1)/@DIFF1(FIELD2) . |
@DIFF2(FIELD) |
Real | Devuelve el segundo diferencial de CAMPO. El formato de un único argumento devuelve simplemente la diferencia entre el valor actual y el valor anterior del campo. Devuelve $null$ si los registros anteriores relevantes no existen. @DIFF2 se calcula como @DIFF(@DIFF(FIELD)) . |
@DIFF2(FIELD1, FIELD2) |
Real | El formato de dos argumentos proporciona el segundo diferencial de CAMPO1 respecto a CAMPO2. Devuelve $null$ si los registros anteriores relevantes no existen. Es un cálculo complejo -- @DIFF1(FIELD1)/@DIFF1(FIELD2) -
@OFFSET(@DIFF1(FIELD1),1)/@OFFSET(@DIFF1(FIELD2))) / @DIFF1(FIELD2) . |
@INDEX |
Entero | Devuelve el índice del registro actual. Los índices se asignan a los registros a medida que llegan al nodo actual. Al primer registro se le asigna el índice 1, y el índice se va incrementando en 1 para cada registro posterior. |
@LAST_NON_BLANK(FIELD) |
Cualquiera | Devuelve el último valor de CAMPO que no está vacío, tal y como se define en un nodo Tipo o de origen anterior de la ruta. Si no hay valores no vacíos para CAMPO en los registros leídos hasta ahora, se devuelve $null$ . Recuerde que los valores vacíos, también llamados valores perdidos por el usuario, se pueden definir por separado para cada campo. |
@MAX(FIELD) |
Número | Devuelve el valor máximo del CAMPO especificado. |
@MAX(FIELD, EXPR) |
Número | Devuelve el valor máximo de CAMPO en los últimos registros de EXPR recibidos hasta el momento, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. |
@MAX(FIELD, EXPR, INT) |
Número | Devuelve el valor máximo de CAMPO en los últimos registros de EXPR recibidos hasta el momento, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve el valor máximo de todos los registros recibidos hasta ahora. ENT especifica el número máximo de valores que buscar hacia atrás, lo que es mucho más eficaz que utilizar tan sólo dos argumentos. |
@MIN(FIELD) |
Número | Devuelve el valor mínimo del CAMPO especificado. |
@MIN(FIELD, EXPR) |
Número | Devuelve el valor mínimo del CAMPO en los últimos registros de EXPR recibidos hasta el momento, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. |
@MIN(FIELD, EXPR, INT) |
Número | Devuelve el valor mínimo del CAMPO en los últimos registros de EXPR recibidos hasta el momento, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve el valor mínimo de todos los registros recibidos hasta ahora. ENT especifica el número máximo de valores que buscar hacia atrás, lo que es mucho más eficaz que utilizar tan sólo dos argumentos. |
@OFFSET(FIELD, EXPR) |
Cualquiera | Devuelve el valor de CAMPO en el desplazamiento de registro respecto al registro actual con el valor EXPR. Un desplazamiento positivo hace referencia a un registro que ya ha pasado, mientras que uno negativo especifica una "lectura anticipada" de un registro que aún tiene que llegar. Por ejemplo, @OFFSET(Status, 1) devuelve el valor del campo Status en el registro anterior, mientras que @OFFSET(Status, –4) "mira hacia delante" cuatro registros en la secuencia (es decir, los registros que aún no han pasado a través de este nodo) para obtener el valor. Tenga en cuenta que un desplazamiento negativo (lectura anticipada) se debe especificar como una constante. Solo para los desplazamientos positivos, EXPR también puede ser una expresión CLEM arbitraria, que se evalúa para el periodo actual para generar el desplazamiento. En este caso, la versión de tres argumentos de esta función debería mejorar el rendimiento (ver función siguiente). Si la expresión devuelve un valor que no sea un entero no negativo, se producirá un error, esto es, no se permite calcular desplazamientos de lectura anticipada. Tenga en cuenta que la función @OFFSET que hace referencia a sí misma no puede utilizar una lectura anticipada literal. Por ejemplo, en un nodo Rellenar, no puede sustituir el valor de field1 utilizando una expresión como @OFFSET(field1,-2) . En el nodo Relleno, cuando se rellena un campo, hay dos valores distintos de dicho campo, que son el valor rellenado previamente y el valor rellenado posteriormente. Cuando @OFFSET hace referencia a sí mismo, hace referencia al valor de relleno posterior. El valor de este campo de relleno a posteriori sólo existe para filas pasadas, por lo que el @OFFSET autoreferencial sólo puede referirse a filas pasadas. Puesto que la función @OFFSET que hace referencia a sí misma no puede hacer referencia al futuro, lleva a cabo las siguientes comprobaciones del desplazamiento:
|
@OFFSET(FIELD, EXPR, INT) |
Cualquiera | Realiza la misma operación que la función @OFFSET con la adición de un tercer argumento, ENT, que especifica el número máximo de valores que buscar hacia atrás. En casos en los que el desplazamiento se calcula a partir de una expresión, este tercer argumento debería mejorar el rendimiento. Por ejemplo, en una expresión como@OFFSET(Foo, Month, 12) , el sistema sabe mantener sólo los últimos doce valores de Foo ; de lo contrario, tiene que almacenar cada valor por si acaso. Para los desplazamientos fijos, incluidos los desplazamientos de "lectura anticipada" negativos que deben ser fijos, el tercer argumento no es importante, y debe utilizarse la versión de dos argumentos de esta función. Consulte también la nota acerca de las funciones autorreferidas en la versión de dos argumentos descritas anteriormente. Tenga en cuenta que no se admite el uso de "lectura anticipada" y de "lectura posterior" simultáneamente en un nodo. |
@SDEV(FIELD) |
Real | Devuelve la desviación estándar de los valores para el CAMPO o CAMPOS especificados. |
@SDEV(FIELD, EXPR) |
Real | Devuelve la desviación estándar de los valores para CAMPO en los últimos registros de EXPR recibidos por el nodo actual, incluido el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve la desviación estándar sobre todos los registros recibidos hasta ahora. |
@SDEV(FIELD, EXPR, INT) |
Real | Devuelve la desviación estándar de los valores para CAMPO en los últimos registros de EXPR recibidos por el nodo actual, incluido el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve la desviación estándar sobre todos los registros recibidos hasta ahora. ENT especifica el número máximo de valores que buscar hacia atrás, lo que es mucho más eficaz que utilizar tan sólo dos argumentos. |
@SINCE(EXPR) |
Cualquiera | Devuelve el número de registros que han pasado desde que EXPR, una expresión CLEM arbitraria, era verdadera. |
@SINCE(EXPR, INT) |
Cualquiera | La adición del segundo argumento, ENT, especifica el número máximo de registros a buscar hacia atrás. Si EXPR nunca ha sido verdadera, ENT es @INDEX+1 . |
@SINCE0(EXPR) |
Cualquiera | Considera el registro actual, mientras que @SINCE no lo hace; @SINCE0 devuelve 0 si EXPR es verdadera para el registro actual. |
@SINCE0(EXPR, INT) |
Cualquiera | La adición del segundo argumento, ENT, especifica el número máximo de registros a buscar hacia atrás. |
@SUM(FIELD) |
Número | Devuelve la suma de los valores del CAMPO o CAMPOS especificados. |
@SUM(FIELD, EXPR) |
Número | Devuelve la suma de los valores de CAMPO en los últimos EXPR registros recibidos por el nodo actual, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve la suma sobre todos los registros recibidos hasta ahora. |
@SUM(FIELD, EXPR, INT) |
Número | Devuelve la suma de los valores de CAMPO en los últimos EXPR registros recibidos por el nodo actual, incluyendo el registro actual. CAMPO debe ser el nombre de un campo numérico. EXPR puede ser cualquier expresión que se evalúe como un entero mayor que 0. Si se omite EXPR o si supera el número de registros recibidos hasta ahora, se devuelve la suma sobre todos los registros recibidos hasta ahora. ENT especifica el número máximo de valores que buscar hacia atrás, lo que es mucho más eficaz que utilizar tan sólo dos argumentos. |
@THIS(FIELD) |
Cualquiera | Devuelve el valor del campo con el nombre CAMPO en el registro actual. Sólo se utiliza en las expresiones @SINCE . |