如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?附上数据表示例。下面的脚本尝试在图形生成器的新“页面”中绘制通过本地数据过滤器选择的每个参数。目前,每次通过本地数据过滤器选择新的“参数”时,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());自动化和脚本编写视窗回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?您可以尝试使您的 XPath 查询更加准确(探索 XML 和属性树)。像这样的东西可能会起作用
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?@jthi这部分有效,但所有选定的参数在所有绘制的图表中都显示为 Y 轴标题。
我变了
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
到
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);并得到

只需要绘制的参数名称作为每个图表上的 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 轴标题之外,这有效。有任何解决这个问题的方法吗?

回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?在创建过滤器更改处理程序之前触发该函数一次
update_title(local_filter);

回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?@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());回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?问题很可能是您将多重响应列作为参数


回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?@jthi谢谢,从参数属性中删除多个响应确实使脚本适用于示例数据(exampleSummaryTable2)。但我的实际数据集仍然存在问题,其中没有具有多重响应集的列(遗憾的是无法共享实际数据)。还能是什么?

回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?这没有返回它应该返回的结果
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
原因之一可能是您没有在本地数据过滤器中选择任何值。您可以添加对缺失值的额外检查,如果 param_where 缺失,则尽早从函数返回而不执行任何操作(或者更确切地说,您将所有值作为参数,并且必须以其他方式获取参数值)
回复:如何使用过滤器更改处理程序与图形生成器中的页面选项一起使用?@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);
正确还是应该放在其他地方?