トグルボタンボックスまたは類似のものJMPコミュニティの皆様、こんにちは。
ユーザーがさまざまな月、四半期、または YTD 全体を選択できるウィンドウを設定しようとしています。このウィンドウでは、どのボタン ボックスが選択されているか (または選択解除されているか) のフィードバックも提供されます。私の意図は、最終的には、月/四半期/YTD の選択を、月に基づいてデータ テーブルのサブセットを作成する方法として使用することです (現時点では、年は常に現在の年に設定されます)。
私が考えていることのウィンドウは次のとおりです。

月が選択されると、コードは変数を 1 月の場合は「01」、5 月の場合は「05」、第 1 四半期の場合は「1」などと定義します。ボタンが押されたように見えることで「クリック」されたように見えるようにするか、青などのハイライト色に変えることをお勧めします。これは、Big Class を使用して :name でローカル データ フィルターを追加する場合など、データ フィルター プラットフォームで発生することと似ています。名前がハイライト表示され、一度に複数の選択を行うことができます。ボタンが選択されたことを示すとともに、ボタンが選択解除されたかどうかも表示したいと思います (チェック ボックスがオンかどうかを示すのとよく似ています)。ただし、チェック ボックスは見た目があまり魅力的ではないため、使用しません。

私が作成したウィンドウのコードは次のようになります (下記参照)。もちろん、ユーザーが「OK」をクリックすると、コードはサブセット データ テーブルを作成し、選択ウィンドウも閉じます。選択した月「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>Re: トグルボタンボックスまたは類似のものこんにちは、 @jthiと@txnelson 、
貴重なフィードバックをありがとうございました。皆さんの提案のおかげで、何に取り組むべきか、また既存のコードをどのように変更すれば必要なものが得られるかについて、いくつかのアイデアを得ることができました。 @txnelsonの開始日と終了日のアイデアは気に入りましたが、残念ながら、月や四半期を連続せずに選択することはできません。たとえば、ユーザーは月として Jan と Sep、四半期として Q1 と Q4 を選択して、そこからサブセットを取得する可能性があります。そのため、連続しない日付を使用できるように書き直す必要がありました。ユーザーが月と四半期、または YTD とそれらの組み合わせを選択した場合はチェックを入れ、戻って 1 つのグループまたは別のグループを選択できるようにしました。
これに対する私の解決策は、実際には連想配列を使用することでした。連想配列をあまり使用したことがなかったので、結果に満足しています。私が思いついたコードは次のとおりです。あまりエレガントでもコンパクトでもないことは承知していますが、機能し、目的を達成します。必要なのはそれだけの場合もありますよね?!;)
ご協力と迅速なフィードバックに感謝します。このフォーラムで問題を提起してから、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>Re: トグルボタンボックスまたは類似のものあなたのデータがどのようになっているか、またどのように選択を実行したいのかはわかりませんが、UIとロジックを分離することをお勧めします。UIに変更を加えましたが、これは必須ではありません。ボタンの収集が少し簡単になるだけです。これは、月から日付を作成する方法を示すだけです。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 さん
これで、私が求めていたトグルの問題は確実に解決されました。今、唯一の課題は、誰かが「OK」をクリックしたときに、選択された月や四半期などのすべての可能な組み合わせに対して、データ テーブル内の mm/yyyy 行のみを選択するようにロジック構造を設定することです。これがすぐに大きくなりすぎないようにする方法を考えようとしています。何かアイデアはありますか?
ありがとう!、
DS
Re: トグルボタンボックスまたは類似のものラジオ ボックスをグループ化して、一度に 1 つだけがアクティブになるようにすることもできます。
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: トグルボタンボックスまたは類似のものこの目的にはラジオ ボタンを使用できます。1 つのセットを使用して、期間が月単位か四半期単位かを定義します。別の動的セットを使用して、12 か月または 4 四半期のいずれかを提供することができます。ウィンドウを開いたときに両方のオプションを作成できますが、1 つのセット (デフォルトではない) は非表示にすることができます。最初のラジオ ボタン セットは、2 番目のセットの表示とロジックを管理します。