Zeilenauswahl für verschachtelte DatenfilterHallo,
Ich arbeite an einem Projekt, bei dem Daten in einer Datentabelle kategorisiert werden und Benutzer über eine von mir erstellte Schnittstelle eine bestimmte Option auswählen.
Was ich möchte, dass das folgende Skript tut, ist:
- Im linken Optionsfeld, Auswahl 1, wählt die Person das Alter aus.
- In der Datentabelle werden alle Zeilen, die nicht dieses Alter haben, ausgeblendet und in der Datentabelle ausgeschlossen.
- Im rechten Optionsfeld, Auswahl 2, wird es dynamisch aktualisiert, um nur Optionen anzuzeigen, die nicht ausgeblendet oder ausgeschlossen sind, und enthält eine Liste mit Namen zur Auswahl.
- Sobald diese beiden Optionen ausgewählt sind, bleibt nur eine Zeile übrig, deren Zeilennummer in my_row zurückgegeben wird.
Wobei ich Hilfe möchte:
- Zeilen werden nicht automatisch ausgeblendet und ausgeschlossen, wenn Optionen aus Auswahl 1 ausgewählt werden, obwohl show(1) und include(1) in den Filterbegriffen enthalten sind
- Radiobox 2 wird als Ergebnis der Wahl 1 nicht dynamisch aktualisiert
- Beide "arbeiten nicht zusammen", Auswahl 2 überschreibt Zeilenzustände von Auswahl 1 und kann aus jeder Zeile auswählen. Dies liegt wahrscheinlich daran, dass es nicht dynamisch aktualisiert wird (?)
Verweise
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Row States;
New Window( "Example",
Data Filter Context Box(
H List Box(
Panel Box( "Choice 1",
dt << Data Filter(
Add Filter(
columns( :age ),
Display( :age, Size( 140, 185 ), "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
) ) ),
Panel Box( "Choice 2",
H List Box(
Data Filter Context Box(
V List Box(
dt << Data Filter(
Add Filter(
columns( :name ),
Display( :name, Size( 160, 150 ), Radio Box Display ),
Mode( Select( 1 ) )
) ) ) ) ) ) ) ) );
my_row = dt << Get selected rows;
show( my_row );
AndereSkripterstellungFensterBetreff: Zeilenauswahl für verschachtelte DatenfilterHier ist ein Beispiel für das, wonach ich suche, aber ich weiß nicht, wie ich an den Code komme, da es sich um eine Anwendung handelt.
Wenn Sie mehrere Datentabellen haben:
Semiconductor Toolkit (Link unten) > Dienstprogramme (oben rechts) > Tabellengrenzen anhängen
Sie klicken zuerst auf die Tabelle, für die Sie Spalten anzeigen möchten, dann wird rechts eine zweite Liste generiert, die anzeigt, welche Spalten in der Datentabelle vorhanden sind, auf die Sie geklickt haben. Diese wird dynamisch aktualisiert, wenn Sie eine neue Datentabelle auswählen.
Ich habe etwas Ähnliches im Thread unten gefunden, finde es aber schwierig, diesen Code in das zu übersetzen, was ich brauche.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Zurück zum ursprünglichen Beitrag:
- Wahl 1: Wenn ich auf "15" klicke, werden 7 Zeilen im dt ausgewählt, der Rest sollte ausgeschlossen und ausgeblendet werden.
- Eine sekundäre Option ist die Verwendung von summary( namelist = by( :name ) ), wodurch ich eine Liste mit eindeutigen Namen bekomme, die nicht ausgeschlossen oder ausgeblendet sind, aber ohne Verwendung der Radiobox wird diese Liste in Auswahl 2 eingespeist. Ich bin mir nicht sicher, wie ich das dynamisch machen soll.
- Auswahl 2 aktualisiert dynamisch eine Namensliste basierend auf dem in Auswahl 1 ausgewählten Alter.
- Sobald eine Auswahl in Auswahl 2 getroffen wurde, wird nur eine Zeile ausgewählt.
Nehmen wir an, ich wähle: Choice 1 = 15 & Choice 2 = Amy, dann wird Zeile 29 ausgewählt und ich kann << Get selected rows verwenden, um diese Zeilennummer in einer Variablen zu speichern.
Semiconductor Toolkit-Add-In:
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
Betreff: Auswahl verschachtelter DatenfilterzeilenDie Verwendung vollständig angepasster Filter könnte eine recht einfache Lösung sein. Dies ist jedoch möglicherweise nicht der Fall, selbst wenn es funktioniert (dieses eine Mal).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Data Filter(
Location({2793, 233}),
Conditional,
Mode(Show(1), Include(1)),
Add Filter(
columns(:age, :name),
Display(:age, N Items(6)),
Display(:name, N Items(15), Find(Set Text("")))
)
);
(Window("Data Filter for Big Class")["Data Filter",LineUpBox(2)]) << NCol(2);
(Window("Data Filter for Big Class")["Data Filter",LineUpRulerBox(1)]) << Widths({300,300});
Nachfolgend finden Sie einige Änderungen an Ihrem Skript mithilfe des Filter Change Handler (Statushandler können in JMP sehr fehlerhaft und knifflig sein, Sie wurden gewarnt
)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << clear row states;
Summarize(myage = By(:age));
//make a dialog window
nw = New Window("Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(Add Filter(columns(:age)), Display(:age, "Radio Box Display"), Mode(Select(1), Show(1), Include(1)))
),
lb2 = Border Box()
)
);
// Creates list of names that are not excluded or hidden
f = function({a},
Try(Summarize(myname = By(:name)));
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try((lb2 << child) << delete box());
//append a new col list box, with all columns of the data table selected in the listbox
lb2 << append(
Panel Box("Select Script", sel1 = Radio Box(myname, Show(my_names = sel1 << Get Selected)))
);
);
fch = obj1 << Make Filter Change Handler(f);Betreff: Auswahl verschachtelter DatenfilterzeilenIch habe das Gefühl, dass ich kurz davor bin, jetzt auf zwei Probleme zu stoßen.
Ich habe den Lösungscode aus dem Thread unten weiter geändert.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear row states;
Summarize( myage = By( :age ) );
//make a dialog window
nw = New Window( "Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(
Add Filter( columns( :age ) ),
Display( :age, "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
);
Wait( 0 );
// Creates list of names that are not excluded or hidden
Try( namelist = Summarize( myname = By( :name ) ) );
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try( lb2 << delete );
//append a new col list box, with all columns of the data table selected in the listbox
vlb1 << append( lb2 = Border Box( Left( 10 ), Right( 10 ), bottom( 10 ), top( 10 ), sides( 15 ), // Col title
Panel Box( "Select Script",
sel1 = radio box( eval( namelist ), show( my_names = sel1 << Get Selected) ) )
), all ) );
)
);
Wenn Sie vlb1 komplett auskommentieren, erhalten Sie ein kleines Feld, in dem Sie aus den verschiedenen Altersstufen in der Großen Klasse auswählen können. Die anderen Zeilen werden ausgeschlossen und ausgeblendet.
Probleme:
- Die zweite Zusammenfassung, Namensliste, wird bei unterschiedlicher Altersauswahl nicht dynamisch aktualisiert. Wie kann das Skript dazu aktualisiert werden?
- Der zweite Try() stammt aus dem Lösungscode und ist dynamisch, daher bin ich mir nicht sicher, warum der erste das nicht sein sollte.
- JMP gibt einen Fehler aus, wenn vlb1 unkommentiert ist, Fehlerbild unten. Ich bin nicht sicher, wo sich der Verweis auf das gelöschte Objekt in diesem Teil des Codes befindet. Kann es jemand sehen?

Ich denke, wenn diese beiden gelöst werden können, sollte ich in der Lage sein, eine Möglichkeit zu finden, eine einzelne Zeilennummer zurückzugeben.
Betreff: Auswahl verschachtelter DatenfilterzeilenIch habe einen Wunschlisteneintrag zu verschiedenen Status-Handlern in JMP erstellt . Verbessern Sie die Status-Handler von JMP (Hover-Label, Zeilen-Status-Handler, Filter-Status-Handler, Scheduler usw.) .