Skip to main content
Skip table of contents

Aggregationsregel und Raster


In bestimmten Fällen liegen Daten in einer anderen Auflösung vor, als die Zielzeitreihe es vorsieht. Das ist der Fall zum Beispiel, wenn für eine Zeitreihe im Stunden-Intervall Daten im Tages-Intervall oder Daten im Viertelstunden-Intervall übermittelt werden. In beiden Fällen werden Aggregationsregel, um zwischen unterschiedlichen Intervallen zu konvertieren aktiv, welche bestimmen wie ein Wert von einer Auflösung in eine andere Auflösung konvertiert werden soll.

Aggregationsregel

In HAKOM TSM werden folgende Aggregationsregeln unterstützt:

  • Sum
  • Average
  • Min
  • Max
  • MostFrequently
  • AtTheMoment
  • AbsMin
  • AbsMax

Anwendung von Aggregationsregeln

Welche Aggregationsregel verwendet wird, kann im Berechnungsprozess an mehreren Stellen definiert werden. 

Einheit

Im System sind eine Reihe von Einheiten hinterlegt, die an Zeitreihen ausgewählt werden können. Pro Einheit wird eine Aggregationsregel definiert, welche für alle Zeitreihen, die diese Einheit verwenden - wenn an einer anderen Stelle (siehe Unten) nichts anderes definiert - angewendet wird.

So zum Beispiel wird für eine Arbeits-Einheit (wie KWh) die Aggregationsregel "Sum" verwendet. D.h. es werden Mengen auf größere Raster aufsummiert, auf kleinere Raster anteilig dividiert. Im Gegensatz dazu wird für eine Leistungs-Einheit (wie KW) die Aggregationsregel "Average" verwendet. Diese ermittelt den Durchschnitt aller Werte in einem höheren Raster oder wiederholt den Wert in einem geringeren Raster.

Zeitreihe

Soll für eine Zeitreihe eine von der jeweiligen Einheit abweichende Aggregationsregel verwendet werden, so kann diese auch an der Zeitreihe definiert werden. Bei jeder Operation mit der betroffenen Zeitreihe wird dann diese Aggregationsregel, anstelle der an der Einheit definierten, verwendet.

Anmerkung

In der TSM Plugin ist das derzeit nur über Stammdaten-Export und Import einstellbar: Stammdatenimport & -export

Berechnung

Es ist auch möglich in einer Berechnung oder Formelreferenz eine spezielle Aggregationsregel mitzugeben, welche alle vorangehende Regel (Einheit bzw. Zeitreihe) überstimmt.

In WebTSM Services API kann bei jeder Datenabruf oder Berechnung (siehe /repositories/:repository/timeseries/:id|:name/data, sowie /repositories/:repository/timeseriescollections/data und repositories/.../calculations Pfade) die Aggregationsregel mitgegeben werden. In TSM App kann die Anwendung einer Aggregationsregel anhand einer Abfrage-Einheit (sofern die Zeitreihe einen Konversionspfad zur gewünschten Einheit besitzt) angefordert werden. Zusätzlich kann in Formelfunktionen in der Zeitreihenreferenz die Aggregationsregel mitgegeben werden.

Rasterkonvertierungen

In den nachfolgenden Kapiteln werden unterschiedliche Rasterkonvertierungen (Aggregation und Hochskalierung) anhand von Beispielen im REST Service demonstriert. Als Beispiel wird eine Zeitreihe mit 3 Tages-Intervall verwendet.

REST Beispiel

XML
POST {{baseUrl}}\repositories\ZAMS\timeseries
{
    "Name": "TimeSeries_3Days",
    "Type": 2,
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KWh"
}

Aggregation (Auflösung < Intervall) bei Lesen

Werden Zeitreihendaten in einer niedrigeren Auflösung angefordert als sie vorliegen, reden wir von Aggregation. In diesem Fall werden Daten mehrerer Raster in ein Raster aggregiert. Bei nicht vollständiger Überlappung von Abrufraster und Zeitreihenraster (zum Beispiel Zeitreihe in 3 Tagesraster, Aggregation auf Wochenraster), werden Bereiche, die in mehrere Raster einfließen anteilsmäßig aufgeteilt.

Das Mechanismus des Aufteilens bzw. Aufsummierens ist bei der Aggregationsregel "Sum" am einfachsten nachvollziehbar, daher werden wir in weiterer Folge uns auf diese Regel beschränken.

Wir speichern auf die oben beschriebene Zeitreihe 3 konsekutive Rastereinträge mit einem Wert.

ZeitstempelGültigkeitWert
01.01.2020 00:0004.01.2020 00:00100
04.01.2020 00:0007.01.2020 00:00200
07.01.2020 00:0010.01.2020 00:00300

WebTSM Services API Beispiel

XML
POST {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data
{
	"Interval": {
	    "Value": 4,
	    "Multiplier": 3
	},
	"Unit": "kWh",
	"Data": [
	    {
	        "From": "2019-12-31T23:00:00Z",
	        "Value": 100,
	        "Flag": 9
	    },
	    {
	        "From": "2020-01-03T23:00:00Z",
	        "Value": 200,
	        "Flag": 9
	    },
	    {
	        "From": "2020-01-06T23:00:00Z",
	        "Value": 300,
	        "Flag": 9
	    }
	]
}

Vollständige Überlappung

Sehen wir uns an, wie die Daten aggregiert werden bei vollständiger Überlappung zwischen Datenzeitbereich und Abfragezeitbereich.

Hierzu aggregieren wir 4 x 3-Tages Rasterpunkte mithilfe einer Intervalllänge von 6 Tagen über einen Abfragezeitbereich von 12 Tagen.

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0007.01.2020 00:00300Raster 1 (100) + Raster 2 (200) = 300 - Valid
07.01.2020 00:0013.01.2020 00:00300Raster 3 (300) + Raster 4 (0 Missing) = 300 - Missing

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-12T23:00:00Z&interval=Day&intervalMultiplier=6
{
    "Interval": {
        "Value": 4,
        "Multiplier": 6
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 300.0,
            "Flag": 9
        },
        {
            "From": "2020-01-06T23:00:00Z",
            "Value": 300.0,
            "Flag": 19
        }
    ]
}

Teil-Überlappung

Sehen wir uns an, wie die Daten aggregiert werden bei einer Teil-Überlappung zwischen Datenzeitbereich und Abfragezeitbereich.

Hierzu aggregieren wir 4 x 3-Tages Rasterpunkte mithilfe einer Intervalllänge von 7 Tagen über einen Abfragezeitbereich von 14 Tagen.

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0008.01.2020 00:00400Raster 1 (100) + Raster 2 (200) + Raster 3 (300) / 3 (da nur 1 Tag aus 3 benötigt wird) = 400 - Valid
08.01.2020 00:0015.01.2020 00:00200Raster 3 (300) * 2 / 3 (da nur 2 aus 3 Tagen benötigt wird) + Raster 4 (0 Missing) + Raster 5 (0 Missing) * 2 / 3 = 200 - Missing

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-14T23:00:00Z&interval=Day&intervalMultiplier=7
{
    "Interval": {
        "Value": 4,
        "Multiplier": 7
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 400.0,
            "Flag": 9
        },
        {
            "From": "2020-01-07T23:00:00Z",
            "Value": 200.0,
            "Flag": 19
        }
    ]
}

Hochskalierung (Auflösung > Intervall) bei Lesen

Werden Daten in einer höheren Auflösung verarbeitet als das unterliegende Zeitreihen-Intervall, so reden wir von Hochskalierung.

Vollständige Überlappung

Wir rufen dieselben 3-Tages-Rasterdaten in 1 Tagesraster ab, um zu sehen wie eine Hochskalierung bei einer Summenaggregation funktioniert.

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0002.01.2020 00:0033.33Raster 1 (100) / 3
02.01.2020 00:0003.01.2020 00:0033.33Raster 1 (100) / 3
03.01.2020 00:0004.01.2020 00:0033.33Raster 1 (100) / 3
04.01.2020 00:0005.01.2020 00:0066.66Raster 2 (200) / 3
05.01.2020 00:0006.01.2020 00:0066.66Raster 2 (200) / 3
06.01.2020 00:0007.01.2020 00:0066.66Raster 2 (200) / 3
07.01.2020 00:0008.01.2020 00:00100Raster 3 (300) / 3
08.01.2020 00:0009.01.2020 00:00100Raster 3 (300) / 3
09.01.2020 00:0010.01.2020 00:00100Raster 3 (300) / 3

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-09T23:00:00Z&interval=Day&intervalMultiplier=1
{
    "Interval": {
        "Value": 4,
        "Multiplier": 1
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 33.333333333333336,
            "Flag": 9
        },
        {
            "From": "2020-01-01T23:00:00Z",
            "Value": 33.333333333333336,
            "Flag": 9
        },
        {
            "From": "2020-01-02T23:00:00Z",
            "Value": 33.333333333333336,
            "Flag": 9
        },
        {
            "From": "2020-01-03T23:00:00Z",
            "Value": 66.666666666666671,
            "Flag": 9
        },
        {
            "From": "2020-01-04T23:00:00Z",
            "Value": 66.666666666666671,
            "Flag": 9
        },
        {
            "From": "2020-01-05T23:00:00Z",
            "Value": 66.666666666666671,
            "Flag": 9
        },
        {
            "From": "2020-01-06T23:00:00Z",
            "Value": 100.0,
            "Flag": 9
        },
        {
            "From": "2020-01-07T23:00:00Z",
            "Value": 100.0,
            "Flag": 9
        },
        {
            "From": "2020-01-08T23:00:00Z",
            "Value": 100.0,
            "Flag": 9
        }
    ]
}

Teil-Überlappung

Wir rufen dieselben 3-Tages-Rasterdaten in 2 Tagesraster ab um zu sehen wie die Aggregation sich bei Teil-Überlappung sich verhält:

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0003.01.2020 00:0066.66Raster 1 (100) * 2 / 3
03.01.2020 00:0005.01.2020 00:00100Raster 1 (100) / 3 + Raster 2 (200) / 3
05.01.2020 00:0007.01.2020 00:00133.33Raster 2 (200) * 2 / 3
07.01.2020 00:0009.01.2020 00:00200Raster 3 (200) * 2 / 3
09.01.2020 00:0010.01.2020 00:00100Raster 1 (300) / 3

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-09T23:00:00Z&interval=Day&intervalMultiplier=2
{
    "Interval": {
        "Value": 4,
        "Multiplier": 2
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 66.666666666666671,
            "Flag": 9
        },
        {
            "From": "2020-01-02T23:00:00Z",
            "Value": 100.0,
            "Flag": 9
        },
        {
            "From": "2020-01-04T23:00:00Z",
            "Value": 133.33333333333334,
            "Flag": 9
        },
        {
            "From": "2020-01-06T23:00:00Z",
            "Value": 200.0,
            "Flag": 9
        },
        {
            "From": "2020-01-08T23:00:00Z",
            "Value": 100.0,
            "Flag": 9
        }
    ]
}

Speichern in niedrigere Auflösung

Wird in niedrigere Auflösung gespeichert, als das Intervall der Zeitreihe so werden im Prinzip mit derselben Wert mehrere Intervalle beschrieben.

Vollständige Überlappung

Es wird ein Wert für ein Zeitbereich (9 Tage) gespeichert, welche mehrere Rasterpunkte (3) vollständig überlappt.

ZeitstempelGültigkeitWert
01.01.2020 00:0010.01.2020 00:00900

WebTSM Services API Beispiel

XML
POST {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data
{
	"Interval": {
	    "Value": 4,
	    "Multiplier": 9
	},
	"Unit": "kWh",
	"Data": [
	    {
	        "From": "2019-12-31T23:00:00Z",
	        "Value": 900,
	        "Flag": 9
	    }
	]
}


Ergebnis:

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0004.01.2020 00:00300900 / 3 Raster
04.01.2020 00:0007.01.2020 00:00300900 / 3 Raster
07.01.2020 00:0010.01.2020 00:00300900 / 3 Raster

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-09T23:00:00Z
{
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 300.0,
            "Flag": 9
        },
        {
            "From": "2020-01-03T23:00:00Z",
            "Value": 300.0,
            "Flag": 9
        },
        {
            "From": "2020-01-06T23:00:00Z",
            "Value": 300.0,
            "Flag": 9
        }
    ]
}

Teil-Überlappung

Es wird ein Wert für ein Zeitbereich (7 Tage) gespeichert, welche mehrere Rasterpunkte (3) nur teilweise überlappt.

ZeitstempelGültigkeitWert
01.01.2020 00:0008.01.2020 00:00700

WebTSM Services API Beispiel

XML
POST {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data
{
	"Interval": {
	    "Value": 4,
	    "Multiplier": 7
	},
	"Unit": "kWh",
	"Data": [
	    {
	        "From": "2019-12-31T23:00:00Z",
	        "Value": 700,
	        "Flag": 9
	    }
	]
}


Ergebnis:

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0004.01.2020 00:00300700 * 3 / 7
04.01.2020 00:0007.01.2020 00:00300700 * 3 / 7 
07.01.2020 00:0010.01.2020 00:00100700 * 1 / 7 

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-09T23:00:00Z
{
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 300.0,
            "Flag": 9
        },
        {
            "From": "2020-01-03T23:00:00Z",
            "Value": 300.0,
            "Flag": 9
        },
        {
            "From": "2020-01-06T23:00:00Z",
            "Value": 100.0,
            "Flag": 9
        }
    ]
}

Speichern in höhere Auflösung

Vollständige Überlappung

Wir speichern nun Daten in einem kleineren Raster, so dass diese den ursprünglichen Raster der Zeitreihe vollständig ausfüllen:

ZeitstempelGültigkeitWert
01.01.2020 00:0002.01.2020 00:00100
02.01.2020 00:0003.01.2020 00:00200
03.01.2020 00:0004.01.2020 00:00300

WebTSM Services API Beispiel

XML
POST {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data
{
	"Interval": {
	    "Value": 4,
	    "Multiplier": 1
	},
	"Unit": "kWh",
	"Data": [
	    {
	        "From": "2019-12-31T23:00:00Z",
	        "Value": 100,
	        "Flag": 9
	    },
	    {
	        "From": "2020-01-01T23:00:00Z",
	        "Value": 200,
	        "Flag": 9
	    },
	    {
	        "From": "2020-01-02T23:00:00Z",
	        "Value": 300,
	        "Flag": 9
	    }
	]
}


Ergebnis:

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0004.01.2020 00:00600100 + 200 + 300

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-03T23:00:00Z
{
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 600.0,
            "Flag": 9
        }
    ]
}

Teil-Überlappung

Wir speichern nun Daten in einem kleineren Raster, so dass diese den ursprünglichen Raster der Zeitreihe nicht vollständig ausfüllen:

ZeitstempelGültigkeitWert
01.01.2020 00:0002.01.2020 00:00100

WebTSM Services API Beispiel

XML
POST {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data
{
	"Interval": {
	    "Value": 4,
	    "Multiplier": 1
	},
	"Unit": "kWh",
	"Data": [
	    {
	        "From": "2019-12-31T23:00:00Z",
	        "Value": 100,
	        "Flag": 9
	    }
	]
}


Ergebnis: es erfolgt keine Gewichtung bei einer Summenaggregat, daher wird der komplette Wert übernommen. 

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0004.01.2020 00:00100100 - Anmerkung: es erfolgt keine Gewichtung

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days/data?from=2019-12-31T23:00:00Z&to=2020-01-03T23:00:00Z
{
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KWh",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 100.0,
            "Flag": 9
        }
    ]
}

Teil-Überlappung mit Aggregationsregel "Average"

Achtung: bei einer Teil-Überlappung mit nur einen Teil des gesamten Rasters kommt es bei Aggregationsregel "Average" vielleicht wider erwarten ebenfalls zu keine Gewichtung über nicht übermittelten Anteile des selben Rasters. Hierzu weiter unten mehr. 

Legen wir dazu eine neue Zeitreihe mit Aggregationsregel "Average" an:

WebTSM Services API Beispiel

XML
POST {{baseUrl}}\repositories\ZAMS\timeseries
{
    "Name": "TimeSeries_3Days_Average",
    "Type": 2,
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KW"
}


Wir speichern nun Daten in einem kleineren Raster, so dass diese den ursprünglichen Raster der Zeitreihe nicht vollständig ausfüllen:

ZeitstempelGültigkeitWert
01.01.2020 00:0002.01.2020 00:00100
02.01.2020 00:0003.01.2020 00:00200

WebTSM Services API Beispiel

XML
POST {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days_Average/data
{
	"Interval": {
	    "Value": 4,
	    "Multiplier": 1
	},
	"Unit": "kW",
	"Data": [
	    {
	        "From": "2019-12-31T23:00:00Z",
	        "Value": 100,
	        "Flag": 9
	    },
	    {
	        "From": "2020-01-01T23:00:00Z",
	        "Value": 200,
	        "Flag": 9
	    }
	]
}


Ergebnis: es erfolgt eine Gewichtung gemäß Aggregationsregel, aber nur über die übermittelten Wertebereiche. Teilbereiche, die nicht übermittelt wurden (also der dritte Tag) werden in der Gewichtung nicht berücksichtigt (als NoValue, d.h. als NA angenommen).

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0004.01.2020 00:00150(100 + 200) / 2

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days_Average/data?from=2019-12-31T23:00:00Z&to=2020-01-03T23:00:00Z
{
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KW",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 150.0,
            "Flag": 9
        }
    ]
}

Möchte ich, dass die übermittelten Werte des Teilbereichs und die fehlende Werte mit 0 in die Gewichtung einfließen, so muss ich die Lücken als 0 Missing (oder Valid) mit übermitteln:

ZeitstempelGültigkeitWert
01.01.2020 00:0002.01.2020 00:00100 - Valid
02.01.2020 00:0003.01.2020 00:00200 - Valid
03.01.2020 00:0004.01.2020 00:000 - Missing

WebTSM Services API Beispiel

XML
POST {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days_Average/data
{
	"Interval": {
	    "Value": 4,
	    "Multiplier": 1
	},
	"Unit": "kW",
	"Data": [
	    {
	        "From": "2019-12-31T23:00:00Z",
	        "Value": 100,
	        "Flag": 9
	    },
	    {
	        "From": "2020-01-01T23:00:00Z",
	        "Value": 200,
	        "Flag": 9
	    },
	    {
	        "From": "2020-01-02T23:00:00Z",
	        "Value": 0,
	        "Flag": 19
	    }
	]
}

Ergebnis: es erfolgt eine Gewichtung gemäß Aggregationsregel, aber nur über die übermittelten Wertebereiche. Teilbereiche, die nicht übermittelt wurden (also der dritte Tag) werden in der Gewichtung nicht berücksichtigt (als NoValue, d.h. als NA angenommen).

ZeitstempelGültigkeitWertAggregationsweg
01.01.2020 00:0004.01.2020 00:00100(100.Valid + 200.Valid + 0.Missing) / 3 = 100.Missing

Anmerkung: wenn ich die Lücke (0 Wert) als Missing übermittelt habe, wird auch mein Ergebnis Missing sein. Möchte ich einen Valid Flag, so müsste ich die Lücke mit 0.Valid übermitteln.

WebTSM Services API Beispiel

XML
GET {{baseUrl}}/repositories/ZAMS/timeseries/TimeSeries_3Days_Average/data?from=2019-12-31T23:00:00Z&to=2020-01-03T23:00:00Z
{
    "Interval": {
        "Value": 4,
        "Multiplier": 3
    },
    "Unit": "KW",
    "Data": [
        {
            "From": "2019-12-31T23:00:00Z",
            "Value": 100.0,
            "Flag": 19
        }
    ]
}


Wir empfehlen folgende Videos unter Video Tutorials:

  • Aggregation
  • Behaviour of Flags During Data Aggregation


JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.