嵌套数据过滤器行选择你好,
我正在开展一个项目,我将在数据表中对数据进行分类,用户将通过我正在创建的界面向下选择特定选项。
我想要下面的脚本做的是:
- 在左侧的单选框 Choice 1 中,此人选择年龄。
- 在数据表中,所有不是该年龄的行都被隐藏并排除在数据表中。
- 在右侧的单选框 Choice 2 中,它会动态更新以仅显示未隐藏或排除的选项,并将包含可供选择的名称列表。
- 一旦选择了这两个选项,将只剩下 1 行,行号在 my_row 中返回。
我需要什么帮助:
- 选择选项 1 中的选项时,不会隐藏和自动排除行,即使筛选条件中包含 show(1) 和 include(1)
- 单选框 2 不会因选择 1 而动态更新
- 这两者都不会“一起工作”,选择 2 会覆盖选择 1 的行状态,并且可以从任何行中进行选择。 这可能是因为它没有动态更新(?)
参考
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Row States;
New Window( "Example",
Data Filter Context Box(
H List Box(
Panel Box( "Choice 1",
dt << Data Filter(
Add Filter(
columns( :age ),
Display( :age, Size( 140, 185 ), "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
) ) ),
Panel Box( "Choice 2",
H List Box(
Data Filter Context Box(
V List Box(
dt << Data Filter(
Add Filter(
columns( :name ),
Display( :name, Size( 160, 150 ), Radio Box Display ),
Mode( Select( 1 ) )
) ) ) ) ) ) ) ) );
my_row = dt << Get selected rows;
show( my_row );
其他脚本视窗回复:嵌套数据过滤器行选择这是我正在寻找的示例,但我不知道如何获取代码,因为它是一个应用程序。
当你有多个数据表时:
半导体工具包(下面的链接)> 实用程序(右上角)> 附加表限制
您首先单击要查看其列的表,然后在您单击的数据表中存在的列的右侧生成第二个列表。 如果您选择新的数据表,这将动态更新。
我在下面的线程中发现了类似的东西,但我发现很难将这段代码翻译成我需要的东西。
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
回到原帖:
- 选择 1:如果我点击“15”,dt 中的 7 行被选中,其余的应该被排除和隐藏。
- 次要选项是使用 summarize( namelist = by( :name ) ),这将为我提供一个未排除或隐藏的唯一名称列表,但如果不使用单选框,该列表将提供给选择 2。 我不确定如何使它动态化。
- 选择 2 将根据选择 1 中选择的年龄动态更新名单。
- 在选择 2 中进行选择后,将只选择一行。
假设我选择:Choice 1 = 15 & Choice 2 = Amy,那么第 29 行将被选中,我可以使用 << Get selected rows 将此行号保存到一个变量。
半导体工具包插件:
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
回复:嵌套数据过滤器行选择使用完全定制的过滤器可能是相当简单的解决方案。 另一方面,即使它有效(这一次)也可能不是
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Data Filter(
Location({2793, 233}),
Conditional,
Mode(Show(1), Include(1)),
Add Filter(
columns(:age, :name),
Display(:age, N Items(6)),
Display(:name, N Items(15), Find(Set Text("")))
)
);
(Window("Data Filter for Big Class")["Data Filter",LineUpBox(2)]) << NCol(2);
(Window("Data Filter for Big Class")["Data Filter",LineUpRulerBox(1)]) << Widths({300,300});
以下是使用过滤器更改处理程序对脚本进行的一些修改(JMP 中的状态处理程序可能非常错误且挑剔,我们已警告您:))
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << clear row states;
Summarize(myage = By(:age));
//make a dialog window
nw = New Window("Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(Add Filter(columns(:age)), Display(:age, "Radio Box Display"), Mode(Select(1), Show(1), Include(1)))
),
lb2 = Border Box()
)
);
// Creates list of names that are not excluded or hidden
f = function({a},
Try(Summarize(myname = By(:name)));
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try((lb2 << child) << delete box());
//append a new col list box, with all columns of the data table selected in the listbox
lb2 << append(
Panel Box("Select Script", sel1 = Radio Box(myname, Show(my_names = sel1 << Get Selected)))
);
);
fch = obj1 << Make Filter Change Handler(f);回复:嵌套数据过滤器行选择我有一种感觉,我已经很接近了,但我现在遇到了两个问题。
我进一步修改了下面线程中的解决方案代码。
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear row states;
Summarize( myage = By( :age ) );
//make a dialog window
nw = New Window( "Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(
Add Filter( columns( :age ) ),
Display( :age, "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
);
Wait( 0 );
// Creates list of names that are not excluded or hidden
Try( namelist = Summarize( myname = By( :name ) ) );
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try( lb2 << delete );
//append a new col list box, with all columns of the data table selected in the listbox
vlb1 << append( lb2 = Border Box( Left( 10 ), Right( 10 ), bottom( 10 ), top( 10 ), sides( 15 ), // Col title
Panel Box( "Select Script",
sel1 = radio box( eval( namelist ), show( my_names = sel1 << Get Selected) ) )
), all ) );
)
);
如果您注释掉所有 vlb1,您会得到一个小框,您可以从 Big Class 中的不同年龄中进行选择。 其他行被排除并隐藏。
问题:
- 第二个摘要,名单,不会随着不同年龄的选择而动态更新。 如何更新脚本来做到这一点?
- 第二个 Try() 来自解决方案代码并且是动态的,所以我不确定为什么第一个不会。
- 当 vlb1 取消注释时,JMP 会出错,错误图片如下。 我不确定已删除的对象引用在这部分代码中的位置。 任何人都可以看到吗?

我想如果这两个问题可以解决,那么我应该能够找到某种方法来返回单个行号。
回复:嵌套数据过滤器行选择@jthi ,再次感谢您提供的难以置信的帮助!答案很简单,再次啊哈哈。
我修改了你的第一个建议以满足我的需要,因为我明白你的意思JMP 中的状态处理程序存在缺陷且挑剔。
回复:嵌套数据过滤器行选择我已经制作了有关 JMP 中不同状态处理程序的愿望清单项目改进 JMP 的状态处理程序(悬停标签、行状态处理程序、过滤器状态处理程序、调度程序等) 。