ネストされたデータ フィルタの行の選択こんにちは、
私は、データをデータ テーブルに分類し、ユーザーが作成中のインターフェイスを介して特定のオプションを選択するプロジェクトに取り組んでいます。
以下のスクリプトでやりたいことは次のとおりです。
- 左側のラジオ ボックス、選択肢 1 で、年齢を選択します。
- データ テーブルでは、その年齢ではないすべての行が非表示になり、データ テーブルで除外されます。
- 右側のラジオ ボックス (選択肢 2) では、非表示または除外されていないオプションのみを表示するように動的に更新され、選択できる名前のリストが含まれます。
- これらのオプションを両方とも選択すると、行番号が my_row に返される 1 行だけが残ります。
私が助けてほしいこと:
- show(1) および include(1) がフィルター条件に含まれていても、選択肢 1 のオプションが選択されている場合、行は非表示にならず、自動的に除外されません。
- ラジオ ボックス 2 は、選択肢 1 の結果として動的に更新されません。
- これらは両方とも「一緒に機能」しません。選択肢 2 は選択肢 1 の行の状態を上書きし、任意の行から選択できます。 これはおそらく動的に更新されていないためです(?)
参考文献
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Row States;
New Window( "Example",
Data Filter Context Box(
H List Box(
Panel Box( "Choice 1",
dt << Data Filter(
Add Filter(
columns( :age ),
Display( :age, Size( 140, 185 ), "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
) ) ),
Panel Box( "Choice 2",
H List Box(
Data Filter Context Box(
V List Box(
dt << Data Filter(
Add Filter(
columns( :name ),
Display( :name, Size( 160, 150 ), Radio Box Display ),
Mode( Select( 1 ) )
) ) ) ) ) ) ) ) );
my_row = dt << Get selected rows;
show( my_row );
他のスクリプティングウィンドウズRe: ネストされたデータ フィルタの行選択これは私が探しているものの例ですが、アプリケーションであるため、コードにアクセスする方法がわかりません。
複数のデータ テーブルがある場合:
Semiconductor Toolkit (下のリンク) > Utilities (右上) > Attach Table Limits
最初に列を表示するテーブルをクリックすると、クリックしたデータ テーブルに存在する列の右側に 2 番目のリストが生成されます。 新しいデータ テーブルを選択すると、これが動的に更新されます。
以下のスレッドで同様のものを見つけましたが、このコードを必要なものに変換するのは難しいと感じています。
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
元の投稿に戻る:
- 選択肢 1: 「15」をクリックすると、dt の 7 行が選択され、残りは除外されて非表示になります。
- 2 番目のオプションは、summary( namelist = by( :name ) ) を使用することです。これにより、除外または非表示にされていない一意の名前のリストが取得されますが、ラジオ ボックスを使用しない場合、このリストは選択肢 2 にフィードされます。 これを動的にする方法がわかりません。
- 選択肢 2 は、選択肢 1 で選択した年齢に基づいて名前リストを動的に更新します。
- 選択肢 2 で選択が行われると、1 つの行のみが選択されます。
選択肢 1 = 15 & 選択肢 2 = Amy を選択すると、行 29 が選択され、<< Get selected rows を使用してこの行番号を変数に保存できます。
半導体ツールキット アドイン:
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
Re: ネストされたデータ フィルター行の選択完全にカスタマイズされたフィルターを使用することは、非常に簡単な解決策になる可能性があります。 一方、これはうまくいくとしても(今回だけは)うまくいかないかもしれません。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Data Filter(
Location({2793, 233}),
Conditional,
Mode(Show(1), Include(1)),
Add Filter(
columns(:age, :name),
Display(:age, N Items(6)),
Display(:name, N Items(15), Find(Set Text("")))
)
);
(Window("Data Filter for Big Class")["Data Filter",LineUpBox(2)]) << NCol(2);
(Window("Data Filter for Big Class")["Data Filter",LineUpRulerBox(1)]) << Widths({300,300});
以下は、フィルター変更ハンドラーを使用したスクリプトのいくつかの変更です (状態ハンドラーは JMP では非常にバグが多く扱いにくい場合があります。警告されています:))
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << clear row states;
Summarize(myage = By(:age));
//make a dialog window
nw = New Window("Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(Add Filter(columns(:age)), Display(:age, "Radio Box Display"), Mode(Select(1), Show(1), Include(1)))
),
lb2 = Border Box()
)
);
// Creates list of names that are not excluded or hidden
f = function({a},
Try(Summarize(myname = By(:name)));
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try((lb2 << child) << delete box());
//append a new col list box, with all columns of the data table selected in the listbox
lb2 << append(
Panel Box("Select Script", sel1 = Radio Box(myname, Show(my_names = sel1 << Get Selected)))
);
);
fch = obj1 << Make Filter Change Handler(f);Re: ネストされたデータ フィルター行の選択目標は近づいていると感じていますが、現在 2 つの問題に直面しています。
以下のスレッドのソリューションコードをさらに変更しました。
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear row states;
Summarize( myage = By( :age ) );
//make a dialog window
nw = New Window( "Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(
Add Filter( columns( :age ) ),
Display( :age, "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
);
Wait( 0 );
// Creates list of names that are not excluded or hidden
Try( namelist = Summarize( myname = By( :name ) ) );
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try( lb2 << delete );
//append a new col list box, with all columns of the data table selected in the listbox
vlb1 << append( lb2 = Border Box( Left( 10 ), Right( 10 ), bottom( 10 ), top( 10 ), sides( 15 ), // Col title
Panel Box( "Select Script",
sel1 = radio box( eval( namelist ), show( my_names = sel1 << Get Selected) ) )
), all ) );
)
);
vlb1 をすべてコメントアウトすると、Big Class のさまざまな年齢から選択できる小さなボックスが表示されます。 他の行は除外され、非表示になります。
問題点:
- 2 番目の要約である namelist は、異なる年齢の選択で動的に更新されません。 これを行うためにスクリプトを更新するにはどうすればよいでしょうか?
- 2 番目の Try() はソリューション コードからのもので動的であるため、最初のものがなぜそうでないのかわかりません。
- vlb1 のコメントが解除されていると JMP エラーが発生します (以下のエラー図)。 削除されたオブジェクト参照がコードのこの部分のどこにあるのかわかりません。 誰でも見ることができますか?

これら 2 つが解決できれば、単一の行番号を返す何らかの方法が見つかるはずだと思います。
Re: ネストされたデータ フィルター行の選択@jthi 、素晴らしいご協力に改めて感謝いたします。答えはとても簡単でした、またしてもアハハ。
あなたの最初の提案を私のニーズに合わせて修正しました。あなたの言いたいことはわかりました。 JMP ではステート ハンドラーにバグが多く扱いにくいです。
Re: ネストされたデータ フィルター行の選択JMP のさまざまな状態ハンドラーに関するウィッシュ リスト項目を作成しました。 JMP の状態ハンドラー (ホバー ラベル、行状態ハンドラー、フィルター状態ハンドラー、スケジューラーなど) を改善します。