グラフループ内のWhere句フィルタリングに基づいてレポートを作成するように設計されたコードがいくつかあります。2 つのリストが供給されます。最初のリストはどのマテリアルを取得するかを決定し (この例では Gender_List になります)、2 番目のリストはどのプロパティをグラフ化するかを決定します (この例では Property_List になります)。各性別を通るループがあり、選択されたすべてのプロパティのグラフのマトリックスを作成するという考えです。レポートの上部には、フィルタリングされていない全体的なグラフもあります
これを行うには 2 つの方法があります。
1 つ目は、グラフ内に組み込みの 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 句将来誰かがこれに遭遇した場合に備えて、データフィルターのバージョンで問題を解決することができました。問題は、データ フィルター コンテキスト ボックスがラップする単一のオブジェクトを必要とすることでした。上で紹介した方法で、ボックスはラインナップ ボックスとデータ フィルターの両方を包みました。その結果、奇妙な動作が発生しました。LineupBox と Data フィルターを同じオブジェクト (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] ) )
)
)
);
);