Manipuler le filtre de données local à partir de JSLÉtant donné une liste de valeurs, je veux les écrire dans les limites d'un filtre de données local. Voici un exemple (presque) fonctionnel (supprimer le filtre de données et rajouter en fonction de la création dynamique de l'expression de filtre de données) mais cela semble compliqué, est-ce la meilleure façon de le faire ? (Il doit également fonctionner dynamiquement pour d'autres tables avec un nombre différent de colonnes)
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 lit les limites actuelles du filtre de données local dans une liste ou une matrice.
ScriptRe : 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 spécifier 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"} )
);Re : Manipuler le filtre de données local à partir de JSLL'utilisation de 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 les limites, vous pouvez analyser la clause where ou peut-être accéder aux DFIntMinMaxBox et NumberEditBoxes à l'intérieur (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 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 comme ça. Manipulation d'expression ce sera alors 
Et oui pour le bouton, j'utiliserai probablement xpath pour extraire toutes les boîtes d'édition numérotées et à partir de l'ordre, je peux en 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.