Seite 1 von 1

Monat beim Schreiben in die Datenbank aufnehmen

Verfasst: Fr 16. Sep 2022, 08:32
von Janniman
Moin.

Ich ärgere mich immer über die Anzeige bei Grafana.
In den Zeiteinstellungen kann man ja z.B. now/M einen/den Monat auslesen, nur rechnen kann man damit nicht. Das geht nur mit z.B. Tag, Woche und Jahr, aber NICHT mit dem Monat. Klar, das ist der unterschiedlichen Anzahl an Tagen in den Monaten geschuldet, daher verständlich.

Zurzeit sehen die Dashbords bei mir wirklich schön aus, wie ich es mir vorstelle.... nur bleibt das nicht so, wenn es einen Jahreswechsel gibt.
Dann habe ich im Januar anstatt der Balken für jeden gelaufenen der letzten 12 Monate nur einen Balken, die Quartale haben nur einen Balken.

Dazu experimentiere ich mit einem "rotierenden" Dashboard, das immer die letzten 12 Monate (oder Quartale) über einen Jahreswechsel hinweg anzeigen kann, ohne ständig an den Stellschrauben zu drehen. Das funktioniert auch gut, hat aber einen gravierenden Nachteil:
Die Beschriftung der Balken können keine Variablen einbetten/darstellen. Das bedeutet, die Namen als Anzeige sind dann bei mir
"Monat" (aktueller Monat)
"Mon -01"
"Mon -02"
...
"Mon -12"
Da sich ja die Monate rotierend ändern (dieser Monat wäre Sept, in ein paar Tagen ist an dieser Position der aktuelle Monat aber Okt), ist eine hübsche Namenszuordnung nicht machbar. Auch mit den Transformationen komme ich da nicht weiter. Einzig wäre es (eventuell) über einen Filter machbar. Dieser Filter würde anhand eines Timestamps (des ersten Timestamps des Monats z.B.) ermittelt und dann dem Monat zugewiesen. Nur gibt es in keiner Datenbank die Werte Januar bis Dezember (oder besser Jan - Dez).

Nun meine Frage:
Kann man nicht über eine _math oder vergleichbar den jeweiligen Auslesemonaten des Timestamps einen Monat verpassen?
Also was im 01.02. und 28./29.02. liegt, bekommt den Monat Februar?
Dies dann in einer Datenbank wäre der Hammer.

Also vereinfacht: Datensatz vom Auslesezeitpunkt mit Monatsnamen versehen

Ich kann das leider weder in php, noch in Altgriechisch oder bunten Farben programmieren....

Jan

Re: Monat beim Schreiben in die Datenbank aufnehmen

Verfasst: Fr 16. Sep 2022, 09:10
von Ulrich
Hallo Jan,

kannst du bitte einmal in das Measurement Statistik schauen. Dort werden solche Angaben jede 10 Minuten geschrieben. Fehlt da noch etwas?

Re: Monat beim Schreiben in die Datenbank aufnehmen

Verfasst: Fr 16. Sep 2022, 09:17
von mdkeil
Ich hätte da einen Workaround..

So sieht beispielsweise bei mir ein Select für den Januar des aktuellen Jahres aus. (wichtig sind die WHERE-Statements)

Code: Alles auswählen

SELECT sum("power") AS "PV-Produktion", sum("einsp") AS "Einspeisung", sum("verbrauch") AS "Gesamtverbrauch", sum("bezug") AS "Netzbezug", sum("verbrauch")-sum("bezug") AS "Eigenverbrauch", (((sum("verbrauch")-sum("bezug")) * last(ersp) + sum("einsp")*$esv)/1000) AS "Einsparung & Vergütung", (sum("verbrauch")-sum("bezug")) / sum("power") AS "EV-Quote", (sum("verbrauch")-sum("bezug"))/sum("verbrauch") AS "Autarkie" FROM (SELECT integral("PVLeistung",1h) AS power, integral("Einspeisung",1h) AS einsp, integral("Verbrauch",1h) AS verbrauch,  integral("Bezug",1h) AS bezug, last(Ersparnis) AS ersp FROM Meter WHERE time>='${current_year}-01-01' AND time<'${current_year}-02-01' GROUP BY time(1d) ) WHERE time>='${current_year}-01-01' tz('Europe/Berlin')
Die Variable $current_year ergibt sich aus:

Code: Alles auswählen

SELECT last(Jahr) FROM Statistik
Dementsprechend habe ich für jeden Monat ein separates Select-Query. Wenn man nun noch für jeweils Februar-Dezember des Vorjahres ($current_year-1) ein entsprechendes Select-Query erstellt und unter "Query options" relative time auf 12M stellt, bekommt man immer die letzten 12 Monate angezeigt. Das sollte doch dem entsprechen, was du haben möchtest?

Re: Monat beim Schreiben in die Datenbank aufnehmen

Verfasst: Mo 3. Okt 2022, 15:33
von Janniman
Hallo.

Ich noch einmal zu meinem Problem und deiner Lösung.
Deine Lösung funktioniert scheinbar bei Monaten, dafür herzlichen Dank. Leider sind meine Datenaufzeichnungen mit Solaranzeige nicht so alt, daher kann ich die Funktion nur unter Vorbehalt unterschreiben, da es nur zwei Werte gibt, mit denen ich das testen konnte.

Nun soll ich aber pro Quartal den Ertrag etc. an das Finanzamt senden und dabei funktioniert das ganze nicht mehr. Eine Einschränkung auf zb. 9M (neun Monate) zeigt keine Einschränkung der Bar-Anzahl. Gewünscht wäre die ständige Anzahl von 5 (fünf) Bars, um das Vorjahresquartal noch im Vergleich zu haben.
Screenshot 2022-10-03 at 15-13-08 Birkenmoor-44a - Grafana.png
Hier im Screenshot habe ich zum Test versucht, die Bar-Anzahl auf drei (durch Versatz vielleicht vier) zu senken. Geht nicht, auch nicht mit dem Fokus auf Tage und Jahre.
Meine Versuche, den Zeitraum innerhalb des Query wieder einzuschränken, funktionieren nicht (AND time > 'now() - 1Y' usw.)
Wie schränkt man das hier ein?

Ach... und warum ist kein Alias unter den Bars, sondern Zeiten? Auch das bekomme ich irgendwie nicht weg. Umbenennen bei der Transformation bringt nichts, da kann ich die Bars nicht mal namentlich (alias) auswählen.

Jan

Re: Monat beim Schreiben in die Datenbank aufnehmen

Verfasst: Mo 3. Okt 2022, 20:32
von mdkeil
Also ich habe mal Testweise 5 Querys angelegt. 4 für jedes Quartal im aktuellen Jahr und einen Query für das IV.Q aus dem Vorjahr.. Relative Time habe ich auf 12M stehen gelassen. Funktioniert wie erwartet.

Bzgl. der Bezeichnung auf der X-Achse.. das geht mit der "Time Series" Visualisierung nicht anders.. Das muss man ggf. via "Bar Chart" oder anderen Bar-Visualisierungen umsetzen. Da kann ich aber nicht helfen.

Re: Monat beim Schreiben in die Datenbank aufnehmen

Verfasst: Di 4. Okt 2022, 08:14
von Gerd
Ich hab es doch schon umgesetzt ….

Schreibt jeden Monat die Zurück gerechneten Werte in eine Datenbank

Eine ähnliche Funktion würde sich auch Quartalsweise anbieten


viewtopic.php?t=2888