Zeitreihen mit und ohne Intervall
Was sind spontane Zeitreihen
Spontane, oft auch asynchrone oder azyklische Zeitreihen genannt, sind Zeitreihen mit variablem Zeitabstand zwischen zwei Werten.
Spontane vs. Zyklische Zeitreihen
Die nachfolgende Darstellung zeigt die Unterschiede einer spontanen Zeitreihe im Vergleich zu zyklischen Zeitreihen.
Spontane Zeitreihe | Zyklische Zeitreihe | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Zeitachse | Die Zeitachse ist variabel, die Zeitspanne zwischen zwei Einträgen kann frei - unterschiedlich lang gewählt werden. | Die Zeitachse folgt einem fixen Raster, die Zeitspanne zwischen zwei Einträgen ist somit immer gleich lang. | |||||||||||||||||||||||||||||||||||||||||||||||
Gültigkeit der Werte | Ein Wert gilt immer bis zum nächsten Wert auf der Zeitachse. Der letzte Wert auf der Zeitachse gilt bis UniversalTime.Max (also unendlich). Beispiel: spontane Leistungszeitreihe
| Ein Wert gilt immer bis zum Ende des der Zeitreihe zugewiesenen Intervalls. Beispiel: zyklische Leistungszeitreihe, die die spontane Zeitreihe im Beispiel links nachbildet. (Der letzte Wert müsste für einen langen Zeitraum fortgeschrieben werden.)
| |||||||||||||||||||||||||||||||||||||||||||||||
Rasterung | Eine spontane Zeitreihe kann in beliebigem Raster abgefragt werden. | Eine zyklische Zeitreihe kann in beliebigem Raster abgefragt werden. | |||||||||||||||||||||||||||||||||||||||||||||||
Speicherbedarf und Komprimierbarkeit | Spontane Zeitreihen benötigen aufgrund ihrer Eigenschaften weniger Speicherplatz als zyklische Zeitreihen, können aber aufgrund der selben Eigenschaften nicht sinnvoll in gleichlange Zeitblöcke komprimiert werden. Siehe auch Komprimierte Zeitreihen. | Zyklische Zeitreihen benötigen mehr Speicherplatz im Vergleich zu spontanen Zeitreihen, können aber in gleichlangen Zeitblöcke komprimiert werden. Siehe auch Komprimierte Zeitreihen. |
Wann sollten spontane Zeitreihen verwendet werden?
Je nach fachlichem Hintergrund, Datenmenge, Performanceanforderungen und Abstand zwischen zwei Wertänderungen sind spontane Zeitreihen oder zyklische Zeitreihen besser geeignet.
Wann spontane Zeitreihe
Werte müssen sowohl beim Speichern als auch bei der Abfrage azyklisch bleiben und über Rastergrenzen hinaus gelten.
Hinsichtlich Komprimierbarkeit: Anzahl der Werte im Vergleich zu einer Zeitreihe mit fixem Wertzyklus ist gering genug, dass von einer komprimierten Zeitreihe keine Performancegewinne zu erzielen sind. Das wäre dann der Fall, wenn ein Komprimierungsblock (zum Beispiel 1 Tag bei Stundenraster) größer wäre, als alle Daten einer spontanen Zeitreihe im selben Zeitraum.
Wann keine spontane Zeitreihe
Wenn kein fachlicher Hintergrund besteht UND
Hinsichtlich Komprimierbarkeit: komprimiert bessere Performance erzielt werden kann.
Verhalten von spontanen Zeitreihen
Spontane Zeitreihen können ohne Intervall ("NoInterval") oder mit einem bestimmten Intervall (wie "Hour", "Day" etc.) definiert werden. Spontane Zeitreihen ohne Intervall verhalten sich tatsächlich spontan (wie oben beschrieben), wohingegen sich spontane Zeitreihen mit Intervall analog zu zyklischen Zeitreihen verhalten.
D.h. bei spontanen Zeitreihen ohne Intervall gilt jeder Wert immer bis zur nächsten Wertänderung. Bei spontanen Zeitreihen mit Intervall gilt jeder übermittelte Wert bis zum Ende des jeweiligen Intervalls oder bis zur nächsten Wertänderung (je nachdem was vorher zutrifft).
Mit vs. ohne Intervall
Die folgenden WebTSM Services API Request Beispiele sollen die Unterschiede verdeutlichen.
Zeitreihendefinitionen
Es werden zwei Zeitreihen angelegt. Eine mit und eine ohne Intervall:
Name | Type | Interval.Value | Interval.Multiplier | Unit |
---|---|---|---|---|
Spontaneous_NoInterval | Spontaneous | No | 1 | kWh |
Spontaneous_Interval_1h | Spontaneous | Hour | 1 | kWh |
WebTSM Services API Beispiel
POST {{baseUrl}}\repositories\ZAMS\timeseriescollections\definition
[
{
"ID": -1,
"Name": "Spontaneous_NoInterval",
"Type": 3,
"Interval": {
"Value": 0,
"Multiplier": 1
},
"Unit": "kWh"
},
{
"ID": -1,
"Name": "Spontaneous_Interval_1h",
"Type": 3,
"Interval": {
"Value": 3,
"Multiplier": 1
},
"Unit": "kWh"
}
]
Daten ohne Intervall ("NoInterval")
Als erstes schauen wir an wie sich Daten ohne Intervall verhalten, wenn sie zu einer Zeitreihe ohne, bzw. mit Intervall gespeichert werden.
Speichern
Wir speichern folgende Daten, wobei zwischen den Werten eine Lücke von einem Tag besteht:
Zeitstempel | Wert |
---|---|
2019-12-31T23:00:00Z | 22,8 |
2020-01-01T23:00:00Z | 23,9 |
WebTSM Services API Beispiel
POST {{baseUrl}}/repositories/ZAMS/timeseriescollections/data
[
{
"Name": "Spontaneous_NoInterval",
"Data":
{
"Interval": {
"Value": 0,
"Multiplier": 1
},
"Unit": "kWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 22.8,
"Flag": 9
},
{
"From": "2020-01-01T23:00:00Z",
"Value": 23.6,
"Flag": 9
}
]
}
},
{
"Name": "Spontaneous_Interval_1h",
"Data":
{
"Interval": {
"Value": 0,
"Multiplier": 1
},
"Unit": "kWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 22.8,
"Flag": 9
},
{
"From": "2020-01-01T23:00:00Z",
"Value": 23.6,
"Flag": 9
}
]
}
}
]
Response
In der Response sehen wir, dass spontane Daten ohne Intervall nicht an einer Zeitreihe mit definiertem Intervall gespeichert werden konnten. Grund dafür ist, dass das System stets versucht übermittelte Daten auf das Intervall der Zielzeitreihe zu konvertieren. Bei Daten ohne Intervall würde das zu einer Division durch Unendlich führen, weil der letzte übermittelte Datenpunkt bis zur Unendlichkeit gilt.
Zeitstempel | Spontaneous_NoInterval | Spontaneous_Interval_1h |
---|---|---|
Request Status | 201 | 400 |
Beschreibung | Gespeichert | Kann keine Daten ohne Intervall auf eine Zeitreihe mit Intervall speichern. |
WebTSM Services API Response
[
{
"ID": 13131,
"Name": "Spontaneous_NoInterval",
"Status": 201,
"Message": "Time series data successfully saved.",
"Details": null
},
{
"ID": null,
"Name": "Spontaneous_Interval_1h",
"Status": 400,
"Message": "Requested data items exceed configured 'GetDataInTargetInterval'. Try partitioning your time period into multiple requests or choose a larger interval.",
"Details": null
}
]
Daten-Abruf
Eine Kontrolle der Werte zeigt folgendes Ergebnis:
Zeitstempel | Spontaneous_NoInterval | Spontaneous_Interval_1h |
---|---|---|
2019-12-31T23:00:00Z | 22,8 | 0 |
2020-01-01T23:00:00Z | 23,9 | - (Zeitstempel existiert nicht) |
WebTSM Services API Beispiel
GET {{baseUrl}}/repositories/ZAMS/timeseriescollections/data?name=Spontaneous_NoInterval&name=Spontaneous_Interval_1h&from=2019-12-31T23:00:00Z&to=2020-01-02T23:00:00Z
[
{
"ID": 13131,
"Name": "Spontaneous_NoInterval",
"Status": 200,
"Message": null,
"Details": null,
"Data": {
"Interval": {
"Value": 0,
"Multiplier": 1
},
"Unit": "KWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 22.8,
"Flag": 9
},
{
"From": "2020-01-01T23:00:00Z",
"Value": 23.6,
"Flag": 9
}
]
}
},
{
"ID": 13130,
"Name": "Spontaneous_Interval_1h",
"Status": 200,
"Message": null,
"Details": null,
"Data": {
"Interval": {
"Value": 0,
"Multiplier": 1
},
"Unit": "KWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 0.0,
"Flag": 19
}
]
}
}
]
Daten mit Intervall ("Hour")
Ein Versuch dieselben Daten mit einem Abstand von einem Tag - diesmal mit dem Intervall Stunde - zu übermitteln soll den Unterschied zu Daten ohne Intervall hervorheben.
Speichern
Es werden dieselben Zeitstempel mit denselben Werten genommen:
Zeitstempel | Wert |
---|---|
2019-12-31T23:00:00Z | 22,8 |
2020-01-01T23:00:00Z | 23,9 |
Anmerkung: die Daten sind zwar im Stundenraster, es wurden aber einige Zeitstempel ausgelassen, diese werden mit 0 automatisch angenommen.
Vollständig ausgerollt würden die Daten so aussehen:
Zeitstempel | Wert |
---|---|
2019-12-31T23:00:00Z | 22,8 |
2020-01-01T00:00:00Z | 0 |
2020-01-01T01:00:00Z | 0 |
... | 0 |
2020-01-01T23:00:00Z | 23,9 |
2020-01-02T00:00:00Z | 0 |
WebTSM Services API Beispiel
POST {{baseUrl}}/repositories/ZAMS/timeseriescollections/data
[
{
"Name": "Spontaneous_NoInterval",
"Data":
{
"Interval": {
"Value": 3,
"Multiplier": 1
},
"Unit": "kWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 22.8,
"Flag": 9
},
{
"From": "2020-01-01T23:00:00Z",
"Value": 23.6,
"Flag": 9
}
]
}
},
{
"Name": "Spontaneous_Interval_1h",
"Data":
{
"Interval": {
"Value": 3,
"Multiplier": 1
},
"Unit": "kWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 22.8,
"Flag": 9
},
{
"From": "2020-01-01T23:00:00Z",
"Value": 23.6,
"Flag": 9
}
]
}
}
]
Response
Daten mit Intervall können sowohl auf Zeitreihen ohne Intervall als auch auf Zeitreihen mit Intervall gespeichert werden:
Zeitstempel | Spontaneous_NoInterval | Spontaneous_Interval_1h |
---|---|---|
Request Status | 201 | 201 |
Beschreibung | Gespeichert | Gespeichert |
WebTSM Services API Response
[
{
"ID": 13132,
"Name": "Spontaneous_NoInterval",
"Status": 201,
"Message": "Time series data successfully saved.",
"Details": null
},
{
"ID": 13133,
"Name": "Spontaneous_Interval_1h",
"Status": 201,
"Message": "Time series data successfully saved.",
"Details": null
}
]
Daten-Abruf
Kontrolle:
Zeitstempel | Spontaneous_NoInterval | Spontaneous_Interval_1h |
---|---|---|
2019-12-31T23:00:00Z | 22,8 | 22,8 |
2020-01-01T00:00:00Z | 0 | 0 |
2020-01-01T23:00:00Z | 23,9 | 23,9 |
2020-01-02T00:00:00Z | 0 | 0 |
WebTSM Services API Beispiel
{{baseUrl}}/repositories/ZAMS/timeseriescollections/data?name=Spontaneous_NoInterval&name=Spontaneous_Interval_1h&from=2019-12-31T23:00:00Z&to=2020-01-02T23:00:00Z
[
{
"ID": 13132,
"Name": "Spontaneous_NoInterval",
"Status": 200,
"Message": null,
"Details": null,
"Data": {
"Interval": {
"Value": 0,
"Multiplier": 1
},
"Unit": "KWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 22.8,
"Flag": 9
},
{
"From": "2020-01-01T00:00:00Z",
"Value": 0.0,
"Flag": 19
},
{
"From": "2020-01-01T23:00:00Z",
"Value": 23.6,
"Flag": 9
},
{
"From": "2020-01-02T00:00:00Z",
"Value": 0.0,
"Flag": 19
}
]
}
},
{
"ID": 13133,
"Name": "Spontaneous_Interval_1h",
"Status": 200,
"Message": null,
"Details": null,
"Data": {
"Interval": {
"Value": 0,
"Multiplier": 1
},
"Unit": "KWh",
"Data": [
{
"From": "2019-12-31T23:00:00Z",
"Value": 22.8,
"Flag": 9
},
{
"From": "2020-01-01T00:00:00Z",
"Value": 0.0,
"Flag": 19
},
{
"From": "2020-01-01T23:00:00Z",
"Value": 23.6,
"Flag": 9
},
{
"From": "2020-01-02T00:00:00Z",
"Value": 0.0,
"Flag": 19
}
]
}
}
]
Daten ohne und mit Intervall an eine Spontane Zeitreihe ohne Intervall im Vergleich
Zusammengefasst folgende Nebeneinanderstellung zeigt den Unterschied zwischen Daten ohne und mit Intervall:
Ohne Intervall | Mit Intervall | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Der jeweilige Wert gilt bis zur nächsten Änderung
| Der jeweilige Wert gilt bis zum Ende des Intervalls
|
Wir empfehlen folgendes Video unter Video Tutorials:
Types of Time Series