グラフループのWHERE句フィルタリングに基づいてレポートを作成するように設計されたコードがあります。2つのリストが提供されます。1つ目はプルされるマテリアルを決定し(この例ではGender_Listになります)、2つ目はグラフ化されるプロパティを決定します(この例ではProperty_Listになります)。選択したすべてのプロパティのグラフのマトリックスを作成するループが各性別を通過するという考えです。レポートの上部には、フィルタリングされていない包括的なグラフもあります。
これを行うには2つの方法があります。
グラフの最初の組み込みの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>
2つ目は、グラフのループの各反復をラップするデータフィルターコンテキストボックスを使用することです。それは私が仕事に就くことができなかったものです。上記のwhereバージョンを機能させることができれば、データフィルターのコンテキストボックス/ラップについてあまり心配する必要はないと思います。
とにかく、これらのWhere句をラインアップボックスから削除するために上記のコードをクリーンアップする方法について何か考えはありますか?
スクリプティング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] ) )
)
)
);
);Re:グラフループのWhere句間違いなく大きな改善ですが、まだ「where(:Sex == Gender_List [j]」句がラインナップボックスに表示されているようです。 それを殺す方法はありますか?Re:グラフループのWhere句たとえば、スクリプトの最後でこれを使用してそれらを削除できます。
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;しかし、この場合、ラインナップは要素としてのテキストボックスとウィンドウが削除される前に台無しになっているように見えるので、役に立たないと思います。
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句それでも、ラインナップボックスの「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句追加した場合@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;