Fórmula en script JSLTengo una tabla de una sola columna de tipo numérico, quiero agregar una columna y proporcionar una fórmula que verifique cada celda de la primera columna con un nombre de variable pasado como parámetro en el script.
mycol << Nueva columna ("belowCount", Numeric, Formula(If( col_to_check < limit_val, 1, 0 ) );
`mycol` es una tabla de datos de una sola columna, `col_to_check` es la primera columna de referencia y `limit_val` es una variable.
Al abrir la tabla, la fórmula no puede procesar la primera columna.
También intenté usar: Column(1), Column(1) y la función Expr, pero no sirvieron de nada.
Automatización y scriptingAcceso a datosRe: Fórmula en script JSLSintaxis correcta:
Eval(
Eval Expr(
mycol << New Column( "belowCount",
Numeric,
Formula( If( Expr( Name Expr( As Column( col_to_check ) ) ) < Expr( limit_val ), 1, 0 ) )
)
)
)
Re: Fórmula en script JSLEn primer lugar, la fórmula de ejemplo no tenía suficientes paréntesis de cierre, por lo que podría generar un error por ese motivo. En segundo lugar, es posible que a la variable "col_to_check" le faltaran dos puntos (":") delante, a menos que fuera el nombre de la variable de la columna o que estuviera escrita exactamente igual que la anterior.
A continuación, te muestro la solución que utilicé y que creo que cumple con tus expectativas. Usé `Eval` y `Eval Expr` al inicio de la línea de la nueva columna para evaluar la variable y crear la columna.
names default to here(1);
mycol = current data table();
limit_val = 5;
eval(eval expr(mycol << New Column ("belowCount", Numeric, Formula(If( :col_to_check < expr(limit_val), 1, 0 ) ))));
Re: Fórmula en script JSLDeberás evaluar las variables para convertirlas en fórmulas. Esta sigue siendo una buena referencia para insertar una expresión dentro de otra usando `Eval Insert`, `Eval Expr`, `Parse` y `Substitute` (aunque podría actualizarse). Aquí tienes una opción usando `Eval(Substitute())` (para un caso sencillo como este, usaría `Eval(EvalExpr())`, como demostró Hogi).
Names Default To Here(1);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
Y un ejemplo completo
Names Default To Here(1);
limit_val = 5;
mycol = New Table("Untitled",
Add Rows(10),
Compress File When Saved(1),
New Column("Column 1", Numeric, "Continuous", Set Values([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]))
);
new_col = Eval(Substitute(
Expr(mycol << New Column("belowCount", Numeric,
Formula(If(col_to_check < _limit_val_, 1, 0))
)),
Expr(col_to_check), Name Expr(AsColumn(mycol, 1)),
Expr(_limit_val_), limit_val
));
