Utilizzo di For Loop per creare una nuova colonnaCIAO
Provo a creare la nuova colonna usando for loop
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)
))));
Posso creare la nuova colonna ma non riesco a far funzionare la formula. Il file di registro mostra sotto il messaggio di errore.
Column Cnt TRB100BC-08 Formula Interrupted
Subscript Range 1 times At rows: 2 Operation: PN[i], PN[/*###*/i]
Formula evaluation errors have been ignored
Ri: Utilizzo del ciclo For per creare una nuova colonnaGrazieRi: Utilizzo del ciclo For per creare una nuova colonnaIl problema principale che hai è che l'elemento Formula all'interno della funzione New Column() non viene valutato prima dell'elaborazione, pertanto inserirà nella formula la tua specifica PN[i] e poiché la variabile "i" sta cambiando quando il tuo ciclo cambia la formula per ciascuna delle colonne che stai creando cambierà.Quindi quello che devi fare è cambiare la formula in valori statici.Cioè, non vuoi che la formula installata abbia PN[i] ma piuttosto il valore effettivo valutato di qualunque sia PN[i].La funzione Substitution() consente che ciò accada.Penso che lo script qui sotto farà quello che vuoi
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]
)
)
);