選択肢を制限し、DB クエリ フィルターで 1 つの選択のみを許可するデータベース内のエントリの一部のみを表示するクエリ フィルタが必要です。 また、ユーザーの選択肢を 1 つに制限したいと思います。 以前の投稿で使用したサンプル コードを次に示します。
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;たとえば、ユーザーにアラスカ、カリフォルニア、ハワイ、オレゴン、ワシントンのみを表示したい場合はどうすればよいでしょうか?
_AllRows_ を {"Alaska", "California", "Hawaii", "Oregon", "Washington"} に置き換えることができます。 ただし、それでもすべての状態が表示されます。 リスト内の 5 つの状態を事前に選択するだけです。
私の実際のアプリケーションは、複数のフィルターを備えた大きな DB であるため、中間テーブルを使用したくありません。
また、ユーザーが 1 つの状態のみを選択できるようにしたいと考えています。 出来ますか? フィルターの種類を変更できます。
Re: 選択肢を制限し、DB クエリ フィルターで 1 つの選択のみを許可する1 つのオプションは、ユーザーが選択した値を SQL ステートメントに渡して実行するためのプロンプトを生成することです。スクリプトは、データベース接続の作成()とSQL を実行する()データベースと対話します。 以下は、より堅牢なスクリプトを作成するために使用できる簡単な例であるため、ユースケースでこれを機能させるには、より多くの作業が必要になります。 うまくいけば、これはあなたが望む結果を得るのに役立ちます.
//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>Re: 選択肢を制限し、DB クエリ フィルターで 1 つの選択のみを許可する私の期待に応えてくれてありがとう。 1 つの修正点は、すべてを実行するように要求したわけではないということです。 空のリストを返すのは、何も選択されていないときに完全なリストを返すのと同じくらい簡単です。 ユーザーの選択肢を 1 つに制限することは、多くの言語や API で一般的です。 潜在的な選択肢のサブセットのみを公開することは、最も要求の厳しい要求になる可能性があります。 開発者は、それらの特定の機能に関心があることを知りたいと思うかもしれません。
時間がかかることは理解しており、これらの機能はすぐには期待できません。 それまでの間、提案された回避策はほとんど役に立ちました。 このフォーラムは高く評価されています。
JMP 内でカスタム DB クエリ フィルタ インターフェイスを構築するためのリソースを推奨できる人がいれば、非常に興味があります。
また、JavaScript、Rails、R など、他のオプションも検討しています。しかし、人々を他の言語に向かわせることは、JMP ディスカッション フォーラムの適切な使い方とは思えません。 ですから、何か他のものをデザインする場合、ここには投稿しません。
Re: 選択肢を制限し、DB クエリ フィルターで 1 つの選択のみを許可するJMP のクエリ ビルダーのような一般的なツールですべてを行うのは難しい場合があります。クエリ用に独自のカスタム インターフェイスを作成することを検討しましたか?最初はより多くの作業が必要になりますが、必要な機能が正確に得られます。
Re: 選択肢を制限し、DB クエリ フィルターで 1 つの選択のみを許可するありがとう、 gzmorgan0 、 あなたの努力は役に立ち、感謝しています。 中間テーブルを避けることは私の希望には合いませんが、Invisible と Set Dirty を使用すると、複数のフィルターを使用する場合にどのように機能するかがわかります。 私はその解決策を知りませんでした。 あなたの回答を解決策としてマークし、誰かが改善を投稿してくれることを願っています。
私は Where と In List で何かをしようとしてきましたが、最も注目すべきは ValueSource です。 私が知る限り、ValueSource はスクリプトで何も実行していません。 スクリプト インデックスには表示されません。
多分私はオンラインフォームに甘やかされています。 それでも、JMP 開発者に読んでもらいたいのですが、次の機能を DB クエリ フィルターに追加できますか。
- 何も選択されていないときは空のリストを返す (私の以前の投稿)
- おそらく Where または In List のどこかのリストを使用して、ListBox フィルター ボックス内の列のサブセットの投稿を許可します
- ユーザーが 1 つの項目のみを選択するように制限する状況を許可します。
Re: 選択肢を制限し、DB クエリ フィルターで 1 つの選択のみを許可する私は3つのオプションを試しました:
- スクリプトを簡単に変更すると、すべての州がリストされますが、太平洋州のリストが事前に選択されます。 ユーザーには強調表示されたリストが表示されますが、CTRL クリックを使用して選択または選択解除する必要があります。
- 削除された投稿には、手動リストを使用したスクリプトが含まれていました。 太平洋の州のリストが表示されます。 ただし、ユーザーの選択に基づくフィルタリングは行われませんでした。 Ands やその他の構文を試しましたが、クエリは常に太平洋の州の完全なセットを返しました。
- 小さいリストを取得できる唯一の方法は、SATByYear を開き、クエリを使用してサブセットを作成し、そのサブセット化されたテーブルを New SQL Query で使用することでした。 注意 << Set Dirty(0) はテーブルを未編集として設定し、SQL クエリはクエリが実行されるとテーブルを閉じます。
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;
Re: 選択肢を制限し、DB クエリ フィルターで 1 つの選択のみを許可する最初の回答を削除しました。 手動リストは予想されるプロンプトを提供しましたが、ユーザーの選択に基づいてフィルタリングしませんでした。
すぐにアップデートを探してください。