Selezione della riga del filtro dati nidificatoCiao,
Sto lavorando a un progetto in cui avrò i dati classificati in una tabella di dati e gli utenti selezioneranno un'opzione specifica tramite un'interfaccia che sto creando.
Quello che voglio che lo script qui sotto faccia è:
- Nella casella radio a sinistra, Scelta 1, la persona seleziona l'età.
- Nella tabella dati tutte le righe che non hanno quell'età sono nascoste ed escluse nella tabella dati.
- Nella casella radio di destra, Scelta 2, viene aggiornata dinamicamente per mostrare solo le opzioni che non sono nascoste o escluse e conterrà un elenco di nomi tra cui scegliere.
- Una volta selezionate entrambe queste opzioni, rimarrà solo 1 riga, il cui numero di riga viene restituito in my_row.
Su cosa vorrei aiuto:
- Le righe non vengono nascoste ed escluse automaticamente quando vengono selezionate le opzioni di Scelta 1, anche se show(1) e include(1) sono inclusi nei termini del filtro
- La casella radio 2 non viene aggiornata dinamicamente a causa della scelta 1
- Entrambi non "lavorano insieme", la scelta 2 sovrascrive gli stati di riga della scelta 1 e può selezionare da qualsiasi riga. Questo è probabilmente perché non è aggiornato dinamicamente (?)
Riferimenti
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 );
AltroScriptingfinestreOggetto: Selezione riga filtro dati nidificatiEcco un esempio di quello che sto cercando, ma non so come arrivare al codice, poiché è un'applicazione.
Quando hai più tabelle di dati in alto:
Semiconductor Toolkit (link sotto) > Utilità (in alto a destra) > Allega limiti tabella
Per prima cosa fai clic sulla tabella per la quale desideri visualizzare le colonne, quindi viene generato un secondo elenco a destra delle colonne presenti nella tabella di dati su cui hai fatto clic. Questo si aggiornerà dinamicamente se scegli una nuova tabella di dati.
Ho trovato qualcosa di simile nel thread sottostante, ma trovo difficile tradurre questo codice in ciò di cui ho bisogno.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Torniamo al post originale:
- Scelta 1: se clicco su "15", vengono selezionate 7 righe nel dt, il resto dovrebbe essere escluso e nascosto.
- Un'opzione secondaria consiste nell'usare summary( namelist = by( :name ) ), che mi darà un elenco di nomi univoci che non sono esclusi o nascosti, ma senza usare radio box, questo elenco verrà inserito nella scelta 2. Non sono sicuro di come rendere questa dinamica.
- La scelta 2 aggiornerà dinamicamente un elenco di nomi in base all'età selezionata nella scelta 1.
- Una volta effettuata una selezione in Scelta 2, verrà selezionata solo una riga.
Diciamo che seleziono: Scelta 1 = 15 e Scelta 2 = Amy, quindi verrà selezionata la riga 29 e posso usare << Ottieni righe selezionate per salvare questo numero di riga in una variabile.
Modulo aggiuntivo Semiconductor Toolkit:
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
Oggetto: Selezione riga filtro dati nidificatiL'utilizzo di filtri completamente personalizzati potrebbe essere una soluzione abbastanza semplice. Questo d'altra parte potrebbe non essere anche se funziona (questa volta)
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});
Di seguito sono riportate alcune modifiche allo script utilizzando Filter Change Handler (i gestori di stato possono essere molto buggati e pignoli in JMP, sei stato avvisato
)
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);Oggetto: Selezione riga filtro dati nidificatiSento di essere vicino, ora sto incontrando due problemi.
Ho modificato ulteriormente il codice della soluzione dal thread sottostante.
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 ) );
)
);
Se commenti tutto vlb1, ottieni una piccola casella che puoi selezionare tra le diverse età in Big Class. Le altre righe sono escluse e nascoste.
I problemi:
- Il secondo riepilogo, namelist, non si aggiorna dinamicamente con diverse selezioni di età. Come si può aggiornare lo script per fare questo?
- Il secondo Try() proviene dal codice della soluzione ed è dinamico, quindi non sono sicuro del motivo per cui il primo non lo sarebbe.
- Errori JMP quando il vlb1 non è commentato, immagine di errore sotto. Non sono sicuro di dove si trovi il riferimento all'oggetto eliminato in questa parte del codice. Qualcuno può vederlo?

Penso che se questi due possono essere risolti, allora dovrei essere in grado di trovare un modo per restituire un singolo numero di riga.
Ri: Selezione delle righe del filtro dati nidificate@jthi , grazie ancora per il tuo incredibile aiuto!La risposta era semplicissima, ancora una volta ahaha.
Ho modificato il tuo primo suggerimento per adattarlo alle mie esigenze perché capisco cosa intendi con i gestori degli stati sono difettosi e pignoli in JMP.
Ri: Selezione delle righe del filtro dati nidificateHo creato un elemento della lista dei desideri riguardante diversi gestori di stato in JMP . Migliora i gestori di stato di JMP (etichetta al passaggio del mouse, gestore dello stato di riga, gestore dello stato del filtro, pianificatore, ...) .