Hallo, ich versuche schon seit einiger Zeit, einen Code in JSL zu schreiben, bei dem sich das vom Graph Builder erhaltene Diagramm abhängig vom Wert einer bestimmten Variablen ändert.
Mein aktuelles Beispiel ist ziemlich einfach: Ich habe ein Kontrollkästchen und möchte je nach Benutzerauswahl (aktiviert/deaktiviert) mithilfe des lokalen Filters Gruppen zum Diagramm hinzufügen oder daraus entfernen. Hier ist ein sehr einfaches Beispiel
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" )
)
)
)
)
);Wie Sie sehen, sollte bei mir mit der if-Anweisung etwas nicht stimmen, da sich nichts ändert und die Handlung alle Gruppen beibehält. Und wenn ich nur den IF()-Teil entferne, ignoriert mein Plot natürlich die Gruppe A.
Für Anregungen wäre ich sehr dankbar.
Hallo Jim, ich brauche Hilfe bei meinem bisher fortschrittlichsten Skript. Kurz gesagt, das Skript fordert den Benutzer auf, eine Registernummer zwischen 1 und 5 einzugeben
Das Skript führt nichts aus, wenn ich eine while-Anweisung oder eine if-Anweisung hinzufüge. Wenn Sie nur einen Ausdruck ohne die while- oder if-Anweisung hinzufügen, funktioniert es einwandfrei.
Aber ich versuche, die Arbeit für mehrere Register zu halbieren. Normalerweise erhalte ich Dateien für einzelne Register und wollte ein einziges Skript verwenden, um alle fünf Register abzudecken.
Dank im Voraus.
Sam
vollständiges Skript unten
w = New Window( „Geben Sie die zu analysierende Registernummer ein“, // öffnet ein Fenster mit einem Titel und diesem Inhalt ...
Border Box( top( 20 ), Bottom( 20 ), Left( 160 ), Right( 160 ), // Schaufensterdekoration
V List Box( // V- und H-Listen werden verschachtelt, um die Anzeigefelder zu organisieren
H Center Box( Text Box( „Tippen Sie unten die Registernummer ein“) ), // ein zweiter Titel, zentriert
Abstandsbox (Größe (1, 10)), // etwas vertikaler Abstand
// H List Box( Text Box( "value 1: " ), Number Edit Box( v1 ) ), // Dateneingabe
H List Box( Text Box( "Enter Register Num:" ), Register_Num_teb = Text Edit Box( "", <
Abstandsbox (Größe (1, 10)), // etwas vertikaler Abstand
H Center Box( // zentrieren Sie die Schaltfläche
Button Box( „Weiter“, // dieses Skript wird ausgeführt, wenn die Schaltfläche gedrückt wird...
Register = Register_Num_teb << get text();
// eine neue Tabelle mit den Werten erstellen...
/////////////////////////////////////////////// ///////////////////////////////////////Starten der Schleife
While( Register == 1,
dothis = Expr(
Neue Spalte( „start_time“, Numerisch, Kontinuierlich, Formel( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
mach das;
dt << MoveSelectedColumns( {:start_time}, After( :Register1_active ) );
dothis = Expr(
Neue Spalte( „SoftStart_Accuracy%“,
Numerisch,
Kontinuierlich,
Formel( ((:Register1_tsoftstart - :start_time) / :Register1_tsoftstart) * 100 )
)
);
mach das;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Register == 2,
dothis = Expr(
Neue Spalte( „start_time“, Numerisch, Kontinuierlich, Formel( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
mach das;
dt << MoveSelectedColumns( {:start_time}, After( :Register2_active ) );
dothis = Expr(
Neue Spalte( „SoftStart_Accuracy%“,
Numerisch,
Kontinuierlich,
Formel( ((:Register2_tsoftstart - :start_time) / :Register2_tsoftstart) * 100 )
)
);
mach das;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Register == 3,
dothis = Expr(
Neue Spalte( „start_time“, Numerisch, Kontinuierlich, Formel( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
mach das;
dt << MoveSelectedColumns( {:start_time}, After( :Register3_active ) );
dothis = Expr(
Neue Spalte( „SoftStart_Accuracy%“,
Numerisch,
Kontinuierlich,
Formel( ((:Register3_tsoftstart - :start_time) / :Register3_tsoftstart) * 100 )
)
);
mach das;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Register == 4,
dothis = Expr(
Neue Spalte( „start_time“, Numerisch, Kontinuierlich, Formel( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
mach das;
dt << MoveSelectedColumns( {:start_time}, After( :Register4_active ) );
dothis = Expr(
Neue Spalte( „SoftStart_Accuracy%“,
Numerisch,
Kontinuierlich,
Formel( ((:Register4_tsoftstart - :start_time) / :Register4_tsoftstart) * 100 )
)
);
mach das;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
While( Register == 5,
dothis = Expr(
Neue Spalte( „start_time“, Numerisch, Kontinuierlich, Formel( (:rise_time_scope_v_vout * 1000) / 0.8 ) )
);
mach das;
dt << MoveSelectedColumns( {:start_time}, After( :Register5_active ) );
dothis = Expr(
Neue Spalte( „SoftStart_Accuracy%“,
Numerisch,
Kontinuierlich,
Formel( ((:Register5_tsoftstart - :start_time) / :Register5_tsoftstart) * 100 )
)
);
mach das;
dt << MoveSelectedColumns( {:SoftStart_Accuracy%}, After( :start_time ) );
);
/////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// optional den Dialog schließen. Oder Sie möchten es vielleicht noch einmal ausführen ...
w << closeWindow; // nur der Dialog, nicht der Bericht
)
)
)
)
);
Die bevorzugte Methode zum Umgang mit Änderungen am Plattformcode besteht darin, nach der ersten Verarbeitung der Plattform Nachrichten an die Plattform weiterzuleiten.Der Versuch, die Plattformanweisungen zu ändern, wird zu chaotisch und zu unberechenbar.
Unten sehen Sie Ihr Skript, das so geändert wurde, dass der Filter hinzugefügt wird, nachdem die Graph Builder-Plattform ausgeführt wurde.Und dann die tatsächliche Anzeige des lokalen Datenfilters ausblenden

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Analgesics.jmp" );
// Open Analgesics
cb = 1; // Predefined value// Check box to Remove group A from the graph
usw = New Window( "Ignore A?",
<<MODAL></MODAL>