

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutoriais de expressão de fórmulas
<a name="expression-tutorials"></a>

Você pode seguir esses tutoriais para usar expressões de fórmula em AWS IoT SiteWise.

**Topics**
+ [Usar strings em fórmulas](#use-strings-in-formulas)
+ [Filtrar pontos de dados](#filter-data)
+ [Contar pontos de dados que correspondem a uma condição](#count-filtered-data)
+ [Dados atrasados em fórmulas](#late-data)
+ [Qualidade de dados em fórmulas](#data-quality)
+ [Valores indefinidos, infinitos e excedidos](#undefined-values)

## Usar strings em fórmulas
<a name="use-strings-in-formulas"></a>

Você pode operar em strings em suas expressões de fórmula. Você também pode inserir cadeias de caracteres de variáveis que fizerem referência a propriedades de atributos e medidas.

**Importante**  
<a name="formula-output-rules"></a>As expressões de fórmula só podem produzir valores duplos ou de string. Expressões aninhadas podem gerar outros tipos de dados, como strings, mas a fórmula como um todo deve ser avaliada como um número ou string. Você pode usar a [função jp](expression-string-functions.md#jp-definition) para converter uma string em um número. O valor Booleano deve ser 1 (verdadeiro) ou 0 (falso). Para obter mais informações, consulte [Valores indefinidos, infinitos e excedidos](#undefined-values).

AWS IoT SiteWise fornece os seguintes recursos de expressão de fórmula que você pode usar para operar em cadeias de caracteres:
+ [Literais string](expression-literals.md#string-literal-definition)
+ O [operador de índice](expression-operators.md#index-operator-definition) (`s[index]`)
+ O [operador de fatia](expression-operators.md#slice-operator-definition) (`s[start:end:step]`)
+ [Funções de comparação](expression-comparison-functions.md), que você pode usar para comparar strings por ordem [lexicográfica](https://en.wikipedia.org/wiki/Lexicographic_order)
+ [Funções de string](expression-string-functions.md), que incluem a função `jp` capaz de analisar objetos JSON serializados e converter strings em números

## Filtrar pontos de dados
<a name="filter-data"></a>

Você pode usar a [função if](expression-conditional-functions.md#if-definition) para filtrar pontos de dados que não atendam a uma condição. A função `if` avalia uma condição e retorna valores diferentes para resultados `true` e `false`. Você pode usar a [constante nula](expression-constants.md#none-definition) como saída para um caso de função `if`, para descartar o ponto de dados desse caso.

**Para filtrar pontos de dados que correspondam a uma condição**
+ Crie uma transformação que use a função `if` para definir uma condição que verifica se uma outra foi atendida e retornar `none` como valor `result_if_true` ou `result_if_false`.

**Example Exemplo: filtrar pontos de dados onde a água não esteja fervendo**  
Considere um cenário onde você tenha uma medição `temp_c` que forneça a temperatura (em Celsius) da água em uma máquina. Você pode definir a seguinte transformação para filtrar os pontos de dados nos quais a água não estiver fervendo:  
+ Transformar: `boiling_temps = if(gte(temp_c, 100), temp_c, none)` — retorna a temperatura se maior ou igual a 100 graus Celsius, caso contrário, não retornará nenhum ponto de dados.

## Contar pontos de dados que correspondem a uma condição
<a name="count-filtered-data"></a>

Você pode usar [funções comparativas](expression-comparison-functions.md) e [soma ()](expression-aggregation-functions.md#sum-definition) para contar o número de pontos de dados para os quais uma condição é verdadeira.

**Para contar pontos de dados que correspondam a uma condição**

1. Crie uma transformação que use uma função comparativa para definir uma condição de filtro em outra propriedade.

1. Crie uma métrica que some os pontos de dados onde essa condição é atendida.

**Example Exemplo: contar o número de pontos de dados onde a água está fervendo**  
Considere um cenário onde você tenha uma medição `temp_c` que forneça a temperatura (em Celsius) da água em uma máquina. Você pode definir as seguintes propriedades de transformação e métrica para contar o número de pontos de dados onde a água está fervendo:  
+ Transformação: `is_boiling = gte(temp_c, 100)` – Retorna `1` se a temperatura for maior ou igual a 100 graus Celsius, caso contrário, retorna `0`.
+ Métrica: `boiling_count = sum(is_boiling)` – Retorna o número de pontos de dados onde a água estiver fervendo.

## Dados atrasados em fórmulas
<a name="late-data"></a>

AWS IoT SiteWise suporta a ingestão tardia de dados com até 7 dias. Quando AWS IoT SiteWise recebe dados atrasados, ele recalcula os valores existentes para qualquer métrica que insira os dados atrasados em uma janela anterior. Esses recálculos resultam em cobranças de processamento de dados.

**nota**  
Ao AWS IoT SiteWise computar propriedades que inserem dados atrasados, ele usa a expressão de fórmula atual de cada propriedade.

Depois de AWS IoT SiteWise recalcular uma janela anterior para uma métrica, ela substitui o valor anterior dessa janela. Se você ativou as notificações para essa métrica, AWS IoT SiteWise também emitirá uma notificação de valor de propriedade. Isso significa que você pode receber uma nova notificação de atualização de valor de propriedade para a mesma propriedade e notificação de hora para aquelas cuja notificação você tenha recebido anteriormente. Se seus aplicativos ou data lakes consumirem notificações de valor de propriedade, você deve atualizar o valor anterior com o novo valor para que os dados estejam precisos.

## Qualidade de dados em fórmulas
<a name="data-quality"></a>

Em AWS IoT SiteWise, cada ponto de dados tem um código de qualidade, que pode ser um dos seguintes:
+ `GOOD` – os dados não são afetados por nenhum problema.
+ `BAD` – os dados são afetados por um problema, como a falha do sensor.
+ `UNCERTAIN` – os dados são afetados por um problema, como a imprecisão do sensor.

AWS IoT SiteWise consome somente dados `GOOD` de qualidade ao computar transformações e métricas. AWS IoT SiteWise gera somente dados `GOOD` de qualidade para cálculos bem-sucedidos. Se um cálculo não for bem-sucedido, AWS IoT SiteWise não produzirá um ponto de dados para esse cálculo. Isso pode ocorrer se uma computação resultar em um valor indefinido, infinito ou em um estouro.

Para obter mais informações sobre como consultar dados e filtrar por qualidade de dados, consulte [Consultar dados de AWS IoT SiteWise](query-industrial-data.md).

## Valores indefinidos, infinitos e excedidos
<a name="undefined-values"></a>

Algumas expressões de fórmula (como `x / 0``sqrt(-1)`, ou`log(0)`) calculam valores indefinidos em um sistema numérico real, infinitos ou fora do intervalo suportado por AWS IoT SiteWise. Quando a expressão de uma propriedade de ativo computa um valor indefinido, infinito ou excedente, AWS IoT SiteWise não gera um ponto de dados para esse cálculo.

AWS IoT SiteWise também não gera um ponto de dados se computar um valor não numérico como resultado de uma expressão de fórmula. Isso significa que, se você definir uma fórmula que calcula uma string, matriz ou [constante nenhuma](expression-constants.md#none-definition), então o AWS IoT SiteWise não irá gerar um ponto de dados para esse cálculo.

**Example Exemplos**  
Cada uma das expressões de fórmula a seguir resulta em um valor que não AWS IoT SiteWise pode ser representado como um número. AWS IoT SiteWise não gera um ponto de dados quando calcula essas expressões de fórmula.  
+ `x / 0` é indefinido.
+ `log(0)` é indefinido.
+ `sqrt(-1)` é indefinido em um sistema numérico real.
+ `"hello" + " world"` é uma string.
+ `jp('{"values":[3,6,7]}', '$.values')` é uma matriz.
+ `if(gte(temp, 300), temp, none)` é `none` quando `temp` é menor que `300`.