如何在新脚本开始时关闭现有表数据过滤器我有一个脚本可以将过滤器添加到已经打开的数据表中。 有时,在调用脚本之前,用户已经(手动)在该表上打开了数据过滤器。
这样一个现有的数据过滤器似乎会干扰我的新脚本过滤器生效——即使我在脚本开头执行了 dt << Clear Row States。
所以我想在我的脚本开头有一个语句来关闭任何/所有现有的表过滤器。 但我无法弄清楚如何引用其他人已经在我自己的脚本之外创建的任意开放数据过滤器。 建议?
回复:如何在新脚本开始时关闭现有表数据过滤器我在脚本索引中发现可以通过以下方式引用数据表
dt = data table(i);
dt = data table(name);
并通过获取名称
dt << get name();
是否还有获取“i”的功能。
我的意思是直接,而不是通过
Loc(Get Data Table List(),data table(2))
哦,我刚刚注意到数据过滤器有自己的索引——独立于各自的数据表……
所以数据过滤器[i]不能用于访问特定的数据过滤器(通过数据表-> i --> 数据过滤器)?
回复:如何在新脚本开始时关闭现有表数据过滤器Data Filter[i]
凉爽的!
这在哪里记录?
回复:如何在新脚本开始时关闭现有表数据过滤器鬼混,我找到了一个简单的解决方案:
For( i = N Items( Get Window List() ), i >= 1, i--,
Try(
Data Filter[i] << Close;<BR /> Data Table[i] << Clear Row States // optional, if you want to<BR /> )<BR />);我不知道 Data Filter[i] 语法。 使它变得简单。
回复:如何在新脚本开始时关闭现有表数据过滤器非常感谢,zz。
xpath 功能很棒! 碰巧的是,我来自 XML 背景并且过去使用过 xpath。 但我完全不知道您可以在 JMP 中以这种方式使用它。直到现在,我发现导航显示树具有挑战性。 所以这是一个真正的发现。 非常有帮助!
回复:如何在新脚本开始时关闭现有表数据过滤器@john_madden ,
如果您只想在某个时候按下重置选择按钮,这里是脚本。
这个脚本
- 查找表数据过滤器。
- 如果找到,它会寻找标题为“重置选择”的可见按钮。
- 如果找到该按钮,请单击它。
Names Default to Here(1);
dt = current data table();
dtname = dt << get name;
winList = get window List();
found = 0; _xzz=empty();
For(i=nitems(winList), i>=1 & !found, i--,
nme = winList[i] << Get Window Title;
If(Starts With(nme,"Data Filter") & Contains(nme,dtname),
found =1;
_xzz = winList[i] <<XPATH> 0, _xzz[1] << Click);
);
);</XPATH>
如果您希望此操作比在脚本开始时执行得更多,您将需要一个处理程序或订阅来定义它何时需要运行。
希望有所帮助。
XPath 语法可能看起来有点奇怪,但它非常强大,因为 JMP 报告树结构具有关联的 XML 描述。我附上了为第 6 章编写的脚本,“可编写脚本的对象和 XPath”部分JSL Companion,JMP 脚本语言的应用,第二版. 该脚本提供了有限的介绍、一些简单的示例以及用于了解更多信息的链接。
回复:如何在新脚本开始时关闭现有表数据过滤器@john_madden ,
我不清楚你想要什么行动。 例如:
- 例 1:假设 Big Class 已打开,关联的数据过滤器位于年龄列,并且在过滤器中选择了 13 岁和 14 岁的孩子。 然后另一个应用程序选择了 15 岁的女性。 将出现“重置”按钮。 如果单击,它将返回表数据过滤器中定义的表选择。 那是你要的吗?
- Ex2:与 Ex1 相同的起始场景,但用户从数据表中删除了几行。 重置按钮不会出现,之前的选择也不再出现在数据过滤器中。
对于数据过滤器和表格,有称为“处理程序”的方法/功能
- 制作数据过滤器处理程序
- 制作行状态处理程序
- 订阅(对于数据表)
一旦定义/启用,就可以在行状态更改、行被删除等情况下采取行动。
如果您只是对重置按钮感兴趣,我怀疑(尚未测试),可以修改我发送的先前脚本以找到数据过滤器,如果重置按钮未折叠(可见),则可以单击发送给它。 但是,在发送修改后的脚本之前,更好地描述预期的行动将很有用。
另一个考虑因素是,如果用户在报表上添加本地数据过滤器,则该表(如果它具有数据过滤器)不会反映用户从报表的本地数据过滤器中所做的选择。
回复:如何在新脚本开始时关闭现有表数据过滤器这行得通,但我想我更详细地意识到了正在发生的事情,这可能会提出另一种解决方案。
如果您创建了一个带有过滤器的表,然后在其他地方更改了表行选择(我就是这种情况),数据过滤器中会出现以下内容:


我想我需要的是相当于按下“重置选择”按钮的脚本。
这可能吗?
回复:如何在新脚本开始时关闭现有表数据过滤器@john_madden ,
从 JMP 14 开始,我知道的唯一方法是通过蛮力。 见下文。 笔记重来清除表格选择状态
Names Default to Here(1);
dt = current data table();
dtname = dt << get name;
winList = get window List();
found = 0;
For(i=nitems(winList), i>=1 & !found, i--,
nme = winList[i] << Get Window Title;
If(Starts With(nme,"Data Filter") & Contains(nme,dtname),
found =1;
(winList[i] << child << get scriptable object) << Start Over;
window(nme) << close window();
);
show(i, nme, found);
);
如果您正在使用一个应用程序并且用户添加了一个本地数据过滤器并且您的分析需要它被删除,您可以使用 XPath 找到它,获取脚本,删除找到的过滤器,关闭您的分析并通过保存的脚本恢复。
下面附带的 JSL 显示了如何使用 XPath 获取特定分析的数据过滤器句柄。
希望有所帮助。