Manipuler le filtre de données local à partir de JSLÉtant donné une liste de valeurs, je souhaite les écrire dans les limites d'un filtre de données local. Voici un exemple (presque) fonctionnel (supprimer le filtre de données et le rajouter en fonction de la construction dynamique de l'expression du filtre de données), mais cela semble trop compliqué, est-ce la meilleure façon de le faire ? (Cela doit également fonctionner de manière dynamique pour d'autres tables avec un nombre de colonnes différent)
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)
)
)
)
)
);Pour un objectif étendu, je voudrais également ajouter un bouton qui, lorsque vous appuyez sur, lit les limites actuelles du filtre de données local dans une liste ou une matrice.
Exploration et visualisation des donnéesRe : Manipuler le filtre de données local à partir de JSLUne chose à garder à l'esprit est que la clause de filtre continu Where() peut prendre plusieurs formes différentes, en fonction des limites, de la Inverser la sélection réglage, et le Inclure Min/Max paramètres.Cela n'aura pas beaucoup d'importance pour définir la clause Where, mais puisque vous mentionnez la lecture des limites actuelles, vous pourriez voir des expressions telles que :
Select Where( :Age <= 42 | :Age > 55 | Is Missing( :Age ) );
Re : Manipuler le filtre de données local à partir de JSLOk merci d'avoir confirmé qu'il ne me manque pas une option beaucoup plus simple (comme f[1] << set limit(1, 2);) ou quelque chose du genre. Manipulation d'expression, ce sera alors 
Et oui pour le bouton, j'utiliserai probablement XPath pour extraire toutes les boîtes d'édition numériques et à partir de l'ordre, je pourrai déduire leur signification. Je voulais juste m'assurer que vous ne pouviez pas interroger directement le filtre de données local pour vous indiquer les limites.
Re : Manipuler le filtre de données local à partir de JSLUtiliser Substitute pourrait être une option un peu plus propre ici.
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);
Pour connaître les limites, vous pouvez analyser la clause Where ou peut-être accéder aux DFIntMinMaxBox et NumberEditBoxes qu'elle contient (j'essaierais d'analyser la clause Where). Il pourrait également y avoir d'autres méthodes pour cela (Show Properties(f) pourrait avoir quelques idées).

Re : Manipuler le filtre de données local à partir de JSLCet exemple concerne le filtre de données (global), mais il illustre comment vous pouvez ajouter un argument Where() pour définir les limites comme vous le souhaitez. C'est à dire que vous pouvez préciser la contrainte lorsque vous ouvrez le filtre.
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"} )
);