j'ai reçu le formule dont je veux discuter il y a presque 3 ans @txnelson , ne l'a jamais lâché depuis et y a réfléchi à plusieurs reprises auparavant, s'attaquant lentement un peu plus sérieusement aux scripts. En attendant, la formule m'a sauvé beaucoup de temps.
Dans l’exemple ci-dessous, la même formule est ajoutée 3 fois, avec à chaque fois un peu de variation. Le problème dont je souhaite discuter concerne les différents messages d'erreur générés lors de la copie et de l'exécution du script de table de la table, y compris les colonnes de formule nouvellement ajoutées.
Names Default To Here( 1 );
// first, we need an example table
dt = New Table( "ExampleTable",
Add Rows( 24 ),
New Column( "BatchId",
Character,
"Nominal",
Set Values(
{"A", "A", "A", "A", "A", "A", "B", "B", "B", "C", "C", "C", "D", "D",
"D", "E", "E", "E", "F", "F", "F", "G", "G", "G"}
)
),
New Column( "StorageCondition",
Character,
"Nominal",
Set Values(
{"25°C/60%RH", "25°C/60%RH", "25°C/60%RH", "5°C", "5°C", "5°C",
"25°C/60%RH", "25°C/60%RH", "25°C/60%RH", "25°C/60%RH", "25°C/60%RH",
"25°C/60%RH", "25°C/60%RH", "25°C/60%RH", "25°C/60%RH", "25°C/60%RH",
"25°C/60%RH", "25°C/60%RH", "25°C/60%RH", "25°C/60%RH", "25°C/60%RH",
"25°C/60%RH", "25°C/60%RH", "25°C/60%RH"}
)
),
New Column( "Time",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]
)
),
New Column( "QcParameter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[0.2, 0.3, 0.4, 0.2, 0.21, 0.22, 0.3, 0.9, 1.2, ., 0.2, 0.4, 0.1, ., 0.1,
0, 0, 0, 0.1, 0, 0, 0, 0.1, 0]
)
)
);
// adding formula column via approach nr. 1<BR />// this adds the formula alright, but when copying and executing the resulting table script will leave the formula column empty<BR />// no need to discuss this, because this obviously missing the 'eval(eval expr(expr()))' wrapping (see screenshot below)
dt << New Column( "QcParameter [% rel.]_1",
numeric,
formula(
curBatch = :BatchId;
curCondition = :StorageCondition;
theRows = dt << get rows where(
:BatchId == curBatch & :StorageCondition == curCondition & :Time == 0
);
d0Row = theRows[1];
d0Time = :QcParameter[d0Row];
(100 * :QcParameter / d0Time);
)
);
// adding formula column via approach nr. 2<BR />// this will fill the formula column as desired when copying and running the table script with the added formula columns<BR />// but it will also throw an error message when new rows are added to the table then (see screenshot below)
Eval(
Eval Expr(
dt << New Column( "QcParameter [% rel.]_2",
numeric,
formula(
curBatch = :BatchId;
curCondition = :StorageCondition;
theRows = Expr( dt ) << get rows where(
:BatchId == curBatch & :StorageCondition == curCondition & :Time == 0
);
d0Row = theRows[1]; // removed from approach nr. 3
d0Time = :QcParameter[d0Row];
(100 * :QcParameter / d0Time);
)
)
)
);
// adding formula column via approach nr. 3
// this will fill the formula column as desired when copying and running the table script with the added formula columns<BR />// and it will NOT throw an error message when new rows are added to the table then (see screenshot below)
Eval(
Eval Expr(
dt << New Column( "QcParameter [% rel.]_3",
numeric,
formula(
curBatch = :BatchId;
curCondition = :StorageCondition;
theRows = Expr( dt ) << get rows where(
:BatchId == curBatch & :StorageCondition == curCondition & :Time == 0
);
d0Time = :QcParameter[theRows];
(100 * :QcParameter) / d0Time;
)
)
)
);
Capture d'écran du message d'erreur pour la colonne de formule "QcParameter [%r rel.]_1]" lors de la réexécution du script de table avec des colonnes de formule supplémentaires :

Capture d'écran du message d'erreur pour la colonne de formule "QcParameter [%r rel.]_2]" lors de la réexécution du script de table avec des colonnes de formule supplémentaires :

Capture d'écran du message d'erreur pour la colonne de formule "QcParameter [%r rel.]_3]" lors de la réexécution du script de table avec des colonnes de formule supplémentaires :

La raison pour laquelle je pose cette longue question est que je suppose il doit y avoir une raison pour laquelle la variable "d0Row" est utilisée dans l'approche n°. 2, non ?Pour l'approche nr. 3 J'ai simplement supprimé cette variable (voir capture d'écran ci-dessous) et la formule se comporte "beaucoup plus bien" en conséquence, c'est-à-dire qu'il n'y a pas de message d'erreur lorsque de nouvelles lignes sont ajoutées ad hoc par pointer-cliquer sur la table de données.

Ma question est donc la suivante : si je fais quelque chose de mal en supprimant la variable "d0Row". Dans la vraie vie, je travaille avec des tableaux de données plus volumineux et je ne pourrai pas vérifier l'exactitude de chaque ligne individuellement.