Somme glissante des valeurs de ligne précédentes avec conditionMes données commencent par deux colonnes, numéro de lot et quantité.
J'ai besoin d'aide pour créer un script pour calculer la somme glissante (ligne actuelle + 2 lignes précédentes) des valeurs de ligne précédentes.
La logique est expliquée dans le tableau ci-dessous.

ScriptingRe: Somme glissante des valeurs de ligne précédentes avec conditionUne façon pourrait être d'utiliser une formule comme celle-ci:

If( Row() == 1,
:Qty,
If( Row() == 2,
Lag( :Qty, 1 ) + :Qty,
:Qty + Lag( :Qty, 1 ) + Lag( :Qty, 2 )
)
)
Pour la première ligne, il n'y a rien à additionner, il utilise donc simplement la ligne 1
Pour la deuxième ligne, il n'y a que deux valeurs, l'actuelle et la précédente, donc sa ligne + retard (1)
Toutes les lignes après la seconde, il prend la somme de la ligne actuelle plus les deux lignes précédentes: lag (1) et lag (2)
Re: Somme glissante des valeurs de ligne précédentes avec conditionMerci d'avoir prouvé l'idée d'utiliser la formule.
Mon ensemble de données ne peut pas faire de somme glissante directement à l'aide de la formule car certaines données de lot ne sont pas prises en compte.
Exemple,
Lot n ° 3 et lot n ° 3.2, seule la quantité du lot n ° 3.2 est comptée en somme mobile car il s'agit de la quantité finale du lot.
Quantité supplémentaire ajoutée dans le lot n ° 3. Il devient le lot n ° 3.2.
Il en est de même pour les lots n ° 7, 7,2, 7,3 et lot n ° 10, 10.3.
La quantité de lot # 7.3 et 10.3 est comptée dans la somme glissante parce que c'est la quantité finale du lot.
Besoin de conseils de la communauté.

Re: Somme glissante des valeurs de ligne précédentes avec conditionBon, je comprends maintenant.
Besoin de trouver la valeur maximale pour chaque lot, puis prendre la somme glissante des deux dernières valeurs de lot max.
J'ai l'impression qu'il y a une solution qui se cache, il faudrait peut-être réfléchir un peu plus à celle-là.
Re: Somme glissante des valeurs de ligne précédentes avec conditionJe vais découvrir comment y parvenir.
Juste au cas où quelqu'un aurait une solution pour cela, partagez-la également.
Merci.
Re: Somme glissante des valeurs de ligne précédentes avec conditionEst-ce correct. (la colonne la plus à droite de l'image)?

Re: Somme glissante des valeurs de ligne précédentes avec conditionOui, c'est correcte.
Mais je souhaite conserver la table de données d'origine sans exclure certaines lignes pour obtenir ce résultat.
Cela peut-il être fait?
Re: Somme glissante des valeurs de ligne précédentes avec conditionAjoutez ce script à votre table de données et donnez-lui un tour
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>