Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?Chers tous,
Ce script est similaire à celui du livre "JUMP into JMP".
Le script invite l'utilisateur à sélectionner un "DCM", en fonction de cette sélection, la liste "DieNo" est remplie.
Il y a quelques problèmes ici. La liste "Numéro DCM" n'est pas dans l'ordre croissant.
Autre problème, lorsque je sélectionne un numéro DCM, la liste "DieNo" est remplie. Mais cela répertorie toutes les valeurs, je veux que seules les valeurs uniques soient répertoriées.
Pour les deux colonnes, le type de données est char, mais le type de données numérique ne fonctionne pas ici. Des conseils sur ce problème.
/* Open the sample data table */
dt = Open( "$Desktop/JMP scripts/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
Unique DCM=Associative array(dt:DCMNo);
nitems(unique DCM);
DCM1= unique DCM<<GET keys=""></GET>
J'essaie également d'inclure la zone de liste déroulante de sélection de date. La meilleure option de publication et facile pour cela était "filtre de données de date".
Est-ce que JMP me permet d'afficher un calendrier pour les dates {Un petit calendrier comme indiqué lorsque nous réservons des vols de la date de départ à la date d'arrivée}.
Acclamations
San
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?L'index et le guide de script sont quelque peu faibles par rapport à cette nouvelle fonction. Les exemples du guide de script pourraient être un peu renforcés. En voici une meilleure qui affiche le calendrier. Lorsque vous sélectionnez une date et cliquez sur OK, celle-ci est imprimée dans la fenêtre du journal.
Names Default To Here( 1 );
nw = New Window( "Calendar Box Example",
cal = Calendar Box(),
ok_button = button box("OK",
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
nw << close window;
)
);
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?Vous n'avez pas besoin d'une fenêtre modale pour utiliser la boîte de calendrier.
La boîte de calendrier fonctionne comme une boîte d'édition de numéro spécialisée. Il gère les dates pour vous afin que vous n'ayez pas à vous soucier des formats ou à convertir les secondes en dates ou en heures.
Voir l'index de script ou le guide de script pour le protocole de message.
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?Je ne connaissais pas la nouvelle zone d'affichage de la boîte de calendrier () dans JMP 13. Sympa ! Comment l'utilisez-vous cependant? J'ai dû rendre la boîte de dialogue modale pour qu'elle renvoie quelque chose.
Names Default To Here( 1 );
New Window( "Calendar Box Example", << modal(),
cal = Calendar Box()
);
selected_date = format(cal << get date, "ddMonyyyy");
print(selected_date);
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?En outre, vous pouvez utiliser une boîte d'édition numérique () avec un format de date ou la nouvelle boîte de calendrier (). Ils fonctionnent tous les deux bien mais présentent une interface différente pour l'utilisateur.
Voici l'approche Number Edit Box(), à partir de l'index de script :
Names Default To Here( 1 );
New Window( "Example",
fontobj = numbox = Number Edit Box( 0 )
);
numbox << Set Format( Format( "m/d/y", 12 ) );
numbox << Set( Date MDY( 10, 2, 1989 ) );
Voici la solution Calendar Box(), également tirée du Scripting Index :
Names Default To Here( 1 );
New Window( "Calendar Box Example",
cal = Calendar Box()
);
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?La liste DCM est classée par ordre alphabétique. Vous interprétez le DCM comme un nombre. JMP interprète DCM comme une chaîne de caractères.
Pourquoi les valeurs numériques ne fonctionnent-elles pas pour DCM ou Die ? Ce type de données résoudrait votre problème de commande.
J'ai nettoyé quelques petites choses pour une solution plus courte. C'est ici:
Names Default to Here( 1 );
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?Pourquoi est-ce que si je ne sélectionne pas les autres nombres dans la liste déroulante et que j'utilise la valeur par défaut, cela me donne une erreur ; si je sélectionne les autres numéros, cela ne me donne pas d'erreur.
Je suis en version 17, mac.
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?@lishuanglin Pourriez-vous créer une nouvelle discussion avec un exemple de script ?
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?C'est le script de Mark et les données fournies dans ce post que j'ai trouvées en l'exécutant qui pressent les numéros de la liste déroulante par défaut sans les changer me donnent une erreur; sélectionner d'autres nombres est très bien.
/* Open the sample data table */
dt = Open( "$Desktop/SampleData.jmp" );
/* Create lists of the values found in the DCMNo and Die columns*/
DCM = Sort Ascending( Associative Array( dt:DCMNo ) << Get Keys );
Die = Associative Array( dt:DieNo ) << Get Keys;
selRows = dt << Get Rows Where( :DCMNo == DCM[1] );
initial Die Set = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
dt << Clear Column Selection();
dt << Clear Row Selection();
/* Use New Window to create a non-modal dialog to display DCMNo and Die for user to choose. */
nw = New Window( "Choose DCM Die combination",
hb = H List Box(
Panel Box( "Select a DCM Number",
select1 = Combo Box( DCM,
/* Each of the following tasks are executed when the user makes a DCMNo choice.*/
selRows = dt << Get Rows Where( :DCMNo == DCM[select1 << Get] );
myDies = Associative Array( Column( dt, "DieNo" )[selRows] ) << Get Keys;
select2 << Set Items( myDies );
)
),
Panel Box( "Select a Die",
select2 = Combo Box( initial Die Set )
)
),
/* If user clicks OK, values displayed for DCMNo and Die will be selected in table. */
Button Box( "OK",
nw << Close Window;
dt << Select where( :DCMNo == DCM[select1 << Get] & :DieNo == myDies[select2 << Get] );
/* Selected rows are subsetted into new table. */
dt << Subset( Output Table Name( "Ryobi Details" ) );
)
);Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?Vérification très rapide du script, le problème est que le script à l'intérieur de la zone de liste déroulante n'est pas déclenché lors de la création initiale. La solution la plus simple consiste à ajouter quelque chose comme
select1 << Set(2, Run Script(0));
select1 << Set(1, Run Script(1));
à la fin du script. Cela changera la valeur dans la zone de liste déroulante, puis déclenchera le script une fois.
Une autre option assez simple consisterait à modifier le script à l'intérieur de la zone de liste déroulante en expression, puis à l'exécuter une fois la fenêtre créée.
Voir plus...
Ou utilisez << Get Function à la fin du script avec Eval
Eval(select1 << get function);
Re : Comment créer une zone de liste déroulante pour afficher des valeurs uniques ?Merci !