Ich habe das erhalten Formel, die ich besprechen möchte vor fast 3 Jahren von @txnelson Ich habe es seitdem nicht mehr losgelassen und habe schon oft darüber nachgedacht, um mich langsam etwas ernsthafter mit dem Schreiben von Skripten auseinanderzusetzen. In der Zwischenzeit hat mich die Formel gerettet eine Menge von Zeit.
Im folgenden Beispiel wird dieselbe Formel dreimal hinzugefügt, jedes Mal mit ein wenig Variation. Das Problem, das ich diskutieren möchte, sind die verschiedenen Fehlermeldungen, die beim Kopieren und Ausführen des Tabellenskripts der Tabelle einschließlich der neu hinzugefügten Formelspalten ausgegeben werden.
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;
)
)
)
);
Screenshot der Fehlermeldung für die Formelspalte „QcParameter [%r rel.]_1]“ beim erneuten Ausführen des Tabellenskripts mit zusätzlichen Formelspalten:

Screenshot der Fehlermeldung für die Formelspalte „QcParameter [%r rel.]_2]“ beim erneuten Ausführen des Tabellenskripts mit zusätzlichen Formelspalten:

Screenshot der Fehlermeldung für die Formelspalte „QcParameter [%r rel.]_3]“ beim erneuten Ausführen des Tabellenskripts mit zusätzlichen Formelspalten:

Der Grund, warum ich diese lange Frage stelle, ist, dass ich davon ausgehe Es muss einen Grund geben, warum die Variable „d0Row“ in Ansatz Nr. verwendet wird. 2, nein?Für Anfahrtsnr. 3 Ich habe diese Variable einfach gelöscht (siehe Screenshot unten) und die Formel verhält sich dadurch „viel angenehmer“, d. h. es gibt keine Fehlermeldung, wenn neue Zeilen ad hoc per Point & Click zur Datentabelle hinzugefügt werden.

Meine Frage ist daher, ob ich etwas falsch mache, indem ich die Variable „d0Row“ lösche. Im wirklichen Leben arbeite ich mit größeren Datentabellen und kann nicht jede Zeile einzeln auf ihre Richtigkeit überprüfen.