Skip to Content
Tableaux de bord IoTAgrégation et sous-échantillonnage

Agrégation et sous-échantillonnage

Par défaut, un widget reçoit des lignes brutes : chaque enregistrement correspondant à ses filtres, du plus récent au plus ancien, dans la limite du nombre de lignes autorisé. C’est exactement ce qu’il faut pour une table des derniers relevés, et exactement ce qu’il ne faut pas pour un graphique des six derniers mois — un capteur qui échantillonne chaque seconde produit 15 millions de lignes sur cette période, dont un graphique large de 600 pixels peut en tracer environ 600.

L’agrégation résout les deux problèmes à la fois. La base de données du projet regroupe les enregistrements correspondants en intervalles de temps, calcule une valeur par intervalle et n’envoie que ces valeurs au widget. Une année de données devient quelques centaines de points, et des questions auxquelles les données brutes ne peuvent pas répondre — température moyenne par heure, nombre d’enregistrements par machine, énergie totale du jour — deviennent de simples éléments de configuration du widget.

Tout se passe dans la base de données, avant que les données n’atteignent le navigateur. Rien n’est calculé dans le widget : les widgets agrégés restent donc live et rapides, quel que soit le volume d’historique derrière eux.

Activer l’agrégation

L’agrégation se trouve dans la même boîte de dialogue que les filtres — celle qui s’ouvre avec l’icône de filtre à côté d’une liaison de données. Voir Liaison de données pour la boîte de dialogue dans son ensemble.

À l’intérieur, la section Agrégation propose deux choix :

  • Lignes brutes — le comportement par défaut : les enregistrements sont renvoyés tels qu’ils sont stockés.
  • Agrégé dans le temps — les enregistrements sont regroupés et réduits à une valeur par groupe.
Section Agrégation de la boîte de dialogue de filtres montrant le choix Lignes brutes / Agrégé dans le temps, la méthode Moyenne, la taille d'intervalle automatique ou fixe et les colonnes agrégées dérivées

Passer sur Agrégé dans le temps fait apparaître un sélecteur Méthode et, le cas échéant, les contrôles de taille d’intervalle décrits plus bas. Comme toute agrégation a besoin d’une plage temporelle sur laquelle travailler, l’activer renseigne aussi une fenêtre glissante par défaut sur les dernières 24 heures si le widget n’avait pas encore de fenêtre temporelle — ajustez-la dans la section Fenêtre de temps glissante juste au-dessus.

Méthodes

MéthodeRésultat par intervalleS’applique à
MoyenneMoyenne arithmétique des valeursColonnes numériques
SommeTotal des valeursColonnes numériques
NombreNombre d’enregistrements ayant une valeurToute colonne
MinimumPlus petite valeurColonnes numériques, texte et horodatage
MaximumPlus grande valeurTous les types ci-dessus
Première valeurValeur de l’enregistrement le plus ancien de l’intervalleToute colonne
Dernière valeurValeur de l’enregistrement le plus récent de l’intervalleToute colonne

Une seule méthode s’applique à toutes les colonnes de valeur d’une même série de données. Pour afficher plusieurs statistiques d’une même mesure — une bande minimum/maximum avec une courbe de moyenne, par exemple — ajoutez une série de données par statistique. Elles partagent une unique requête vers la base : les séries supplémentaires ne coûtent aucune requête de plus.

Moyenne, Somme, Minimum et Maximum exigent une colonne contenant des nombres. Les pointer vers une colonne texte ou booléenne est refusé, avec un message explicatif. Nombre fonctionne sur n’importe quel type, ce qui en fait la méthode des questions « combien d’enregistrements ».

Ce qui est agrégé

Vous ne listez jamais explicitement les colonnes à agréger — la plateforme les déduit du mapping de champs que vous avez déjà configuré pour le widget :

Rôle du champSignification sous agrégation
x = tspLe graphique a un axe temporel : les intervalles subdivisent la fenêtre temporelle.
x = toute autre colonneLe graphique a un axe de catégories : cette colonne regroupe les enregistrements.
pivotSépare le résultat en une série par valeur distincte, agrégée séparément.
y, r et les autres champs de valeurAgrégés avec la méthode sélectionnée.

Autrement dit, le mapping que vous utilisez pour les lignes brutes continue de fonctionner : mappez x sur l’horodatage et y sur temperature, activez l’agrégation, et le graphique trace la température moyenne par intervalle au lieu de chaque relevé individuel.

Les trois formes d’un widget agrégé

1. Série temporelle à résolution automatique

Le cas le plus courant : x est mappé sur tsp et le mode d’intervalle reste sur Automatique — adapté à la résolution du widget. La plateforme choisit alors la taille d’intervalle d’après la largeur de rendu du widget — un graphique large de 600 pixels ne reçoit jamais beaucoup plus de 600 points, quelle que soit la fenêtre temporelle. Élargissez la fenêtre d’un jour à un an et les intervalles s’élargissent simplement ; le volume de données qui transite par le réseau reste constant.

Choisissez ce mode lorsque la taille d’intervalle ne porte aucune signification propre et que vous voulez seulement un graphique de tendance lisible et rapide : « la température du dernier mois ».

Redimensionner un widget déclenche une nouvelle requête à la nouvelle résolution, mais uniquement lorsque la largeur franchit un palier — les petits ajustements ne déclenchent aucune requête.

2. Série temporelle à taille d’intervalle fixe

Sélectionnez Taille d’intervalle fixe et indiquez une durée et une unité dans le champ Tous les1 heure, 15 minutes, 6 heures. Utilisez ce mode chaque fois que l’intervalle fait partie de la question plutôt que du simple rendu : « unités produites par heure », « énergie consommée par jour ».

Les intervalles fixes sont alignés sur des bornes naturelles dans le fuseau horaire de votre navigateur : des intervalles de 6 heures commencent à 00:00, 06:00, 12:00 et 18:00 heure locale ; les intervalles journaliers changent à minuit local ; les intervalles hebdomadaires commencent le lundi.

Si la taille choisie produisait plus d’intervalles qu’un graphique ne peut raisonnablement en afficher (le plafond est de 2000), la plateforme élargit automatiquement les intervalles à un multiple de ce que vous avez demandé — des intervalles d’une minute sur une semaine entière deviennent des intervalles de cinq minutes — plutôt que de refuser la requête. La boîte de dialogue vous indique quand cela se produit et quelle taille est réellement utilisée.

3. Une valeur par catégorie

Mappez x sur une colonne plutôt que sur l’horodatage — un nom de machine, un type de produit, un site — et le widget devient un résumé par catégorie : toute la fenêtre temporelle est traitée comme un seul intervalle, et chaque valeur distincte de cette colonne donne exactement une ligne agrégée.

C’est la forme adaptée à « nombre d’enregistrements par machine aujourd’hui » ou « temps de cycle moyen par ligne de production cette semaine ». Il n’y a pas de taille d’intervalle à choisir — la boîte de dialogue l’indique au lieu d’afficher les contrôles d’intervalle.

Compter des enregistrements : le nombre de lignes d’un groupe s’obtient en appliquant Nombre à la colonne d’horodatage tsp, puisque chaque enregistrement en possède une. Mappez y sur tsp et la plateforme sélectionne automatiquement Nombre — c’est la seule agrégation qu’autorise une colonne d’horodatage.

x → machine_name (regroupe les enregistrements) y → tsp (compté → nombre d'enregistrements) Méthode : Nombre Fenêtre : 1 jour

Le résultat est une barre par machine indiquant combien d’enregistrements cette machine a produits au cours du dernier jour.

Valeurs uniques agrégées

Les liaisons scalaires — la valeur d’une tuile KPI, d’une jauge, d’un champ texte — offrent le même choix sous une section Valeur :

  • Dernière valeur — la valeur de l’enregistrement le plus récent, comme auparavant.
  • Agrégé sur une fenêtre temporelle — une valeur unique calculée sur toute la fenêtre.

Utilisez-la pour des chiffres clés en direct : « unités produites aujourd’hui » (Nombre sur tsp avec une fenêtre d’un jour), « température moyenne de ce poste », « puissance maximale de ce mois ». Ici non plus il n’y a pas de taille d’intervalle à choisir — la fenêtre est l’intervalle. La valeur se rafraîchit à mesure que de nouveaux enregistrements arrivent : contrairement à un nombre saisi en dur dans le widget, elle ne devient jamais obsolète.

Filtres, fenêtres et agrégation ensemble

Les sections de la boîte de dialogue s’appliquent dans l’ordre où elles sont affichées, qui est aussi l’ordre dans lequel la base de données les applique :

  1. Fenêtre de temps glissante / plage temporelle personnalisée — sélectionne la période.
  2. Filtres — sélectionnent quels enregistrements de cette période participent.
  3. Agrégation — réduit les enregistrements sélectionnés à une valeur par intervalle.
  4. Taille du buffer — un garde-fou, voir plus bas.

Comme les filtres s’exécutent avant l’agrégation, ils restreignent ce qui entre dans chaque intervalle. machine = 'A' combiné à des moyennes horaires donne la moyenne horaire de la machine A. Les filtres liés à des widgets de filtre ou à des segments de route fonctionnent exactement comme pour des lignes brutes : un graphique agrégé suit donc une liste déroulante ou l’URL d’une page comme n’importe quel autre widget.

Les widgets calendrier se composent également : quand l’utilisateur choisit une plage de dates, cette plage remplace la fenêtre glissante et l’agrégation la suit.

Alignement de la fenêtre

Tant que l’agrégation est active, le début de la fenêtre est aligné sur la grille des intervalles afin que ceux-ci restent en place au fil du temps — sans cela, chaque rafraîchissement décalerait légèrement toutes les bornes d’intervalle et le graphique entier scintillerait. La boîte de dialogue le signale par « La fenêtre se décale par pas de … », et l’aperçu du début et de la fin résolus montre toujours la plage réellement interrogée.

La fin de la fenêtre n’est jamais étendue : une fenêtre qui se termine maintenant continue de se terminer maintenant, et une fenêtre qui se termine il y a une heure n’empiète jamais sur cette dernière heure.

La taille du buffer sous agrégation

La Taille du buffer (la limite de lignes) reste visible mais change de rôle : le nombre d’intervalles est déduit de la taille du widget ou de votre intervalle fixe, pas de ce champ. Elle ne s’applique que si un widget doit se rabattre sur des lignes brutes — par exemple sur une instance auto-hébergée dont la version de plateforme est antérieure à l’agrégation. La laisser à une valeur raisonnable garde un tel widget utilisable.

Trous dans les données

Un intervalle dans lequel aucun enregistrement ne correspond est omis du résultat, et non renvoyé à zéro. Pour une moyenne, c’est la réponse honnête — il n’existe pas de moyenne de rien — mais pour un graphique en Nombre d’un événement intermittent, cela signifie qu’une courbe trace une ligne droite au-dessus de la période creuse au lieu de retomber à zéro. Les graphiques en barres montrent le trou naturellement ; pour les courbes, gardez à l’esprit la différence entre « aucune donnée » et « zéro ».

Mises à jour en direct

Les widgets agrégés restent live. À mesure que des enregistrements arrivent, les intervalles concernés sont recalculés et le widget se rafraîchit — au plus une fois toutes les quelques secondes, afin qu’un appareil qui publie à haute fréquence ne puisse pas inonder le board. Comme l’intervalle le plus récent est généralement encore en train de se remplir, sa valeur continue de changer jusqu’à sa clôture ; c’est normal, et c’est pourquoi le dernier point d’un graphique live est souvent plus bas que ses voisins pour Nombre et Somme.

Performances et historiques longs

Une agrégation sur une longue fenêtre doit malgré tout lire les enregistrements qui la sous-tendent. Pour les tables qui alimentent régulièrement des graphiques à longue fenêtre, une application peut déclarer un sous-échantillonnage continu dans son schéma de données — voir downsample dans la référence du Backend de données. La plateforme maintient alors une copie pré-agrégée de la table et répond aux requêtes à longue fenêtre à partir de celle-ci, généralement plusieurs ordres de grandeur plus vite, et peut conserver cet historique sous-échantillonné plus longtemps que les données brutes elles-mêmes — un graphique peut ainsi encore afficher deux ans de moyennes horaires après la suppression des enregistrements bruts.

Tout cela est totalement transparent pour le board : la configuration du widget ne change pas, et les requêtes que la copie pré-agrégée ne peut pas servir (intervalles très fins, filtres sur des colonnes selon lesquelles elle ne regroupe pas) basculent automatiquement sur la table brute.

Limites

  • L’agrégation s’applique aux tables, pas aux tables de transformation. Agrégez plutôt la table sous-jacente, ou pré-agrégez dans le SQL de la transformation.
  • Une seule méthode par série de données. Utilisez plusieurs séries de données pour plusieurs statistiques d’une même colonne.
  • Les horodatages ne s’agrègent qu’avec Nombre. La Moyenne d’un horodatage n’a pas de sens et est refusée.
  • Un axe de catégories et un axe temporel s’excluent mutuellement pour une même série de données — un graphique est soit « dans le temps », soit « par catégorie ». Pour obtenir les deux (des moyennes horaires par machine), gardez x sur tsp et placez la colonne machine dans pivot.
  • Les champs JSON s’agrègent comme des colonnes ordinaires, mais seuls les champs que l’application a déclarés pour le sous-échantillonnage bénéficient de la copie pré-agrégée ; les autres sont calculés à partir de la table brute.

Recettes

ObjectifxyMéthodeIntervalle
Tendance de température sur un moistsptemperatureMoyenneAutomatique
Unités produites par heuretsptspNombreFixe, 1 heure
Énergie consommée par jourtspkwhSommeFixe, 1 jour
Puissance maximale par heure et par machinetsppower (+ pivot machine)MaximumFixe, 1 heure
Enregistrements par machine aujourd’huimachinetspNombre— (catégorie)
Temps de cycle moyen par ligne cette semainelinecycle_timeMoyenne— (catégorie)
Unités produites aujourd’hui (tuile KPI)tspNombre— (valeur unique)

Résumé

  • Basculez une liaison de Lignes brutes vers Agrégé dans le temps dans la boîte de dialogue de filtres pour que la base de données calcule les valeurs au lieu d’expédier des enregistrements.
  • Avec x sur l’horodatage, vous obtenez une série temporelle — résolution automatique pour les tendances, intervalle fixe quand l’intervalle fait partie de la question.
  • Avec x sur une autre colonne, vous obtenez une valeur par catégorie ; avec une liaison scalaire, un seul nombre en direct.
  • Nombre sur la colonne tsp est la façon de compter des enregistrements.
  • Les filtres s’appliquent avant l’agrégation ; les intervalles vides sont omis ; la taille du buffer devient un garde-fou de repli.
  • Pour les historiques longs, une application peut déclarer downsample afin que la plateforme serve les graphiques depuis une copie pré-agrégée et conserve cet historique au-delà de la fenêtre de rétention des données brutes.
Last updated on