그래프 루프의 Where 절일부 필터링을 기반으로 보고서를 작성하도록 설계된 일부 코드가 있습니다.두 개의 목록이 제공되며 첫 번째 목록은 끌어올 재료를 결정하고(이 예에서는 Gender_List가 됨) 두 번째 목록은 그래프로 표시되는 속성을 결정합니다(이 예에서는 Property_List가 됨).아이디어는 선택한 모든 속성에 대한 그래프 매트릭스를 생성하는 각 Gender를 통한 루프가 있다는 것입니다.보고서 상단에는 필터링되지 않은 포괄적인 그래프도 있습니다.
두 가지 방법이 있습니다.
그래프에 고유한 where 절이 있는 첫 번째.Where 절이 라인업 상자에서 위치를 차지한다는 점을 제외하고는 대부분 이것이 작동하도록 했습니다. 또한 아래에 있는 모형의 어떤 이유로 완전히 이해하지 못하는 버그가 있습니다(정식 버전에는 해당 버그가 없지만 누군가가 수정하는 방법을 알고 있다면 여전히 궁금할 것입니다).모형 코드는 다음과 같습니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M","F"};
age_list = {12,13,14,15};
Property_List = {"Age", "Height", "Weight"};
w= new window("test",
VLB = V List Box ("A",
dt<<DISTRIBUTION></DISTRIBUTION>
두 번째는 그래프 루프의 각 반복을 래핑하는 데이터 필터 컨텍스트 상자를 사용하는 것입니다.내가 일할 수 없었던 것입니다.위의 where 버전이 작동하도록 할 수 있다면 데이터 필터 컨텍스트 상자/랩에 대해 너무 걱정할 필요가 없을 것 같습니다.
어쨌든, 라인업 상자에서 Where 절을 제거하기 위해 위의 코드를 정리하는 방법에 대한 생각이 있으십니까?
소비자 및 시장 조사콘텐츠 구성데이터 탐색 및 시각화실험 설계대량 맞춤화Re: 그래프 루프의 Where 절나중에 누군가가 이것을 지나칠 경우를 대비하여 데이터 필터 버전의 문제를 해결할 수 있었습니다.문제는 데이터 필터 컨텍스트 상자가 래핑하는 단일 개체를 가져야 한다는 것입니다.라인업 상자와 데이터 필터를 모두 감싸는 상자 위에 표시한 방식입니다.이로 인해 이상한 동작이 발생했습니다.LineupBox와 데이터 필터를 동일한 개체(HListBox)로 래핑하여 문제를 해결합니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ),
dt << Graph Builder(Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ) ),
Elements( Histogram( X, Legend( 6 ) ) )
)
)
);
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
data filter context box(
HLB = HlistBox(
LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Graph Builder(
Size( 534, 450 ),
Show Control Panel(0 ),
Show Legend(0),
Variables( X(Column( Property_List[i] ) )),
Elements( Histogram( X, Legend( 6 ) ) ),
/*Where( :Sex == Gender_List[j] ) ),*/
SendToReport(
Dispatch(
{},
"Graph Builder",
OutlineBox,
{Set Title( Property_List[i] ), Image Export Display( Normal )}
)
)
),
)
),
dt<<DATA filter=""></DATA>Re: 그래프 루프의 Where 절감사합니다.나는 그것을 스크립트에 넣으려고 시도했지만 작동하지 않았지만 잘못된 위치에 있었던 것 같습니다.또한 로컬 데이터 필터 래핑과 관련된 몇 가지 중요한 성능 문제를 발견하고 있으므로 이것이 우리가 가고자 하는 경로가 될 것이라고 생각합니다.
이것에 대한 도움을 주신 모든 분들께 감사드립니다.
Re: 그래프 루프의 Where 절추가하면 @jthi 내가 제공한 코드에 코드를 입력하면 원하는 것을 얻을 수 있습니다.

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;Re: 그래프 루프의 Where 절여전히 라인업 상자에서 "where" 절을 제거하는 방법을 알아낼 수 없는 것 같습니다.머리글/바닥글 기본 설정이 제거되는지 확인하기 위해 그래프 빌더 개체로 전환했지만 그렇게 하지 않은 것 같습니다.
LB를 래핑하는 데이터 필터를 다시 작성하려고 했습니다.어쨌든 사용자가 일부 사용자 정의할 수 있기 때문에 몇 가지 이점이 있습니다.이것 보인다 그러나 보시다시피 데이터 필터가 엄청나게 축소되어 있기 때문에 약간 불안정해 보입니다.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ),
dt << Graph Builder(Size( 534, 450 ),
Show Control Panel( 0 ),
Variables( X( :age ) ),
Elements( Histogram( X, Legend( 6 ) ) )
)
)
);
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
data filter context box(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Graph Builder(
Size( 534, 450 ),
Show Control Panel(0 ),
Variables( X(Column( Property_List[i] ) )),
Elements( Histogram( X, Legend( 6 ) ) ),
/*Where( :Sex == Gender_List[j] ) ),*/
),
)
),
dt<<DATA filter=""></DATA>
LB 상단에 데이터 필터를 로드해 보았지만 작동하지 않는 것 같습니다.
이것을 청소하는 방법에 대한 생각이 있습니까?이것은 기술적으로 작동하지만 약간 지저분해 보입니다.
Re: 그래프 루프의 Where 절이건 어때:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
eval(substitute(
expr(dt << Distribution( Continuous Distribution( Column( _col_ ) ), where( :Sex == _select_) )),
expr(_col_),Property_List[i],
expr(_select_), Gender_List[j]
))
);
);
);
);Re: 그래프 루프의 Where 절예를 들어 스크립트 끝에서 다음과 같이 제거할 수 있습니다.
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;그러나이 경우 Lineup은 Where 텍스트 상자를 요소로 생각하고 삭제하기 전에 창이 엉망이되기 때문에 도움이되지 않을 것이라고 생각합니다.
Re: 그래프 루프의 Where 절확실히 크게 개선되었지만 여전히 "where( :Sex == Gender_List[j]" 절이 라인업 상자에 표시되어 있는 것 같습니다. 어떻게 죽이는지 아세요?Re: 그래프 루프의 Where 절스크립트를 약간 수정했습니다.코드에 작동하지 않는 일부 재귀 추가가 있었습니다.이것이 당신이 원하는 것을 얻는지 확인하십시오
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
Gender_List = {"M", "F"};
age_list = {12, 13, 14, 15};
Property_List = {"Age", "Height", "Weight"};
w = New Window( "test", VLB = V List Box( Text Box( "A" ), dt << Distribution( Nominal Distribution( Column( :age ) ) ) ) );
For( j = 1, j <= N Items( Gender_List ), j++,
VLB << Append( Text Box( Gender_List[j] ) );
VLB << Append(
LB = LB = Lineup Box( N Col( 2 ), spacing( 10 ),
For( i = 1, i <= N Items( Property_List ), i++,
gb = dt << Distribution( Continuous Distribution( Column( Property_List[i] ) ), where( :Sex == Gender_List[j] ) )
)
)
);
);