Where-Klausel in der GrafikschleifeIch habe einen Code, der entwickelt wurde, um einen Bericht basierend auf einer Filterung zu erstellen.Es werden zwei Listen gespeist, die erste bestimmt, welche Materialien abgerufen werden (in diesem Beispiel Gender_List), die zweite bestimmt, welche Eigenschaften grafisch dargestellt werden (in diesem Beispiel Property_List).Die Idee ist, dass es eine Schleife durch jedes Geschlecht gibt, die eine Matrix von Diagrammen für alle ausgewählten Eigenschaften erstellt.Oben im Bericht befindet sich außerdem ein übergreifendes, ungefiltertes Diagramm
Es gibt zwei Möglichkeiten, dies zu tun.
Die erste mit intrinsischen where-Klauseln in den Diagrammen.Ich habe das meistens zum Laufen gebracht, außer dass die Where-Klausel eine Position in der Aufstellungsbox einnimmt. Auch aus irgendeinem Grund habe ich in dem Modell, das ich unten habe, einen Fehler, den ich nicht ganz verstehe (meine Vollversion hat diesen Fehler nicht, wäre aber trotzdem neugierig, wenn jemand weiß, wie man ihn behebt).Hier ist der Modellcode
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>
Die zweite besteht aus Datenfilter-Kontextfeldern, die jede Iteration der Diagrammschleife umschließen.Den konnte ich nicht zur Arbeit bringen.Wenn ich die oben genannte Where-Version zum Laufen bringen kann, muss ich mir keine allzu großen Sorgen um das Kontextfeld / den Wrap des Datenfilters machen.
Wie auch immer, irgendwelche Gedanken darüber, wie man den obigen Code bereinigt, um diese Where-Klauseln aus dem Line-Up-Feld zu entfernen?
SkriptingBetreff: Where-Klausel in der GrafikschleifeIch habe dein Skript ein bisschen überarbeitet.Sie hatten einige rekursive Anhänge in Ihrem Code, die nicht funktionierten.Sehen Sie, ob Sie damit das bekommen, was Sie wollen
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] ) )
)
)
);
);Betreff: Where-Klausel in der GrafikschleifeAuf jeden Fall eine große Verbesserung, aber es sieht so aus, als hätte ich immer noch die hängende "where (: Sex == Gender_List [j]" - Klausel, die im Lineup-Feld angezeigt wird. Irgendeine Idee, wie man das tötet?Betreff: Where-Klausel in der GrafikschleifeSie können sie beispielsweise damit am Ende des Skripts entfernen:
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;Aber in diesem Fall würde ich vermuten, dass es nicht hilft, da Lineup die Where-Textfelder als Elemente erscheinen und das Fenster durcheinander kommt, bevor Sie sie löschen.
Betreff: Where-Klausel in der GrafikschleifeWie wäre es damit:
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]
))
);
);
);
);Betreff: Where-Klausel in der GrafikschleifeIch kann immer noch nicht herausfinden, wie ich diese "where" -Klausel in der Aufstellungsbox loswerden kann.Ich habe es auf ein Graph Builder-Objekt umgestellt, um zu sehen, ob die Kopf- / Fußzeileneinstellungen es entfernen würden, aber es schien es nicht zu tun.
Ich habe versucht, diesen Datenfilter, der die LB umschließt, neu zu schreiben.Dies hat ohnehin einige Vorteile, da der Benutzer einige Anpassungen vornehmen kann.Dies scheint Wie Sie sehen, sieht es jedoch etwas wackelig aus, da der Datenfilter unglaublich zusammengebrochen ist.
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>
Ich habe versucht, den Datenfilter oben in der LB zu laden, aber das schien nicht zu funktionieren.
Irgendwelche Gedanken darüber, wie man das aufräumt?Das funktioniert technisch, sieht aber etwas unkonventionell aus.
Betreff: Where-Klausel in der GrafikschleifeWenn Sie hinzufügen @jthi Code zu dem Code, den ich bereitgestellt habe, gibt es Ihnen, was Sie wollen

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;