如何使用篩選器更改處理程序與圖形產生器中的頁面選項一起使用?附上數據表示例。下面的腳本嘗試在圖形產生器的新「頁面」中繪製透過本機資料過濾器選擇的每個參數。目前,每次透過本機資料篩選器選擇新的「參數」時,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());自動化和腳本編寫視窗回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi謝謝。經過初步檢查,您的第一個腳本按預期工作(即使所有腳本均未檢查)。它在所有情況下都會給出預期的 y 軸標題。第二個腳本在任何情況下都不會顯示正確的 y 軸標題(始終將中位數顯示為 y 軸標題)。
我會花更多時間研究這兩個腳本,如果有問題再回來。
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?根據我的經驗,返回的內容可能有點挑剔(特別是沒有選擇/所有內容都被選擇時)。接下來,您必須弄清楚在這些情況下該怎麼做,然後您應該能夠修改我先前的腳本。
以下是一些對我有用的整個問題的解決方案,不確定「更簡單」的解決方案是否在 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());
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi謝謝,我以為我已經通過取消選中所有內容進行了檢查,顯然沒有。我得到的和你一樣。
(剛剛檢查過,這個問題似乎也存在於您之前的腳本中,即取消選中所有內容不會產生預期的輸出)

回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?如果你沒有對我的腳本做任何修改,還有一種情況沒有解決

如果您從單一選擇變為無/清除選擇。應該先解決這個問題
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi我想,我也有同樣的想法。請看下文。
下一個任務是介紹在每個新頁面上更改 y 軸標題的功能嗎?
(看來你以前的做法現在需要改變)


回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?如果它適用於 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);
這些計數應該始終匹配

回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi謝謝。當我運行您的最後一個腳本時,它可以正常工作,結果與JMP 範例資料的預期一致(到目前為止,您的所有腳本都是如此)。我使用數據表的原因是因為我認為我擁有的數據表可能會導致我的問題。
恐怕,我現在對桌面上所有不同的腳本感到有點迷失。
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?繼續使用簡單的 JMP 範例資料並一一解決您的問題。首先你必須定義你的問題。我跳過了很多你必須解決(或已經解決)才能使其正常工作的問題,並嘗試將重點放在當前問題上:
- 在頂層,您希望能夠弄清楚如何根據頁面名稱更新 Y 軸標題
- 您有影響哪些頁面可見的篩選器
- 您可以將篩選器設定為全部、一個、多個和無
- all 和 none 基本上相同(所有頁面都可見),但需要以單獨的方式進行管理
- 您如何處理這些不同的情況?全部、無、一和多?
- 如何在篩選器更改處理程序中使用的函數內處理這些情況?
在解決這個問題之前,沒有必要轉向您擁有的完整應用程式(如果您遇到困難,您可以先解決一些單獨的問題(如果您有這些問題))。下面是範例腳本,您應該能夠讓 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);回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@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));
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?使用資料表下標是一種選擇
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));回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi謝謝,我嘗試查看哪些行被過濾,並且腳本部分適用於資料表exampleSummaryTableNoLimsNew.jmp,但並非在所有過濾情況下都適用。
我試圖選擇數據表中過濾後的行並手動檢查它們是否正確。目前我被困住了。
顯然,我對程式碼流程缺乏了解,這阻礙了我進一步調試,因此我需要更多幫助。
修改後的腳本如下(第 28 行是我檢查getfiltered 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>回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?您可以嘗試將其傳送到資料過濾器時執行的操作。
以下是 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]回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi謝謝,但我的腳本索引(JMP 16.2)確實給出了有關如何使用 << 獲取過濾行的示例。
我可以獲得有關如何在我的案例中使用它的幫助嗎?

回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?此檢查導致了問題。

還有更多過濾器可能會導致並非所有參數都可見的情況。一種選擇是使用 << Get Filtered Rows 併計算哪些參數可見,而不是假設所有參數都是可見的。
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@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 軸標籤。

希望如果這些問題得到解決,我的實際數據案例也將開始如預期運作。任何方向都會非常有用。
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?使用 exampleSummarTable.jmp 和我提供的最新腳本。
過濾一個值後

取消選擇該單一值(因此不會過濾任何內容)

回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi我不明白你的意思“如果你選擇一個值然後從過濾器中刪除所有選擇,它會起作用嗎?”。您能重新表達一下嗎?另外,我使用的是 JMP 16.2。
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?不確定可能出了什麼問題,因為它似乎可以與原始資料和刪除多個回應後的 data2 一起使用(使用 JMP17.2)。如果您選擇一個值然後從過濾器中刪除所有選擇,這是否有效?
看更多...
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());
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi謝謝。在我的實際資料集的情況下,運行沒有錯誤,但初始圖在 y 軸上仍然沒有正確的參數名稱。只有當我選擇第二個 TestStage 時才會觸發正確的 y 軸標題(最初透過腳本只選擇一個)。
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?就像我說的,這很可能是由於參數被過濾
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());
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@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 軸標題。只有在選擇另一個 TestStage 後,Y 軸標題才會正確。我的位置是
update_title(local_filter);
正確還是應該放在其他地方?
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?這沒有返回它應該返回的結果
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
原因之一可能是您沒有在本機資料篩選器中選擇任何值。您可以新增對缺失值的額外檢查,如果 param_where 缺失,則儘早從函數返回而不執行任何操作(或者更確切地說,您將所有值作為參數,並且必須以其他方式獲取參數值)
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@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());在我的實際資料案例中,我無法透過本機資料篩選器預先選擇一個或多個參數。也許這就是實際數據案例中導致問題的原因。有辦法解決這個問題嗎?
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?問題很可能是您將多重回應列作為參數


回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@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());回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?在建立過濾器更改處理程序之前觸發該函數一次
update_title(local_filter);

回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi除了初始圖表(在過濾器更改處理程序孩子之前)仍然具有中位數作為 y 軸標題之外,這有效。有任何解決這個問題的方法嗎?

回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?一個選擇是解析 get where 子句
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
分成單獨的項目並循環這些項目並在循環中設定標題。
編輯:
這也需要對 y 軸文字編輯框的引用部分進行一些修改。以下是一個可能有效的選項
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());
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?@jthi這部分有效,但所有選定的參數在所有繪製的圖表中都顯示為 Y 軸標題。
我變了
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
到
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);並得到

只需要繪製的參數名稱作為每個圖表上的 Y 軸標題。
回覆:如何使用篩選器變更處理程序與圖形產生器中的頁面選項一起使用?您可以嘗試讓您的 XPath 查詢更加準確(探索 XML 和屬性樹)。像這樣的東西可能會起作用
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")