Rollierende Summe der vorherigen Zeilenwerte mit BedingungMeine Daten beginnen mit zwei Spalten, Losnummer und Menge.
Ich benötige Hilfe beim Erstellen eines Skripts zur Berechnung der rollierenden Summe (aktuelle Zeile + vorherige 2 Zeilen) der vorherigen Zeilenwerte.
Die Logik wird in der folgenden Tabelle erläutert.

Erweiterte statistische ModellierungAutomatisierung und SkripterstellungMassenanpassungBetreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungVielen Dank für die Veröffentlichung Ihrer Frage. Es war ein lustiges, aber verzwicktes Problem, das zu lösen war.
Ich habe der JSL einige Anmerkungen hinzugefügt, hoffentlich macht das Sinn und sieht nicht nur wie eine riesige Zauberformel aus.
Ehrlich gesagt dachte ich zuerst, dass es fast unmöglich wäre, das Problem zu lösen, aber nach einer größeren Tasse Kaffee ... war es nicht mehr so schlimm.
Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungDanke Byron.
Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungFügen Sie dieses Skript Ihrer Datentabelle hinzu und probieren Sie es aus
dt1=current data table();
//I want to get the max quantity by lot, so I'm adding a new column to change all the lots back to their non-decimal value.
dt1<< New Column("Lot Actual", formula(If( :Qty == Col Maximum( :Qty, Char( Round( Num( :Lot# ), 0 ) ) ),
:Lot#,
.
)));<BR />//this next formula column excludes rows that aren't the max Qty by lot
dt1<< New Column( "Lot Values in One Formula",
Formula(
If( :Lot Actual == "",
Row State( row() ) = Excluded State( 1 );
Excluded( Row State( row() ) );
1;
)
)
);
dt1<<RUN formulas=""></RUN>//once all the formulas for tagging the data are added, we can use Tabulate to get a subset of just the important rows.<BR />//There are lots of other ways to do this, this just happened to be the method of the day
obj1=dt1 << Tabulate(
Add Table(
Column Table( Analysis Columns( :Qty ) ),
Row Table( Grouping Columns( :Lot# ) )
)
);
dt2=obj1 << Make Into Data Table;
column(dt2,2)<<SET name=""></SET><BR />//Finally here is the rolling sum of the last three lots<BR />//there is moving average function we could have used, it would have looked simpler but more abstract
dt2<<NEW column=""></NEW>//<BR />//This part joins the values from the separate table back to the original table<BR />
dt1 << Update(
With( dt2 ),
Match Columns( :Lot# = :Lot# )
);
close(dt2, nosave);
obj1<<CLOSE window=""></CLOSE>//I feel like this step is cheating a little. This step just repeats the missing values down to the next non-missing<BR />//row. Its some code I got from Brady Brady a ways back. Different iterations of come in handy from time to time.
<BR />dtnr=current data table();
dtcollist=dtnr<<GET column="" names=""></GET>Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungJa, das ist richtig.
Um dieses Ergebnis zu erhalten, möchte ich jedoch die ursprüngliche Datentabelle beibehalten, ohne einige Zeilen auszuschließen.
Kann das gemacht werden?
Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungIst das richtig. (die Spalte ganz rechts im Bild)?

Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungIch werde herausfinden, wie ich das bekomme.
Falls jemand eine Lösung dafür hat, teilen Sie diese bitte mit.
Danke.
Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungRichtig, ich verstehe es jetzt.
Sie müssen den Maximalwert für jedes Los ermitteln und dann die rollierende Summe des aktuellen und der letzten beiden Maximalloswerte ermitteln.
Ich habe das Gefühl, dass es eine Lösung gibt, über die ich vielleicht etwas genauer nachdenken muss.
Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungVielen Dank, dass Sie die Idee zur Verwendung der Formel bewiesen haben.
Mein Datensatz ist nicht in der Lage, mithilfe der Formel direkt eine rollierende Summe zu erstellen, da einige Chargendaten nicht berücksichtigt werden.
Beispiel,
Bei Los Nr. 3 und Los Nr. 3.2 wird nur die Menge von Los Nr. 3.2 in der rollierenden Summe gezählt, da es sich um die endgültige Losmenge handelt.
Zusätzliche Menge in Los Nr. 3 hinzugefügt. Es wurde Los Nr. 3.2.
Das Gleiche gilt für Lot# 7, 7,2, 7,3 und Lot# 10, 10.3.
Losnummer 7,3 Menge und 10,3 werden in der rollierenden Summe gezählt, da es sich um die endgültige Losmenge handelt.
Brauche Anleitung von der Community.

Betreff: Rollierende Summe der vorherigen Zeilenwerte mit BedingungEine Möglichkeit könnte darin bestehen, eine Formel wie diese zu verwenden:

If( Row() == 1,
:Qty,
If( Row() == 2,
Lag( :Qty, 1 ) + :Qty,
:Qty + Lag( :Qty, 1 ) + Lag( :Qty, 2 )
)
)
Für die erste Zeile gibt es nichts zu summieren, daher wird nur Zeile 1 verwendet
Für die zweite Zeile gibt es nur zwei Werte, den aktuellen und den vorherigen, daher ist row+lag(1)
Alle Zeilen nach der zweiten nehmen die Summe der aktuellen Zeile plus der beiden vorherigen Zeilen: lag(1) und lag(2)