중첩된 데이터 필터 행 선택여보세요,
저는 데이터 테이블에 데이터를 분류하고 사용자가 제가 만들고 있는 인터페이스를 통해 특정 옵션을 선택하는 프로젝트를 진행하고 있습니다.
아래 스크립트에서 원하는 작업은 다음과 같습니다.
- 왼쪽 라디오 상자인 선택 1에서 사람이 연령을 선택합니다.
- 데이터 테이블에서 해당 연령이 아닌 모든 행은 숨겨지고 데이터 테이블에서 제외됩니다.
- 오른쪽 라디오 상자인 선택 2에서는 숨겨지거나 제외되지 않은 옵션만 표시하도록 동적으로 업데이트되며 선택할 수 있는 이름 목록이 포함됩니다.
- 이 두 옵션을 모두 선택하면 행 번호가 my_row에 반환되는 1개의 행만 남게 됩니다.
내가 도움을 원하는 것:
- 필터 용어에 show(1) 및 include(1)가 포함되어 있어도 선택 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 );
다른스크립팅윈도우Re: 중첩된 데이터 필터 행 선택다음은 내가 찾고 있는 것의 예입니다. 하지만 응용 프로그램이기 때문에 코드에 접근하는 방법을 모르겠습니다.
여러 데이터 테이블이 있는 경우:
Semiconductor Toolkit(아래 링크) > 유틸리티(오른쪽 상단) > Attach Table Limits
열을 보려는 테이블을 먼저 클릭하면 클릭한 데이터 테이블에 있는 열의 오른쪽에 두 번째 목록이 생성됩니다. 새 데이터 테이블을 선택하면 동적으로 업데이트됩니다.
아래 스레드에서 비슷한 것을 찾았지만 이 코드를 필요한 것으로 변환하기가 어렵습니다.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
원래 게시물로 돌아가기:
- 선택 1: "15"를 클릭하면 dt의 7개 행이 선택되고 나머지는 제외되고 숨겨집니다.
- 두 번째 옵션은 summary( namelist = by( :name ) )를 사용하는 것입니다. 이렇게 하면 제외되거나 숨겨지지 않은 고유한 이름 목록을 얻을 수 있지만 라디오 상자를 사용하지 않으면 이 목록이 선택 2에 입력됩니다. 이것을 동적으로 만드는 방법을 잘 모르겠습니다.
- 선택 2는 선택 1에서 선택한 연령에 따라 이름 목록을 동적으로 업데이트합니다.
- 선택 2에서 선택하면 한 행만 선택됩니다.
다음을 선택한다고 가정해 보겠습니다. 선택 1 = 15 & 선택 2 = Amy, 그러면 행 29가 선택되고 << 선택한 행 가져오기를 사용하여 이 행 번호를 변수에 저장할 수 있습니다.
Semiconductor Toolkit 애드인:
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
Re: 중첩된 데이터 필터 행 선택완전히 사용자 정의된 필터를 사용하는 것은 상당히 간단한 해결책이 될 수 있습니다. 반면에 이것은 작동하더라도 그렇지 않을 수 있습니다(이번 한 번).
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});
다음은 Filter Change Handler를 사용하여 스크립트를 수정한 내용입니다(상태 처리기는 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);Re: 중첩된 데이터 필터 행 선택거의 가까워진 느낌이 듭니다. 지금 두 가지 문제에 봉착했습니다.
아래 스레드에서 솔루션 코드를 추가로 수정했습니다.
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의 다양한 연령대에서 선택할 수 있는 작은 상자가 생깁니다. 다른 행은 제외되고 숨겨집니다.
문제:
- 두 번째 요약인 namelist는 다른 연령 선택으로 동적으로 업데이트되지 않습니다. 이를 위해 스크립트를 어떻게 업데이트할 수 있습니까?
- 두 번째 Try()는 솔루션 코드에서 가져온 것이고 동적이므로 첫 번째가 아닌 이유를 잘 모르겠습니다.
- vlb1의 주석이 제거되면 JMP 오류가 발생합니다. 아래의 오류 그림입니다. 코드의 이 부분에서 삭제된 개체 참조가 어디에 있는지 잘 모르겠습니다. 누구든지 볼 수 있습니까?

이 두 가지를 해결할 수 있다면 단일 행 번호를 반환하는 방법을 찾을 수 있어야 한다고 생각합니다.
Re: 중첩된 데이터 필터 행 선택@jthi , 귀하의 놀라운 도움에 다시 한 번 감사드립니다!대답은 너무 간단했는데, 이번에도 아하하.
나는 당신의 첫 번째 제안을 내 필요에 맞게 수정했습니다. 당신이 의미하는 바를 이해했기 때문입니다. JMP에서는 상태 처리기가 버그가 많고 까다롭습니다.
Re: 중첩된 데이터 필터 행 선택JMP의 다양한 상태 핸들러에 대한 위시리스트 항목을 만들었습니다 . JMP의 상태 핸들러(호버 라벨, 행 상태 핸들러, 필터 상태 핸들러, 스케줄러 등)를 개선합니다 .