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からローカルデータフィルターを操作するこの例は(グローバル)データフィルター用ですが、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"} )
);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句を解析しようとします)。 これには他の方法もあるかもしれません(ShowProperties(f)にはいくつかのアイデアがあるかもしれません)。

Re:JSLからローカルデータフィルターを操作する非常に単純なオプション(f [1] << set limit(1、2);)などを見逃していないことを確認していただきありがとうございます。 式の操作それはそれから:)
そして、はい、ボタンについては、おそらくxpathを使用してすべての数値編集ボックスを抽出し、それらの意味を推測できる順序から抽出します。 ローカルデータフィルターを直接クエリして制限を通知できないようにしたかっただけです。