在不同数据表的图形生成器窗口之间连接本地数据过滤器假设我有两个来自不同数据表的图形生成器窗口,每个窗口都有一个本地数据过滤器,用于过滤“运行次数”和“时间”。
是否可以连接两个本地数据过滤器以使它们保持同步?
或者也许使用 JSL 从本地数据过滤器#1 中提取当前设置并将其应用到本地数据过滤器#2?
(我猜第 1 步是获取对本地数据过滤器的引用,我什至还没有弄清楚如何做到这一点 - 这是我到目前为止所拥有的:
// get the last Graph Builder
win = Get Window List();
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
localDataFilter = last_gb << XPath("//OutlineBox[text()='Local Data Filter']");)
自动化和脚本编写回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器您能否将表格连接在一起,然后使用某种分组列将它们分成不同的图表? 这可能比搞乱过滤器更改处理程序更容易。
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器事实并非如此——一张表是运行结果的高级摘要,我们从该摘要中识别问题,然后切换到详细运行图并在数据过滤器中选择特定运行。对我来说,合并这两个表如何实现这种类型的行为并不明显。
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器虚拟连接怎么样?
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器类似的帖子:
https://community.jmp.com/t5/Discussions/Virtual-linking-two-tables-via-JSL-scripting/mp/657682/highlight/true#M84705
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器我想需要非本地数据过滤器,以便虚拟链接的调度/接收功能将广播过滤器设置。
对于我来说,这太慢了。
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器如果你想复制整个过滤器,你可以使用复制/粘贴:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :sex ), X( :age, Position( 1 ) ), Y( :weight ), Overlay( :sex ) ),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 3 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :age ),
Where( :age == 15 ),
Display( :age, N Items( 6 ) )
)
);
df1 << copy local data filter();
gb2 << paste local data filter();
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器我喜欢这个想法,但显然你的解决方案中有一些我不明白的地方,因为当我尝试运行它时它崩溃了。
这是我到目前为止所拥有的:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
gb2 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "M" ),
Display( :sex, N Items( 2 ) )
)
);
df2 = gb2 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "F" ),
Display( :sex, N Items( 2 ) )
)
);
broadcastFilter = Function( {},
//get the script
filterScript = df1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval(
Substitute(
Expr(
df2 << Start Over << _filter_
),
Expr( _filter_ ), Name Expr( filterExpression )
)
);
);
// activate the Filter Change Handler
rs = df1 << Make Filter Change Handler( broadcastFilter );这是错误:“broadcastFilter 有 0 个参数 (),但提供了 1 个参数 (18)”。知道它在说什么吗?我认为我没有在最后一行中提供任何论点......
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器哦。对不起。
broadcastFilter = Function( {x}, 回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器最后,我切换回本地数据过滤器,并向第一个数据过滤器添加过滤器更改处理程序。
它运作得很好 - 如果你没有忘记
rs=
过滤器更换处理程序
broadcastFilter=Function({x}, // Make Filter Change Handler need a function with 1 Argument
//get the script
filterScript = DataFilter1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval( Substitute( Expr( Datafilter2 << Start Over << _filter_ ), Expr( _filter_ ),
Name Expr( filterExpression ) ) );
// activate the Filter Change Handler
rs = DataFilter1 << Make Filter Change Handler( broadcastFilter); // will call broadcastFilter() with 1 Argument: # of selected rows
编辑:参数 x 添加并评论。 一个函数
broadcastFilter=Function({},- 没有参数 - 不起作用。
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器哇,它有效!我希望我明白该代码在做什么......
最后一个问题 - 假设我已经打开了一个带有本地数据过滤器的图形生成器窗口,我知道如何获取 gb .jsl 对象变量:
win = Get Window List();
graphs = Filter Each({w}, win, If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0) );
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;...但是如何从 gb 对象变量中获取 df1 对象变量?(感觉就像我尝试了100种不同的东西......)
回复:在不同数据表的图形生成器窗口之间连接本地数据过滤器一种选择是使用与图形生成器类似的想法
df = (gb << top parent)[Outline Box("Local Data Filter")] << Get Scriptable Object;
本地数据过滤器不在图形生成器内部,因此您必须首先进入更高级别(在本例中我使用 << 顶级父级)。 使用带有属性 helpKey 和值数据过滤器的 XPath 可能是更强大的解决方案,它会是这样的
(gb << top parent) << XPath("//OutlineBox[@helpKey='Data Filter']")
编辑:如果您可以在同一窗口中使用多个数据过滤器,则可能必须使起点的定义比仅使用 << top Parent 更具体一些。