(Letzte Bearbeitung zuerst:)
Ich hatte eigentlich mit einer Fortsetzung der Diskussion und mit Rückmeldungen von @chrisdavid gerechnet, aber hier tut sich wohl nichts mehr. Deshalb hänge ich jetzt die Ausarbeitung zum Thema, die ich damals vorbereitet hatte, und der ich gerade noch ein wenig angefügt habe, an. An Rückmeldungen wäre ich durchaus interessiert. Hier der versprochene Anhang. Meine darin enthaltenen Kommentare sind in (schlechtem) Englisch weil ich ggf. mehrfach verwendbare Beispiele nicht auf einen Sprachraum beschränken möchte. Die enthaltenen statistischen Daten sind die aktuell von den Münchner Stadtwerken verwendeten.
(Ich habe vor ein paar Jahren am Beispiel einer deutlich komplizierteren Frage grundsätzlich zu diesem Thema überlegt. Leider ist das eigentlich viel bessere libreofficeforum.org, wo das stattgefunden hat, inzwischen verstorben.)
Soweit ich das sehe gibt es zwei eher mathematische Problemzonen und zwei rechenblättrige:
A) Mathematisch
A1) Es geht zuerst um Intervalllängen. Im Standardfall unterstellen wir bei der Berechnung einer Intervalllänge als b - a
, dass es um das rechts abgeschlossene und links offene Intervall von a bis b geht. Bei der Ablesung von Zählern hält man aber üblicherweise nur das Datum fest. Ich erlaube mir also der Einfacheit halber zu unterstellen, dass die Ablesung jeweils um 00:00 am angegebenen Tag erfolgt.
A2) Für jedes Ableseintervall brauchen wir dann den Schnitt (im mengenrechnerischen Sinn) mit einer Reihe von disjunkten, mit monoton geordneten Grenzen aufeinanderfolgenden vorgegebenen Intervallen, hier: den Monaten eines Jahres. Sei das AleseIntervall (a;b]
und ein bestimmter Monat (A;B]
, für Juni des noch laufenden Jahres also z.B. A=2016-06-01 00:00:00
und B=2016-07-01 00:00:00
, dann ist die erwähnte Schnittmenge wieder ein (möglicherweise leeres) links offenes und rechts abgeschlossenes Intervall, und zwar: ( MIN(B;MAX(A;a)) ; MAX(A;MIN(b;B)) ]
. Das sollte sich per Fallunterscheidung nachprüfen lassen. Die Intervalllänge ergibt sich als Differenz der Schranken. Hinsichtlich der Rundung auf Ganzzahligkeit ist Vorsicht geboten. Im gegebenen Fall wird man auf einer Seite nicht wirklich 00:00 als Zeitpunkt ansetzen.
B) Rechenblattspezifisch
B1) Um “Viele” (12 oder 13) derartige Schnittintervalle in einem Zug zu ermitteln und weiterzuverwerten bietet sich eine sogenannte Matrixformel an. Zur Generierung der Monate braucht man einen Trick oder eine Hilfstabelle weil Rechenblätter keine originären Laufvariablen bieten. Außerdam kann man MIN und MAX nicht in der gewünschten Weise in Matrixformeln verwenden, weil sie als Parameter übergebene Matrizen in Listen umwandeln.
B2) Die errechneten Intervalllängen sind mit statistisch ermittelten Gewichten zu versehen. Dazu muss das Nachsehen in einer Hilfstablle, ein sogenanntes Lookup eingebaut werden.
Weitere Tips:
:: Statt MIN(u;v) kann man natürlich IF(u<=v;u;v) verwenden. Das ist “matrixfest”. U.U.bietet sich auch das Schreiben einer benutzerdefinierten Funktion an.
:: Um eine Laufvariable von 1 bis 12 vorzutäuschen kann man in einer Matrixformel z.B. COLUMN(INDIRECT(“A1:A12”)) verwenden. Ich würde zur Vermeidung fragiler und komplizierter Konstrukte lieber auf eine Hilfstabelle mit den Anfangs- und Endzeitpunkten für die Monate setzen. Die statistische Hilfstabelle braucht man ja ohnehin, und man kann sie entsprechend ergänzen.
:: Die Anwendung der statistischen Gewichte kann man wohl als Skalarprodukt interpretieren und mit SUMPRODUCT durchführen.
An Kommentaren (und Widerspruch, Verbesserungen!) bin ich interessiert.
Weil das ein interessantes Thema mit verallgemeinerbaren Lösungsansätzen ist, kann ich mir vielleicht auch die Zeit nehmen, ein komplett gelöstes Beispiel zu machen. Das stelle ich aber zurück.
Damit die Teilnehmer auch die Möglichkeit bekommen, Dateien anzuhängen, werde ich für das nötige “Karma” sorgen.