異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続する異なるデータ テーブルからの 2 つのグラフ ビルダー ウィンドウがあり、それぞれに「実行番号」と「時間」をフィルター処理するローカル データ フィルターがあるとします。
2 つのローカル データ フィルターを接続して同期を保つことは可能ですか?
それとも、JSL を使用してローカル データ フィルター #1 から現在の設定を取得し、ローカル データ フィルター #2 に適用するのでしょうか?
(ステップ 1 では、ローカル データ フィルターへの参照を取得していると思います。私はまだそれを行う方法さえ理解していません。これまでに得たものは次のとおりです。
// get the last Graph Builder
win = Get Window List();
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
localDataFilter = last_gb << XPath("//OutlineBox[text()='Local Data Filter']");)
自動化とスクリプト作成Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続するテーブルを連結し、何らかのグループ化列を使用してテーブルを別のグラフに分割できますか? フィルター変更ハンドラーをいじるよりも簡単かもしれません。
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続するそうではありません。1 つのテーブルは実行結果の概要を示しており、その概要から問題を特定してから、詳細な実行プロットに切り替えて、データ フィルターで特定の実行を選択します。これら 2 つのテーブルをマージすることでそのような動作がどのように可能になるのかは私にはわかりません。
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続する仮想結合はどうですか?
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続する同様の投稿:
https://community.jmp.com/t5/Discussions/Virtual-linking-two-tables-via-JSL-scripting/mp/657682/highlight/true#M84705
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続する仮想リンクのディスパッチ/受信機能がフィルター設定をブロードキャストするような、非ローカル データ フィルターが必要だと思います。
私の場合、これは遅すぎました。
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続するフィルター全体をコピーしたい場合は、コピー/ペーストを使用できます。
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :sex ), X( :age, Position( 1 ) ), Y( :weight ), Overlay( :sex ) ),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 3 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :age ),
Where( :age == 15 ),
Display( :age, N Items( 6 ) )
)
);
df1 << copy local data filter();
gb2 << paste local data filter();
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続するアイデアは気に入っていますが、実行しようとするとクラッシュするため、ソリューションには明らかに理解できない点があります。
これまでに私が持っているものは次のとおりです。
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
gb2 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "M" ),
Display( :sex, N Items( 2 ) )
)
);
df2 = gb2 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "F" ),
Display( :sex, N Items( 2 ) )
)
);
broadcastFilter = Function( {},
//get the script
filterScript = df1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval(
Substitute(
Expr(
df2 << Start Over << _filter_
),
Expr( _filter_ ), Name Expr( filterExpression )
)
);
);
// activate the Filter Change Handler
rs = df1 << Make Filter Change Handler( broadcastFilter );エラーは次のとおりです。「broadcastFilter には 0 パラメータ () がありますが、1 つの引数 (18) が指定されました。」何のことを言っているのか分かりますか?最後の行には引数を指定していないと思います...
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続するおお。ごめん。
broadcastFilter = Function( {x}, Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続する最後に、ローカル データ フィルターに切り替えて、フィルター変更ハンドラーを最初のデータ フィルターに追加しました。
それは非常にうまく機能します - 忘れなければ
rs=
フィルター変更ハンドラー
broadcastFilter=Function({x}, // Make Filter Change Handler need a function with 1 Argument
//get the script
filterScript = DataFilter1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval( Substitute( Expr( Datafilter2 << Start Over << _filter_ ), Expr( _filter_ ),
Name Expr( filterExpression ) ) );
// activate the Filter Change Handler
rs = DataFilter1 << Make Filter Change Handler( broadcastFilter); // will call broadcastFilter() with 1 Argument: # of selected rows
edit:argument x が追加されコメントされました。 機能
broadcastFilter=Function({},-引数なしでは-機能しません。
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続するうわー、それはうまくいきます!そのコードが何をしているのか理解できればよかったのですが...
最後の質問 -- すでにローカル データ フィルターを使用してグラフ ビルダー ウィンドウを開いていると仮定すると、 gb .jsl オブジェクト変数を取得する方法はわかります。
win = Get Window List();
graphs = Filter Each({w}, win, If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0) );
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;...しかし、gb オブジェクト変数から df1 オブジェクト変数を取得するにはどうすればよいでしょうか?(100種類くらい試した気がする…)
Re: 異なるデータ テーブルからグラフ ビルダー ウィンドウ間でローカル データ フィルターを接続する1 つのオプションは、グラフ ビルダーで使用するのと同様のアイデアを使用することです。
df = (gb << top parent)[Outline Box("Local Data Filter")] << Get Scriptable Object;
ローカル データ フィルターはグラフ ビルダー内にないため、最初に上位レベルに移動する必要があります (この場合は << 最上位の親を使用します)。 XPath を属性 helpKey と値データ フィルターとともに使用すると、もう少し堅牢なソリューションになる可能性があり、次のようになります。
(gb << top parent) << XPath("//OutlineBox[@helpKey='Data Filter']")
編集: 同じウィンドウ内で複数のデータ フィルターを使用できる可能性がある場合は、開始点の定義を、<< 最上位の親を使用するだけでなくもう少し具体的にする必要がある場合があります。