Formel für die nachgestellte kumulative SummeIch brauche wahrscheinlich eine sehr einfache Formel. Ich habe einen Temperaturdatensatz und muss eine nachlaufende kumulative Summe über die letzten 120 Tage berechnen (bekannt als „Grad-Heizungswochen“, da ich diese Summe durch Division durch 7 in Wochen umrechne). Ich weiß, wie man einen nachlaufenden Durchschnitt erhält, und ich weiß, wie man eine kumulative Summe erhält, aber ist es möglich, eine nachlaufende kumulative 120-Tage-Summe zu erhalten? In diesem Fall wird, wenn die Temperatur 31,3 °C überschreitet, ein „Score“ von 0,25 vergeben (Formel siehe Spalte „DH-6 Std.“). Grundsätzlich möchte ich die kumulative Summe dieser 0,25-Werte über ein 120-Tage-Fenster, aber ich weiß nur, wie man nach Datum/Monat/Jahr usw. partitioniert (siehe beispielsweise das Skript „#DHWs“), nicht nach einem tatsächlichen Fenster von Zeit. Ich bin zuversichtlich, dass dies machbar sein muss!
Erweiterte statistische ModellierungAutomatisierung und SkripterstellungVerbraucher- und MarktforschungPrädiktive Modellierung und maschinelles LernenQualitäts- und VerfahrenstechnikBetreff: Formel für die nachgestellte kumulative SummeNachfolgend finden Sie eine neue Formel, die Sie zum Debuggen verwenden können.Es erstellt die Datentabelle für jede Zeilennummer, die Sie am Ende in die If()-Anweisung eingeben.Wenn Sie keine Datentabelle erstellen möchten, ändern Sie einfach die Zeilennummer, die Sie suchen, in -1.Es wird niemals eine -1-Zeile geben, daher wird keine Tabelle erstellt.Sehen Sie auf jeden Fall nach, ob Sie sehen können, was los ist und wo ein Fehler auftritt.
Stellen Sie sicher, dass die Tabelle richtig sortiert ist und alle Zeilen, die nicht verarbeitet werden sollen, aus der Tabelle gelöscht werden.Das Skript berücksichtigt ausgeschlossene Zeilen nicht.
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
rowMatrix = [];
);
If( Is Missing( :Name( "Date Time (UTC)" ) ) == 0,
If(
Is Missing( :Name( " Sea Surface Temperature (deg C)" ) ) == 1, holdMatrix = holdMatrix || 0,
:Name( " Sea Surface Temperature (deg C)" ) > 31.3, holdMatrix = holdMatrix || :time difference 2,
:Name( " Sea Surface Temperature (deg C)" ) <= 31.3, holdMatrix = holdMatrix || 0
);
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
rowMatrix = rowMatrix || Row();
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
While(
dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ) & N Cols( holdMatrix ) > 0 &
N Cols( dateMatrix ) > 0,
dateMatrix[1] = [];
holdMatrix[1] = [];
rowMatrix[1] = [];
);
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
x = Sum( holdMatrix ),
x = .
);
,
x = .
);
,
x = .
);
If( Row() == 22159,
New Table( "row" || Char( Row() ),
New Column( "RowNum", set values( rowMatrix ) ),
New Column( "Values", set values( holdMatrix ) ),
New Column( "dates", set values( dateMatrix ), Format( "m/d/y" ) )
)
);
(x / 24) / 7;
Betreff: Formel für die nachgestellte kumulative SummeWenn Sie der Formel Folgendes hinzufügen
If( Row() == ????,
new table("row" || char(row()),new column("Values", set values(holdMatrix)),<BR /> new column("dates", set values(dateMatrix), format("m/d/y")));
);
(x / 24) / 7;
und ersetzen Sie einfach das ???? Mit der Zeilennummer, in der Ihrer Meinung nach die Daten komisch aussehen, sehen Sie dann eine Datentabelle mit allen Werten, die dem Wert hinzugefügt wurden, und den Daten, zu denen die Werte erfasst wurden.Das könnte Ihnen einen Hinweis darauf geben, was los ist.
Betreff: Formel für die nachgestellte kumulative SummeVielen Dank für Ihre Ausdauer! Das schien tatsächlich ein Problem zu sein, und jetzt ergeben die Daten mehr Sinn. Von Oktober 2018 bis Juni 2019 gibt es immer noch ein Problem: Obwohl die Temperatur nie über 31,3 °C steigt, sinkt der Wert nie auf 0, selbst im Juni 2019 (weit über 120 Tage). Können Sie sagen, was dort vor sich gehen könnte?
Betreff: Formel für die nachgestellte kumulative SummeIch habe ein Problem mit der vorherigen Formel entdeckt.Fehlende Werte verursachten ein Problem.Außerdem müssen die Daten in der Reihenfolge des übereinstimmenden Datums vorliegen.Sortieren Sie daher bitte die Tabelle, bevor Sie die Formel anwenden
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( Is Missing( :Name( "Date Time (UTC)" ) ) == 0,
If(
Is Missing( :Name( " Sea Surface Temperature (deg C)" ) ) == 1, holdMatrix = holdMatrix || 0,
:Name( " Sea Surface Temperature (deg C)" ) > 31.3, holdMatrix = holdMatrix || :time difference 2,
:Name( " Sea Surface Temperature (deg C)" ) <= 31.3, holdMatrix = holdMatrix || 0
);
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ) & N Cols( holdMatrix ) > 0 & N Cols( dateMatrix ) > 0,
dateMatrix[1] = [];
holdMatrix[1] = [];
);
If( N Cols( dateMatrix ) & N Cols( holdMatrix ) != 0,
x = Sum( holdMatrix ),
x = .
);
,
x = .
);
,
x = .
);
(x / 24) / 7;
Betreff: Formel für die nachgestellte kumulative SummeEs passiert immer noch etwas Seltsames. Wenn Sie sich diese Datentabelle ansehen, finden Sie Ihre Formel (wenn auch leicht modifiziert) in der Spalte „#DHWs (nach 120 Tagen)“. Es gibt einige Abschnitte von 4 bis 6 Monaten, in denen die Temperaturen nicht über 31,3 °C liegen, der Wert nimmt jedoch nie ab (z. B. Oktober 2014 bis Mai 2015). Wenn 120 Tage lang keine Temperaturen über 31,3 °C herrschen, sollten die „#DHWs“ auf 0 sinken. Ich habe das Gefühl, dass Ihre Formel dies tun sollte. Ich frage mich, ob es sich um ein Problem handelt, das durch den Wechsel von einem Jahr zum anderen entsteht? Vielleicht könnte ich „Tag“ einfach von 1 auf 20.000 umkodieren?
Betreff: Formel für die nachgestellte kumulative SummeWenn Sie nur die Summe wollen, teilen Sie die Summe nicht durch irgendetwas
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) ;
,
x = .
);
x;
Betreff: Formel für die nachgestellte kumulative SummeJim, danke, dass du dir meine Frage noch einmal angeschaut hast, auch wenn die Werte, die sich aus deiner neuen Formel ergeben, anscheinend zu niedrig sind (obwohl die Formel scheinbar Sinn ergibt). Aber vielleicht hätte ich meinen Bedarf anders angeben sollen. In diesem Fall gäbe es möglicherweise eine einfachere (oder zumindest unkompliziertere) Lösung: Ich möchte die Gesamtzahl der STUNDEN in einem Zeitraum von 120 Tagen wissen, in denen die Temperatur ÜBER war 31,3 °C. Dies entspricht normalerweise 3-Stunden-Blöcken, da die Temperatur (in den meisten Fällen) nur alle drei Stunden gemessen wird, es sich also im Grunde um eine Reihe von Summen von 3 handelt (siehe Spalte „DHHs“ in der beigefügten Tabelle). Daher könnten die Werte in den wärmsten Monaten im Hunderterbereich liegen. Im Grunde benötige ich also eine abschließende 120-Tage-Summe der DHH-Spalte, aber angesichts der unterschiedlichen Anzahl von Messungen pro Tag ist das schwierig!
Betreff: Formel für die nachgestellte kumulative SummeIch bin mir nicht ganz sicher, welchen Divisor Sie verwenden möchten, aber ich habe die Anzahl der Stunden über den Bereich der Datenmatrix hinweg verwendet.Hier ist die Formel, die ich mir ausgedacht habe
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) / ((dateMatrix[N Cols( dateMatrix )] - dateMatrix[1]) / In Hours( 1 ));
,
x = .
);
x;
Betreff: Formel für die nachgestellte kumulative SummeIch habe eine Frage, die sich aus einer ärgerlichen Eigenart im Datensatz ergibt: Ich muss die kumulative Summe in Stunden (nicht Wochen, wie ich bereits erwähnt habe) über den letzten Zeitraum von 120 Tagen auswerten. Allerdings sind die Zeitintervalle inkonsistent (siehe beigefügte Tabelle). In den MEISTEN Fällen sind es 8 Messungen pro Tag, manchmal sind es aber auch weniger. Grundsätzlich möchte ich jedes Mal, wenn die Temperatur >31,3 beträgt, den Zeitunterschied zur Spalte hinzufügen. Mit der Funktion „dif“ geht das ganz einfach. Ich habe jedoch Schwierigkeiten, die „120 Tage“ zur Matrixformel hinzuzufügen. In der beigefügten Tabelle möchte ich also die kumulative Summe der „DHHs“ über den letzten 120-Tage-Zeitraum ermitteln. Anstatt die Anzahl der „Zeilen“ in der Formel zu haben, benötige ich sie stattdessen, um das Datum zu verfolgen. Ist das möglich?
Betreff: Formel für die nachgestellte kumulative SummeGroßartig! Das hat funktioniert. Ich habe es nur geändert, um der Tatsache Rechnung zu tragen, dass es acht Messzeiten pro Tag gab (d. h. jede Zeile ist kein eindeutiger Tag, also habe ich in der Auswertung 121 x 8 = 968 multipliziert). Die Daten sind sinnvoll, da der Wert bei dem von mir zuvor berechneten Jahresmaximum seinen Maximalwert erreicht, bevor er abfällt. Vielen Dank. Ich wünschte, es gäbe eine nachgestellte kumulative Summe im Formeleditor, die ähnliche Eingaben hat wie der gleitende Spaltendurchschnitt (den ich ständig verwende): Gewicht und N davor. Vielleicht füge ich es der Wunschliste hinzu.
Betreff: Formel für die nachgestellte kumulative SummeWenn ich richtig interpretiere, was Sie wollen, wird die folgende Formel meiner Meinung nach eine fortlaufende kumulative Summe von 120 berechnen
If( Row() == 1,
holdMatrix = []
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || Matrix( 0.25 ),
holdMatrix = holdMatrix || Matrix( . )
);
If( N Cols( holdMatrix ) == 121,
holdMatrix[1] = []
);
Sum( holdMatrix ) / 7;