선택한 항목이 없을 때 쿼리 작성기의 목록 상자에서 빈 목록을 반환하도록 함사용자가 아무 것도 선택하지 않으면 빈 목록이 반환되는 쿼리를 원합니다. 다음은 다음 JMP 쿼리 빌더 페이지에서 수정된 예입니다.
https://www.jmp.com/support/help/14/query-and-join-data-tables-with-jmp-query-builde.shtml
웹 페이지에서처럼 점수로 필터링하는 대신 사용자가 상태를 선택하도록 수정했습니다. 상태를 선택하지 않으면 빈 목록이나 테이블이 반환되기를 원합니다.
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: 선택한 항목이 없을 때 쿼리 작성기의 목록 상자에서 빈 목록을 반환하도록 합니다.먼저, 수행 중인 작업에 대한 명확한 예를 게시해 주셔서 감사합니다. 매우 도움이 됩니다.
스크립트를 그대로 사용하여 이 두 가지 작업을 수행해 보십시오.
1. 스크립트를 실행하고 아무 것도 선택하지 말고 확인을 클릭합니다.
2. 스크립트를 실행하고 전체(또는 일부 상태)를 선택합니다.
두 결과 테이블, 특히 57행에서 소스 스크립트를 비교합니다.
아무 것도 선택하지 않았을 때와 모든 것을 선택했을 때의 차이는 정말 다릅니다.
이것은 완전히 속임수이지만 작동합니다!
스크립트 시작 부분에서 다음과 같이 첫 번째 줄을 편집합니다.
dtq=New SQL Query(
이 줄을 스크립트 맨 아래에 추가하십시오.
x=expr(dtq<<GET script="">0,
dtq<<SELECT all="" rows=""><BR /></SELECT></GET>
쿼리는 dtq를 핸들로 사용하여 데이터 테이블을 다시 실행합니다. 그런 다음 스크립트는 테이블에서 소스 스크립트를 가져오고 "xx"를 핸들로 사용하여 인용된 문자열로 바꿉니다. Contains 인수는 전체 테이블이 포함되었는지 확인합니다. 이는 대화 상자에서 아무 것도 선택하지 않은 경우에 발생합니다. 이 경우 "_AllRows_" 텍스트가 소스 스크립트에 포함됩니다. 이것이 참이면 테이블의 모든 행이 선택된 다음 삭제됩니다.
내가 말했듯이 완전히 부정 행위이지만이 경우에는 작동합니다.
Re: 선택한 항목이 없을 때 쿼리 작성기의 목록 상자에서 빈 목록을 반환하도록 합니다.답장을 보내 주셔서 감사합니다, 스티븐. 동적 프로그래밍이 내 문제를 어떻게 해결하는지 확인하는 데 어려움을 겪고 있습니다.
사용자가 아무 것도 선택하지 않으면 빈 목록을 반환하는 것을 제외하고는 절이 무엇인지 알고 있습니다. 모든 사용자가 해당 열에서 아무 것도 선택하지 않는 것부터 모든 것을 선택하는 것, 그리고 그 사이의 모든 것을 선택하는 것까지 모든 위치에서 필터링해야 하는 소수의 알려진 열이 있습니다. 사용자가 목록에서 아무 것도 선택하지 않으면 아무것도 기본값이 되지 않기를 바랍니다. 내가 게시한 SAT 예제에서 질문은 사용자가 아무 것도 선택하지 않으면 반환되는 0 상태를 만드는 방법입니다.
동적으로 조항을 작성하는 것이 어떻게 도움이 될지 모르겠습니다. 뭔가 빠졌을 수도 있습니다. 즉, 절을 동적으로 작성하더라도 아무것도 선택하지 않은 경우 빈 목록을 반환하기 위해 동적으로 필터에 무엇을 넣어야 하는지 알 수 없습니다. 그리고 동적 필터에 입력할 수 있다면 알려진 목록 상자 필터 집합에 정적으로 프로그래밍할 수 없는 이유는 무엇입니까?
Re: 선택한 항목이 없을 때 쿼리 작성기의 목록 상자에서 빈 목록을 반환하도록 합니다.무차별 대입 방식은 사용자의 각 절을 문자열로 작성한 다음 동적 JSL을 사용하여 결합된 문자열을 실행하는 것입니다. 관련 질문 보기: SQL 쿼리용 동적 필터