限制選擇並只允許在數據庫查詢過濾器中選擇一個我想要一個只顯示數據庫中部分條目的查詢過濾器。 我還想將用戶限制為一種選擇。 這是我在上一篇文章中使用的示例代碼。
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 個州。
我的實際應用程序是一個具有多個過濾器的大數據庫,所以我不想使用中間表。
另外,我想允許用戶只選擇一個狀態。 是否可以? 我可以更改過濾器類型。
回复:限制選擇並只允許在數據庫查詢過濾器中選擇一個一種選擇是為用戶選擇生成提示,以將這些選定的值傳遞給 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>回复:限制選擇並只允許在數據庫查詢過濾器中選擇一個感謝您管理我的期望。 一個更正是我沒有要求它做所有事情。 返回空列表與未選擇任何內容時返回完整列表一樣簡單。 將用戶限制為一種選擇對於許多語言和 API 來說很常見。 僅公開潛在選擇的子集可能是最苛刻的要求。 開發人員可能有興趣知道人們對這些特定功能感興趣。
我知道事情需要時間,並且不要指望很快就會有這些功能。 與此同時,建議的變通辦法大多很有幫助。 這個論壇值得讚賞。
如果有人可以推薦用於在 JMP 中構建自定義數據庫查詢過濾器接口的資源,我將非常感興趣。
我也在探索其他選項,例如 JavaScript、Rails、R 等。不過,將人們推向其他語言似乎並不適合使用 JMP 論壇。 所以,如果我確實設計了其他東西,我不會在這裡發布。
回复:限制選擇並只允許在數據庫查詢過濾器中選擇一個像 JMP 的查詢構建器這樣的通用工具可能很難做到所有事情。您是否考慮過為查詢創建自己的自定義界面?一開始會有更多的工作,但隨後您將擁有您想要的功能。
回复:限制選擇並只允許在數據庫查詢過濾器中選擇一個謝謝, gz摩根0 ,您的努力是有幫助和讚賞的。 避免使用中間表並不符合我的希望,但我可以看到使用 Invisible 和 Set Dirty 如何使它適用於我使用多個過濾器的情況。 我不知道那個解決方案。 我會將您的回答標記為解決方案,並希望有人會發表改進意見。
我一直在嘗試在 Where 和 In List 中做事,尤其是 ValueSource。 據我所知,ValueSource 沒有在我的腳本中執行任何操作。 我沒有在腳本索引中看到它。
也許我被在線表格寵壞了。 我仍然想請求任何 JMP 開發人員閱讀,您能否將以下功能添加到數據庫查詢過濾器中。
- 未選擇任何內容時返回一個空列表(我之前的帖子)
- 允許在 ListBox 過濾器框中發布列的子集,可能使用 Where 或 In List 中某處的列表
- 允許限制用戶只能選擇一項的情況。
回复:限制選擇並只允許在數據庫查詢過濾器中選擇一個我嘗試了 3 個選項:
- 對您的腳本進行簡單修改,將列出所有州,但會預先選擇太平洋州列表。 用戶看到突出顯示的列表,但需要使用 CTRL 單擊來選擇或取消選擇。
- 刪除的帖子包含一個使用手動列表的腳本。 它會提示太平洋國家列表。 但是,它沒有根據用戶選擇進行過濾。 我嘗試了 Ands 和其他語法,但查詢總是返回完整的太平洋國家集。
- 我可以獲得較小列表的唯一方法是打開 SATByYear,使用查詢創建一個子集,然後在新 SQL 查詢中使用該子集表。 注意 << 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;
回复:限制選擇並只允許在數據庫查詢過濾器中選擇一個我刪除了我的第一個回复。 手動列表確實提供了預期的提示,但沒有根據用戶選擇進行過濾。
尋找更新,很快。