Fai in modo che la casella di riepilogo in Query Builder restituisca un elenco vuoto quando non sono selezionati elementiVoglio avere una query in cui, se gli utenti non selezionano nulla, viene restituito un elenco vuoto. Di seguito è riportato un esempio modificato dalla seguente pagina JMP Query Builder.
https://www.jmp.com/support/help/14/query-and-join-data-tables-with-jmp-query-builde.shtml
Invece di filtrare per punteggi, come nella pagina web, l'ho modificato in modo che gli utenti selezionino gli stati. Quando nessuno stato è selezionato, voglio che venga restituito un elenco o una tabella vuota.
New SQL Query(
Version( 130 ), Connection( "JMP" ),
JMP Tables(
["SAT" => "\C:\Program Files\SAS\JMPPRO\14\Samples\Data\SAT.jmp",
"SATByYear" => "\C:\Program Files\SAS\JMPPRO\14\Samples\Data\SATByYear.jmp"]
),
QueryName( "SATQuery" ),
Select( Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table( "SAT", Alias( "t2" ),
Join( Type( Left Outer ),
EQ( Column( "State", "t1" ), Column( "State", "t2" ) ) &
EQ( Column( "% Taking (2004)", "t1" ),
Column( "% Taking (2004)", "t2" ) )
& EQ( Column( "X", "t1" ), Column( "X", "t2" ) )
& EQ( Column( "Y", "t1" ), Column( "Y", "t2" ) )
& EQ( Column( "Population", "t1" ), Column( "Population", "t2" ) )
& EQ( Column( "Latitude", "t1" ), Column( "Latitude", "t2" ) )
& EQ( Column( "Longitude", "t1" ), Column( "Longitude", "t2" ) )
)
)
),
Where(
In List( Column( "State", "t1" ),
_AllRows_,
UI( SelectListFilter(
ListBox,
Base( "Categorical",
Prompt( "State:", Character, PromptName( "t1.State_1" ),
ValueSource( Column( "State", Alias( "State" ), Table( "SATByYear" ) ) )
)
)
)
)
)
)
) << Run;Se è possibile, penso che accadrebbe la clausola Where. Ho provato Not In List, Not Or e sostituendo _AllRows_ con un elenco vuoto, {}. Qualunque cosa faccia, se nessuno stato è selezionato dalla casella di riepilogo, vengono restituiti tutti gli stati o viene visualizzato un errore.
Stiamo progettando un'app con diverse caselle di riepilogo che filtrano le scelte per una query SQL. Alcune caselle di riepilogo avranno centinaia di scelte. Un elenco manuale non va bene, perché gli utenti non conosceranno tutte le scelte. Per i nostri scopi, quando non viene selezionato alcun articolo, sarà preferibile che venga restituito un elenco vuoto. È possibile? In tal caso, può essere dimostrato con l'esempio SAT che ho pubblicato sopra?
Grazie per eventuali suggerimenti o approfondimenti.
Re: Fai in modo che la casella di riepilogo in Query Builder restituisca un elenco vuoto quando non sono selezionati elementiselected_states = Data Table("SATQuery");
x=expr(selected_states<<GET script="">0,
selected_states<<SELECT all="" rows=""></SELECT></GET>Spero che le interruzioni di riga si siano presentate questa volta.
Re: Fai in modo che la casella di riepilogo in Query Builder restituisca un elenco vuoto quando non sono selezionati elementiBryon, sì, capisco. Se non viene selezionata alcuna riga, _AllRows_ viene scritto nello script della tabella. Invece, viene scritto un elenco, ad esempio {Alabama,Alaska}, se uno o tutti gli stati sono selezionati. Quindi, fintanto che _AllRows_ viene scritto solo quando non sono selezionate righe, la correzione funzionerà.
Per i lettori, ecco cosa ho aggiunto allo script esatto nel mio post originale.
selected_states = Data Table("SATQuery"); <BR />x=expr(selected_states<<GET script=""></GET>xx=char(eval(evalexpr(x)));<BR />if ( contains(xx, "_AllRows_") > 0,<BR /> selected_states<<SELECT all="" rows=""> selected_states<<DELETE rows=""></DELETE> Print("All Good")<BR />);</SELECT>Funziona per me in JMP 14. Il tavolo è sparecchiato. Dovrebbe essere facilmente modificabile per altre situazioni che richiedono un elenco vuoto. E puoi tralasciare la riga Stampa.
Grazie per questa soluzione/hack. Aspetto di vedere se qualcuno posta qualcosa di meglio. In caso contrario, domani sarà la soluzione accettata.
Re: Fai in modo che la casella di riepilogo in Query Builder restituisca un elenco vuoto quando non sono selezionati elementiInnanzitutto, grazie per aver pubblicato un chiaro esempio di ciò che stai facendo. Molto utile.
con lo script così com'è, prova a fare queste due cose.
1. esegui lo script, non selezionare nulla, fai clic su ok
2. eseguire lo script, selezionare tutti (o alcuni degli stati)
Confronta lo script sorgente in entrambe le tabelle risultanti, in particolare intorno alla riga 57.
quando non è selezionato nulla è molto diverso da quando è selezionato tutto.
Questo è totalmente barare ma funziona!
All'inizio dello script modificare la prima riga in questo modo:
dtq=New SQL Query(
Aggiungi queste righe alla fine del tuo script.
x=expr(dtq<<GET script="">0,
dtq<<SELECT all="" rows=""><BR /></SELECT></GET>
La query restituisce una tabella di dati, con dtq come handle. Quindi lo script ottiene lo script sorgente dalla tabella e lo trasforma in una stringa tra virgolette, con "xx" come handle. L'argomento Contains verifica se l'intera tabella è stata inclusa, cosa che accade quando non è selezionato nulla nella finestra di dialogo. In questo caso il testo "_AllRows_" è incluso nello script sorgente. Se questo è vero, tutte le righe nella tabella vengono selezionate e quindi eliminate.
Come ho detto, è totalmente barare, ma in questo caso funziona.
Re: Fai in modo che la casella di riepilogo in Query Builder restituisca un elenco vuoto quando non sono selezionati elementiGrazie per la risposta, Stefano. Ho difficoltà a vedere come la programmazione dinamica risolverà il mio problema.
So quali sono le clausole, ad eccezione della restituzione di elenchi vuoti se l'utente non seleziona nulla. Ci sono una manciata di colonne note che ogni utente dovrà filtrare ovunque dalla scelta di nulla da quella colonna alla scelta di tutto e qualsiasi altra via di mezzo. Voglio che none sia l'impostazione predefinita se l'utente non seleziona nulla nell'elenco. Nell'esempio SAT che ho pubblicato, la domanda è come restituire zero stati se l'utente non ne seleziona nessuno.
Non vedo come costruire clausole in modo dinamico aiuterebbe, anche se potrei perdere qualcosa. In altre parole, anche se costruisco le clausole in modo dinamico, non vedo cosa inserire dinamicamente nei filtri per restituire elenchi vuoti se non viene selezionato nulla. E, se può essere inserito nei filtri dinamici, allora perché non può essere programmato staticamente in un set noto di filtri della casella di riepilogo?
Re: Fai in modo che la casella di riepilogo in Query Builder restituisca un elenco vuoto quando non sono selezionati elementiIl modo di forza bruta è costruire ogni clausola dall'utente come stringhe e quindi utilizzare JSL dinamico per eseguire le stringhe combinate. Vedi domanda correlata: Dynamic-Filters-for-SQL-Query