토글 버튼 상자 또는 이와 유사한 것안녕하세요 JMP 커뮤니티,
사용자가 다른 월, 분기 또는 전체 YTD를 선택할 수 있는 창을 설정하려고 하는데, 이 창은 어떤 버튼 상자가 선택되었는지(또는 선택 해제되었는지)에 대한 피드백도 제공합니다. 궁극적으로 월/분기/YTD 선택을 사용하여 월을 기반으로 데이터 테이블의 하위 집합을 만드는 방법입니다(연도는 현재로 항상 현재 연도로 설정됨).
제가 생각하는 바를 구체적으로 설명하면 다음과 같습니다.

월을 선택할 때마다 코드는 1월을 나타내는 "01", 5월을 나타내는 "05", 1분기를 나타내는 "1" 등의 변수를 정의합니다. 제가 원하는 것은 버튼을 눌러서 "클릭"한 것처럼 보이거나 파란색과 같이 강조된 색상으로 바뀌는 것입니다. Data Filter 플랫폼에서 Big Class를 사용하고 :name으로 로컬 Data Filter를 추가할 때와 비슷한데, 여기서는 이름이 강조 표시되고 한 번에 두 개 이상의 선택이 가능합니다. 버튼이 선택되었음을 보여주는 것과 함께 버튼이 선택 해제되었는지도 보여주고 싶습니다. 체크 박스가 표시되었는지 여부를 보여주는 것과 비슷하지만, 시각적으로 덜 매력적이기 때문에 체크 박스를 사용하고 싶지 않습니다.

내가 만든 창의 코드는 다음과 같습니다(아래 참조). 물론 사용자가 "확인"을 클릭하면 코드는 하위 집합 데이터 테이블을 만든 다음 선택 창도 닫습니다. 선택한 달 "mo#"에 대한 변수를 설정할 때 AsDate(Date DMY(dd,mm,yyyy)) 코드보다 01Jan2024 값을 할당하는 덜 번거로운 방법이 있습니까? 잘 작동하지만 약간 번거로울 뿐입니다.
Names Default To Here( 1 );
yr = Year( Today() );
subwin = New Window( "Select Subset",
<<TYPE></TYPE>
<P>어떠한 도움도 감사히 받겠습니다!</P>
<P> </P>
<P>감사해요!,</P>
<P>디에스</P><LINGO-LABS id="lingo-labs-809673" slang="en-US" mode="CREATE"><LINGO-LABEL>자동화 및 스크립팅</LINGO-LABEL><LINGO-LABEL>데이터 블렌딩 및 정리</LINGO-LABEL><LINGO-LABEL>대량 맞춤형</LINGO-LABEL><LINGO-LABEL>윈도우</LINGO-LABEL></LINGO-LABS>Re: 토글 버튼 상자 또는 이와 유사한 것안녕하세요 @jthi 와 @txnelson ,
두 분 모두 귀중한 피드백에 감사드립니다. 여러분의 모든 제안은 제가 무엇을 작업해야 할지, 기존 코드를 수정하여 필요한 것을 얻는 방법에 대한 아이디어를 제공해 주었습니다. @txnelson 의 시작 날짜와 종료 날짜 아이디어는 마음에 들었지만, 불행히도 월이나 분기를 비연속적으로 선택할 수 없습니다. 예를 들어, 사용자는 1월과 9월을 월로 선택하거나 1분기와 4분기를 분기로 선택하여 하위 집합을 가져올 수 있습니다. 그래서 비연속적 날짜를 허용하도록 다시 작성해야 했습니다. 사용자가 월과 분기 또는 YTD와 그 밖의 혼합을 선택하는지 확인하는 기능까지 넣어서 사용자가 돌아가서 한 그룹만 선택해야 하도록 했습니다.
이에 대한 제 해결책은 실제로 연관 배열을 사용하는 것이었고, 저는 결과에 만족했고 AA를 활용한 것도 만족했습니다. AA를 많이 다루지 않았기 때문입니다. 제가 생각해 낸 코드는 아래와 같습니다. 그다지 우아하거나 간결하지는 않지만, 작동하고 일을 처리합니다. 때로는 그것만 있으면 충분하죠, 맞죠?!;)
모든 도움과 빠른 피드백에 감사드립니다. 이 포럼에 문제를 제기하고 24시간도 채 지나지 않아 필요한 모든 우려 사항을 해결하는 작동하는 스크립트를 얻을 수 있어서 좋습니다. 제가 결국 작성한 코드는 다음과 같습니다.
Names Default To Here( 1 );
dt = Current Data Table();
yr = Year( Today() );
MonthAA = Associative Array( {"M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "M10", "M11", "M12"}, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} );
QAA = Associative Array( {"Q1", "Q2", "Q3", "Q4"}, {1, 2, 3, 4} );
YTDAA = Associative Array( {"YTD"}, {12} );
MonthList = {};
QList = {};
QMonths = {};
YTDList = {};
ClearExpr = Expr(
dt << Clear Select;
MonthList = {};
QList = {};
QMonths = {};
YTDList = {};
BB1 << Set( 0 );
BB2 << Set( 0 );
BB3 << Set( 0 );
BB4 << Set( 0 );
BB5 << Set( 0 );
BB6 << Set( 0 );
BB7 << Set( 0 );
BB8 << Set( 0 );
BB9 << Set( 0 );
BB10 << Set( 0 );
BB11 << Set( 0 );
BB12 << Set( 0 );
BB13 << Set( 0 );
BB14 << Set( 0 );
BB15 << Set( 0 );
BB16 << Set( 0 );
BB17 << Set( 0 );
);
OKExpr = Expr(
dt << Clear Select;
MonthList = {};
QList = {};
QMonths = {};
YTDList = {};
For( i = 1, i <= 17, i++,
tempBB = Eval( Parse( "BB" || Char( i ) ) ) << Get;
If( tempBB == 1,
If(
Substr( Eval( Parse( "Sel" || Char( i ) ) ), 1, 1 ) == "M", Insert Into( MonthList, Eval( Parse( "Sel" || Char( i ) ) ) ),
Substr( Eval( Parse( "Sel" || Char( i ) ) ), 1, 1 ) == "Q", Insert Into( QList, Eval( Parse( "Sel" || Char( i ) ) ) ),
Substr( Eval( Parse( "Sel" || Char( i ) ) ), 1, 1 ) == "Y", Insert Into( YTDList, Eval( Parse( "Sel" || Char( i ) ) ) )
)
);
);
If(
N Items( MonthList ) != 0 & N Items( QList ) != 0 | N Items( MonthList ) != 0 & N Items( YTDList ) != 0 | N Items( QList ) != 0 &
N Items( YTDList ) != 0,
ErrorWin = New Window( "Error Window",
<<TYPE></TYPE>
<P>감사해요!,</P>
<P>디에스</P>
<P> </P>Re: 토글 버튼 상자 또는 이와 유사한 것데이터가 어떻게 보이는지 또는 선택을 어떻게 수행하고 싶은지 잘 모르겠지만 UI와 로직을 분리할 것입니다. UI를 수정했지만 반드시 필요한 것은 아니며, 이렇게 하면 버튼을 수집하기가 조금 더 쉬워질 뿐입니다. 이는 단지 월에서 날짜를 빌드하는 방법을 보여줄 뿐이며 YTD나 분기에는 해당되지 않습니다. YTD나 분기를 어떻게 사용할지 잘 모르겠습니다.
Names Default To Here(1);
get_dates = Expr(
months = Loc(m_buttons << get, 1);
qs = Loc(q_buttons << get, 1);
ys = Loc(y_buttons << get, 1);
// loop over as necessary to create the combinations
dates_to_find = Transform Each({month}, months,
Date DMY(01, month, yr);
);
);
yr = Year(Today());
subwin = New Window("Select Subset",
<<TYPE></TYPE>Re: 토글 버튼 상자 또는 이와 유사한 것다음은 JSL을 재작업한 것입니다. 실제로 테스트되지는 않았지만 요청을 완료하는 데 사용하기에 충분히 비슷할 것입니다.
Names Default To Here( 1 );
dt=current data table();
theYear = Year( Today() );
resetbb = Expr(
For( i = 1, i <= 17, i++,
Eval( Parse( "bb" || Char( i ) || "<< enable(1);" ) )
)
);
subwin = New Window( "Select Subset",
<<TYPE>= :Date < endDate );
dtSubset = dt << subset( selected columns( 0 ), selected rows( 1 ) );
subwin << Close Window;
),
Button Box( "Cancel/Exit", subwin << Close Window )
)
)
);
</TYPE>
Re: 토글 버튼 상자 또는 이와 유사한 것안녕하세요 @jthi 님 ,
이것은 확실히 내가 찾던 토글 문제를 해결했습니다. 이제 유일한 과제는 누군가가 "확인"을 클릭했을 때 데이터 테이블에서 선택한 모든 월 또는 분기 등의 가능한 조합에 대해 mm/yyyy 행만 선택하도록 논리 구조를 설정하는 방법입니다. 이것이 정말 빨리 너무 커지지 않는 방법을 생각해 보려고 합니다. 아이디어가 있나요?
감사해요!,
디에스
Re: 토글 버튼 상자 또는 이와 유사한 것또한 라디오 상자를 그룹화하여 특정 시간에 하나만 활성화되도록 할 수도 있습니다.
Names Default To Here( 1 );
r1 = Radio Box( {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} );
r2 = Radio Box( {"Q1", "Q2", "Q3", "Q4"} );
New Window( "Example", H List Box( r1, r2 ) );
r2 << Group( r1 );Re: 토글 버튼 상자 또는 이와 유사한 것버튼 상자는 토글 스타일을 지원합니다
Names Default To Here(1);
New Window("Toggle Button Example",
ex = Button Box("Start",
If(ex << Get,
ex << Set Button Name("Stop"),
ex << Set Button Name("Start")
)
)
);
ex << Style("Toggle");


Re: 토글 버튼 상자 또는 이와 유사한 것이 목적을 위해 라디오 버튼을 사용할 수 있습니다. 한 세트를 사용하여 기간이 월인지 분기인지 정의할 수 있습니다. 12개월 또는 4분기를 제공하는 또 다른 동적 세트를 가질 수 있습니다. 두 옵션은 창을 열 때 만들 수 있지만 한 세트(기본이 아님)는 보이지 않을 수 있습니다. 첫 번째 라디오 버튼 세트는 두 번째 세트의 가시성과 논리를 관리합니다.