JSLからローカルデータフィルタを操作する与えられた値のリストをローカル データ フィルターの制限内に書き込みたいと考えます。 これは (ほぼ) 動作する例 (データ フィルターを削除し、データ フィルター式を動的に構築することに基づいて再追加する) ですが、複雑すぎるように感じます。これが最善の方法でしょうか? (列数が異なる他のテーブルでも動的に機能する必要があります)
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)
)
)
)
)
);ストレッチ ゴールの場合は、押すとローカル データ フィルターから現在の制限をリストまたはマトリックスに読み取るボタンも追加したいと考えています。
データの探索と視覚化Re: JSL からローカル データ フィルターを操作する留意すべき点の 1 つは、連続フィルターの Where() 節は、制限に応じていくつかの異なる形式を取ることができるということです。選択範囲を反転設定と、最小/最大を含める設定。これは where 句の設定にはそれほど重要ではありませんが、現在の制限の読み取りについて言及しているため、次のような式が表示される場合があります。
Select Where( :Age <= 42 | :Age > 55 | Is Missing( :Age ) );
Re: JSL からローカル データ フィルターを操作するわかりました。もっと単純なオプション (f[1] << set limit(1, 2); など) が欠けていないことを確認していただきありがとうございます。 式の操作は次のようになります:)
ボタンについては、おそらく xpath を使用してすべての数値エディットボックスを抽出し、その順序からその意味を推測することになります。 ローカル データ フィルターに直接クエリを実行して制限を通知できないことを確認したかっただけです。
Re: JSL からローカル データ フィルターを操作するここでは、Substitute を使用する方がもう少しすっきりしたオプションになるかもしれません。
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);
制限については、where 句を解析するか、その中にある DFIntMinMaxBox および NumberEditBox にアクセスすることができます (Where 句を解析してみます)。 これには他の方法もあるかもしれません (Show Properties(f) にはいくつかのアイデアがあるかもしれません)。

Re: JSL からローカル データ フィルターを操作するこの例は (グローバル) データ フィルター用ですが、Where() 引数を追加して希望どおりに制限を設定する方法を示しています。 つまり、フィルターを開くときに制約を指定できます。
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"} )
);