如何寫 datafilter GUI 腳本我有一個設定為空列的資料過濾器。
這個想法是用戶做一些事情,該列獲取數據,然後用戶繼續,直到該列中沒有丟失的項目。
但我有一個問題。 當資料過濾器設定為條件時,一切看起來都很棒,但當使用者更新條件列時,JMP 就失去了理智並放棄了它擁有的所有過濾器選擇!
我認為我的“事件”應該捕獲當前的過濾器狀態,然後重新設定過濾器選擇,以對抗這種不必要的“刷新”
問題是我不想使用行選擇機制,因為這樣 Data Fitler GUI 元素將與使用者體驗不同步...
我什至對“WHERE CLAUSE”元素使用 REGEX 來獲取需要重置的過濾器設置,但我找不到任何機制來操作資料過濾器 gui。
我找到的所有答案都只涉及 JSL 腳本行狀態。
我使用的是 JMP 16.1
資料混合與清理視窗回覆:如何寫 datafilter GUI 腳本太好了,謝謝
回覆:如何寫 datafilter 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 );
)
)
);
);
)
);
回覆:如何寫 datafilter GUI 腳本是的,確實如此,即使表格行已用新資料更新,我也希望保留 12 個篩選器AND 條件設定為 true
現在,當條件設為 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() )
)
);
)
);
回覆:如何寫 datafilter 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 )
)
);