Usando For Loop para crear una nueva columnaHola
Intento crear la nueva columna 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)
))));
Puedo crear la nueva columna pero no puedo hacer que la fórmula funcione. El archivo de registro muestra el siguiente mensaje de error.
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: Usando For Loop para crear una nueva columnagraciasRe: Usando For Loop para crear una nueva columnaEl principal problema que tiene es que el elemento Fórmula dentro de la función Nueva columna () no se evalúa antes del procesamiento, por lo tanto, colocará en la fórmula su especificación PN [i], y dado que la variable "i" está cambiando cuando su bucle cambia la fórmula para cada una de las columnas que está creando cambiará.Entonces, lo que tiene que hacer es cambiar la fórmula para que sean valores estáticos.Es decir, no desea que la fórmula instalada tenga PN[i], sino el valor real evaluado de lo que sea PN[i].La función Sustitución() permite que esto suceda.Creo que el siguiente script hará lo que quieras.
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]
)
)
);