如何编写数据过滤器 GUI 脚本我有一个设置为空列的数据过滤器。
这个想法是用户做一些事情并且该列获取数据并且用户继续直到该列中没有丢失的项目。
但是我有一个问题。 当数据过滤器设置为条件时,一切看起来都很好,但是当用户更新条件列时,JMP 失去了理智并丢弃了它拥有的所有过滤器选择!
我认为我的“事件”应该捕获当前的过滤器状态,然后重新设置过滤器选择以对抗这种不希望的“刷新”
问题是我不想使用行选择机制,因为那样的话 Data Fitler GUI 元素将与用户体验不同步......
我什至对“WHERE CLAUSE”元素使用 REGEX 来获取我需要重置的过滤器设置,但我找不到任何机制来操作数据过滤器 gui。
我找到的所有答案都只涉及 JSL 脚本行状态。
我在 JMP 16.1
脚本视窗回复:如何编写数据过滤器 GUI 的脚本太好了,谢谢
回复:如何编写数据过滤器 GUI 的脚本在您的示例中,本地数据过滤器位于图形构建器内部,如果将其移动到单独的元素,您将拥有更多的灵活性。例如,您可以在函数运行后删除并重新绘制它,如下所示:
Names Default To Here(1);
dt = open("$sample_data\Iris.jmp");
dt << New Column( "MY_COL",Character);
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
close(dt2,nosave);
a_window << Bring Window to Front;
);
a_window = New Window( "a_window",
data filter context box(
H List Box(
ldflb = h list box(
ldf = dt << data filter(
Local,
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
),
MY_GRAPH_BUILDER = dt << Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
),
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter",
wc = ldf << get script;
break_the_filter_fn();
(ldflb << Child) << Delete Box;
ldfExpr = Eval Expr( ldflb << Append( ldf = dt << Expr( Name Expr(wc) ) ) );
Eval( ldfExpr );
)
)
);
);
)
);
回复:如何编写数据过滤器 GUI 的脚本是的,即使表行更新了新数据,我也希望保留 12 过滤器AND 条件设置为 true
现在,当条件设置为真时,JMP 会在表更新时完全清除数据过滤器。 当条件关闭时,一切都很好并且行为符合预期。
所以我有一个现有的图表,用户与图表交互,为图表后面的主数据表生成一个新状态,当用户提交新状态时,我用他们的更改创建一个新表,并用新的更新主表桌子。
该事件导致 JMP 放弃他们在主表上所做的过滤器选择。
所以我要做的是在我的更新事件之前捕获数据过滤器状态,执行更新,然后重置数据过滤器状态,这样用户就不会注意到过滤器在两者之间被清除了。
只要“条件”设置为 false,这对于数据过滤器就可以正常工作......
但我希望将条件设置为 true,因为它在数据过滤器中提供了有关与他们正在做的事情相关的行数的有用数据。
这是我的例子,为什么这需要重置过滤器? 如何防止用户遇到过滤器重置?
Names Default To Here( 1 );
dt = Open( "$sample_data\Iris.jmp" );
dt << New Column( "MY_COL", Character );
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
//close(dt2,nosave);
);
a_window = New Window( "a_window",
H List Box(
MY_GRAPH_BUILDER = Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
);
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter", break_the_filter_fn() )
)
);
)
);
回复:如何编写数据过滤器 GUI 的脚本我试图理解您的问题,您是说如果用户更改下方窗口中的高度限制,您希望 12 保持选中状态吗?

Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt << Data Filter(
Location( {397, 156} ),
Conditional,
Add Filter(
columns( :height, :age ),
Where( :height >= 50 & :height <= 55 ),
Where( :age == 12 )
)
);