

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utiliser des fonctions temporelles dans les expressions de formules
<a name="expression-temporal-functions"></a>

Utilisez des fonctions temporelles pour renvoyer des valeurs basées sur les horodatages des points de données.

## Utiliser des fonctions temporelles dans les métriques
<a name="temporal-functions-in-metrics"></a>

Dans [les métriques](metrics.md) uniquement, vous pouvez utiliser les fonctions suivantes qui renvoient des valeurs basées sur l'horodatage des points de données.

Les arguments des fonctions temporelles doivent être des propriétés du modèle d'actif local ou des expressions imbriquées. Cela signifie que vous ne pouvez pas utiliser les propriétés des modèles d'actifs enfants dans les fonctions temporelles.

Vous pouvez utiliser des expressions imbriquées dans les fonctions temporelles. Lorsque vous utilisez des expressions imbriquées, les règles suivantes s'appliquent : 
+ Chaque argument ne peut comporter qu'une seule variable.

  Par exemple, `latest( t*9/5 + 32 )` est pris en charge.
+ Les arguments ne peuvent pas être des fonctions d'agrégation.

  Par exemple, `first( sum(x) )` n'est pas pris en charge.


| Fonction | Description | 
| --- | --- | 
|  `first(x)`  |  Renvoie la valeur de la variable donnée avec l'horodatage le plus ancien sur l'intervalle de temps actuel.  | 
|   `last(x)` |  Renvoie la valeur de la variable donnée avec l'horodatage le plus récent sur l'intervalle de temps actuel.  | 
|  `earliest(x)`  |  Renvoie la dernière valeur de la variable donnée avant le début de l'intervalle de temps actuel. Cette fonction calcule un point de données pour chaque intervalle de temps, si la propriété d'entrée a au moins un point de données dans son historique. Consultez [time-range-defintion](#time-range-def) pour plus de détails.   | 
|   `latest(x)` |  Renvoie la dernière valeur de la variable donnée avec le dernier horodatage avant la fin de l'intervalle de temps actuel. Cette fonction calcule un point de données pour chaque intervalle de temps, si la propriété d'entrée a au moins un point de données dans son historique. Consultez [time-range-defintion](#time-range-def) pour plus de détails.  | 
|   `statetime(x)`  |  Renvoie la durée, en secondes, pendant laquelle les variables données sont positives sur l'intervalle de temps actuel. Vous pouvez utiliser les [fonctions de comparaison](expression-comparison-functions.md) pour créer une propriété de transformation pour la `statetime` fonction à utiliser.  Par exemple, si vous avez une propriété `Idle` qui est `0` ou `1`, vous pouvez calculer le temps d'inactivité par intervalle de temps avec l'expression suivante : `IdleTime = statetime(Idle)`. Pour plus d'informations, consultez l'[exemple de scénario d'heure d'état](#statetime-example). Cette fonction ne prend pas en charge les propriétés de métriques en tant que variables d'entrée. Cette fonction calcule un point de données pour chaque intervalle de temps, si la propriété d'entrée a au moins un point de données dans son historique.  | 
|   `TimeWeightedAvg(x, [interpolation])`  | Renvoie la moyenne des données d'entrée pondérées par les intervalles de temps entre les points.Voir [Paramètres des fonctions pondérées dans le temps](#timeweighted-parameter) pour plus de détails sur les calculs et les intervalles.L'argument facultatif `interpolaton` doit être une constante de chaîne :[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/expression-temporal-functions.html) | 
|   `TimeWeightedStDev(x, [algo])`  |  Renvoie l'écart type des données d'entrée pondéré avec les intervalles de temps entre les points.  Voir [Paramètres des fonctions pondérées dans le temps](#timeweighted-parameter) pour plus de détails sur les calculs et les intervalles.  Le calcul utilise l'algorithme de calcul du dernier report observé pour les intervalles entre les points de données. Dans cette approche, le point de données est calculé comme la dernière valeur observée jusqu'au prochain horodatage du point de données d'entrée. Le poids est calculé sous la forme d'un intervalle de temps en secondes entre les points de données ou les limites des fenêtres.  L'argument facultatif `algo` doit être une constante de chaîne : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/expression-temporal-functions.html) Les formules suivantes sont utilisées pour le calcul où : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/expression-temporal-functions.html) Équation pour l'écart type de la population : ![\[Équation pour l'écart type de la population.\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/timeweightedstdev1.png) Équation pour l'écart type de fréquence : ![\[Équation pour l'écart type de fréquence.\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/timeweighted-frequency-stdev.png)  | 

Le schéma suivant montre comment AWS IoT SiteWise les fonctions temporelles`first`, `last` `earliest``latest`, et sont calculées par rapport à l'intervalle de temps actuel.

![\[AWS IoT SiteWise les fonctions temporelles renvoient des points de données en fonction de leur horodatage.\]](http://docs.aws.amazon.com/fr_fr/iot-sitewise/latest/userguide/images/sitewise-temporal-functions.png)
<a name="time-range-def"></a>

**Note**  
L'intervalle de temps pour`first(x)`, `last(x)` est (début de la fenêtre actuelle, fin de la fenêtre actuelle].
L'intervalle de temps pour `latest(x)` est [début du temps, fin de la fenêtre actuelle].
La plage de temps pour `earliest(x)` est (début de l'heure, fin de la fenêtre précédente).

**Paramètres des fonctions pondérés dans le temps**

Les fonctions pondérées dans le temps calculées pour la fenêtre d'agrégation prennent en compte les éléments suivants :
+ Points de données à l'intérieur de la fenêtre
+ Intervalles de temps entre les points de données
+ Dernier point de données avant la fenêtre
+ Premier point de données après la fenêtre (pour certains algorithmes)

**Termes :**
+ Point de **données incorrect : tout point** de données dont la qualité n'est pas bonne ou dont la valeur n'est pas numérique. Cela n'est pas pris en compte dans le calcul des résultats d'une fenêtre.
+ **Intervalle incorrect** — Intervalle après un point de données erroné. L'intervalle avant le premier point de données connu est également considéré comme un mauvais intervalle.
+ **Bon point de données** — Tout point de données présentant une bonne qualité et une bonne valeur numérique.

**Note**  
AWS IoT SiteWise ne consomme des données `GOOD` de qualité que lorsqu'il calcule les transformations et les métriques. Il ignore les points `UNCERTAIN` de `BAD` données.
L'intervalle avant le premier point de données connu est considéré comme un **mauvais intervalle**. Pour plus d’informations, consultez [Tutoriels d'expression de formules](expression-tutorials.md).

L'intervalle après le dernier point de données connu se poursuit indéfiniment, affectant toutes les fenêtres suivantes. Lorsqu'un nouveau point de données arrive, la fonction recalcule l'intervalle.

Conformément aux règles ci-dessus, le résultat agrégé des fenêtres est calculé et limité aux limites des fenêtres. Par défaut, la fonction envoie le résultat de la fenêtre uniquement si l'ensemble de la fenêtre correspond à un **bon intervalle**.

Si l'**intervalle de validité** de la fenêtre est inférieur à la longueur de la fenêtre, la fonction n'envoie pas la fenêtre. 

Lorsque les points de données affectant le résultat de la fenêtre changent, la fonction recalcule la fenêtre, même si les points de données se trouvent en dehors de la fenêtre. 

Si la propriété d'entrée comporte au moins un point de données dans son historique et qu'un calcul a été lancé, la fonction calcule les fonctions d'agrégation pondérées dans le temps pour chaque intervalle de temps.

**Example Exemple de scénario statetime**  
Prenons un exemple où vous avez une ressource avec les propriétés suivantes :  
+ `Idle`— Une mesure qui est `0` ou`1`. Lorsque la valeur est `1`, la machine est inactive.
+ `Idle Time`— Mesure qui utilise la formule `statetime(Idle)` pour calculer la durée en secondes pendant laquelle la machine est inactive, par intervalle d'une minute.
La propriété `Idle` possède les points de données suivants.  


|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| Horodatage | 2:00:00 PM | 2:00:30 PM | 2:01:15 PM | 2:02:45 PM | 2:04:00 PM | 
| Idle | 0 | 1 | 1 | 0 | 0 | 
AWS IoT SiteWise calcule la `Idle Time` propriété toutes les minutes à partir des valeurs de`Idle`. Une fois ce calcul terminé, la propriété `Idle Time` possède les points de données suivants.  


|  |  |  |  |  |  | 
| --- |--- |--- |--- |--- |--- |
| Horodatage | 2:00:00 PM | 2:01:00 PM | 2:02:00 PM | 2:03:00 PM | 2:04:00 PM | 
| Idle Time | N/A | 30 | 60 | 45 | 0 | 
AWS IoT SiteWise effectue les calculs suivants `Idle Time` à la fin de chaque minute.  
+ À 2:00 PM (pour 1:59 PM à 2:00 PM)
  + Il n'y a pas de données pour `Idle` avant 2:00 PM, donc aucun point de données n'est calculé.
+ À 2:01 PM (pour 2:00 PM à 2:01 PM)
  + À 2:00:00 PM, la machine est active (`Idle` est égal à `0`).
  + À 2:00:30 PM, la machine es inactive (`Idle` est égal à `1`).
  + `Idle` ne change plus avant la fin de l'intervalle à 2:01:00 PM, `Idle Time`est donc égal à 30 secondes.
+ À 2:02 PM (pour 2:01 PM à 2:02 PM)
  + À 2:01:00 PM, la machine est inactive (conformément au dernier point de données à 2:00:30 PM).
  + À 2:01:15 PM, la machine est toujours inactive.
  + `Idle` ne change plus non plus avant la fin de l'intervalle à 2:02:00 PM, `Idle Time` est donc égal à 60 secondes.
+ À 2:03 PM (pour 2:02 PM à 2:03 PM)
  + À 2:02:00 PM, la machine est inactive (conformément au dernier point de données à 2:01:15 PM).
  + À 2:02:45 PM, la machine est active.
  + `Idle` ne change plus non plus avant la fin de l'intervalle à 2:03:00 PM, `Idle Time` est donc égal à 45 secondes.
+ À 2:04 PM (pour 2:03 PM à 2:04 PM)
  + À 2:03:00 PM, la machine est active (conformément au dernier point de données à 2:02:45 PM).
  + `Idle` ne change plus non plus avant la fin de l'intervalle à 2:04:00 PM, `Idle Time` est donc égal à 0 seconde.

**Example Exemple TimeWeightedAvg et TimeWeightedStDev scénario**  
Les tableaux suivants fournissent des exemples d'entrées et de sorties pour ces métriques de fenêtre d'une minute :`Avg(x), TimeWeightedAvg(x), TimeWeightedAvg(x, "linear"), stDev(x), timeWeightedStDev(x), timeWeightedStDev(x, 'p')`.  
Exemple de saisie pour une fenêtre agrégée d'une minute :  
Ces points de données sont tous `GOOD` de qualité.


|  |  | 
| --- |--- |
| 03:00:00 | 4.0 | 
| 03:01:00 | 2.0 | 
| 03:01:10 | 8.0 | 
| 03:01:50 | 20.0 | 
| 03:02:00 | 14,0 | 
| 03:02:05 | 10,0 | 
| 03:02:10 | 3.0 | 
| 03:02:30 | 20.0 | 
| 03:03:30 | 0.0 | 
Résultats agrégés en sortie :  
Aucun — Résultat non produit pour cette fenêtre.


| Heure | `Avg(x)` | `TimeWeightedAvg(x)` | `TimeWeightedAvg(X, "linear")` | `stDev(X)` | `timeWeightedStDev(x)` | `timeWeightedStDev(x, 'p')` | 
| --- | --- | --- | --- | --- | --- | --- | 
| 3:00:00 | 4 | Aucune | Aucune | 0 | Aucune | Aucune | 
| 3:01:00 | 2 | 4 | 3 | 0 | 0 | 0 | 
| 3:02:00 | 14 | 9 | 13 | 6 | 5,430610041581775 | 5,385164807134504 | 
| 3:03:00 | 11 | 13 | 12,875 | 8,54400374531753 | 7,724054437220943 | 7,659416862050705 | 
| 3:04:00 | 0 USD | 10 | 2,5 | 0 | 10,084389681792215 | 10 | 
| 3:05:00 | Aucune | 0 | 0 | Aucune | 0 | 0 | 

## Utiliser des fonctions temporelles dans les transformations
<a name="temporal-functions-in-transforms"></a>

Dans les [transformations](transforms.md) uniquement, vous pouvez utiliser la `pretrigger()` fonction pour récupérer la valeur de `GOOD` qualité d'une variable avant la mise à jour de propriété qui a lancé le calcul de transformation en cours.

Prenons l'exemple d'un fabricant AWS IoT SiteWise qui surveille l'état d'une machine. Le fabricant utilise les mesures et les transformations suivantes pour représenter le processus :
+ Une mesure`current_state`, qui peut être 0 ou 1.
  + Si la machine est en état de nettoyage, `current_state` égal à 1.
  + Si la machine est en cours de fabrication, `current_state` est égal à 0.
+ Une transformation`cleaning_state_duration`, c'est égal à ça`if(pretrigger(current_state) == 1, timestamp(current_state) - timestamp(pretrigger(current_state)), none)`. Cette transformation renvoie la durée pendant laquelle la machine est restée en état de nettoyage en secondes, au format Unix Epoch. Pour plus d'informations, consultez [Utiliser des fonctions conditionnelles dans les expressions de formule](expression-conditional-functions.md) et la fonction [timestamp ().](expression-date-and-time-functions.md)

Si la machine reste en état de nettoyage plus longtemps que prévu, le fabricant peut examiner la machine.

Vous pouvez également utiliser la `pretrigger()` fonction dans des transformations multivariées. Par exemple, vous avez deux mesures nommées `x` et`y`, et une transformation`z`, égale à`x + y + pretrigger(y)`. Le tableau suivant indique les valeurs pour `x``y`, et `z` entre 9 h 00 et 9 h 15.

**Note**  
Cet exemple suppose que les valeurs des mesures arrivent par ordre chronologique. Par exemple, la valeur de `x` pour 9 h 00 arrive avant la valeur de `x` pour 9 h 05.
Si les points de données de 9 h 05 arrivent avant les points de données de 9 h 00, cela `z` n'est pas calculé à 9 h 05.
Si la valeur de `x` pour 9 h 05 arrive avant la valeur de `x` pour 9 h 00 et que les valeurs de `y` arrivent chronologiquement, `z` est égale `22 = 20 + 1 + 1` à 9 h 05.


|  | 9 H 00 | 9 H 05 | 9 H 10 | 9 H 15 | 
| --- | --- | --- | --- | --- | 
|  `x`  |  10  |  20  |    |  30  | 
|  `y`  |  1  |  2  |  3  |    | 
|  `z = x + y + pretrigger(y)`  |  `y`ne reçoit aucun point de données avant 9h00. Par conséquent, `z` n'est pas calculé à 9 h 00.  |  23 = 20 \$1 2 \$1 1 `pretrigger(y)`est égal à 1.  |  25 = 20 \$1 3 \$1 2 `x`ne reçoit pas de nouveau point de données. `pretrigger(y)`est égal à 2.  |  36 = 30 \$1 3 \$1 3 `y`ne reçoit pas de nouveau point de données. Par conséquent, `pretrigger(y)` est égal à 3 à 9 h 15.  | 