フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作するにはどうすればよいですか?データテーブルの例を添付します。以下のスクリプトは、ローカル データ フィルターを介して選択された各パラメーターをグラフ ビルダーの新しい「ページ」にプロットしようとします。現状では、ローカル データ フィルターで新しい「パラメーター」が選択されるたびに、y 軸のタイトルが「中央値」として表示されます。
新しいパラメータが選択されて新しい「ページ」にプロットされるときに、パラメータ名をY軸のタイトルにしたいと考えています。
これにフィルター変更ハンドラーを使用しようとしましたが、スクリプトが完全に機能しません。新しいパラメータが選択されるたびに、以下のインデックスiを更新する必要があると思います。または、別の方法があるかもしれません。どの方向でも役に立ちます。
XPath( "//TextEditBox" ))[i]
これが私のスクリプトです
Names Default To Here (1);
Clear Log ();
gb = Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(changeTitle());自動化とスクリプト作成ウィンドウズRe: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiありがとうございます。最初のチェックでは、最初のスクリプトは (すべてチェックされていない場合でも) 期待どおりに動作します。すべての場合において、予期される y 軸のタイトルが表示されます。 2 番目のスクリプトでは、いかなる場合でも正しい y 軸タイトルが表示されません (y 軸タイトルとして常に中央値が表示されます)。
2 つのスクリプトについてもう少し時間をかけて、質問があればまた戻ってきます。
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?私の経験では、何が返されるかは少し難しい場合があります (特に何も選択されていない場合、またはすべてが選択されている場合)。次に、そのような状況で何をすべきかを理解する必要があります。そうすれば、以前のスクリプトを変更できるはずです。
以下は、この全体に対する私にとってうまくいくいくつかの解決策です。「より単純な」解決策が JMP16 で機能するかどうかはわかりません。 「空」の状況で何ができるかを把握し、どのようなタイプの問題が発生する可能性があるかを理解するまで、これらを検討することはお勧めしません。
もっと見る...Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
, // else, this wasn't solved
visible_parameters = all_params;
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(visible_parameters),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, visible_parameters, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
gb << inval;
page_texts = Report(gb) << XPath("//GraphBuilderGroupBox/text()"); // Not sure if this can be used in JMP16
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
For Each({page_text, idx}, page_texts,
y_tebs[idx] << Set Text(Word(-1, page_text, "="));
);
gb << update window;
wait(0);
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiありがとうございます。すべてのチェックを外してチェックしたと思っていましたが、どうやらそうではありませんでした。私もあなたと同じように思います。
(確認したところ、この問題は以前のスクリプトにも存在しているようです。つまり、すべてのチェックを外しても予期した出力が得られません)

Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?私のスクリプトに何も変更を加えなかったとしても、まだ解決されていない状況が 1 つあります。

単一選択から選択なし/選択をクリアする場合。それをまず解決すべきだ
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jth私も同じだと思います。下記を参照してください。
次の課題は、新しいページごとに y 軸のタイトルを変更する機能を導入することですか?
(これを行う以前の方法を変更する必要があるようです)


Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?JMP サンプル データで動作する場合は、独自のデータを使用した最も単純な例に進みます。
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_parameters = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(visible_parameters));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_parameters(1);
f = filter_ref << Make Filter Change Handler(get_selected_parameters);
これらのカウントは常に一致する必要があります

Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiありがとうございます。最後のスクリプトは実行すると機能し、結果はJMP サンプル データで期待どおりです (これまでのすべてのスクリプトに当てはまります)。データ テーブルを使用した理由は、所有しているデータ フォームが問題の原因である可能性があると考えたからです。
申し訳ありませんが、テーブル上にさまざまなスクリプトがたくさんあるので、少し迷っています。
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?シンプルな JMP サンプル データを使用して、問題を 1 つずつ解決してください。まず問題を定義する必要があります。これを機能させるために解決する必要がある (またはすでに解決している) かなりの数の問題をスキップし、現在の問題に焦点を当ててみます。
- トップレベルでは、ページ名に基づいて Y 軸のタイトルを更新する方法を理解できるようにしたいと考えています。
- 表示されるページに影響を与えるフィルターがあります
- フィルターをすべて、1 つ、多数、なしに設定できます。
- すべてとなしは基本的に同じです (すべてのページが表示されます) が、別々の方法で管理する必要があります。
- こうしたさまざまな状況にどう対処すればよいでしょうか。すべて、なし、1 つ、そして多数?
- フィルター変更ハンドラーで使用される関数内でこれらの状況をどのように処理できるでしょうか?
この問題が解決されるまでは、所有している完全なアプリケーションに移行しても意味がありません (行き詰まった場合は、別の問題があれば、最初にそれを解決できます)。以下はスクリプトの例です。else ステートメントが常に 41 (N Items() を削除した場合は状態の完全なリスト) を返すようにできるはずです。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
gb = dt << Graph Builder(
Size(630, 590),
Show Control Panel(0),
Include Missing Categories(1),
Variables(X(:State)),
Elements(Treemap(X, Legend(4))),
Local Data Filter(
Conditional,
Add Filter(columns(:Region, :POP), Display(:Region, N Items(6)))
)
);
Summarize(dt, all_states = By(:State));
show(N Items(all_states));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_states = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(visible_states));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_states(1);
f = filter_ref << Make Filter Change Handler(get_selected_states);Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthi が私のデータ テーブルexamplesummaryTableNoLimsNew.jmp を使用すると、次は期待どおりに動作するようです (データ テーブルと出力を手動で確認しました)。ここから、データ フィルターがグラフ ビルダー内にあるという実際の問題にどのように進むのでしょうか。連想配列は非常にわかりにくいと思うので、ここで助けを求めます。
Names Default To Here(1);
clear log ();
dt = Current Data Table();
obj = dt << Data Filter(Conditional,
Add Filter(columns(:TestDate, :Has Limits?, :TestStage, :Parameter) ),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_Parameters = By(:Parameter));
show(all_Parameters);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_Parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(all_Parameters), N Items(visible_Parameters));
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?データテーブルの添字を使用することもオプションの 1 つです
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP)),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_states = By(:State));
show(all_states);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(all_states), N Items(visible_states));Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiありがとうございます。どの行がフィルタリングされているかを確認しようとしましたが、スクリプトはデータテーブルexamplesummaryTableNoLimsNew.jmpで部分的に機能しますが、すべてのフィルタリングケースで機能するわけではありません。
データテーブルでフィルターされた行を選択し、それらが正しいかどうかを手動で確認しようとしています。現在、私は行き詰まっています。
明らかにコード フローの理解が不足しているため、これ以上デバッグすることができないため、さらに助けを求めます。
以下の変更されたスクリプト (行 28 はget filtered rowsで確認する場所です)。
Names Default To Here(1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
ldf = gb<<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?データ フィルターに送信したときに何が行われるかを試してみることもできます。
これは JMP17 スクリプトインデックスの例です
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP), where(:Region == {"C", "N"})),
Mode(Select(0), Show(0), Include(1))
);
obj << Get Filtered Rows; // [1, 4, 5, 6, 7, 19, 20, 26, 36, 40, 42, 46]Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiありがとうございます。ただし、私のスクリプトインデックス (JMP 16.2) には、<< Get Filtered Rows の使用方法の例が記載されています。
私の場合の使用方法について助けてもらえますか?

Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?このチェックが問題の原因となっています。

すべてのパラメータが表示されない状況を引き起こす可能性のあるフィルタは他にもあります。 1 つのオプションは、<< Get Filtered Rows を使用して、すべてのパラメータが表示されていると仮定するのではなく、どのパラメータが表示されているかを計算することです。
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiこれまでの例では、すべてが期待どおりに機能し、表示されている内容と一致しています。
ただし、実際のデータにより厳密に一致する別のデータ テーブルを作成することで、実際のデータで直面している問題の一部を再現することができました。データテーブルが添付されており、以下のスクリプトを使用しています
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter ),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());パラメーターが選択されていない場合、次のメッセージが表示されます。

そしてこれは、すべてのパラメータを選択し、再度選択を解除した後のものです。ここでは、上のグラフには正しい y 軸ラベルのみが取得されます。

これらが解決されれば、実際のデータ ケースも期待どおりに動作し始めると思います。どの方向でも非常に役立ちます。
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?exampleSummarTable.jmp と私が提供した最新のスクリプトを使用します。
1 つの値がフィルタリングされた後

その 1 つの値の選択を解除します (何もフィルタリングされません)。

Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthi 「値を 1 つ選択し、フィルターからすべての選択を削除すると機能しますか?」の意味がわかりません。言い換えていただけますか?また、私はJMP 16.2を使用しています。
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?元のデータと複数の応答を削除した後の data2 (JMP17.2 を使用) では問題なく動作しているようですので、何が問題なのかはわかりません。値を 1 つ選択し、フィルターからすべての選択を削除すると機能しますか?
もっと見る...
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestStage, :Parameter),
Where(:TestStage == {"A", "B"})
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiありがとうございます。実際のデータセットの場合、これはエラーなしで実行されますが、最初のプロットにはまだ Y 軸に正しいパラメーター名がありません。 2 番目の TestStage を選択した場合にのみ、正しい y 軸のタイトルがトリガーされます (最初はスクリプトによって 1 つだけが選択されます)。
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?先ほども言いましたが、パラメータがフィルタリングされていることが原因である可能性が高いです。
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
If(Is Missing(param_where),
param_list = uniq_params;
,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list,
y_tebs[idx] << Set Text(param_val);
);
gb << update window;
return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthi実際のデータの場合、コメントアウトすると
update_title(local_filter);
のように
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
//update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
最初のグラフに正しい Y 軸タイトルがないことを除いて、すべてが期待どおりに機能します。 Y 軸のタイトルは、別の TestStage が選択された後にのみ正しくなります。私の配置は
update_title(local_filter);
正しいですか、それとも別の場所に配置する必要がありますか?
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?これは本来のものを返していません
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
理由の 1 つは、ローカル データ フィルターで値が選択されていないことです。欠損値の追加チェックを追加し、param_where が欠落している場合は、何もせずに関数から早期に戻ることができます (または、すべての値がパラメータとしてあり、パラメータ値を他の方法で取得する必要があります)
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiありがとうございます。パラメーターのプロパティから複数の応答を削除すると、サンプル データ (examplesummaryTable2) に対してスクリプトが機能するようになります。しかし、複数応答セットが設定された列がないという実際のデータセットではまだ問題が発生しています(残念ながら実際のデータを共有できません)。他に何があるでしょうか?

スクリプト内でこれをコメントアウトすると、同じエラーを再現できます。
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"}のように
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; //show (y_tebs);
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());実際のデータの場合、ローカル データ フィルターを使用して 1 つ以上のパラメーターを事前に選択する余裕はありません。おそらくこれが実際のデータケースで問題を引き起こしているものです。これを回避する方法はありますか?
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?問題は、パラメーターとして複数の応答列があることが最も考えられます。


Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiわかりました。トリガーに注目しました。パラメーター名にアンダースコアが含まれている場合、スクリプトは機能しません (実際のデータのパラメーター名にはアンダースコアがほとんどありません)。パラメータ名にアンダースコアを付けたデータテーブルの例。以下のスクリプトは、データ テーブルが添付されているWords関数でエラーをスローします。
また、 Size()をコメントする必要がありました。コメントなしでは、最初のチャートが奇妙に見えました。
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
//Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?フィルター変更ハンドラーを作成する前に関数を 1 回トリガーします。
update_title(local_filter);

Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiこれは、最初のグラフ(フィルター変更ハンドラーの子供の前)がまだy軸タイトルとして中央値を持っていることを除いて機能します。これを修正する方法はありますか?

Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?1 つのオプションは、get where 句を解析することです
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
別々の項目に分割し、それらをループして、ループ内でタイトルを設定します。
編集:
これには、y 軸のテキスト編集ボックスへの参照を取得する部分にも少し変更を加える必要があります。以下は機能する可能性のあるオプションの1つです
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return(); // some problem
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
filter_handler = local_filter << Make Filter Change Handler(update_title());
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?@jthiこれは部分的には機能しますが、選択されたすべてのパラメータは、すべてのプロットされたチャートのY軸タイトルとして相互に表示されます。
私が変更され
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
に
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);そして手に入れる

各グラフの Y 軸タイトルとしてプロットされたパラメータ名のみが必要です。
Re: フィルター変更ハンドラーを使用してグラフ ビルダーのページ オプションを操作する方法は?XPath クエリをより正確にすることを試みることができます (XML とプロパティ ツリーを調べます)。このようなものが機能するかもしれません
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")