Utiliser la boucle For pour créer une nouvelle colonneSalut
J'essaie de créer la nouvelle colonne en utilisant la boucle for
names default to here (1);
dt = current data table ();
summarize (PN=by (:Name("~DEVICE TYPE" )));
for (i=1, i <= N items(PN), i++,
new column("Cnt "||PN[i],
formula(If( :Name( "~DEVICE TYPE" ) == PN[i],
If( :SERIAL_NO || :TIME_DATE == Lag( :SERIAL_NO || :TIME_DATE, -1 ),0,1)
))));
Je peux créer la nouvelle colonne mais je n'arrive pas à faire fonctionner la formule. Le fichier journal affiche le message d'erreur ci-dessous.
Column Cnt TRB100BC-08 Formula Interrupted
Subscript Range 1 times At rows: 2 Operation: PN[i], PN[/*###*/i]
Formula evaluation errors have been ignored
Re : Utiliser la boucle For pour créer une nouvelle colonnemerciRe : Utiliser la boucle For pour créer une nouvelle colonneLe principal problème que vous rencontrez est que l'élément Formula dans la fonction New Column() n'est pas évalué avant le traitement, par conséquent, il placera dans la formule votre spécification PN[i], et puisque la variable "i" change lorsque votre boucle change la formule pour chacune des colonnes que vous créez changera.Donc, ce que vous devez faire, c'est changer la formule pour qu'elle soit des valeurs statiques.Autrement dit, vous ne voulez pas que la formule installée ait PN[i] mais plutôt la valeur réelle évaluée de tout PN[i].La fonction Substitution() permet que cela se produise.Je pense que le script ci-dessous fera ce que vous voulez
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( PN = by( :Name( "~DEVICE TYPE" ) ) );
PN={"X"}
For( i = 1, i <= N Items( PN ), i++,
Eval(
Substitute(
Expr(
New Column( __name__,
formula(
If( :Name( "~DEVICE TYPE" ) == __PN__,
If(
:SERIAL_NO || :TIME_DATE ==
Lag( :SERIAL_NO || :TIME_DATE, -1 ),
0,
1
)
)
)
)
),
Expr( __name__ ), "Cnt " || PN[i],
Expr( __PN__ ), PN[i]
)
)
);