切換按鈕框或類似的東西JMP 社群您好,
我正在嘗試設定一個窗口,用戶可以在其中選擇不同的月份、季度或整個年初至今,該窗口還提供已選擇(甚至取消選擇)的按鈕框的反饋。我的目的是最終使用月份/季度/年初至今的選擇作為基於月份創建資料表子集的方法(目前年份始終設定為當年)。
這是我正在思考的一個視窗:

每當選擇一個月時,程式碼都會將變數定義為“01”表示一月,“05”表示五月,“1”表示第一季度,等等。顯示為按下狀態,或最好將顏色變成突出顯示的顏色,例如藍色。與資料篩選器平台中發生的情況類似,例如使用 Big Class 並透過 :name 新增本機資料篩選器時,名稱會被反白顯示,並且一次可以進行多個選擇。除了顯示該按鈕已被選中之外,我還希望它顯示該按鈕是否已被取消選擇- 很像一個顯示其已標記或未標記的複選框- 但我不想使用複選框,因為它不太直觀有吸引力的。

我創建的視窗的程式碼如下所示(見下文),當然,當使用者按一下「確定」時,程式碼將建立子集資料表,然後也關閉選擇視窗。在設定所選月份「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>DS</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>回覆:切換按鈕框或類似的東西嗨@jthi和@txnelson ,
感謝你們兩位寶貴的回饋。您的所有建議都給了我一些關於要做什麼以及如何修改現有程式碼以獲得我需要的想法。我喜歡@txnelson的開始日期和結束日期的想法,但不幸的是,它不允許非連續選擇月份和/或季度。例如,使用者可以選擇 Jan 和 Sep 作為月份,或 Q1 和 Q4 作為季度,然後從中取得子集。因此,我必須重寫它以允許不連續的日期。我甚至檢查用戶是否選擇月份和季度或年初至今以及任何組合,這樣他們就必須返回並僅選擇一組或另一組。
我對此的解決方案實際上是使用關聯數組,並且我對結果以及使用 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>DS</P>
<P> </P>回覆:切換按鈕框或類似的東西我不確定您的資料是什麼樣子,或者您希望如何執行選擇,但我會將 UI 和邏輯分開。我對你的使用者介面進行了修改,但這不是必需的,這只是讓收集按鈕變得更容易一些。這將僅演示如何建立從幾個月開始的日期,它不會針對年初至今或季度執行此操作,因為我不確定您將如何使用這些日期
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>回覆:切換按鈕框或類似的東西這是您的 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>
回覆:切換按鈕框或類似的東西嗨@jthi ,
這絕對解決了我所追求的切換問題。現在,唯一的挑戰是如何在有人點擊「確定」時設定邏輯結構,以便它僅選擇資料表中的那些 mm/yyyy 行,以選擇所選月份或季度等的所有可能組合。不會很快變得非常大的方式。有什麼想法嗎?
謝謝!
DS
回覆:切換按鈕框或類似的東西您也可以對單選框進行分組,以便在任何給定時間只有一個單選框處於活動狀態:
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 );回覆:切換按鈕框或類似的東西按鈕盒支援切換樣式
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");


回覆:切換按鈕框或類似的東西您可以使用單選按鈕來實現此目的。您可以使用一組來定義期間是幾個月還是幾季。您可以有另一個動態集來提供十二個月或四個季度。打開視窗時可以建立這兩個選項,但其中一組(不是預設選項)可能是不可見的。第一組單選按鈕將管理第二組單選按鈕的可見性以及邏輯。