Verwenden der For-Schleife zum Erstellen einer neuen SpalteHallo
Ich versuche, die neue Spalte mithilfe einer for-Schleife zu erstellen
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)
))));
Ich kann die neue Spalte erstellen, aber die Formel funktioniert nicht. Die Protokolldatei zeigt die folgende Fehlermeldung.
Column Cnt TRB100BC-08 Formula Interrupted
Subscript Range 1 times At rows: 2 Operation: PN[i], PN[/*###*/i]
Formula evaluation errors have been ignored
Betreff: For-Schleife zum Erstellen einer neuen Spalte verwendenDankeBetreff: For-Schleife zum Erstellen einer neuen Spalte verwendenDas Hauptproblem, das Sie haben, besteht darin, dass das Formelelement in der Funktion „Neue Spalte()“ vor der Verarbeitung nicht ausgewertet wird. Daher wird Ihre Spezifikation PN[i] in die Formel eingefügt, und da sich die Variable „i“ ändert, wenn Ihre Schleife ausgeführt wird Ändert die Formel für jede der von Ihnen erstellten Spalten.Was Sie also tun müssen, ist, die Formel so zu ändern, dass sie statische Werte enthält.Das heißt, Sie möchten nicht, dass die installierte Formel PN[i] hat, sondern den tatsächlich ausgewerteten Wert von PN[i].Die Funktion Substitution() ermöglicht dies.Ich denke, das folgende Skript wird das tun, was Sie wollen
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]
)
)
);