Somma mobile dei valori della riga precedente con condizioneI miei dati iniziano con due colonne, Lotto # e Qtà.
Ho bisogno di aiuto per creare uno script per calcolare la somma mobile (riga corrente + 2 righe precedenti) dei valori delle righe precedenti.
La logica è spiegata come nella tabella seguente.

ScriptingRi: Somma a rotazione dei valori della riga precedente con condizioneUn modo potrebbe essere usare una formula come questa:

If( Row() == 1,
:Qty,
If( Row() == 2,
Lag( :Qty, 1 ) + :Qty,
:Qty + Lag( :Qty, 1 ) + Lag( :Qty, 2 )
)
)
Per la prima riga non c'è nulla da sommare, quindi utilizza solo la riga 1
Per la seconda riga ci sono solo due valori, l'attuale e il precedente, quindi la sua riga + ritardo (1)
Tutte le righe dopo il secondo prendono la somma della riga corrente più le due righe precedenti: lag (1) e lag (2)
Ri: Somma a rotazione dei valori della riga precedente con condizioneGrazie per aver dimostrato l'idea di usare la formula.
Il mio set di dati non è in grado di eseguire la somma mobile direttamente utilizzando la formula perché alcuni dati di lotto non vengono presi in considerazione.
Esempio,
Lotto # 3 e Lotto # 3.2, solo la quantità del lotto # 3.2 viene conteggiata in somma mobile perché è la quantità finale del lotto.
Qtà aggiuntiva aggiunta nel lotto n. 3. Diventa il lotto n. 3.2.
È lo stesso per i lotti 7, 7,2, 7,3 e 10, 10.3.
Il lotto n. 7.3 e la quantità 10.3 vengono conteggiati in somma mobile perché è la quantità finale del lotto.
Hai bisogno di una guida dalla comunità.

Ri: Somma a rotazione dei valori della riga precedente con condizioneBene, ora ho capito.
È necessario trovare il valore massimo per ogni lotto, quindi prendere la somma mobile dei valori correnti e degli ultimi due lotti massimi.
Sento che ci sia una soluzione in agguato, potrebbe essere necessario pensarci un po 'di più su quella.
Ri: Somma a rotazione dei valori della riga precedente con condizioneCapirò come ottenerlo.
Nel caso qualcuno abbia una soluzione per questo, per favore condividi anche tu.
Grazie.
Ri: Somma a rotazione dei valori della riga precedente con condizioneÈ giusto. (la colonna più a destra nella foto)?

Ri: Somma a rotazione dei valori della riga precedente con condizioneSi è giusto.
Ma voglio mantenere la tabella dei dati originale senza escludere alcune righe per ottenere questo risultato.
Può essere fatto?
Ri: Somma a rotazione dei valori della riga precedente con condizioneAggiungi questo script alla tua tabella dati e dagli un giro
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>