Clause Where dans la boucle du grapheJ'ai du code conçu pour créer un rapport basé sur un filtrage.Il sera alimenté de deux listes, la première déterminera quels matériaux seront extraits (dans cet exemple qui sera Gender_List), la seconde déterminera quelles propriétés seront graphées (dans cet exemple, ce sera Property_List).L'idée étant qu'il y aura une boucle à travers chaque genre qui créera une matrice de graphiques pour toutes les propriétés sélectionnées.Il existe également un graphique global non filtré en haut du rapport
Il y a deux façons de faire ça.
Le premier avec des clauses where intrinsèques dans les graphes.J'ai surtout réussi à faire fonctionner cela, sauf que la clause Where finit par occuper une position dans la zone d'alignement. Aussi pour une raison quelconque dans la maquette que j'ai ci-dessous, j'ai un bogue que je ne comprends pas entièrement (ma version complète n'a pas ce bogue, mais serait toujours curieux si quelqu'un sait comment le résoudre).Voici le code de la maquette
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>
Le second est avec des boîtes de contexte de filtre de données qui enveloppent chaque itération de la boucle de graphiques.Celui-là, je n'ai pas pu me rendre au travail.Si je peux faire fonctionner la version where ci-dessus, je ne pense pas que je devrais trop m'inquiéter de la boîte / enveloppe de contexte de filtre de données.
Quoi qu'il en soit, des réflexions sur la façon de nettoyer le code ci-dessus pour supprimer ces clauses Where de la zone d'alignement?
ScriptingRe: Clause Where dans la boucle de grapheJ'ai retravaillé un peu votre script.Vous aviez des ajouts récursifs dans votre code qui ne fonctionnaient pas.Voyez si cela vous donne ce que vous voulez
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: Clause Where dans la boucle de grapheCertainement une amélioration majeure, mais il semble que j'ai toujours cette clause suspendue "where (: Sex == Gender_List [j]" qui apparaît dans la zone de programmation. Une idée comment tuer ça?Re: Clause Where dans la boucle de grapheVous pouvez les supprimer par exemple avec ceci à la fin du script:
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;Mais dans ce cas, je suppose que cela n'aidera pas parce que Lineup semble que les zones de texte Where sont des éléments et que la fenêtre est gâchée avant que vous ne les supprimiez.
Re: Clause Where dans la boucle de grapheQue dis-tu de ça:
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: Clause Where dans la boucle de grapheJe n'arrive toujours pas à comprendre comment se débarrasser de cette clause «où» dans la boîte de programmation.Je l'ai basculé sur un objet de générateur de graphique pour voir si les préférences d'en-tête / pied de page le supprimeraient, mais je n'ai pas semblé le faire.
J'ai essayé de réécrire ceci un filtre de données enveloppant le LB.Cela présente de toute façon des avantages car cela permet une certaine personnalisation par l'utilisateur.Ce semble pour fonctionner, cependant, comme vous pouvez le voir, cela semble un peu bancal car le filtre de données est incroyablement réduit.
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>
J'ai essayé de charger le filtre de données en haut de la LB mais cela ne semblait pas fonctionner.
Des pensées sur la façon de nettoyer cela?Cela fonctionne techniquement mais semble un peu junky.
Re: Clause Where dans la boucle de grapheSi vous ajoutez @jthi code au code que j'ai fourni, il vous donnera ce que vous voulez

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;