선택을 제한하고 DB 쿼리 필터에서 하나의 선택만 허용데이터베이스 항목의 일부만 표시하는 쿼리 필터가 필요합니다. 또한 사용자를 하나의 선택으로 제한하고 싶습니다. 다음은 이전 게시물에서 사용한 예제 코드입니다.
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이므로 중간 테이블을 사용하고 싶지 않습니다.
또한 사용자가 하나의 상태만 선택할 수 있도록 하고 싶습니다. 가능합니까? 필터 유형을 변경할 수 있습니다.
Re: 선택을 제한하고 DB 쿼리 필터에서 하나의 선택만 허용합니다.한 가지 옵션은 실행을 위해 선택한 값을 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 쿼리 필터에서 하나의 선택만 허용합니다.제 기대치를 관리해 주셔서 감사합니다. 한 가지 수정 사항은 모든 작업을 요청하지 않았다는 것입니다. 빈 목록을 반환하는 것은 아무 것도 선택하지 않았을 때 전체 목록을 반환하는 것만큼 쉽습니다. 사용자를 하나의 선택으로 제한하는 것은 많은 언어와 API에서 일반적입니다. 잠재적인 선택의 하위 집합만 노출하는 것이 가장 까다로운 요청일 수 있습니다. 개발자는 이러한 특정 기능에 관심이 있다는 사실에 관심이 있을 수 있습니다.
작업에 시간이 걸리며 이러한 기능이 곧 제공될 것으로 기대하지 않는다는 점을 이해합니다. 그동안 제안된 해결 방법이 대부분 도움이 되었습니다. 이 포럼은 높이 평가됩니다.
누구든지 JMP 내에서 사용자 지정 DB 쿼리 필터 인터페이스를 구축하기 위한 리소스를 추천할 수 있다면 매우 관심이 있습니다.
JavaScript, Rails, R 등과 같은 다른 옵션도 탐색하고 있습니다. 하지만 사람들을 다른 언어로 밀어붙이는 것은 JMP 토론 포럼을 적절하게 사용하는 것 같지 않습니다. 그래서 제가 다른 것을 디자인하면 여기에 게시하지 않겠습니다.
Re: 선택을 제한하고 DB 쿼리 필터에서 하나의 선택만 허용합니다.JMP의 쿼리 빌더와 같은 일반 도구로는 모든 작업을 수행하기 어려울 수 있습니다.쿼리에 대한 고유한 사용자 지정 인터페이스를 만드는 것을 고려해 보셨습니까?처음에는 더 많은 작업이 필요하겠지만 원하는 기능을 정확히 갖게 될 것입니다.
Re: 선택을 제한하고 DB 쿼리 필터에서 하나만 선택할 수 있습니다.감사해요, gzmorgan0 , 귀하의 노력이 도움이 되고 감사합니다. 중간 테이블을 피하려는 내 희망에는 맞지 않지만 Invisible 및 Set Dirty를 사용하면 여러 필터가 있는 경우에 어떻게 작동하는지 알 수 있습니다. 나는 그 해결책을 몰랐다. 귀하의 답변을 솔루션으로 표시하고 누군가 개선 사항을 게시하기를 바랍니다.
저는 Where 및 In List에서 특히 ValueSource를 사용하여 작업을 시도했습니다. 내가 알 수 있는 한, ValueSource는 내 스크립트에서 아무 것도 하지 않습니다. 스크립팅 색인에 표시되지 않습니다.
어쩌면 나는 온라인 양식에 의해 버릇이 있습니다. 여전히 JMP 개발자가 DB 쿼리 필터에 다음 기능을 추가할 수 있는지 읽어달라고 요청하고 싶습니다.
- 아무것도 선택하지 않으면 빈 목록 반환(내 이전 게시물)
- Where 또는 In List 어딘가에 있는 목록을 사용하여 ListBox 필터 상자에 열의 하위 집합 게시 허용
- 사용자가 하나의 항목만 선택하도록 제한하는 상황을 허용합니다.
Re: 선택을 제한하고 DB 쿼리 필터에서 하나의 선택만 허용합니다.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;
Re: 선택을 제한하고 DB 쿼리 필터에서 하나의 선택만 허용합니다.첫 번째 응답을 삭제했습니다. 수동 목록은 예상 프롬프트를 제공했지만 사용자 선택을 기반으로 필터링하지 않았습니다.
곧 업데이트를 찾아보세요.