데이터 필터 GUI를 스크립팅하는 방법빈 열로 설정된 데이터 필터가 있습니다.
아이디어는 사용자가 작업을 수행하고 해당 열이 데이터를 가져오고 사용자가 해당 열에 누락된 항목이 없을 때까지 계속한다는 것입니다.
하지만 문제가 있습니다. 데이터 필터가 조건부로 설정되면 모든 것이 좋아 보이지만 사용자가 조건부 열을 업데이트하는 순간 JMP는 정신을 잃고 기존에 선택한 모든 필터를 폐기합니다!
내 "이벤트"는 현재 필터 상태를 캡처한 다음 원하지 않는 "새로 고침"과 싸우기 위해 필터 선택을 재설정해야 한다고 생각합니다.
문제는 Data Fitler GUI 요소가 사용자 경험과 동기화되지 않기 때문에 행 선택 메커니즘을 사용하고 싶지 않다는 것입니다.
재설정해야 하는 필터 설정을 얻기 위해 "WHERE CLAUSE" 요소에 대해 REGEX를 사용하기까지 했지만 데이터 필터 GUI를 조작하는 메커니즘을 찾을 수 없습니다.
내가 찾은 모든 대답은 JSL 스크립팅 행 상태와 관련이 있습니다.
저는 JMP 16.1에 있습니다.
스크립팅윈도우Re: 데이터 필터 GUI를 스크립팅하는 방법굉장해, 고마워
Re: 데이터 필터 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 );
)
)
);
);
)
);
Re: 데이터 필터 GUI를 스크립팅하는 방법예, 맞습니다. 테이블 행이 새 데이터로 업데이트되더라도 12 필터를 유지하고 싶습니다. AND 조건이 true로 설정됨
현재 JMP는 conditional이 true로 설정된 경우 테이블 업데이트에서 데이터 필터를 완전히 지웁니다. 조건부가 꺼져 있으면 모든 것이 정상이며 예상대로 동작합니다.
그래서 기존 그래프가 있고 사용자는 그래프 뒤의 기본 데이터 테이블에 대한 새 상태를 생성하기 위해 그래프와 상호 작용합니다. 사용자가 새 상태를 커밋하면 변경 사항으로 새 테이블을 만들고 새 테이블로 기본 테이블을 업데이트합니다. 테이블.
이 이벤트로 인해 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() )
)
);
)
);
Re: 데이터 필터 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 )
)
);