Manipulieren Sie den lokalen Datenfilter von JSL ausAngesichts einer Liste von Werten möchte ich diese bis zu den Grenzen eines lokalen Datenfilters schreiben. Hier ist ein (fast) funktionierendes Beispiel (Datenfilter entfernen und basierend auf der dynamischen Erstellung des Datenfilterausdrucks erneut hinzufügen), aber es fühlt sich zu kompliziert an. Ist dies der beste Weg, dies zu tun? (Es muss auch für andere Tabellen mit unterschiedlicher Spaltenanzahl dynamisch funktionieren)
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)
)
)
)
)
);Für ein Stretch-Ziel möchte ich auch eine Schaltfläche anhängen, die beim Drücken die aktuellen Grenzwerte aus dem lokalen Datenfilter in eine Liste oder Matrix einliest.
Datenexploration und -visualisierungBetreff: Lokalen Datenfilter von JSL aus manipulierenBeachten Sie, dass die Where()-Klausel des kontinuierlichen Filters je nach den Grenzwerten verschiedene Formen annehmen kann Auswahl umkehren Einstellung und die Min./Max. einbeziehen Einstellungen.Für das Festlegen der where-Klausel ist das nicht so wichtig, aber da Sie erwähnen, dass Sie die aktuellen Grenzwerte gelesen haben, sehen Sie möglicherweise Ausdrücke wie:
Select Where( :Age <= 42 | :Age > 55 | Is Missing( :Age ) );
Betreff: Lokalen Datenfilter von JSL aus manipulierenOk, danke für die Bestätigung, dass mir keine viel einfachere Option fehlt (wie f[1] << set limit(1, 2);) oder so. Ausdrucksmanipulation soll es dann sein 
Und ja, für die Schaltfläche werde ich wahrscheinlich XPath verwenden, um alle Nummernbearbeitungsfelder zu extrahieren, und aus der Reihenfolge kann ich ihre Bedeutung ableiten. Ich wollte nur sicherstellen, dass Sie den lokalen Datenfilter nicht direkt abfragen können, um die Grenzwerte zu ermitteln.
Betreff: Lokalen Datenfilter von JSL aus manipulierenDie Verwendung von Substitute könnte hier eine etwas sauberere Option sein.
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);
Für Grenzwerte könnten Sie die Where-Klausel analysieren oder vielleicht auf die darin enthaltenen DFIntMinMaxBox- und NumberEditBoxes zugreifen (ich würde versuchen, die Where-Klausel zu analysieren). Möglicherweise gibt es hierfür auch andere Methoden (Show Properties(f) hat möglicherweise einige Ideen).

Betreff: Lokalen Datenfilter von JSL aus manipulierenDieses Beispiel gilt für den (globalen) Datenfilter, zeigt aber, wie Sie ein Where()-Argument hinzufügen können, um Grenzwerte nach Ihren Wünschen einzurichten. Das heißt, Sie können die Einschränkung festlegen, wenn Sie den Filter öffnen.
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"} )
);