Manipola il filtro dati locale da JSLDato un elenco di valori, voglio scriverli entro i limiti di un filtro dati locale. Ecco un esempio (quasi) funzionante (rimuovere il filtro dati e aggiungerlo nuovamente in base alla creazione dinamica dell'espressione del filtro dati) ma sembra troppo complicato, è questo il modo migliore per farlo? (Deve funzionare dinamicamente anche per altre tabelle con un numero diverso di colonne)
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)
)
)
)
)
);Per uno stretch goal vorrei aggiungere anche un pulsante che, premendolo, legga i limiti attuali dal filtro dati locale in un elenco o matrice.
Esplorazione e visualizzazione dei datiRi: Manipolare il filtro dati locale da JSLUna cosa da tenere a mente è che la clausola del filtro continuo Where() può assumere diverse forme, a seconda dei limiti, del file Inverti selezione impostazione e il Includi min/max impostazioni.Questo non avrà molta importanza per l'impostazione della clausola where, ma poiché menzioni la lettura dei limiti attuali, potresti vedere espressioni come:
Select Where( :Age <= 42 | :Age > 55 | Is Missing( :Age ) );
Ri: Manipolare il filtro dati locale da JSLOk, grazie per aver confermato che non mi manca un'opzione molto più semplice (come f[1] << set limit(1, 2);) o qualcosa del genere. La manipolazione dell'espressione sarà allora 
E sì, per il pulsante probabilmente userò xpath per estrarre tutti gli editbox numerati e dall'ordine posso dedurne il significato. Volevo solo assicurarmi che non potessi interrogare direttamente il filtro dati locale per dirti i limiti.
Ri: Manipolare il filtro dati locale da JSLUsare Substitute potrebbe essere un'opzione un po' più pulita qui.
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);
Per i limiti potresti analizzare la clausola where o magari accedere a DFIntMinMaxBox e NumberEditBoxes al suo interno (proverei ad analizzare la clausola Where). Potrebbero esserci anche altri metodi per questo (Mostra proprietà (f) potrebbe avere alcune idee).

Ri: Manipolare il filtro dati locale da JSLQuesto esempio riguarda il filtro dati (globale), ma illustra come aggiungere un argomento Where() per impostare i limiti nel modo desiderato. Vale a dire che è possibile specificare il vincolo quando si apre il 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"} )
);