Zum Hauptinhalt springen

Aggregation Queries

Aggregationsabfragen berechnen Zusammenfassungswerte (Durchschnitte, Summen, Extremwerte) über Zeitreihen-Datenpunkte hinweg, anstatt einzelne Zeilen zurückzugeben. Verwenden Sie diese, wenn Sie berechnete Kennzahlen statt Rohdaten benötigen – zum Beispiel die durchschnittliche Spannung über die letzte Stunde oder die insgesamt pro Maschine erzeugte Energie.

OctoMesh unterstützt zwei Typen von Aggregationsabfragen:

  • Aggregation Query – berechnet aggregierte Werte über alle übereinstimmenden Datenpunkte
  • Grouped Aggregation Query – berechnet aggregierte Werte, gruppiert nach einer oder mehreren Spalten (ähnlich wie SQL GROUP BY)

Aggregationstypen​

TypBeschreibungBeispiel
AVGDurchschnittswertDurchschnittliche Spannung über einen Zeitraum
MINMinimalwertNiedrigster Temperaturmesswert
MAXMaximalwertSpitzenwert des Stromverbrauchs
COUNTAnzahl der DatenpunkteAnzahl der aufgezeichneten Messungen
SUMSumme der WerteInsgesamt erzeugte Energie

Aggregation Query​

Die Aggregationsabfrage berechnet ein einzelnes aggregiertes Ergebnis über alle übereinstimmenden Datenpunkte. Verwenden Sie das Feld transientStreamDataAggregationQuery.

Grundlegende Verwendung​

query {
streamData {
transientStreamDataAggregationQuery(
ckId: "Industry.Energy/EnergyMeter"
columnPaths: [
{ attributePath: "voltage", aggregationType: AVG },
{ attributePath: "voltage", aggregationType: MIN },
{ attributePath: "voltage", aggregationType: MAX }
]
) {
totalCount
items {
cells {
items {
attributePath
value
}
}
}
}
}
}

Antwort:

{
"data": {
"streamData": {
"transientStreamDataAggregationQuery": {
"totalCount": 1,
"items": [
{
"cells": {
"items": [
{ "attributePath": "Avg_voltage", "value": 230.4 },
{ "attributePath": "Min_voltage", "value": 218.7 },
{ "attributePath": "Max_voltage", "value": 242.1 }
]
}
}
]
}
}
}
}

Das Ergebnis enthält eine einzelne Zeile mit einer Zelle pro Aggregationsspalte. Der attributePath in der Antwort ist mit dem Aggregationstyp präfixiert (z. B. Avg_voltage, Min_voltage).

Parameter​

ParameterTypErforderlichBeschreibung
ckIdString!JaDer abzufragende CK-Typ
columnPaths[StreamDataQueryColumnInput!]!JaSpalten mit Aggregationstyp
argStreamDataArgumentsNeinOverrides für Zeitraum und Limit
fieldFilter[FieldFilter]NeinFeldbezogene Vergleichsfilter
rtIds[OctoObjectId]NeinAuf bestimmte Runtime-Entitäts-IDs eingrenzen
firstIntNeinMaximale Anzahl der zurückzugebenden Elemente
afterStringNeinPaginierungs-Cursor

StreamDataQueryColumnInput​

Jede Spalte gibt das zu aggregierende Attribut und die anzuwendende Aggregationsfunktion an:

FeldTypErforderlichBeschreibung
attributePathString!JaDas zu aggregierende Data-Stream-Attribut
aggregationTypeAggregationType!JaAVG, MIN, MAX, COUNT oder SUM

Mit Zeitraum und Entitätsfilter​

query {
streamData {
transientStreamDataAggregationQuery(
ckId: "Industry.Energy/EnergyMeter"
columnPaths: [
{ attributePath: "voltage", aggregationType: AVG },
{ attributePath: "power", aggregationType: SUM }
]
arg: {
queryMode: DEFAULT
from: "2024-03-21T00:00:00Z"
to: "2024-03-22T00:00:00Z"
}
rtIds: ["65dc6d24cc529cdc46c84fcc"]
) {
items {
cells {
items {
attributePath
value
}
}
}
}
}
}

Datenpunkte zählen​

Verwenden Sie COUNT, um zu ermitteln, wie viele Datenpunkte für ein bestimmtes Attribut existieren:

query {
streamData {
transientStreamDataAggregationQuery(
ckId: "Industry.Energy/EnergyMeter"
columnPaths: [
{ attributePath: "voltage", aggregationType: COUNT }
]
arg: {
queryMode: DEFAULT
from: "2024-03-21T00:00:00Z"
to: "2024-03-22T00:00:00Z"
}
) {
items {
cells {
items {
attributePath
value
}
}
}
}
}
}

Grouped Aggregation Query​

Eine gruppierte Aggregationsabfrage berechnet aggregierte Werte, gruppiert nach einer oder mehreren Spalten – entspricht einer SQL-GROUP BY-Klausel. Verwenden Sie das Feld transientStreamDataGroupedAggregationQuery.

Grundlegende Verwendung​

Dieses Beispiel berechnet die durchschnittliche Spannung pro Entität:

query {
streamData {
transientStreamDataGroupedAggregationQuery(
ckId: "Industry.Energy/EnergyMeter"
groupByColumnPaths: ["rtId"]
columnPaths: [
{ attributePath: "voltage", aggregationType: AVG },
{ attributePath: "power", aggregationType: MAX }
]
) {
totalCount
items {
cells {
items {
attributePath
value
}
}
}
}
}
}

Antwort:

{
"data": {
"streamData": {
"transientStreamDataGroupedAggregationQuery": {
"totalCount": 3,
"items": [
{
"cells": {
"items": [
{ "attributePath": "rtId", "value": "65dc6d24cc529cdc46c84fcc" },
{ "attributePath": "Avg_voltage", "value": 230.4 },
{ "attributePath": "Max_power", "value": 1580.0 }
]
}
},
{
"cells": {
"items": [
{ "attributePath": "rtId", "value": "65dc6d24cc529cdc46c84fcd" },
{ "attributePath": "Avg_voltage", "value": 228.9 },
{ "attributePath": "Max_power", "value": 1620.5 }
]
}
},
{
"cells": {
"items": [
{ "attributePath": "rtId", "value": "65dc6d24cc529cdc46c84fce" },
{ "attributePath": "Avg_voltage", "value": 231.2 },
{ "attributePath": "Max_power", "value": 1490.3 }
]
}
}
]
}
}
}
}

Jede Zeile im Ergebnis stellt eine Gruppe dar. Die Werte der Gruppierungsspalte erscheinen in den Zellen neben den aggregierten Werten.

Parameter​

ParameterTypErforderlichBeschreibung
ckIdString!JaDer abzufragende CK-Typ
groupByColumnPaths[String!]!JaAttributpfade, nach denen gruppiert wird
columnPaths[StreamDataQueryColumnInput!]!JaSpalten mit Aggregationstyp
argStreamDataArgumentsNeinOverrides für Zeitraum und Limit
fieldFilter[FieldFilter]NeinFeldbezogene Vergleichsfilter
rtIds[OctoObjectId]NeinAuf bestimmte Runtime-Entitäts-IDs eingrenzen
firstIntNeinMaximale Anzahl der zurückzugebenden Elemente
afterStringNeinPaginierungs-Cursor

Gruppierung nach mehreren Spalten​

Sie können nach mehr als einer Spalte gruppieren. Dieses Beispiel gruppiert sowohl nach Entität als auch nach CK-Typ:

query {
streamData {
transientStreamDataGroupedAggregationQuery(
ckId: "Industry.Energy/EnergyMeter"
groupByColumnPaths: ["rtId", "ckTypeId"]
columnPaths: [
{ attributePath: "voltage", aggregationType: AVG }
]
arg: {
queryMode: DEFAULT
from: "2024-03-21T00:00:00Z"
to: "2024-03-22T00:00:00Z"
}
) {
totalCount
items {
cells {
items {
attributePath
value
}
}
}
}
}
}

Mit Filtern​

Filter werden vor der Aggregation angewendet und schränken ein, welche Datenpunkte in die Berechnung einbezogen werden:

query {
streamData {
transientStreamDataGroupedAggregationQuery(
ckId: "Industry.Energy/EnergyMeter"
groupByColumnPaths: ["rtId"]
columnPaths: [
{ attributePath: "voltage", aggregationType: AVG }
]
fieldFilter: [
{ attributePath: "voltage", operator: GREATER_THAN, comparisonValue: 0 }
]
) {
totalCount
items {
cells {
items {
attributePath
value
}
}
}
}
}
}

Dies berechnet die durchschnittliche Spannung pro Entität, berücksichtigt dabei aber nur Datenpunkte, bei denen die Spannung größer als null ist.


Anwendungsfälle​

SzenarioAbfragetypBeispiel
Gesamtdurchschnitt für ein KPI-WidgetAggregationDurchschnittstemperatur über alle Sensoren
Produktionssummen pro MaschineGrouped AggregationGesamtausstoß gruppiert nach rtId
DatenqualitätsprüfungAggregation mit COUNTAnzahl der Messwerte in einem Zeitraum
Vergleichs-DashboardGrouped AggregationMin/Max/Durchschnitt pro Entität für die Nebeneinander-Darstellung