Limita le scelte e consenti solo una selezione nel filtro query DBVoglio un filtro di query che mostri solo una parte delle voci nel database. Vorrei anche limitare gli utenti a una scelta. Ecco il codice di esempio che ho utilizzato in un post precedente.
New SQL Query(
Version( 130 ), Connection( "JMP" ),
JMP Tables(
["SAT" => "$SAMPLE_DATA\SAT.jmp",<BR /> "SATByYear" => "$SAMPLE_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;Ad esempio, cosa succede se desidero mostrare solo agli utenti Alaska, California, Hawaii, Oregon e Washington?
Posso sostituire _AllRows_ con {"Alaska", "California", "Hawaii", "Oregon", "Washington"}. Tuttavia, ciò mostra ancora tutti gli stati. Preseleziona solo i 5 stati nell'elenco.
La mia vera applicazione è un grande DB con più filtri, quindi non voglio usare tabelle intermedie.
Inoltre, vorrei consentire agli utenti di selezionare solo uno stato. È possibile? Posso cambiare il tipo di filtro.
Ri: limitare le scelte e consentire solo una selezione nel filtro query DBUn'opzione consiste nel produrre un prompt per la selezione dell'utente per passare i valori selezionati a un'istruzione SQL per l'esecuzione.Lo script può utilizzare l'estensione Crea connessione al database () E Esegui SQL () per interagire con il tuo database. Quello che segue è un esempio più semplice che può essere utilizzato per creare uno script più robusto, quindi richiederà più lavoro per farlo funzionare per il tuo caso d'uso. Spero che questo ti aiuti a ottenere i risultati che desideri.
//clearing all symbols.
Delete Symbols ();
//defining an empty value for selection so it can handle when nothing is selected.
selection = {};
//Prompt providing values available for said user
nwp = New Window( "States",
<<MODAL></MODAL>Ri: limitare le scelte e consentire solo una selezione nel filtro query DBGrazie per aver gestito le mie aspettative. Una correzione è che non ho chiesto che facesse tutto. Restituire elenchi vuoti è facile come restituire elenchi completi quando non è selezionato nulla. Limitare gli utenti a una scelta è comune per molti linguaggi e API. Esporre solo un sottoinsieme di potenziali scelte potrebbe essere la richiesta più impegnativa. Gli sviluppatori potrebbero essere interessati a sapere che c'è interesse per quelle particolari funzionalità.
Capisco che le cose richiedano tempo e non aspettarti nessuna di queste funzionalità molto presto. Nel frattempo, le soluzioni alternative suggerite sono state per lo più utili. Questo forum è apprezzato.
Se qualcuno può consigliare risorse per la creazione di interfacce di filtri di query DB personalizzate all'interno di JMP, sono molto interessato.
Sto anche esplorando altre opzioni, come JavaScript, Rails, R, ecc. Tuttavia, spingere le persone verso altre lingue non sembra un uso appropriato di un forum di discussione JMP. Quindi, se progetto qualcos'altro, non lo posterò qui.
Ri: limitare le scelte e consentire solo una selezione nel filtro query DBPuò essere difficile per uno strumento generico come il generatore di query di JMP fare tutto.Hai pensato di creare la tua interfaccia personalizzata per la query?Sarà più laborioso all'inizio, ma poi avrai esattamente le funzionalità che desideri.
Ri: limitare le scelte e consentire solo una selezione nel filtro query DBGrazie, gzmorgan0 , Il tuo sforzo è utile e apprezzato. Non si adatta alla mia speranza di evitare tabelle intermedie, ma posso vedere come l'utilizzo di Invisible e Set Dirty potrebbe farlo funzionare per il mio caso con più filtri. Non ero a conoscenza di tale soluzione. Contrassegnerò la tua risposta come soluzione e spero che qualcuno pubblichi un miglioramento.
Ho provato a fare cose in Where e In List, in particolare con ValueSource. Per quanto ne so, ValueSource non sta facendo nulla nei miei script. Non lo vedo nell'indice di scripting.
Forse sono viziato dai moduli online. Voglio comunque chiedere a tutti gli sviluppatori JMP di leggere, puoi aggiungere la seguente funzionalità ai filtri di query DB.
- Restituisce una lista vuota quando non è selezionato nulla (il mio post precedente)
- Consenti la pubblicazione di un sottoinsieme di una colonna in una casella di filtro ListBox, magari utilizzando un elenco da qualche parte in Where o In List
- Consenti alle situazioni di limitare gli utenti alla scelta di un solo elemento.
Ri: limitare le scelte e consentire solo una selezione nel filtro query DBHo provato 3 opzioni:
- Una semplice modifica al tuo script elencherebbe tutti gli stati, ma preseleziona l'elenco degli stati del Pacifico. L'utente vede l'elenco evidenziato, ma deve utilizzare il clic CTRL per selezionare o deselezionare.
- Il post eliminato conteneva uno script che utilizzava un elenco manuale. Richiederebbe un elenco di stati del Pacifico. Tuttavia, non filtrava in base alle selezioni dell'utente. Ho provato Ands e altra sintassi, ma la query ha sempre restituito il set completo di stati del Pacifico.
- L'unico modo per ottenere l'elenco più piccolo era aprire SATByYear, creare un sottoinsieme utilizzando la query, quindi utilizzare quella tabella sottoinsieme in New SQL Query. Nota << Set Dirty(0) imposta la tabella come non modificata e SQL Query la chiuderà una volta eseguita la query.
Names Default to Here(1);
dt0 = Open("$Sample_Data\SATByYear.jmp", "Invisible");
satby_dt = query(Table(dt0, "t1"),"Invisible", "SELECT DISTINCT * FROM t1
WHERE t1.State IN ( 'Alaska' , 'California' , 'Hawaii' , 'Oregon' , 'Washington' ) ");
close(dt0,NoSave);
satby_dt << Set Name("SATByYear");
satby_dt << set dirty(0);
wait(1);
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
[ "SATByYear" => "Source(satby_dt)", "SAT" => "$Sample_Data\SAT.jmp" ]
),
QueryName( "SQLQuery" ),
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", "t2" ), Column( "State", "t1" ) ) &
EQ(
Column( "% Taking (2004)", "t2" ),
Column( "% Taking (2004)", "t1" )
) & EQ( Column( "X", "t2" ), Column( "X", "t1" ) ) &
EQ( Column( "Y", "t2" ), Column( "Y", "t1" ) ) &
EQ( Column( "Population", "t2" ), Column( "Population", "t1" ) ) &
EQ( Column( "Latitude", "t2" ), Column( "Latitude", "t1" ) ) &
EQ( Column( "Longitude", "t2" ), Column( "Longitude", "t1" ) )
)
)
),
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;
Ri: limitare le scelte e consentire solo una selezione nel filtro query DBHo cancellato la mia prima risposta. L'Elenco manuale forniva i prompt previsti, ma non filtrava in base alla selezione dell'utente.
Cerca un aggiornamento, presto.