Ir al contenido principal
Todas las coleccionesNeuron AppRecursos
Expresiones de fórmula para modelos
Expresiones de fórmula para modelos

Recursos

Juan Carlos González avatar
Escrito por Juan Carlos González
Actualizado hace más de un año

Las expresiones de fórmula son una de las características más importantes de los modelos. Gracias a ellas podemos utilizar funciones matemáticas para transformar y agregar los datos industriales y convertirlos en información útil sobre funcionamiento de una instalación.

Es posible aplicar expresiones de fórmula en las transformaciones y en las métricas para definir el valor y el formato en los que Neuron mostrará los resultados.


Elementos de expresiones de fórmula


Variables

Las variables representan las propiedades de los activos en las expresiones de fórmula. Al utilizar variables en las expresiones de fórmula, puedes procesar datos de constantes (atributos), flujos de datos sin procesar (medidas) y otras propiedades de fórmula.

Las variables pueden representar las propiedades de los activos desde el mismo modelo o desde submodelos de activos. Solo es posible introducir variables en submodelos de activos a través de fórmulas de métricas. Los nombres de variables distinguen entre mayúsculas y minúsculas.


Literales

Puedes definir literales de número y cadena en las expresiones de fórmula.

  • Números: utiliza números y notación científica para definir números enteros y dobles. Puedes utilizar la notación E para expresar números con notación científica. Ejemplos: 1, 2.0, .9, -23.1, 7.89e3, 3.4E-5

  • Cadenas: utiliza los caracteres ' (comillas) y " (comillas dobles) para definir cadenas. El tipo de comillas utilizado para marcar el inicio y el final debe coincidir. Si quieres aplicar escape a una comilla que coincide con la que se utiliza para declarar una cadena, incluye ese carácter de comilla dos veces. Este es el único carácter de escape en las cadenas. Ejemplos: 'active' , "inactive" , '{"temp": 52}' , "{""temp"": ""high""}" .


Operadores

Puedes utilizar los siguientes operadores en las expresiones de fórmula:

Operador

Descripción

+

Si ambos operandos son números, este operador añade los operandos izquierdo y derecho.

Si cualquier operando es una cadena, este operador concatena los operandos izquierdo y derecho como cadenas.

Por ejemplo:

La expresión 1 + 2 + " es tres" se evalúa como "3 es tres" .

La cadena concatenada puede tener hasta 1024 caracteres. Si la cadena supera los 1024 caracteres, no genera datos para ese cálculo.

-

Resta el operando derecho del operando izquierdo.

Solo se puede utilizar con operandos numéricos.

/

Divide el operando izquierdo por el operando derecho.

Solo se puede utilizar con operandos numéricos.

*

Multiplica los operandos izquierdo y derecho.

Solo puede utilizar con operandos numéricos.

^

Eleva el operando izquierdo a la potencia del operando derecho (exponenciación).

Solo se puede utilizar con operandos numéricos.

%

Devuelve el resto de la división del operando izquierdo por el operando derecho.

El resultado tiene el mismo signo que el operando izquierdo. Este comportamiento difiere de la operación de módulo.

Solo se puede utilizar con operandos numéricos.

[]

s[index]

Devuelve el carácter en un índice

index de la cadena s .

Por ejemplo:

  • "Hola!"[1] devuelve o .

  • "Hola!"[-2] devuelve a .

[]

s[start:end:step]

Devuelve un sector de la cadena s .

Este operador tiene los siguientes argumentos:

  • start - (opcional): el índice de inicio inclusivo del sector. El valor predeterminado es 0 .

  • end - (opcional): el índice final exclusivo del sector. El valor predeterminado es la longitud de la cadena.

  • step - (opcional): el número que se va a incrementar para cada paso del sector. Por ejemplo, puedes especificar 2 para devolver un sector con todos los demás caracteres o especificar -1 para invertir el sector. El valor predeterminado es 1 .

Puedes omitir el argumento step para utilizar su valor predeterminado. Por ejemplo, s[1:4:1] equivale a

s[1:4] .

Los argumentos deben ser enteros o la constante "none".

Si especificas none , utiliza el valor predeterminado para ese argumento.

Por ejemplo:

  • "Hola!"[1:4] devuelve "ola" .

  • "Hola!"[:2] devuelve "Ho" .

  • "Hola!"[3:] devuelve "a!" .

  • "Hola!"[:-4] devuelve "H" .

  • "Hola!"[::2] devuelve "Hla" .

  • "Hola!"[::-1] devuelve "!aloH" .


Constantes

Puedes utilizar las siguientes constantes matemáticas comunes en las expresiones. Las constantes no distinguen entre mayúsculas y minúsculas.

⛔ Si defines una variable con el mismo nombre que una constante,
la variable sobrescribe la constante.

Constante

Descripción

pi

El número pi (π): 3.141592653589793 .

e

El número e: 2.718281828459045 .

true

Equivalente al número 1.

Los booleanos se convierten en sus equivalentes numéricos.

false

Equivalente al número 0.

Los booleanos se convierten en sus equivalentes numéricos.

none

Equivalente a ningún valor. Puedes utilizar esta constante para no generar nada como resultado de una expresión condicional.


Funciones

Puedes utilizar una gran variedad de funciones para operar con los datos de las expresiones de fórmula.

Las transformaciones y las métricas admiten funciones. La siguiente tabla indica qué tipos de funciones son compatibles con cada tipo de propiedad de fórmula.

Tipo de función

Transformaciones

Métricas

Comunes

Comparación

Condicionales

Cadenas

Agregación

No

Temporales

No

Fecha y hora


Sintaxis de una función

Puedes utilizar la siguiente sintaxis para crear las siguientes funciones:

  • Sintaxis normal: con la sintaxis normal, el nombre de la función va seguido de paréntesis con cero o más argumentos. function_name(argument1, argument2, argument3, ...) . Por ejemplo, las funciones con la sintaxis normal podrían tener el aspecto log(x) y contains(s, substring) .

  • Sintaxis uniforme de llamadas a funciones (UFCS): puedes utilizar funciones de sintaxis para llamadas a métodos en programación orientada a objetos. Con UFCS, el primer argumento va seguido de punto (.), luego el nombre de la función y los argumentos restantes (si los hay) entre paréntesis. argument1.function_name(argument2, argument3, ...) . Por ejemplo, las funciones con UFCS pueden tener un aspecto similar a x.log() y s.contains(substring) . También es posible utilizar UFCS para encadenar funciones posteriores. Neuron utiliza el resultado de la evaluación de la función actual como primer argumento para la siguiente función. Por ejemplo, puedes utilizar message.jp('$.status').lower().contains('fail') en lugar de contains(lower(jp(message, '$.status')),'fail') .


Funciones comunes

Al trabajar con transformaciones y métricas puedes utilizar las siguientes funciones para calcular funciones matemáticas comunes en transformaciones y métricas:

Función

Descripción

abs(x)

Devuelve el valor absoluto de x .

acos(x)

Devuelve el arco coseno de x .

asin(x)

Devuelve el arcoseno de x .

atan(x)

Devuelve el arco tangente de x .

cbrt(x)

Devuelve la raíz cúbica de x .

ceil(x)

Devuelve el entero más cercano mayor que x .

cos(x)

Devuelve el coseno de x .

cosh(x)

Devuelve el coseno hiperbólico de x .

cot(x)

Devuelve la cotangente de x .

exp(x)

Devuelve e a la potencia de x .

expm1(x)

Devuelve exp(x) - 1 . Utiliza esta función para calcular con mayor precisión los valores exp(x) - 1 pequeños de x .

floor(x)

Devuelve el entero más cercano menor que x .

log(x)

Devuelve el log (base e ) de x .

log10(x)

Devuelve el log10 (base 10 ) de x .

log1p(x)

Devuelve log(1 + x) . Utiliza esta función para calcular con mayor precisión los valores log(1 + x) pequeños de x .

log2(x)

Devuelve el log2 (base 2 ) de x .

pow(x, y)

Devuelve x a la potencia de y. Esto equivale a x ^ y .

signum(x)

Devuelve el signo de x ( -1 para entradas negativas, 0 para entradas cero, +1 para entradas positivas).

sin(x)

Devuelve el seno de x .

sinh(x)

Devuelve el seno hiperbólico de x .

sqrt(x)

Devuelve la raíz cuadrada de x .

tan(x)

Devuelve la tangente de x .

tanh(x)

Devuelve la tangente hiperbólica de x .


Funciones de comparación

En las transformaciones y métricas puedes utilizar las siguientes funciones para comparar dos valores y la salida 1 (true) o 0 (false).

Neuron compara cadenas por orden lexicográfico.

Función

Descripción

gt(x, y)

Devuelve 1 si x es mayor que y , de lo contrario 0 ( x > y) ).

Esta función no devuelve un valor si x e y son tipos incompatibles, como un número y una cadena.

gte(x, y)

Devuelve 1 si x es mayor o igual que y , de lo contrario 0 ( x ≥ y ).

Neuron considera que los argumentos son iguales si están dentro de una tolerancia relativa de 1E-9 . Se comporta de manera similar a la función isclose en Python.

Esta función no devuelve un valor si x e y son tipos incompatibles, como un número y una cadena.

eq(x, y)

Devuelve 1 si x es igual a y , de lo contrario 0 ( x == y ).

Neuron considera que los argumentos son iguales si están dentro de una tolerancia relativa de 1E-9 . Se comporta de manera similar a la función isclose en Python.

lt(x, y)

Devuelve 1 si x es menor que y , de lo contrario 0 ( x < y) .

Esta función no devuelve un valor si x e y son tipos incompatibles, como un número y una cadena.

lte(x, y)

Devuelve 1 si x es menor o igual que y , de lo contrario 0 ( x ≤ y ).

Neuron considera que los argumentos son iguales si están dentro de una tolerancia relativa de 1E-9 .

Se comporta de manera similar a la función isclose en Python.

Esta función no devuelve un valor si x e y son tipos incompatibles, como un número y una cadena.

isnan(x)

Devuelve 1 si x es igual a NaN , de lo contrario 0 .

Esta función no devuelve un valor si x es una cadena.


Funciones condicionales

En las transformaciones y métricas, puedes utilizar la siguiente función para comprobar una condición y devolver resultados diferentes si la condición se evalúa como true o false:

Función

Descripción

if(condition, result_if_true, result_if_false)

Evalúa condition y devuelve result_if_true si la condición se evalúa como true o result_if_false si la condición se evalúa como false.

condition debe ser un número.

Esta función considera 0 falso y todo lo demás (incluido NaN ) como verdadero. Los booleanos se convierten en 0 (falso) y 1 (verdadero).

Puede devolver la constante none de esta función para descartar la salida de una condición determinada. Esto significa que puede filtrar los puntos de datos que no cumplen una condición. Para obtener más información, consulta Filtrado de puntos de datos.

Ejemplos:

  • if(0, x, y) devuelve la variable y .

  • if(5, x, y) devuelve la variable x .

  • if(gt(temp, 100), x, y) devuelve la variable x si la variable temp es mayor que 100

  • if(gt(temp, 100), temp, none) devuelve la variable temp si es mayor o igual que 100 o none (sin valor) si temp es menor que 100 .

Recomendamos utilizar contenedores para funciones condicionales anidadas donde uno o más argumentos son funciones condicionales. Puedes utilizar if(condition, result_if_true) para evaluar una condición y elif(condition, result_if_true, result_if_false) para evaluar condiciones adicionales.

Por ejemplo, puedes utilizar if(condition1, result1_if_true).elif(condition2, result2_if_true, result2_if_false) en lugar de if(condition1, result1_if_true, if(condition2, result2_if_true, result2_if_false)) .

Importante:

Debes utilizar elif(condition, result_if_true, result_if_false) con UFCS.


Funciones de cadena

En transformaciones y métricas puedes utilizar las siguientes funciones para operar en cadenas:

⚠️ Las expresiones de fórmula solo pueden generar valores dobles (tipo double). Las expresiones anidadas pueden producir otros tipos de datos, como cadenas, pero la fórmula en su conjunto debe evaluarse como un número.

Puedes utilizar la Función jp para convertir una cadena en un número.
Si defines una fórmula que calcula un valor no numérico, Neuron no
genera un punto de datos para ese cálculo.

Función

Descripción

len(s)

Devuelve la longitud de la cadena s .

find(s, substring

Devuelve el índice de la cadena substring en la cadena s .

contains(s, substring)

Devuelve 1 si la cadena s contiene la cadena substring , de lo contrario 0 .

upper(s)

Devuelve la cadena s en mayúsculas.

lower(s)

Devuelve la cadena s en minúsculas.

jp(s, json_path)

Evalúa la cadena s con la expresión JsonPath: json_path y devuelve el resultado.

Utiliza esta función para hacer lo siguiente:

  • Extrae un valor, matriz u objeto de una estructura JSON serializada.

  • Convierte una cadena en un número. Por ejemplo, la fórmula jp('111', '$') devuelve 111 como un número.

Para extraer un valor de cadena de una estructura JSON y devolverlo como un número, hay que utilizar varias funciones anidadas jp . La función externa jp extrae la cadena de la estructura JSON y la función interna jpp convierte la cadena en un número.

La cadena json_path debe contener un literal de cadena. Esto significa que json_path no puede ser una expresión que tome el valor de una cadena.

Ejemplos:

  • jp('{"status":"active","value":15}', '$.value') devuelve 15 .

  • jp('{"measurement":{"reading":25,"confidence":0.95}}', '$.measurement.reading') devuelve 25 .

  • jp('[2,8,23]', '$[2]') devuelve 23 .

  • jp('{"values":[3,6,7]}', '$.values[1]') devuelve 6 .

  • jp('111', '$') devuelve 111 .

  • jp(jp('{"measurement":{"reading":25,"confidence":"0.95"}}', '$.measurement.confidence'), '$') devuelve 0.95 .

Para obtener más información, consulta Valores indefinidos, infinitos y de desbordamiento.


Funciones de agregación

Únicamente en métricas es posible utilizar las siguientes funciones para agregar valores de entrada en cada intervalo de tiempo y calcular un único valor de salida. Las funciones de agregación pueden agregar datos de activos asociados.

Los argumentos de las funciones de agregación pueden ser variables, literales numéricos, funciones temporales o funciones de agregación. Esto significa que no se pueden proporcionar expresiones anidadas como argumentos para funciones de agregación. Por ejemplo, la fórmula avg(x + 1) no es válida. En cambio, la fórmula max(latest(x), latest(y), latest(z)) es válida y devuelve el mayor valor actual de las x propiedades y , y z .

⛔ Neuron también calcula automáticamente agregados durante determinados intervalos de tiempo para todas las propiedades. 

Función

Descripción

avg(x0, ..., xn)

Devuelve la media de los valores de las variables dadas durante el intervalo de tiempo actual.

Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual.

sum(x0, ..., xn)

Devuelve la suma de los valores de las variables dadas durante el intervalo de tiempo actual.

Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual.

min(x0, ..., xn)

Devuelve el mínimo de los valores de las variables dadas durante el intervalo de tiempo actual.

Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual.

max(x0, ..., xn)

Devuelve el máximo de los valores de las variables dadas durante el intervalo de tiempo actual.

Esta función devuelve un punto de datos solo si las variables dadas tienen al menos un punto de datos durante el intervalo de tiempo actual.

count(x0, ..., xn)

Devuelve el número total de puntos de datos para las variables dadas durante el intervalo de tiempo actual. Esta función calcula un punto de datos para cada intervalo de tiempo.


Funciones temporales

Las métricas nos permiten utilizar las siguientes funciones que devuelven valores basados en marcas temporales de puntos de datos.

Los argumentos de la función temporal deben ser propiedades del modelo de recursos local, por tanto no es posible utilizar propiedades de modelos de activos secundarios en funciones temporales. Tampoco se pueden utilizar expresiones como argumentos para funciones temporales.

Función

Descripción

first(x)

Devuelve el valor de la variable dada con la marca temporal más temprana durante el intervalo de tiempo especificado.

last(x)

Devuelve el valor de la variable dada con la última marca temporal durante el intervalo de tiempo especificado.

earliest(x)

Devuelve el valor de la variable dada con la última marca temporal antes del intervalo de tiempo especificado.

Esta función calcula un punto de datos para cada intervalo de tiempo, si la propiedad de entrada tiene al menos un punto de datos en su historial.

latest(x)

Devuelve el valor de la variable dada con la última marca temporal antes del final del intervalo de tiempo especificado.

Esta función calcula un punto de datos para cada intervalo de tiempo si la propiedad de entrada tiene al menos un punto de datos en su historial.

statetime(x)

Devuelve la cantidad de tiempo (en segundos) en que las variables son positivas en el intervalo de tiempo especificado. Puedes utilizar las funciones de comparación para crear una propiedad de transformación para que la función statetime la consuma.

Por ejemplo, si tiene una propiedad idle que es 0 o 1 , puedes calcular el tiempo de inactividad por intervalo de tiempo con esta expresión: idleTime = statetime(idle) .

La función no admite propiedades de métricas como variables de entrada.

Esta función calcula un punto de datos para cada intervalo de tiempo, si la propiedad de entrada tiene al menos un punto de datos en su historial.

El siguiente diagrama muestra cómo Neuron calcula las funciones temporales first , last , earliest y latest en relación con el intervalo de tiempo actual.


                AWS IoT SiteWiseLas funciones temporales de  devuelven puntos de datos en función de su marca temporal.

Ejemplo de Escenario de statetime:

Considera un ejemplo en el que hay un activo con las siguientes propiedades:

  • idle – Una medida que es 0 o 1 . Cuando el valor es 1 , la máquina está inactiva.

  • idle time – Una métrica que utiliza la fórmula statetime(idle) para calcular la cantidad de tiempo en segundos en que la máquina está inactiva, en un intervalo de 1 minuto.

La propiedad idle tiene los siguientes puntos de datos.

Marca temporal

14:00:00 h

14:00:30 h

14:01:15 h

14:02:45 h

14:04:00 h

Idle

0

1

1

0

0

Neuron calcula la propiedad idleTime cada minuto a partir de los valores de idle . Una vez completado este cálculo, la propiedad idleTime tiene los siguientes puntos de datos.

Marca temporal

14:00:00 h

14:01:00 h

14:02:00 h

14:03:00 h

14:04:00 h

Idle Time

N/D

30

60

45

0

Neuron realiza los siguientes cálculos para idleTime al final de cada minuto.

  • A las 14:00 h (de las 13:59 h a las 14:00 h)

  • A las 14:01 h (de las 14:00 h a las 14:01 h)

  • A las 14:02 h (de las 14:01 h a las 14:02 h)

  • A las 14:03 h (de las 14:02 h a las 14:03 h)

  • A las 14:04 h (de las 14:03 h a las 14:04 h)


Funciones de fecha y hora

En las transformaciones y métricas se pueden utilizar las funciones de fecha y hora de las siguientes formas:

  • Recuperar la marca temporal actual de un punto de datos en UTC o en la zona horaria local.

  • Crear marcas temporales con argumentos como year month , y day_of_month .

  • Extraer un periodo de tiempo como, por ejemplo, un año o mes con la fórmula unix_time .

Función

Descripción

now()

Devuelve la fecha y hora actuales, en segundos, en formato de tiempo Unix.

timestamp()

En las transformaciones la función devuelve la marca temporal del mensaje de entrada, en segundos, en formato de tiempo Unix.

En las métricas la función devuelve la marca temporal recuperada al final de la ventana actual, en segundos, en formato de tiempo Unix.

mktime(time_zone, year, month, day_of_month, hour, minute, second)

Devuelve el tiempo de entrada en segundos, en formato de tiempo Unix.

Se aplican los siguientes requisitos cuando se utiliza la función:

  • El argumento de zona horaria debe ser una cadena entre comillas ('UTC'). Si no se especifica, la zona horaria predeterminada es UTC.

  • Los argumentos año, mes, día del mes, hora, minuto y segundo deben estar en orden.

  • Los argumentos de año, mes y fecha son obligatorios.

Los siguientes límites se aplican cuando se utiliza la función:

  • year : los valores válidos están entre 1970 y 2250.

  • month : los valores válidos están entre 1 y 12.

  • day-of-month : los valores válidos están entre 1 y 31.

  • hour : los valores válidos están entre 0 y 23.

  • minute : los valores válidos están entre 0 y 59.

  • second : los valores válidos están entre 0 y 60. Puede ser un número de punto flotante.

Ejemplos:

  • mktime(2020, 2, 29)

  • mktime('UTC+3', 2021, 12, 31, 22)

  • mktime(2022, 10, 13, 2, 55, 13.68, 'PST')

localtime(unix_time, time_zone)

Devuelve el año, el día del mes, el día de la semana, el día del año, la hora, el minuto o el segundo de la zona horaria especificada a partir de la hora Unix.

Se aplican los siguientes requisitos cuando se utiliza la función:

  • El argumento de zona horaria debe ser una cadena entre comillas ('UTC'). Si no se especifica, la zona horaria predeterminada es UTC.

  • El argumento de tiempo Unix es el tiempo en segundos, en formato de tiempo Unix. El rango válido es de 1 a 31556889864403199. Puede ser un número de punto flotante.

Respuesta de ejemplo: 2007-12-03T10:15:30+01:00[Europe/Paris]

localtime(unix_time, time_zone) no es una función independiente. Las funciones year() , mon() , mday , wday() , yday() , hour() , minute(), sec() , y toman como argumento localtime(unix_time, time_zone) .

Ejemplos:

  • year(localtime('GMT', 1605898608.8113723))

  • now().localtime().year()

  • timestamp().localtime(‘PST’).year()

  • localtime(1605289736, ‘Europe/London’).year()

year(localtime(localtime(unix_time, time_zone))

Devuelve el año de localtime(unix_time, time_zone).

mon(localtime(unix_time, time_zone))

Devuelve el mes de localtime(unix_time, time_zone).

mday(localtime(unix_time, time_zone))

Devuelve el día del mes de localtime(unix_time, time_zone).

wday(localtime(unix_time, time_zone))

Devuelve el día de la semana de localtime(unix_time, time_zone).

yday(localtime(unix_time, time_zone))

Devuelve el día del año de localtime(unix_time, time_zone).

hour(localtime(unix_time, time_zone))

Devuelve la hora de localtime(unix_time, time_zone).

minute(localtime(unix_time, time_zone))

Devuelve el minuto de localtime(unix_time, time_zone).

sec(localtime(unix_time, time_zone))

Devuelve el segundo de localtime(unix_time, time_zone).


Formatos de zona horaria admitidos

Puedes especificar el argumento de zona horaria de las siguientes formas:

  • Desplazamiento de zona horaria: especifique 'Z' para UTC o un desplazamiento ( '+2' o '-5' ).

  • Offset (IDsDesplazamiento): combina una abreviatura de zona horaria y un desplazamiento. Por ejemplo, 'GMT+2' y 'UTC-01:00' .

  • Basada en IDs región: por ejemplo, 'Etc/GMT+12' y 'Pacific/Pago_Pago' .

La abreviatura de zona horaria solo debe contener tres letras. Puedes consultar el listado de Abreviaturas de zonas horarias basadas en regiones IDs admitidas.


Uso de cadenas en fórmulas

Puedes operar en cadenas en tus expresiones de fórmulas. También puedes introducir cadenas a partir de variables que hagan referencia a atributos y propiedades de medición.

⚠️ Las expresiones de fórmula solo pueden generar valores dobles. 
Las expresiones anidadas pueden producir otros tipos de datos, como
cadenas, pero la fórmula en su conjunto debe evaluarse como un número.

Puedes utilizar la Función jp para convertir una cadena en un número.
Si defines una fórmula que calcula un valor no numérico, Neuron no
genera un punto de datos para ese cálculo.

Neuron proporciona las siguientes características de expresión de fórmula que puedes utilizar para operar en cadenas:

  • Literales de cadena

  • El operador de índice ( s[index] )

  • El operador de sector ( s[start:end:step] )

  • Funciones de comparación que se pueden utilizar para comparar cadenas por orden lexicográfico

  • Funciones de cadena, que incluyen la función jp que puede analizar objetos JSON serializados y convertir cadenas en números


Filtrar datos

Puedes utilizar la función if para filtrar los puntos de datos que no cumplen una condición. La función if evalúa una condición y devuelve diferentes valores para los resultados de true y false . Puedes utilizar la constante none como salida para un caso de una función if para descartar el punto de datos de ese caso.

Si quieres filtrar datos que coinciden con una condición crea una transformación que utilice la función if para definir una condición que compruebe si se cumple la condición y devuelva none como valor de result_if_true o result_if_false .

Ejemplo de filtrado de datos en los que el agua no hierve:

Imagina una situación en la una medición temp proporcione la temperatura (en celsius) del agua de una máquina. Puedes definir la siguiente transformación para filtrar los datos donde el agua está hirviendo:

Transformación: boiling_temps = if(gte(temp, 100), temp, none) devuelve la temperatura si es mayor o igual a 100 grados celsius; de lo contrario, no devuelve ningún dato.


Contar datos que coinciden con una condición

Puedes utilizar funciones de comparación y sum() para contar el número de puntos de datos para los que se cumple una condición.

Para contar puntos de datos que coincidan con una condición:

  1. Crea una transformación que utilice una función de comparación para definir una condición de filtro en otra propiedad.

  2. Crea una métrica que sume los puntos de datos donde se cumple esa condición.

Ejemplo de recuento del número de puntos de datos en los que el agua está hirviendo:

Imagina una situación en la que tengas una medición, temp , que proporciona la temperatura (en celsius) del agua de una máquina. Puedes definir las siguientes propiedades de transformación y métrica para contar el número de puntos de datos en los que hierve el agua:

  • Transformación: is_boiling = gte(temp, 100) – devuelve 1 si la temperatura es mayor o igual a 100 grados celsius; de lo contrario, devuelve 0 .

  • Métrica: boiling_count = sum(is_boiling) – Devuelve el número de puntos de datos en los que el agua está hirviendo.


Datos con retraso en fórmulas

Neuron admite la adquisición tardía de datos con una antigüedad de hasta 7 días. Cuando Neuron recibe datos tardíos, vuelve a calcular los valores existentes para cualquier métrica que introduzca los datos tardíos en una ventana anterior. Estos nuevos cálculos dan lugar a cargos de procesamiento de datos.

⛔ Cuando Neuron calcula propiedades que introducen datos tardíos,
utiliza la expresión de fórmula actual de cada propiedad.
Cuando Neuron vuelva a calcular una ventana anterior de una métrica,
reemplazará el valor anterior de esa ventana. Si ha habilitado las
notificaciones para esa métrica, Neuron también emitirá una
notificación de valor de propiedad.

Esto significa que puedes recibir una nueva notificación de
actualización de valor de propiedad para la misma propiedad y marca
temporal para la que recibiste previamente una notificación. Si las
aplicaciones o lagos de datos consumen notificaciones de valor de
propiedad, debes actualizar el valor anterior con el nuevo valor para
que los datos sean precisos.


Calidad de datos en fórmulas

En Neuron cada punto de datos tiene un código de calidad que puede ser uno de los siguientes:

  • GOOD : los datos no se ven afectados por ningún problema.

  • BAD : los datos se ven afectados por algún problema; por ejemplo, un error en un sensor.

  • UNCERTAIN : los datos se ven afectados por algún problema; por ejemplo, la falta de precisión de un sensor.

Neuron consume solo datos de calidad GOOD cuando calcula transformaciones y métricas. Neuron genera solo datos de calidad GOOD para cálculos exitosos. Si un cálculo no se realiza correctamente, Neuron no genera un punto de datos para ese cálculo. Esto puede ocurrir si un cálculo da como resultado un valor indefinido, infinito o de desbordamiento.


Valores indefinidos, infinitos y de desbordamiento

Algunas expresiones de fórmula (como x / 0 , sqrt(-1) o log(0) ) calculan valores que no están definidos en un sistema de números reales, infinitos o fuera del rango admitido por Neuron. Cuando la expresión de una propiedad de recurso calcula un valor indefinido, infinito o de desbordamiento, Neuron no genera un punto de datos para ese cálculo.

Neuron tampoco genera un punto de datos si calcula un valor no numérico como resultado de una expresión de fórmula. Esto significa que si define una fórmula que calcula una cadena, matriz o la constante cero, Neuron no genera un punto de datos para ese cálculo.

Ejemplo:

Cada una de las siguientes expresiones de fórmula da como resultado un valor que Neuron no puede representar como un número. Neuron no genera un punto de datos cuando calcula estas expresiones de fórmula.

  • x / 0 no está definido.

  • log(0) no está definido.

  • sqrt(-1) no está definido en un sistema de números reales.

  • "hello" + " world" es una cadena.

  • jp('{"values":[3,6,7]}', '$.values') es una matriz.

  • if(gte(temp, 100), temp, none) es none cuando temp es menor que el valor 100 .


Si tienes problemas con el uso de expresiones de fórmula en Modelos de activos o estás interesado en conocer otros detalles, ponte en contacto con nuestro departamento de soporte enviando un email a neuron@plexo.cloud

¿Ha quedado contestada tu pregunta?