Where-Klausel in der DiagrammschleifeIch habe Code, der darauf ausgelegt ist, einen Bericht basierend auf einer Filterung zu erstellen.Es werden zwei Listen eingegeben. Die erste bestimmt, welche Materialien abgerufen werden (in diesem Beispiel ist das „Gender_List“), die zweite bestimmt, welche Eigenschaften grafisch dargestellt werden (in diesem Beispiel ist das „Property_List“).Die Idee dahinter ist, dass es eine Schleife durch jedes Geschlecht geben wird, 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 größtenteils zum Laufen gebracht, außer dass die Where-Klausel letztendlich eine Position im Aufstellungsfeld einnimmt. Außerdem habe ich aus irgendeinem Grund in dem Mockup, das ich unten habe, einen Fehler, den ich nicht ganz verstehe (meine Vollversion hat diesen Fehler nicht, wäre aber trotzdem neugierig, ob jemand weiß, wie man ihn behebt).Hier ist der Mockup-Code
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.Das konnte ich nicht zur Arbeit bringen.Wenn ich die obige Where-Version zum Laufen bringen kann, muss ich mir meiner Meinung nach nicht allzu viele Gedanken über das Kontextfeld/den Wrap des Datenfilters machen.
Wie auch immer, haben Sie eine Idee, wie Sie den obigen Code bereinigen können, um die Where-Klauseln aus dem Aufstellungsfeld zu entfernen?
Verbraucher- und MarktforschungInhaltsorganisationDatenexploration und -visualisierungVersuchsplanungMassenanpassungBetreff: Where-Klausel in der DiagrammschleifeFür den Fall, dass dies in Zukunft noch jemand überwindet, konnte ich das Problem mit der Datenfilterversion lösen.Das Problem bestand darin, dass das Datenfilter-Kontextfeld ein einzelnes Objekt enthalten musste, das es umhüllte.So wie ich es oben dargestellt hatte, umhüllte die Box sowohl die Lineup-Box als auch den Datenfilter.Dies führte zu dem seltsamen Verhalten.Indem Sie die LineupBox und den Datenfilter in dasselbe Objekt (eine HListBox) einbinden, das das Problem anscheinend behoben hat:
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>Betreff: Where-Klausel in der DiagrammschleifeNett, danke.Ich habe versucht, es in das Skript einzufügen, habe es aber nicht zum Laufen gebracht, aber es sieht so aus, als wäre es an der falschen Stelle.Ich bemerke auch einige erhebliche Leistungsprobleme beim Umschließen lokaler Datenfilter, daher denke ich, dass dies der Weg sein wird, den wir einschlagen wollen.
Vielen Dank an alle für die Hilfe in diesem Fall.
Betreff: Where-Klausel in der DiagrammschleifeWenn Sie hinzufügen @jthi Wenn Sie den Code mit dem von mir bereitgestellten Code vergleichen, erhalten Sie, 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;Betreff: Where-Klausel in der DiagrammschleifeIch kann immer noch nicht herausfinden, wie ich die „Where“-Klausel im Aufstellungsfeld entfernen kann.Ich habe es auf ein Diagrammerstellungsobjekt umgestellt, um zu sehen, ob die Kopf-/Fußzeileneinstellungen es entfernen würden, aber es schien nicht so zu sein.
Ich habe versucht, dies als Datenfilter umzuschreiben, der den LB umschließt.Das hat auf jeden Fall einige Vorteile, da es dem Benutzer einige Anpassungen ermöglicht.Das scheint funktioniert, wie Sie sehen, sieht es jedoch etwas seltsam aus, da der Datenfilter unglaublich ausgeblendet 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 im LB zu laden, aber das schien nicht zu funktionieren.
Irgendwelche Ideen, wie man das bereinigt?Das funktioniert technisch gesehen, sieht aber ein wenig altbacken aus.
Betreff: Where-Klausel in der DiagrammschleifeWie 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 DiagrammschleifeSie können sie beispielsweise so am Ende des Skripts entfernen:
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;Aber in diesem Fall würde es meiner Meinung nach nicht helfen, da Lineup diese Textfelder als Elemente zu betrachten scheint und das Fenster durcheinander gerät, bevor Sie sie löschen.
Betreff: Where-Klausel in der DiagrammschleifeAuf jeden Fall eine große Verbesserung, aber es sieht so aus, als ob ich immer noch die hängende „where( :Sex == Gender_List[j]“-Klausel im Aufstellungsfeld habe. Irgendeine Idee, wie man das tötet?Betreff: Where-Klausel in der DiagrammschleifeIch habe dein Skript etwas überarbeitet.Ihr Code enthielt einige rekursive Anhänge, 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] ) )
)
)
);
);