Script di interrogazioneSto creando uno script che inizia con una finestra modale ed esegue un paio di stored procedure e si unisce automaticamente alle tabelle risultanti. Si tratta di tabelle abbastanza grandi e voglio aggiungere un'opzione per consentire all'utente di eseguire qualcosa di simile al Query Builder, in cui possono selezionare colonne come filtri e inserire i dati che desiderano filtrare.
Come potrei fare prima che i tavoli siano aperti? Voglio ridurre al minimo il tempo necessario per eseguire le procedure e unire le tabelle, quindi filtrare i dati dopo l'apertura del tavolo finale non è proprio quello che voglio fare.
Ogni suggerimento sarà molto apprezzato!
Re: Script di interrogazioneUna soluzione generale a questo sarebbe piuttosto complicata. È possibile creare una finestra di dialogo con un numero fisso di selezioni da effettuare.
// Get numeric column names from sample data
dt = open("$sample_data\Boston Housing.jmp");
col_list = dt << get column names("String", numeric);
insertinto(col_list, "<NO selection="">", 1);
nw = new window("Get Data2",
panel box("Filter Data",
lineup box(ncol(3),
text box("Column"), text box("Low Value"), text box("High Value"),
cb1 = combo box(col_list),
low1 = number edit box(),
high1 = number edit box(),
cb2 = combo box(col_list),
low2 = number edit box(),
high2 = number edit box(),
cb3 = combo box(col_list),
low3 = number edit box(),
high3 = number edit box(),
// Add more columns if needed...
)
)
);</NO>

Re: Script di interrogazioneSarei in grado di creare un filtro se eseguissi le stored procedure, avessi un elenco completo di colonne e dei loro tipi di dati e in qualche modo li usassi come opzioni? Finisce per essere di circa 45 colonne, quindi se c'è qualcosa di meglio per favore fatemelo sapere!
Re: Script di interrogazioneCome posso convincere l'utente a selezionare il filtro? Come se volessi aprire le tabelle dei dati ma volevo solo dove :Length era compreso tra 20-40 e :Scale era 25 nanomoli. Ma voglio che l'utente sia in grado di selezionare quali filtri desidera applicare dalle colonne disponibili.
Re: Script di interrogazioneÈ possibile aggiungere prompt alla finestra modale per prefiltrare i dati. Ecco un semplice esempio che consente a un utente di preselezionare prodotti e posizioni prima dell'esecuzione della query. Ho codificato l'elenco di valori tra cui scegliere, ma idealmente lo otterresti dinamicamente con le query SQL.
// Hardcode or get dynamically from the database
product_list = {"AAAA", "BBBB", "CCCC", "DDDD"};
// Hardcode or get dynamically from the database
location_list = {"China", "England", "Germany", "Italy", "Japan", "USA"};
nw = new window("Get Data", << modal,
panel box("Pre-Filter",
hlistbox(
product_cb = listbox(product_list),
location_cb = listbox(location_list)
),
),
panel box("Actions",
hlistbox(
button box("OK",
ok_pushed = 1;
selected_products = product_cb << get selected;
selected_locations = location_cb << get selected
),
button box("Cancel",
ok_pushed = 0;
)
)
)
);
if (ok_pushed,
product_in_list = "";
location_in_list = "";
print(selected_products, selected_locations);
if (nitems(selected_products) > 0,
product_in_list = "t.products IN ('" ||
concat items(selected_products, "', '") || "')";
);
if (nitems(selected_locations) > 0,
location_in_list = "t.locations IN ('" ||
concat items(selected_locations, "', '") || "')";
);
print(product_in_list, location_in_list);
// run SQL query
);

Output dal registro:
{"AAAA", "CCCC"}
{"England", "Germany", "Italy"}
"t.products IN ('AAAA', 'CCCC')"
"t.locations IN ('England', 'Germany', 'Italy')"