SQL クエリの動的フィルター私は SQL について何も知らないので、JMP Query Builder を使用して、すべてのコードをそれに基づいて作成しました。
基本的に、フィルターする列を選択してから、フィルターする値を選択できるポップアップ画面を介して、ユーザーが必要なデータをフィルター処理できるようにしたいと考えています。JMP テーブルのすべての列は、データベースで有効な列名です。それで、キーがフィルターであるユーザーが選択したすべてのフィルターと値を保持する連想配列を作成するところまで来ました。
私が抱えている問題は、「Where」を使用して実際のフィルタリングを行うことができる新しい SQL クエリにあります。連想配列を追加する方法がわかりません。
これを行うためのより良い方法があると確信しています。何かご意見は?
_dt = Current Data Table();
selection = Associative Array();
//Create a window to collect filter information
TestIdWindow = New Window( "Filters Window",
<<MODAL></MODAL>
Re: SQL クエリの動的フィルターありがとうスティーブン。今日はあなたの提案を試してみましょう。Where 部分だけで、SQL クエリ全体を文字列として作成することは考えていませんでした。
フィルタリングするオプションが 5 ~ 12 個あるというコメントについては、実際にはそれが当初の目標でした。しかし、その後、すべてのユーザーがフィルターをかけたいと思う 5 ~ 12 のことを決めることができなかったので、そのうちのいくつかを静的に実行できるとしたら、それを動的にするのはどれほど難しいか、よく考えました。それからそれは爆発し、ここにいます:)
Re: SQL クエリの動的フィルターユーザーが何も選択しない場合に呼び出すことができる _AllRows_ と呼ばれる SQL でカテゴリ列を使用する場合の機能があります。
//window for selection
// get data
PickFilter = Function( {chosenCostCentre},
//{Default Local},
//deal with user making no choice
If(NItems(chosenCostCentre[1])==0,
chosenCostCentre[1] = "_AllRows_";
);
...リストがない場合は、動的JSLを使用して、リストの代わりにこのテキストを挿入できます。
...
//get report names from filter table
Eval(
Parse(
Eval Insert(
"\[
dtFilterNames = New SQL Query(
Connection( connectionString ),
QueryName( "RvwReports" ),
Select( Column( "ReportID", "t1" ), Column( "ReportName", "t1" ) ),
From( Table( "RvwReports", Schema( "dbo" ), Alias( "t1" ) ) ),
Where(
In List(
Column( "CostCentreCommon", "t1" ),
^chosenCostCentre[1]^,
UI( SelectListFilter( CheckBoxList, Base( "Categorical" ) ) )
)
)
) << Run Foreground( );
]\"
)
)
);同様に動的 JSL を使用して、各句を別個の文字列として記述できます。デフォルトは clause="" に設定されています。ユーザーが列の最初のリストからその列を選択してフィルター処理する場合にのみ、それらを更新します。
この時点で、最も重要な 5 ~ 12 の列を事前に決定してユーザーを制限していないのであれば、組み込みの JMP クエリ ビルダーを使用せず、ポスト SQL JSL を作成するだけです。
Re: SQL クエリの動的フィルター句コードが何であるかは知っていますが、ユーザーは特定の列だけですべての列に対してフィルターを実行したくない場合があります。一部の条項コードが何もないものと比較されても問題ありませんか?
また、列が 100 近くある場合もありますが、列ごとに句コードを明示的に追加する必要はありません。
私はいくつかの列でそれをテストしましたが、このwhere句を動的に構築しようとしています。コードでいくつかの予防措置を講じて、すべての句を強制的にカテゴリにします...しかし、In Lists で where 句を動的に実行する方法を理解する必要があります。
Where(
In List(
Column( "Column 1", "t1" ),
{"some value 1",
"some value 2"},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
) & In List(
Column( "Column 2", "t1" ),
{Some value 3, some value 4},
UI( SelectListFilter( ListBox, Base( "Categorical" ) ) )
)
)
Re: SQL クエリの動的フィルター最初に、ユーザーが選択する列にすべてのフィルターを手動で適用して、SQL クエリを実行してみてください。 これにより、ユーザーが選択した値のリストを配置できる必要な where 句コードが生成されます。