여러분, 안녕하세요,
현재 데이터 필터를 이용한 데이터 추출 인터페이스를 개발 중입니다. 인터페이스 자체는 만들 수 있는데, JMP19에서 필터의 열 레이아웃이 문제입니다.
JMP17에서 필터의 열은 LineUpBox() 안에 있습니다. LineUpBox에는 N Col과 Spacing이라는 두 가지 유용한 함수가 있는데, 이 함수들을 사용하면 열 사이에 간격을 두고 여러 줄에 걸쳐 열을 정렬할 수 있습니다.
Tree Structure of the Data Filter in JMP17Tree Structure of the Data Filter in JMP17JMP17의 데이터 필터 트리 구조
하지만 JMP19에서는 데이터 필터의 트리 구조가 변경되었습니다. LineUpBox()가 위쪽으로 이동했고, 열의 부모는 N Col() 및 Spacing() 함수가 없는 List Box()입니다. << Set Horizontal(1) 함수를 사용할 수는 있지만 한 줄로만 표시되고 보기가 좋지 않습니다.
(아마도 JMP18 버전에서 변경되었을 수도 있습니다. 저는 이 버전에서 테스트해보지 않았습니다.)
Tree Structure in JMP19Tree Structure in JMP19JMP19의 트리 구조
JMP19와 JMP17에서 필터의 열 순서를 어떻게 정렬할 수 있는지 아이디어가 있으신가요?
기존 LineUpBox() 안에 새로운 BorderBox를 만들고 BorderBox를 자식으로 이동시키려고 시도했지만 필터링 기능이 사라지고 기존 BorderBox를 쉽게 삭제할 수 없었습니다. 필터의 각 열에 대해 ListBox()를 포함하는 새로운 Window()를 만들어 비슷한 결과를 얻을 수 있다는 것을 알고 있지만, 조건부 속성을 사용할 수 있고 여러 테이블과 여러 열에 쉽게 적용할 수 있다는 장점 때문에 Data Filter를 선호합니다.
아래는 두 개의 열을 사용한 예시입니다(실제로는 더 많은 열을 사용할 수 있습니다). JMP17에서는 두 열이 가로로 표시되지만 JMP19에서는 제대로 작동하지 않습니다.
Window from JMP17Window from JMP17JMP17의 창
f_extraction = Function({dt, cols_list, nbColsLine = 2, spacingLine = 30},
my_window = New Window("Extraction with filter",
Border Box(
Left(20), Top(10), Right(20), Bottom(10),
V List Box(
Panel Box("",
Eval(
Eval Expr(
// Creation of the Data Filter, with two columns as an example
df = dt << Data Filter(
Show Counts(0),
Conditional(1),
Show Histograms and Bars(0),
Add Filter(
Columns(Expr(cols_list)),
Display(cols_list, "List Display"),
)
)
)
);
// Here, the columns of the filter are reorderer in two columns with a space of 30 between them
// This is where I have the problem in JMP19 compared to JMP17 because the Tree Structure is different
(df << report)[Lineup Box( 2 )] << N Col( nbColsLine );
(df << report)[Lineup Box( 2 )] << Spacing( spacingLine );
For( i = 1, i <= N Items( cols_list ), i++,
(df << report)[ListBoxBox( i )] << Set Size( 180, 220 )
);
// We delete some buttons and check boxes that we don't need
(df << report)[Button Box( 4 )] << Delete;
(df << report)[Button Box( 3 )] << Delete;
(df << report)[Button Box( 2 )] << Delete;
(df << report)[CheckBoxBox( 4 )] << Delete;
(df << report)[CheckBoxBox( 3 )] << Delete;
(df << report)[CheckBoxBox( 2 )] << Delete;
(df << report)[CheckBoxBox( 1 )] << Delete;
(df << report)[Outline Box( 1 )] << Set Title( "Data Table Filters" );
),
Spacer Box(Size(0, 20)),
Button Box("OK",
// Script where I retrieve the user selection
)
)
)
)
);
// Example
Try(Close(Data Table("Big Class"), No Save));
dt = Open( "$SAMPLE_DATA/Big Class.jmp", Invisible);
f_extraction(dt, {"sex", "name"})
도와주셔서 감사합니다!
이런 구조에 의존하는 것은 매우 쉽게 무너질 수 있다는 점이 아쉽습니다. https://www.hyrumslaw.com/
표시 상자만 수정하는 것으로 쉽게 해결할 수 있는 방법은 없을 것 같습니다. 데이터 필터 구조 변경 때문에 제가 회사에서 관리하는 애드인에서도 몇몇 UI가 제대로 작동하지 않게 되었는데, 이유는 다르지만 필터를 그리드 형태로 구성하는 것보다는 (다행히...) 해결이 더 쉬울 것 같습니다.
왼쪽은 JMP18, 오른쪽은 JMP19입니다.

네, 저도 이런 구조가 바뀔 수도 있다는 점을 감안하면 이 방법이 최선은 아니라는 걸 알고 있습니다!
일단은 그대로 두겠습니다. 경험을 공유해 주셔서 감사합니다 