クエリスクリプトモーダルウィンドウから始まり、2つのストアドプロシージャを実行して、結果のテーブルに自動的に結合するスクリプトを作成しています。これらはかなり大きなテーブルなので、クエリビルダーに似たものを実行するためのオプションを追加したいと思います。そこではフィルタとして列を選択し、フィルタしたいデータを入力できます。
テーブルが開かれる前にこれを行うにはどうすればよいでしょうか。プロシージャを実行してテーブルを結合するのにかかる時間を最小限に抑えたいので、最終的なテーブルが開いた後にデータをフィルタ処理するのは実際にはやりたくありません。
任意の提案は大歓迎です!
再:クエリスクリプトこれに対する一般的な解決策はかなり複雑です。 固定数の選択項目でダイアログボックスを作成できます。
// 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>

再:クエリスクリプトストアドプロシージャを実行し、列とそのデータ型の完全なリストを取得し、どういうわけかそれらをオプションとして使用した場合、フィルタを構築できますか。45列くらいになってしまうので、もっと良いことがあれば教えてください。
再:クエリスクリプトユーザーにフィルターを選択させるにはどうすればよいですか。データテーブルを開きたいが、長さが20から40の間、およびスケールが25ナノモルの間だけであるようにしたい場合に限ります。しかし、利用可能な列からどのフィルタを適用したいかをユーザーに選択させたいのです。
再:クエリスクリプトモーダルウィンドウにプロンプトを追加してデータを事前にフィルタ処理できます。 これは、クエリを実行する前にユーザーが商品と場所を事前に選択できるようにする簡単な例です。 選択する値のリストをハードコードしましたが、理想的には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
);

ログからの出力
{"AAAA", "CCCC"}
{"England", "Germany", "Italy"}
"t.products IN ('AAAA', 'CCCC')"
"t.locations IN ('England', 'Germany', 'Italy')"