Manipola il filtro dei dati locali da JSLDato un elenco di valori, voglio scriverli ai 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 un obiettivo allungato vorrei anche aggiungere un pulsante che alla stampa legge i limiti correnti dal filtro dei dati locali in un elenco o matrice.
SceneggiaturaRe: Manipola il filtro dati locale da JSLQuesto esempio è per il filtro dati (globale), ma illustra come aggiungere un argomento Where() per impostare i limiti nel modo desiderato. Vale a dire che puoi specificare il vincolo quando apri 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"} )
);Re: Manipola il filtro dati locale da JSLL'uso di 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 forse accedere a DFIntMinMaxBox e NumberEditBox al suo interno (cercherei di analizzare la clausola Where). Potrebbero esserci anche altri metodi per questo (Show Properties(f) potrebbe avere alcune idee).

Re: Manipola 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. Manipolazione dell'espressione deve essere quindi 
E sì, per il pulsante probabilmente userò xpath per estrarre tutte le caselle numerate e dall'ordine posso dedurre il loro significato. Volevo solo assicurarmi che tu non potessi interrogare direttamente il filtro dati locale per dirti i limiti.