Clausola Where nel ciclo del graficoHo del codice progettato per creare un rapporto basato su alcuni filtri.Verranno alimentati due elenchi, il primo determinerà quali materiali verranno estratti (in questo esempio sarà Gender_List), il secondo determinerà quali proprietà verranno rappresentate graficamente (in questo esempio sarà Property_List).L'idea è che ci sarà un loop attraverso ogni genere che creerà una matrice di grafici per tutte le proprietà selezionate.C'è anche un grafico generale e non filtrato nella parte superiore del rapporto
Ci sono due modi per farlo.
Il primo con clausole where intrinseche nei grafici.Per lo più sono riuscito a farlo funzionare, tranne per il fatto che la clausola Where finisce per prendere una posizione nella casella di allineamento. Inoltre, per qualche motivo, nel mockup che ho di seguito ho un bug che non capisco del tutto (la mia versione completa non ha quel bug, ma sarei comunque curioso se qualcuno sa come risolverlo).Ecco il codice mockup
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>
Il secondo è con le caselle di contesto del filtro dati che racchiudono ogni iterazione del ciclo di grafici.Quello non sono riuscito a mettermi al lavoro.Se riesco a far funzionare la versione where sopra, non credo che dovrò preoccuparmi troppo della casella di contesto del filtro dati/wrap.
Ad ogni modo, qualche idea su come ripulire il codice sopra per rimuovere quelle clausole Where dalla casella di allineamento?
Consumatori e ricerche di mercatoOrganizzazione dei contenutiEsplorazione e visualizzazione dei datiProgettazione di esperimentiPersonalizzazione di massaRi: Clausola Where nel ciclo del graficoNel caso in cui qualcuno lo superi in futuro, sono stato in grado di risolvere il problema con la versione del filtro dati.Il problema era che la casella di contesto del filtro dati doveva avere un singolo oggetto che stava avvolgendo.Nel modo in cui l'avevo presentato sopra la scatola avvolgeva sia la Lineup Box che il Data Filter.Ciò ha provocato lo strano comportamento.Avvolgendo LineupBox e Data filter nello stesso oggetto (un HListBox) che sembrava risolvere il problema:
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>Ri: Clausola Where nel ciclo del graficoBene grazie.Ho provato a inserirlo nella sceneggiatura e non l'ho fatto funzionare, ma sembra che fosse nella posizione sbagliata.Sto anche notando alcuni significativi problemi di prestazioni con il wrapping del filtro dati locale, quindi penso che questa sarà la strada che vogliamo seguire.
Grazie a tutti per l'aiuto su questo.
Ri: Clausola Where nel ciclo del graficoSe aggiungi @jthi code al codice che ho fornito, ti darà quello che vuoi

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;Ri: Clausola Where nel ciclo del graficoNon riesco ancora a capire come eliminare quella clausola "dove" nella casella della formazione.L'ho passato a un oggetto generatore di grafici per vedere se le preferenze di intestazione/piè di pagina lo avrebbero rimosso, ma non sembrava farlo.
Ho provato a riscrivere questo un filtro dati che racchiude il file LB.Ciò presenta comunque alcuni vantaggi in quanto consente una certa personalizzazione da parte dell'utente.Questo sembra per funzionare, tuttavia, come puoi vedere sembra un po' traballante perché il filtro dati è incredibilmente collassato.
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>
Ho provato a caricare il filtro dati nella parte superiore del LB ma non sembra funzionare.
Qualche idea su come ripulire questo?Tecnicamente funziona, ma sembra un po' scadente.
Ri: Clausola Where nel ciclo del graficoCosa ne pensi di questo:
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]
))
);
);
);
);Ri: Clausola Where nel ciclo del graficoPuoi rimuoverli ad esempio con questo alla fine dello script:
whereTb = w << XPath("//TextBox[contains(text(), 'Where(:sex == Gender_List[j])')]");
whereTb << Delete;Ma in questo caso immagino che non sarà d'aiuto perché Lineup sembra quelli Where caselle di testo come elementi e la finestra viene incasinata prima che tu li elimini.
Ri: Clausola Where nel ciclo del graficoSicuramente un grande miglioramento, ma sembra che io abbia ancora quella clausola "where( :Sex == Gender_List[j]" sospesa che appare nella casella della scaletta. Qualche idea su come ucciderlo?Ri: Clausola Where nel ciclo del graficoHo rielaborato un po' la tua sceneggiatura.Hai avuto alcune aggiunte ricorsive nel tuo codice che non funzionavano.Vedi se questo ti dà quello che vuoi
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] ) )
)
)
);
);