項目が選択されていない場合、クエリ ビルダのリスト ボックスが空のリストを返すようにするユーザーが何も選択しない場合、空のリストが返されるクエリが必要です。 次の JMP Query Builder ページから変更された例を次に示します。
https://www.jmp.com/support/help/14/query-and-join-data-tables-with-jmp-query-builde.shtml
Web ページのようにスコアでフィルタリングするのではなく、ユーザーが状態を選択できるように変更しました。 州が選択されていない場合は、空のリストまたはテーブルが返されます。
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;可能であれば、Where句で起こると思います。 Not In List、Not Or を試し、_AllRows_ を空のリスト {} に置き換えてみました。 何をしても、リスト ボックスから州が選択されていない場合は、すべての州が返されるか、エラーが発生します。
SQL クエリの選択肢をフィルタリングする複数のリスト ボックスを備えたアプリを設計しています。 一部のリスト ボックスには、何百もの選択肢があります。 ユーザーがすべての選択肢を知っているわけではないため、手動リストは適切ではありません。 私たちの目的のために、項目が選択されていない場合、空のリストが返されることが望ましいでしょう。 これは可能ですか? もしそうなら、私が上に投稿したSATの例でそれを示すことができますか?
提案や洞察をありがとう。
Re: 項目が選択されていない場合、クエリ ビルダのリスト ボックスが空のリストを返すようにするselected_states = Data Table("SATQuery");
x=expr(selected_states<<GET script="">0,
selected_states<<SELECT all="" rows=""></SELECT></GET>今回は改行が現れたことを願っています。
Re: 項目が選択されていない場合、クエリ ビルダのリスト ボックスが空のリストを返すようにするブライオン、はい、わかりました。 行が選択されていない場合、_AllRows_ がテーブル スクリプトに書き込まれます。 一方、{Alabama,Alaska} などのリストは、いずれかまたはすべての州が選択されている場合に書き込まれます。 したがって、行が選択されていないときにのみ _AllRows_ が書き込まれる限り、修正は機能します。
読者のために、元の投稿の正確なスクリプトに追加したものを以下に示します。
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>JMP 14で動作します。 テーブルがクリアされます。 空のリストを必要とする他の状況では、簡単に変更できるはずです。 また、Print 行を省略できます。
このソリューション/ハックをありがとう。 誰かがより良いものを投稿するかどうかを確認します。 そうでない場合は、明日の解決策として受け入れられます。
Re: 項目が選択されていない場合、クエリ ビルダのリスト ボックスが空のリストを返すようにするまず、あなたがやっていることの明確な例を投稿していただきありがとうございます。 非常に役立ちます。
スクリプトをそのまま使用して、この 2 つのことを実行してみてください。
1.スクリプトを実行し、何も選択せずに[OK]をクリックします
2. スクリプトを実行し、すべて (または一部の州) を選択します。
結果の両方の表で、特に 57 行目あたりでソース スクリプトを比較します。
何も選択されていないときは、すべてが選択されているときとはまったく異なります。
これは完全に不正行為ですが、機能します。
スクリプトの先頭で、最初の行を次のように編集します。
dtq=New SQL Query(
これらの行をスクリプトの最後に追加します。
x=expr(dtq<<GET script="">0,
dtq<<SELECT all="" rows=""><BR /></SELECT></GET>
クエリは、dtq をハンドルとしてデータ テーブルを再実行します。 次に、スクリプトはテーブルからソース スクリプトを取得し、ハンドルとして "xx" を使用して引用符で囲まれた文字列に変換します。 Contains 引数は、テーブル全体が含まれているかどうかを確認します。これは、ダイアログで何も選択されていない場合に発生します。 この場合、テキスト「_AllRows_」がソース スクリプトに含まれています。 これが true の場合、テーブル内のすべての行が選択されてから削除されます。
私が言ったように、それは完全に不正行為ですが、この場合は機能します。
Re: 項目が選択されていない場合、クエリ ビルダのリスト ボックスが空のリストを返すようにする返事をくれてありがとう、スティーブン。 動的計画法が問題を解決する方法を理解するのが困難です。
ユーザーが何も選択しない場合に空のリストを返すことを除いて、句が何であるかを知っています。 その列から何も選択しないことからすべてを選択することまで、すべてのユーザーがフィルター処理する必要がある既知の列がいくつかあります。 ユーザーがリストで何も選択しない場合、デフォルトにするものはありません。 私が投稿した SAT の例では、問題は、ユーザーが何も選択しない場合にゼロの状態を返す方法です。
何かが欠けているかもしれませんが、句を動的に構築することがどのように役立つかわかりません。 言い換えれば、節を動的に作成したとしても、何も選択されていない場合に空のリストを返すためにフィルターに動的に何を入れるべきかわかりません。 また、動的フィルターに入力できる場合、リスト ボックス フィルターの既知のセットに静的にプログラムできないのはなぜでしょうか?
Re: 項目が選択されていない場合、クエリ ビルダのリスト ボックスが空のリストを返すようにする強引な方法は、ユーザーから各句を文字列として作成し、動的 JSL を使用して結合された文字列を実行することです。 関連する質問を参照してください: Dynamic-Filters-for-SQL-Query