Skip to Content
IoT-DashboardsAggregation & Downsampling

Aggregation & Downsampling

Standardmäßig erhält ein Widget Rohdaten-Zeilen: jeden Datensatz, der auf seine Filter passt, neueste zuerst, bis zum Zeilenlimit. Für eine Tabelle der letzten Messwerte ist das genau richtig — für ein Diagramm der letzten sechs Monate genau falsch: Ein Sensor, der im Sekundentakt misst, erzeugt in diesem Zeitraum 15 Millionen Zeilen, von denen ein 600 Pixel breites Diagramm vielleicht 600 zeichnen kann.

Aggregation löst beide Probleme auf einmal. Die Projektdatenbank gruppiert die passenden Datensätze in Zeitintervalle, berechnet einen Wert pro Intervall und schickt nur diese Werte an das Widget. Aus einem Jahr Daten werden ein paar hundert Punkte — und Fragen, die die Rohdaten nicht beantworten können (Durchschnittstemperatur pro Stunde, Datensätze pro Maschine, Gesamtenergie heute), werden zu ganz normaler Widget-Konfiguration.

Alles geschieht in der Datenbank, bevor die Daten den Browser erreichen. Im Widget selbst wird nichts berechnet — aggregierte Widgets bleiben also live und schnell, ganz gleich wie viel Historie dahinter liegt.

Aktivierung

Die Aggregation liegt im selben Dialog wie die Filter — jenem, der über das Filter-Symbol neben einer Datenbindung geöffnet wird. Siehe Datenbindung für den Dialog als Ganzes.

Dort bietet der Abschnitt Aggregation zwei Möglichkeiten:

  • Rohdaten-Zeilen — die Voreinstellung: Datensätze werden so zurückgegeben, wie sie gespeichert sind.
  • Über die Zeit aggregiert — Datensätze werden gruppiert und auf einen Wert pro Gruppe reduziert.
Aggregationsbereich des Filterdialogs mit der Auswahl Rohdaten-Zeilen / Über die Zeit aggregiert, der Methode Durchschnitt, automatischer oder fester Intervallgröße und den abgeleiteten aggregierten Spalten

Der Wechsel zu Über die Zeit aggregiert blendet einen Methode-Selektor ein und, wo zutreffend, die unten beschriebenen Intervall-Einstellungen. Da jede Aggregation einen Zeitraum benötigt, auf dem sie arbeitet, wird beim Einschalten der Aggregation außerdem ein voreingestelltes rollierendes Zeitfenster der letzten 24 Stunden gesetzt, falls das Widget noch kein Zeitfenster hatte — anpassen können Sie es im Abschnitt Rollierendes Zeitfenster direkt darüber.

Methoden

MethodeErgebnis pro IntervallAnwendbar auf
DurchschnittArithmetisches Mittel der WerteNumerische Spalten
SummeSumme der WerteNumerische Spalten
AnzahlAnzahl der Datensätze mit einem WertBeliebige Spalten
MinimumKleinster WertNumerische, Text- und Zeitstempel-Spalten
MaximumGrößter WertAlle der oben genannten
Erster WertWert des frühesten Datensatzes im IntervallBeliebige Spalten
Letzter WertWert des spätesten Datensatzes im IntervallBeliebige Spalten

Eine Methode gilt für alle Wertspalten einer einzelnen Datenserie. Um mehrere Kennzahlen derselben Messung zu zeigen — etwa ein Minimum/Maximum-Band mit einer Durchschnittslinie — legen Sie pro Kennzahl eine eigene Datenserie an. Sie teilen sich eine einzige Datenbankabfrage, die zusätzlichen Serien kosten also keine weiteren Anfragen.

Durchschnitt, Summe, Minimum und Maximum benötigen eine Spalte mit Zahlen. Zeigen sie auf eine Text- oder Boolean-Spalte, wird das mit einer erklärenden Meldung abgelehnt. Anzahl funktioniert mit allem — und ist damit die Methode für alle „Wie viele Datensätze?”-Fragen.

Was aggregiert wird

Sie geben die Spalten für die Aggregation nie explizit an — die Plattform leitet sie aus dem Feld-Mapping ab, das Sie für das Widget ohnehin konfiguriert haben:

FeldrolleBedeutung unter Aggregation
x = tspDas Diagramm hat eine Zeitachse: Die Intervalle unterteilen das Zeitfenster.
x = eine andere SpalteDas Diagramm hat eine Kategorieachse: Diese Spalte gruppiert die Datensätze.
pivotTeilt das Ergebnis in eine Serie je eindeutigem Wert auf, jeweils separat aggregiert.
y, r und weitere WertfelderWerden mit der gewählten Methode aggregiert.

Das bedeutet: Dasselbe Mapping, das Sie für Rohdaten-Zeilen verwenden, funktioniert weiter. Binden Sie x an den Zeitstempel und y an temperature, schalten Sie die Aggregation ein, und das Diagramm zeichnet die Durchschnittstemperatur pro Intervall statt jedes einzelnen Messwerts.

Die drei Ausprägungen eines aggregierten Widgets

1. Zeitreihe mit automatischer Auflösung

Der häufigste Fall: x ist auf tsp gemappt und der Intervall-Modus bleibt auf Automatisch — passend zur Widget-Auflösung. Die Plattform wählt die Intervallgröße dann anhand der gerenderten Breite des Widgets — ein 600 Pixel breites Diagramm erhält nie mehr als etwa 600 Punkte, unabhängig vom Zeitfenster. Weiten Sie das Fenster von einem Tag auf ein Jahr aus, werden die Intervalle einfach breiter; die Datenmenge über das Netz bleibt konstant.

Wählen Sie das, wenn die Intervallgröße selbst keine Bedeutung trägt und Sie nur ein lesbares, schnelles Trenddiagramm möchten: „Temperatur im letzten Monat”.

Beim Ändern der Widget-Größe wird mit der neuen Auflösung neu geladen, aber nur, wenn die Breite eine Stufe überschreitet — kleine Verschiebungen lösen keine Anfragen aus.

2. Zeitreihe mit fester Intervallgröße

Wählen Sie Feste Intervallgröße und geben Sie Länge und Einheit an — Alle 1 Stunde, Alle 15 Minuten, Alle 6 Stunden. Nutzen Sie das immer dann, wenn das Intervall Teil der Fragestellung ist und nicht bloß ein Darstellungsdetail: „produzierte Einheiten pro Stunde”, „Energieverbrauch pro Tag”.

Feste Intervalle sind an natürlichen Grenzen in der Zeitzone Ihres Browsers ausgerichtet: 6-Stunden-Intervalle beginnen um 00:00, 06:00, 12:00 und 18:00 Uhr Ortszeit; Tagesintervalle brechen um lokale Mitternacht um; Wochenintervalle beginnen am Montag.

Würde die gewählte Größe mehr Intervalle erzeugen, als ein Diagramm sinnvoll darstellen kann (die Obergrenze liegt bei 2000), verbreitert die Plattform die Intervalle automatisch auf ein Vielfaches des angeforderten Werts — aus Ein-Minuten-Intervallen über eine ganze Woche werden Fünf-Minuten-Intervalle — statt die Abfrage abzulehnen. Der Dialog weist Sie darauf hin und zeigt, welche Größe tatsächlich verwendet wird.

3. Ein Wert pro Kategorie

Binden Sie x an eine Spalte statt an den Zeitstempel — einen Maschinennamen, einen Produkttyp, einen Standort — und das Widget wird zu einer kategorialen Auswertung: Das gesamte Zeitfenster wird als ein einziges Intervall behandelt, und jeder eindeutige Wert dieser Spalte ergibt genau eine aggregierte Zeile.

Das ist die Ausprägung für „Datensätze pro Maschine heute” oder „durchschnittliche Zykluszeit pro Fertigungslinie diese Woche”. Es gibt keine Intervallgröße zu wählen — der Dialog weist darauf hin, statt die Intervall-Einstellungen anzuzeigen.

Datensätze zählen: Die Zeilenanzahl einer Gruppe ist Anzahl angewendet auf die Zeitstempel-Spalte tsp, denn die besitzt jeder Datensatz. Binden Sie y an tsp, und die Plattform wählt automatisch Anzahl — die einzige Aggregation, die eine Zeitstempel-Spalte zulässt.

x → machine_name (gruppiert die Datensätze) y → tsp (gezählt → Anzahl der Datensätze) Methode: Anzahl Fenster: letzter 1 Tag

Das Ergebnis ist ein Balken pro Maschine, der zeigt, wie viele Datensätze diese Maschine am letzten Tag erzeugt hat.

Aggregierte Einzelwerte

Skalare Bindungen — der Wert einer KPI-Kachel, eines Gauges, eines Textfelds — bieten dieselbe Wahl unter dem Abschnitt Wert:

  • Letzter Wert — der Wert des neuesten Datensatzes, wie bisher.
  • Über ein Zeitfenster aggregiert — ein Wert, berechnet über das gesamte Fenster.

Nutzen Sie das für Live-Kennzahlen im Rampenlicht: „heute produzierte Einheiten” (Anzahl über tsp mit einem Zeitfenster von 1 Tag), „Durchschnittstemperatur in dieser Schicht”, „Spitzenleistung diesen Monat”. Auch hier gibt es keine Intervallgröße — das Fenster ist das Intervall. Der Wert aktualisiert sich, sobald neue Datensätze eintreffen, und veraltet damit nie, anders als eine ins Widget eingetragene Zahl.

Filter, Zeitfenster und Aggregation im Zusammenspiel

Die Abschnitte des Dialogs greifen in der Reihenfolge, in der sie angezeigt werden — und das ist auch die Reihenfolge, in der die Datenbank sie anwendet:

  1. Rollierendes Zeitfenster / benutzerdefinierter Zeitraum — wählt den Zeitraum aus.
  2. Filter — wählen aus, welche Datensätze innerhalb dieses Zeitraums teilnehmen.
  3. Aggregation — reduziert die ausgewählten Datensätze auf einen Wert pro Intervall.
  4. Zeilenlimit — eine Rückfallsicherung, siehe unten.

Weil Filter vor der Aggregation laufen, grenzen sie ein, was in jedes Intervall eingeht. machine = 'A' in Kombination mit stündlichen Durchschnitten ergibt den Stundendurchschnitt für Maschine A. Filter, die an Filter-Widgets oder Routing-Segmente gebunden sind, funktionieren genau wie bei Rohdaten-Zeilen — ein aggregiertes Diagramm folgt einem Dropdown oder einer Seiten-URL also wie jedes andere Widget.

Auch Kalender-Widgets fügen sich ein: Wählt der Nutzer einen Zeitraum, ersetzt dieser das rollierende Fenster, und die Aggregation folgt ihm.

Einrasten des Zeitfensters

Solange die Aggregation aktiv ist, rastet der Beginn des Zeitfensters am Intervallraster ein, damit die Intervalle im Lauf der Zeit an Ort und Stelle bleiben — ohne das würde sich bei jeder Aktualisierung jede Intervallgrenze leicht verschieben und das gesamte Diagramm flimmern. Der Dialog vermerkt das mit „Fenster verschiebt sich in …-Schritten.”, und die Vorschau von aufgelöstem Start und Ende zeigt stets den tatsächlich abgefragten Bereich.

Das Ende des Fensters wird nie verlängert: Ein Fenster, das jetzt endet, endet weiterhin jetzt, und ein Fenster, das vor einer Stunde endete, reicht nie in diese letzte Stunde hinein.

Das Zeilenlimit bei Aggregation

Das Zeilenlimit bleibt sichtbar, wechselt aber die Rolle: Die Anzahl der Intervalle ergibt sich aus der Widget-Größe oder aus Ihrem festen Intervall, nicht aus diesem Feld. Es greift nur, wenn ein Widget auf Rohdaten-Zeilen zurückfallen muss — etwa auf einer selbst gehosteten Instanz, deren Plattformversion älter ist als die Aggregation. Ein sinnvoller Wert hält ein solches Widget nutzbar.

Lücken in den Daten

Ein Intervall, in dem kein Datensatz gepasst hat, wird im Ergebnis weggelassen und nicht als Null zurückgegeben. Für einen Durchschnitt ist das die ehrliche Antwort — es gibt keinen Durchschnitt von nichts. Für ein Anzahl-Diagramm eines sporadischen Ereignisses bedeutet es jedoch, dass ein Liniendiagramm eine gerade Linie über die ruhige Phase zieht, statt auf null zu fallen. Balkendiagramme zeigen die Lücke von selbst; bei Liniendiagrammen sollten Sie den Unterschied zwischen „keine Daten” und „null” im Blick behalten.

Live-Aktualisierung

Aggregierte Widgets bleiben live. Treffen Datensätze ein, werden die betroffenen Intervalle neu berechnet und das Widget aktualisiert sich — höchstens alle paar Sekunden, damit ein hochfrequent publizierendes Gerät das Board nicht überschwemmt. Da das neueste Intervall meist noch gefüllt wird, ändert sich sein Wert bis zum Intervallende laufend; das ist so gewollt und der Grund, warum der letzte Punkt eines Live-Diagramms bei Anzahl und Summe oft niedriger liegt als seine Nachbarn.

Performance und lange Historien

Auch eine Aggregation über ein langes Zeitfenster muss die dahinterliegenden Datensätze lesen. Für Tabellen, die regelmäßig Diagramme mit langen Zeitfenstern speisen, kann eine App in ihrem Datenschema kontinuierliches Downsampling deklarieren — siehe downsample in der Daten-Backend-Referenz. Die Plattform pflegt dann eine vor-aggregierte Kopie der Tabelle, beantwortet Abfragen mit langem Zeitfenster aus dieser Kopie — typischerweise um Größenordnungen schneller — und kann diese heruntergerechnete Historie länger aufbewahren als die Rohdaten selbst. So kann ein Diagramm noch zwei Jahre an Stundendurchschnitten zeigen, nachdem die Rohdatensätze längst verworfen wurden.

Für das Board ist das vollständig transparent: Die Widget-Konfiguration ändert sich nicht, und Abfragen, die die vor-aggregierte Kopie nicht bedienen kann (sehr feine Intervalle, Filter auf Spalten, nach denen sie nicht gruppiert), fallen automatisch auf die Rohtabelle zurück.

Einschränkungen

  • Aggregation gilt für Tabellen, nicht für Transformationstabellen. Aggregieren Sie stattdessen die zugrunde liegende Tabelle, oder aggregieren Sie vorab im SQL der Transformation selbst.
  • Eine Methode pro Datenserie. Nutzen Sie mehrere Datenserien für mehrere Kennzahlen einer Spalte.
  • Zeitstempel werden ausschließlich mit Anzahl aggregiert. Ein Durchschnitt eines Zeitstempels ist nicht sinnvoll und wird abgelehnt.
  • Kategorieachse und Zeitachse schließen sich gegenseitig aus — pro Datenserie ist ein Diagramm entweder „über die Zeit” oder „pro Kategorie”. Um beides zu erhalten (Stundendurchschnitte je Maschine), lassen Sie x auf tsp und legen die Maschinenspalte in pivot.
  • JSON-Felder lassen sich wie gewöhnliche Spalten aggregieren, aber nur die Felder, die die App für das Downsampling deklariert hat, profitieren von der vor-aggregierten Kopie; alle anderen werden aus der Rohtabelle berechnet.

Rezepte

Sie möchtenxyMethodeIntervall
Temperaturtrend über einen MonattsptemperatureDurchschnittAutomatisch
Produzierte Einheiten pro StundetsptspAnzahlFest, 1 Stunde
Energieverbrauch pro TagtspkwhSummeFest, 1 Tag
Spitzenleistung pro Stunde, je Maschinetsppower (+ pivot machine)MaximumFest, 1 Stunde
Datensätze pro Maschine heutemachinetspAnzahl— (Kategorie)
Durchschnittliche Zykluszeit pro Linie diese Wochelinecycle_timeDurchschnitt— (Kategorie)
Heute produzierte Einheiten (KPI-Kachel)tspAnzahl— (Einzelwert)

Zusammenfassung

  • Schalten Sie eine Bindung im Filter-Dialog von Rohdaten-Zeilen auf Über die Zeit aggregiert um, damit die Datenbank Werte berechnet, statt Datensätze zu übertragen.
  • Mit x auf dem Zeitstempel erhalten Sie eine Zeitreihe — automatische Auflösung für Trends, ein festes Intervall, wenn das Intervall die Frage ist.
  • Mit x auf einer anderen Spalte erhalten Sie einen Wert pro Kategorie; mit einer skalaren Bindung eine einzelne Live-Zahl.
  • Anzahl auf der Spalte tsp ist der Weg, Datensätze zu zählen.
  • Filter greifen vor der Aggregation; leere Intervalle werden weggelassen; das Zeilenlimit wird zur Rückfallsicherung.
  • Für lange Historien können Apps downsample deklarieren, damit die Plattform Diagramme aus einer vor-aggregierten Kopie bedient und diese Historie über die Aufbewahrung der Rohdaten hinaus behalten kann.
Last updated on