こんにちは、私はしばらくの間JSLでコードを書こうとしていましたが、特定の変数の値に応じて、グラフビルダーから取得したグラフが変化します。
現在の私の特定の例は非常に単純です。チェックボックスがあり、ユーザーの選択(オン/オフ)に応じて、ローカルフィルターを使用してグラフにグループを追加または削除します。 これは非常に簡単な例です
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value<BR /><BR />// Check box to Remove group A from the graph
usw = New Window("Ignore A?", << Modal,
//Check Box defaulted to checked ignore
checkIgnore = check box({"Ignore A?"},
<< Set(1,1),
cb = checkIgnore << Get())
);
// Answer to Cancel or close buttons
If( usw["button"] == -1, throw("User cancelled") );
show(cb); // I can see how the value of cb changes between 0 and 1
nw = New Window( "Example Report",
// Box plot with dots
dot_box_plot = dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Title( 0 ),
Variables( X(:drug ), Y( :pain ), Color(:drug ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ) ),
/* This is the part that I'd like to make interactive
to keep or remove A-group from the plot depending on
user selection */
if(cb == 1,
Local Data Filter(
Close Outline( 1 ),
Add Filter( columns( :drug ),
Where( :Drug != "A" )
)
)
)
)
);ご覧のとおり、何も変更されていないため、ifステートメントに何か問題があるはずです。プロットはすべてのグループを保持します。 そしてもちろん、IF()部分だけを削除すると、プロットはグループAを無視します。
何か提案をいただければ幸いです。
プラットフォームコードへの変更を処理するための好ましい方法は、プラットフォームの初期処理後にメッセージをプラットフォームに渡すことです。プラットフォームステートメントを変更しようとすると、面倒になりすぎて不安定になります。
以下は、GraphBuilderプラットフォームの実行後にフィルターを追加するように変更されたスクリプトです。次に、ローカルデータフィルターの実際の表示を非表示にします

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value// Check box to Remove group A from the graph
usw = New Window( "Ignore A?",
<<MODAL></MODAL>