Manipular el filtro de datos locales de JSLDada una lista de valores, quiero escribirlos hasta los límites de un filtro de datos local. Aquí hay un ejemplo (casi) funcional (eliminar el filtro de datos y volver a agregar en función de la creación dinámica de la expresión del filtro de datos) pero parece complicado, ¿es esta la mejor manera de hacerlo? (También tiene que funcionar dinámicamente para otras tablas con diferente número de columnas)
dt = Open("$SAMPLE_DATA\Fitness 3D.jmp");
sm = dt << Scatterplot Matrix(
Y( :Runtime, :RstPulse, :RunPulse, :MaxPulse ),
X( :Age, :Weight, :Oxy ),
Fit Line( 0 ),
Local Data Filter( Add Filter( columns( :Age, :Weight, :Oxy ) ) )
);
ColExp = expr(columns( :Age, :Weight, :Oxy ));
//Modify this expression based on list values
AndExp = expr(Where(:Age >=0 & :Age <=100));
sm << Remove Local Data Filter;
Eval(
Insert(
Expr( Send( sm ) ),
Insert(
Expr( Local Data Filter() ),
Insert(
insert(
expr(Add filter()),
name expr(ColExp)
),
//name expr(WhereExp)
insert(
expr(Where()),
name expr(AndExp)
)
)
)
)
);Para un objetivo amplio, también me gustaría agregar un botón que, al presionarlo, lea los límites actuales del filtro de datos local en una lista o matriz.
secuencias de comandosRe: Manipular el filtro de datos locales de JSLEste ejemplo es para el filtro de datos (global), pero ilustra cómo puede agregar un argumento Where() para configurar los límites de la manera que desee. Es decir, puede especificar la restricción cuando abre el filtro.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Cities.jmp" );
obj = dt << Data Filter();
obj << Add Filter( columns( :POP ) );
obj << Add Filter(
columns( :Region, :State, :City ),
Where( :Region == "S" ),
Where( :State == {"SC", "NC"} )
);Re: Manipular el filtro de datos locales de JSLUsar sustituto podría ser una opción un poco más limpia aquí.
dt = Open("$SAMPLE_DATA\Fitness 3D.jmp");
sm = dt << Scatterplot Matrix(
Y(:Runtime, :RstPulse, :RunPulse, :MaxPulse),
X(:Age, :Weight, :Oxy),
Fit Line(0),
f = Local Data Filter(Add Filter(columns(:Age, :Weight, :Oxy)))
);
ColExp = Expr(
columns(:Age, :Weight, :Oxy)
);
AndExp = Expr(
Where(:Age >= 0 & :Age <= 50)
);
Eval(Substitute(
sm << Remove Local Data Filter;
Expr(
f = sm << Local Data Filter(
_cols_,
_where_
)
),
Expr(_cols_), Name Expr(ColExp),
Expr(_where_), Name Expr(AndExp)
));
// You can try to parse this for local data filter limits
w = f << Get where clause;
show(w);
Para los límites, podría analizar la cláusula where o tal vez acceder a DFIntMinMaxBox y NumberEditBoxes dentro de ella (intentaría analizar la cláusula Where). También puede haber otros métodos para esto (Mostrar propiedades (f) puede tener algunas ideas).

Re: Manipular el filtro de datos locales de JSLOk, gracias por confirmar que no me falta una opción mucho más simple (como f[1] << set limit(1, 2);) o algo así. La manipulación de expresiones será entonces 
Y sí, para el botón, probablemente usaré xpath para extraer todos los cuadros de edición numéricos y, a partir del orden, puedo inferir su significado. Solo quería asegurarme de que no pudiera consultar directamente el filtro de datos local para informarle los límites.