如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?附上数据表示例。下面的脚本尝试在图形生成器的新“页面”中绘制通过本地数据过滤器选择的每个参数。目前,每次通过本地数据过滤器选择新的“参数”时,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']")