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

Modélisation statistique avancéeAutomatisation et scriptsPersonnalisation de masseRe : Somme glissante des valeurs des lignes précédentes avec conditionMerci d'avoir posté votre question. C'était un problème amusant, mais sinueux à résoudre.
J'ai ajouté quelques annotations au JSL, j'espère que cela a du sens et ne ressemble pas simplement à une formule magique géante.
Honnêtement, au début, je pensais que ce serait presque impossible à régler, mais après une plus grande tasse de café, .. pas si mal.
Re : Somme glissante des valeurs des lignes précédentes avec conditionMerci Byron.
Re : Somme glissante des valeurs des lignes 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>Re : Somme glissante des valeurs des lignes 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 des lignes précédentes avec conditionEst-ce correct. (la colonne la plus à droite sur l'image) ?

Re : Somme glissante des valeurs des lignes précédentes avec conditionJe vais trouver comment l'obtenir.
Juste au cas où quelqu'un aurait une solution pour cela, merci de partager également.
Merci.
Re : Somme glissante des valeurs des lignes précédentes avec conditionBon, je comprends maintenant.
Besoin de trouver la valeur maximale pour chaque lot, puis de prendre la somme glissante de la valeur actuelle et des deux dernières valeurs maximales du lot.
J'ai l'impression qu'il y a une solution qui se cache, il faudrait peut-être y réfléchir un peu plus.
Re : Somme glissante des valeurs des lignes précédentes avec conditionMerci d'avoir prouvé l'idée d'utiliser la formule.
Mon jeu de données n'est pas en mesure de faire une somme glissante directement à l'aide de la formule car certaines données de lot ne sont pas prises en compte.
Exemple,
Lot # 3 et Lot # 3.2, seule la quantité du Lot # 3.2 est comptée dans la somme mobile car il s'agit de la quantité finale du lot.
Quantité supplémentaire ajoutée dans le lot #3. Il est devenu le lot #3.2.
Il en est de même pour les lots n° 7, 7,2, 7,3 et les lots n° 10, 10.3.
Le lot # 7,3 qté et 10,3 est compté dans la somme mobile car il s'agit de la quantité finale du lot.
Besoin de conseils de la part de la communauté.

Re : Somme glissante des valeurs des lignes 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, donc il utilise juste 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 + décalage (1)
Toutes les lignes après la seconde, il faut la somme de la ligne actuelle plus les deux lignes précédentes : lag(1) et lag(2)