Ciao, sto provando da un po' a scrivere un codice in JSL dove, a seconda del valore di una certa variabile, il grafico ottenuto dal generatore di grafici cambia.
Il mio esempio particolare in questo momento è piuttosto semplice, ho una casella di controllo e, a seconda della selezione dell'utente (selezionata/deselezionata), voglio aggiungere o rimuovere gruppi nel grafico utilizzando il filtro locale. Ecco un esempio molto semplice
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" )
)
)
)
)
);Come puoi vedere, da parte mia dovrebbe esserci qualcosa di sbagliato nell'istruzione if perché non cambia nulla, la trama mantiene tutti i gruppi. E ovviamente, quando rimuovo solo la parte IF(), la mia trama ignora il gruppo A.
Sarei molto grato per qualsiasi suggerimento.
Ciao Jim, ho bisogno di aiuto con il mio script più avanzato finora. in poche parole, lo script chiederà all'utente di inserire un numero di registro compreso tra 1 e 5
lo script non fa nulla quando aggiungo un'istruzione while o if. se aggiungi solo un'espressione senza l'istruzione while o if funziona correttamente.
ma sto cercando di lavorare a metà per più registri, normalmente ottengo file per singoli registri e volevo utilizzare un unico script per coprire tutte e 5 le varietà.
grazie in anticipo.
Sam
lo script completo di seguito
w = Nuova finestra("Inserisci il numero di registro da analizzare", // apre una finestra con un titolo e questo contenuto...
Riquadro di bordo( alto( 20 ), basso( 20 ), Sinistra( 160 ), Destra( 160 ), // allestimento vetrina
V List Box( // Gli elenchi V e H si annidano per organizzare le caselle di visualizzazione
H Casella centrale( Casella di testo( "Digitare il numero di registro di seguito") ), // un secondo titolo, centrato
Spacer Box( size( 1, 10 ) ), // un piccolo spazio verticale
// Casella di riepilogo H( Casella di testo( "valore 1: " ), Casella di modifica numero( v1 ) ), // Immissione dati
Casella di riepilogo H (Casella di testo( "Inserisci Num registro:" ), Register_Num_teb = Casella di modifica testo( "", <
Spacer Box( size( 1, 10 ) ), // un piccolo spazio verticale
H Casella centrale( // centra il pulsante
Button Box( "Continua", // questo script viene eseguito quando si preme il pulsante...
Registro = Register_Num_teb << ottieni testo();
// crea una nuova tabella con i valori...
///////////////////////////////////////////////// ////////////////////////////////////////avvio del ciclo
While( Registro == 1,
dothis = Espr(
Nuova colonna( "start_time", Numerico, Continuo, Formula( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
Fai questo;
dt << MoveSelectedColumns( {:start_time}, After( :Register1_active ) );
dothis = Espr(
Nuova colonna ("SoftStart_Accuracy%",
Numerico,
Continuo,
Formula( ((:Register1_tsoftstart - :start_time) / :Register1_tsoftstart) * 100 )
)
);
Fai questo;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Registro == 2,
dothis = Espr(
Nuova colonna( "start_time", Numerico, Continuo, Formula( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
Fai questo;
dt << MoveSelectedColumns( {:start_time}, After( :Register2_active ) );
faiquesto = Espr(
Nuova colonna ("SoftStart_Accuracy%",
Numerico,
Continuo,
Formula( ((:Register2_tsoftstart - :start_time) / :Register2_tsoftstart) * 100 )
)
);
Fai questo;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Registro == 3,
dothis = Espr(
Nuova colonna( "start_time", Numerico, Continuo, Formula( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
Fai questo;
dt << MoveSelectedColumns( {:start_time}, After( :Register3_active ) );
dothis = Espr(
Nuova colonna ("SoftStart_Accuracy%",
Numerico,
Continuo,
Formula( ((:Register3_tsoftstart - :start_time) / :Register3_tsoftstart) * 100 )
)
);
Fai questo;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Registro == 4,
dothis = Espr(
Nuova colonna( "start_time", Numerico, Continuo, Formula( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
Fai questo;
dt << MoveSelectedColumns( {:start_time}, After( :Register4_active ) );
dothis = Espr(
Nuova colonna ("SoftStart_Accuracy%",
Numerico,
Continuo,
Formula( ((:Register4_tsoftstart - :start_time) / :Register4_tsoftstart) * 100 )
)
);
Fai questo;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Registro == 5,
dothis = Espr(
Nuova colonna( "start_time", Numerico, Continuo, Formula( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
Fai questo;
dt << MoveSelectedColumns( {:start_time}, After( :Register5_active ) );
dothis = Espr(
Nuova colonna ("SoftStart_Accuracy%",
Numerico,
Continuo,
Formula( ((:Register5_tsoftstart - :start_time) / :Register5_tsoftstart) * 100 )
)
);
Fai questo;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
///////////////////////////////////////////////// ////////////////////////////////////////
// facoltativamente, chiude la finestra di dialogo. Oppure potresti voler eseguirlo di nuovo...
w << chiudiFinestra; // solo la finestra di dialogo, non il report
)
)
)
)
);