Bonjour, j'essaie depuis un moment d'écrire un code en JSL où, en fonction de la valeur de certaines variables, le graphique obtenu à partir du générateur de graphiques change.
Mon exemple particulier en ce moment est assez simple, j'ai une case à cocher et en fonction de la sélection de l'utilisateur (cochée/décochée), je souhaite ajouter ou supprimer des groupes dans le graphique à l'aide du filtre local. Voici un exemple très simple
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value<BR /><BR />// Check box to Remove group A from the graph
usw = New Window("Ignore A?", << Modal,
//Check Box defaulted to checked ignore
checkIgnore = check box({"Ignore A?"},
<< Set(1,1),
cb = checkIgnore << Get())
);
// Answer to Cancel or close buttons
If( usw["button"] == -1, throw("User cancelled") );
show(cb); // I can see how the value of cb changes between 0 and 1
nw = New Window( "Example Report",
// Box plot with dots
dot_box_plot = dt << Graph Builder(
Show Control Panel( 0 ),
Show Legend( 0 ),
Show Title( 0 ),
Variables( X(:drug ), Y( :pain ), Color(:drug ) ),
Elements( Position( 1, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
Elements( Position( 2, 1 ), Points( X, Y, Legend( 2 ) ), Box Plot( X, Y, Legend( 3 ) ) ),
SendToReport( Dispatch( {}, "X title", TextEditBox, {Set Text( "" )} ) ),
/* This is the part that I'd like to make interactive
to keep or remove A-group from the plot depending on
user selection */
if(cb == 1,
Local Data Filter(
Close Outline( 1 ),
Add Filter( columns( :drug ),
Where( :Drug != "A" )
)
)
)
)
);Comme vous pouvez le voir, il devrait y avoir quelque chose qui ne va pas de ma part avec l'instruction if car rien ne change, l'intrigue conserve tous les groupes. Et bien sûr, lorsque je supprime uniquement la partie IF(), mon tracé ignore le groupe A.
Je serais très reconnaissant pour toute suggestion.
Salut Jim, j'ai besoin d'aide avec mon script le plus avancé à ce jour. en un mot, le script demandera à l'utilisateur de saisir un numéro de registre entre 1 et 5.
le script ne fait rien lorsque j'ajoute une instruction while ou if. si vous ajoutez une seule expression sans l'instruction while ou if, cela fonctionne bien.
mais j'essaie de travailler à moitié pour plusieurs registres, je reçois normalement des fichiers pour des registres individuels et je voulais utiliser un seul script pour couvrir les 5 variétés.
Merci d'avance.
Sam
script complet ci-dessous
w = Nouvelle fenêtre( "Entrez le numéro de registre à analyser", // ouvre une fenêtre avec un titre et ce contenu...
Border Box (haut (20), bas (20), gauche (160), droite (160), // habillage de fenêtre
V List Box( // Les listes V et H s'imbriquent pour organiser les boîtes d'affichage
H Center Box( Text Box( "Tapez le numéro de registre ci-dessous" ) ), // un deuxième titre, centré
Spacer Box( size( 1, 10 ) ), // un peu d'espace vertical
// Zone de liste H (zone de texte ("valeur 1 : " ), zone d'édition de nombre (v1) ), // saisie de données
H Zone de liste ( Zone de texte ( "Entrez le numéro de registre : " ), Register_Num_teb = Zone d'édition de texte ( " ", << définir la largeur ( 200 ) ), ),
Spacer Box( size( 1, 10 ) ), // un peu d'espace vertical
H Center Box( // centre le bouton
Button Box( "Continuer", // ce script s'exécute lorsque le bouton est enfoncé...
Register = Register_Num_teb << get text();
// crée un nouveau tableau avec les valeurs...
/////////////////////////////////////////////// ///////////////////////////////////////démarrage de la boucle
Tandis que( Registre == 1,
dothis = Expr(
Nouvelle colonne ( "start_time", Numérique, Continue, Formule ( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
fais ceci;
dt << MoveSelectedColumns( {:start_time}, After( :Register1_active ) );
dothis = Expr(
Nouvelle colonne( "SoftStart_Accuracy%",
Numérique,
Continu,
Formule( ((:Register1_tsoftstart - :start_time) / :Register1_tsoftstart) * 100 )
)
);
fais ceci;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
Tandis que( Registre == 2,
dothis = Expr(
Nouvelle colonne ( "start_time", Numérique, Continue, Formule ( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
fais ceci;
dt << MoveSelectedColumns( {:start_time}, After( :Register2_active ) );
dothis = Expr(
Nouvelle colonne( "SoftStart_Accuracy%",
Numérique,
Continu,
Formule( ((:Register2_tsoftstart - :start_time) / :Register2_tsoftstart) * 100 )
)
);
fais ceci;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
Tandis que( Registre == 3,
dothis = Expr(
Nouvelle colonne ( "start_time", Numérique, Continue, Formule ( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
fais ceci;
dt << MoveSelectedColumns( {:start_time}, After( :Register3_active ) );
dothis = Expr(
Nouvelle colonne( "SoftStart_Accuracy%",
Numérique,
Continu,
Formule( ((:Register3_tsoftstart - :start_time) / :Register3_tsoftstart) * 100 )
)
);
fais ceci;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
Tandis que( Registre == 4,
dothis = Expr(
Nouvelle colonne ( "start_time", Numérique, Continue, Formule ( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
fais ceci;
dt << MoveSelectedColumns( {:start_time}, After( :Register4_active ) );
dothis = Expr(
Nouvelle colonne( "SoftStart_Accuracy%",
Numérique,
Continu,
Formule( ((:Register4_tsoftstart - :start_time) / :Register4_tsoftstart) * 100 )
)
);
fais ceci;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
Tandis que( Registre == 5,
dothis = Expr(
Nouvelle colonne ( "start_time", Numérique, Continue, Formule ( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
fais ceci;
dt << MoveSelectedColumns( {:start_time}, After( :Register5_active ) );
dothis = Expr(
Nouvelle colonne( "SoftStart_Accuracy%",
Numérique,
Continu,
Formule( ((:Register5_tsoftstart - :start_time) / :Register5_tsoftstart) * 100 )
)
);
fais ceci;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
/////////////////////////////////////////////// ///////////////////////////////////////
// éventuellement, fermez la boîte de dialogue. Ou bien, vous voudrez peut-être le relancer...
w << fermer la fenêtre ; // juste la boîte de dialogue, pas le rapport
)
)
)
)
);