Suma progresiva de valores de filas anteriores con condiciónMis datos comienzan con dos columnas, Lote # y Cant.
Necesito ayuda para crear un script para calcular la suma continua (fila actual + 2 filas anteriores) de los valores de fila anteriores.
La lógica se explica en la siguiente tabla.

ScriptingRe: suma acumulativa de valores de filas anteriores con condiciónUna forma podría ser usar una fórmula como esta:

If( Row() == 1,
:Qty,
If( Row() == 2,
Lag( :Qty, 1 ) + :Qty,
:Qty + Lag( :Qty, 1 ) + Lag( :Qty, 2 )
)
)
Para la primera fila no hay nada que sumar, por lo que solo usa la fila 1
Para la segunda fila solo hay dos valores, el actual y el anterior, por lo que su fila + retraso (1)
Todas las filas después de la segunda toma la suma de la fila actual más las dos filas anteriores: retraso (1) y retraso (2)
Re: suma acumulativa de valores de filas anteriores con condiciónGracias por probar la idea de usar la fórmula.
Mi conjunto de datos no puede hacer una suma móvil directamente usando la fórmula porque algunos datos del lote no se tienen en cuenta.
Ejemplo,
Lote n. ° 3 y lote n. ° 3.2, solo la cantidad del lote n. ° 3.2 se cuenta en suma continua porque es la cantidad final del lote.
Cantidad adicional agregada en el lote # 3. Se convierte en Lote # 3.2.
Lo mismo ocurre con los lotes n. ° 7, 7,2, 7,3 y con los lotes n. ° 10, 10.3.
El lote n. ° 7.3 y 10.3 se cuenta en suma continua porque es la cantidad final del lote.
Necesita orientación de la comunidad.

Re: suma acumulativa de valores de filas anteriores con condiciónBien, lo entiendo ahora.
Necesita encontrar el valor máximo para cada lote, luego tomar la suma acumulada de los dos últimos valores de lote máximo y actual.
Siento que hay una solución al acecho, podría necesitar pensar un poco más en esa.
Re: suma acumulativa de valores de filas anteriores con condiciónDescubriré cómo conseguir esto.
En caso de que alguien tenga una solución para esto, compártala también.
Gracias.
Re: suma acumulativa de valores de filas anteriores con condiciónEs esto correcto. (la columna más a la derecha en la imagen)?

Re: suma acumulativa de valores de filas anteriores con condiciónSi, eso es correcto.
Pero quiero mantener la tabla de datos original sin excluir algunas filas para obtener este resultado.
Se puede hacer esto?
Re: suma acumulativa de valores de filas anteriores con condiciónAgregue este script a su tabla de datos y pruébelo
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>