回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?你可以采取的方法是在本地数据过滤器中添加一个更改处理程序(Make Filter Change Handler),当过滤器发生更改时,它会捕获 Where 子句(Get where clause),然后获取该结果并将其应用于图表标题中的标题(设置文本)。
有关如何操作输出的文档可以在显示树的脚本指南部分找到。该文档可在 JMP 文档库中找到,位于“帮助”下拉菜单下。
回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?@hogi谢谢。 这会起作用,但我有多个数据过滤器面板,我只想根据其中一个更改标题(您的脚本似乎捕获了任何本地数据过滤器面板中的所有更改)。
如何捕获特定本地数据过滤器面板的变化?
回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?如果同一份报告中有多个数据过滤器,要获得正确的数据过滤器,您可以从各自的 GaphBuilder 对象开始,向上一步搜索数据过滤器:
ldf = (gb << parent)["Local Data Filter"] << get scriptable object;
完整代码:
查看更多...
不太健壮的替代品:
ldf = (current report() << XPath("(//OutlineBox[text()='Local Data Filter'])"))[2] << get scriptable object;
ldf = current report()[OutlineBox(3)]<< get scriptable object;
回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?@hogi感谢您的建议。 我尝试了你的第二个不太健壮的选项,但我可以看到它不像你说的那样非常健壮,我无法让它正常工作。
在下面的脚本中,如果我只想在图表图块上显示“年龄”选项,该如何编写脚本?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?很抱歉对于这个误会。
如果报表中只有一个数据过滤器,则无需更精确地指定引用。
另一方面:
如果你想限制标题的某些部分Where 子句,您需要另一个 Regex 表达式,如下所示。
它搜索任何:年龄==在圆括号内并返回括号内的整个字符串。
所以,对于像这样的情况
"Select Where( (:age == 14 | :age == 15) & :weight >= 113.5 )";
"Select Where( :age == 14 | :age == 16 | :age == 17 )"
它只会返回 :age ... 部分。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?@hogi . 您下面的脚本不会在 JMP 16.2.0 中为我显示或更改图表标题。
ames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);
是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?我使用以下内容在我的图表顶部显示“我的文本”。
Dispatch( {}, "graph title", TextEditBox, {Set Text( "my text" )} )但是,我希望在本地数据过滤器中选择的项目在我选择它们时显示在图表标题中(可能多个部分以逗号分隔?)。
如何在 JSL 中实现这一点?
大规模定制回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?不错的正则表达式!
括号以两种巧妙的方式使用:
Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
在模式的开头和结尾,反斜杠字符正在转义括号 \(...\) 因此它与 where 子句中的文字括号相匹配。 星号后面的空格匹配零个或多个空格。
内括号看就像他们会匹配 where 子句中的实际括号一样,但不是! 实际的括号已经匹配。 这些内括号是分组括号,它们构成匹配中的第一组。
在分组括号内,文字字符:年龄==是匹配的,那么.*?一次匹配一个字符,直到可以匹配最后的转义文字括号。 这 。匹配任何东西,* 表示 0 或更多,而 ?将 0 或更多从贪婪(跑到最后)变为不情愿(一次一个)。 不情愿的行为确保使用第一个括号。
最后,“\1”用于格式化结果:第一组分组括号匹配的所有内容。
回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?@hogi下面的脚本现在可以在 JMP 16.2 中运行,但存在以下问题。
- 图表一开始没有选择年龄,也没有显示标题,但当所有年龄复选框都未选中时,最后一个仍然显示在图表标题上。
- 在实际问题中,只有当多个复选框被选中时,标题才会开始显示。
如何解决这两个问题(除非这是我的 JMP 版本特定的)?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?你是对的。
如果 Regex 没有找到年龄信息,它会返回 missing。
所以,之后
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
请加
if(ismissing(ldfText),ldfText = "all ages");
解决问题。
回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?如果你只是选择一一次输入,你可以使用页dropzone 自动标记情节:
[如果选择了多个条目,则相应的数据会被拆分到多个页面]

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Variables( X( :height ), Y( :weight ), Page( :age ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Add Filter(
columns( :sex, :age, :weight ),
Where( :age == 14 )
)
)
);回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?我下面的脚本(针对实际情况)似乎仅在选择第二个复选框后才触发。 任何关于为什么的线索都是有用的。
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[4] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?哦,抱歉,我总是从选择年龄开始——然后我错过了在选择一个年龄+其他的情况下标题没有更新。
如果只有一个年龄选择,则不需要额外的括号。
那么,跳过第一个括号怎么样?
注意:请不要在此版本中使用 inverse 

changeTitle = Function( {this},
print(this);
print(ldf << get where clause());
ldfText = Regex(ldf << get where clause(),"(:age == .*?)\)","\1");
if(ismissing(ldfText),ldfText = "any text you want");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);回复:是否可以在本地数据过滤器(包括多项选择)中动态更新基于“图表标题”的项目选择?@hogi . 在 JMP 16.2.0 中对我不起作用。 我已经就此打开了一个新线程,并提供了一个更好的示例来说明此处不起作用的内容(关联).
回复:是否可以动态更新本地数据过滤器中基于“图形标题”的项目选择(包括多个选择)?实际上,这个版本应该是Jmp 16.2.0:
回复:是否可以动态更新本地数据过滤器中基于“图形标题”的项目选择(包括多个选择)?好的,谢谢,它工作正常,但如果有的话,我们如何才能只输入数据库中找到的名字姓氏呢?
在您的示例中,将仅显示名字“KATIE”
回复:是否可以动态更新本地数据过滤器中基于“图形标题”的项目选择(包括多项选择)?像这样它可以正常工作:
changeTitle = Function( {this},
Eval( Parse( "theRows = dt << get rows where" || Substr( ldf << get where clause(), 13 ) ) );
If( Length( theRows ) > 0,
theRow = theRows[1];
ldfText = :remarques[theRow],
ldfText = "All Names"
);
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);