Aritmetica del filtro dati locale (ad es. per Graphlet)I graphlet sono molto belli!
Il filtro dei dati locali è ottimo. Regola automaticamente i dati del graphlet in modo che corrispondano al sottogruppo del grafico principale.
Ci sono funzioni JSL per regolare questo filtro?
Ho già trovato il
Skip Filters()
nel post di Nascif Passa il mouse su un grafico da un'altra tabella di dati
Rimuove le parti inutilizzate del filtro in modo tale che il filtro possa funzionare anche per altre tabelle senza messaggi di avviso.
C'è una documentazione su come funziona in dettaglio?
Esiste anche una funzione JSL per aggiungere o intersecare i filtri?
Caso applicativo:
Se ho generato un grafico con un filtro (grafico Bif Class limitato all'età = 14)
Graph Builder(
Variables( X( :height ), Y( :weight ), Overlay( :age ) ),
Elements( Points( X, Y, Legend( 26 ) ) ),
Local Data Filter(
Add Filter( columns( :age ), Where( :age == 14 ), Display( :age, N Items( 6 ) ) )
)
)
e usalo come etichetta al passaggio del mouse (tramite "save Script" - "Hover Label"/"Paste Graphlet") ...
il filtro dati locale è ancora presente nello script JSL:
Open( "$SAMPLE_DATA/Big Class.jmp" );
Graph Builder(
Variables( X( :sex ) ),
Elements( Bar( X, Legend( 3 ) ) ),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Picture(
Graph Builder(
Size( 422, 474 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :age ) ),
Elements( Points( X, Y, Legend( 26 ) ) ),
Local Data Filter( Add Filter( columns( :age ), Where( :age == 14 ) ) )
)
)
)}
)
)
);
ma la sua funzione viene automaticamente sostituita dal filtro dati locale da Hover Label Extension Framework (tutte le età visibili):

Quindi, sarebbe fantastico avere una funzione di "unione" per combinare il filtro dati locale manuale con quello dell'Hover Label Extension Framework.
GraficaScriptingRe: Aritmetica del filtro dati locale (ad es. per Graphlet)Questa è una soluzione!
nessuna possibilità di fuga per la gestione del filtro dati locale di Hover Label Extension Framework.
Re: Aritmetica del filtro dati locale (ad es. per Graphlet)Potrebbe essere necessario utilizzare una tabella di dati aggiuntiva per questo
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:sex)),
Elements(Bar(X, Legend(3))),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Picture(
If( Is Empty(dt1),
dt1 = dt << Subset(All Rows, Selected Columns(0), invisible);
);
dt1 << Clear Row States;
filter_expr = Expr(And());
Insert Into(filter_expr, Name Expr(_whereExpr));
Insert Into(filter_expr, Name Expr(:age == 14));
Insert Into(filter_expr, Name Expr(:height >= 55 & :height <= 70));
Eval(EvalExpr(dt1 << Select Where(!filter_expr)));
dt1 << Hide and Exclude(1);
gb_expr = EvalExpr(dt1 << Graph Builder(
Size(422, 474),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Overlay(:age)),
Elements(Points(X, Y, Legend(26))),
Local Data Filter(
Grouped by AND(1),
Add Filter(columns(:sex), Where(Expr(NameExpr(_whereExpr)))),
Add Filter(columns(:age), Where(:age == 14), Display(:age, N Items(6))),
Add Filter(columns(:height), Where(:height >= 55 & :height <= 70))
)
));
gb_expr;
),
Click(
dt1 << Clear Row States;
gb2 = gb_expr;
Eval(EvalExpr(gb2 << On Close(
Try(Close(Expr(dt1), no save));
)));
)
)}
)
)
);
Write();Re: Aritmetica del filtro dati locale (ad es. per Graphlet)Ah, "Aggiungi filtro" aggiunge un nuovo gruppo "OR" - mi sono perso questo dettaglio:

Quindi, abbiamo solo bisogno di una soluzione per correggere il grafico in miniatura nell'etichetta al passaggio del mouse.
Ehm...
Re: Aritmetica del filtro dati locale (ad es. per Graphlet)Penso che anche l'ultimo dovrebbe funzionare se modifichi lo script in altro modo (come ho detto, ho appena forzato per farlo funzionare). Se dovessi ripulirlo, la prima iterazione sarebbe forse qualcosa del genere in cui applico prima i filtri dall'etichetta al passaggio del mouse e quindi aggiungo filtri aggiuntivi
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:sex)),
Elements(Bar(X, Legend(3))),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Picture(
Local({gb, f},
gb = Graph Builder(
Size(422, 474),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Overlay(:age)),
Elements(Points(X, Y, Legend(26)))
);
Eval(EvalExpr(
f = gb << Local Data Filter(
Add Filter(
columns(expr(_filters)), Where(expr(NameExpr(_whereExpr)))
)
)
));
//f << Conditional(1);
f << Grouped By And(1);
f << Add Filter(Columns(:age), Where(:age == 14));
f << Add Filter(Columns(:height), Where(:height >= 55));
)
),
)}
)
)
);
Write();
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-525478" slang="en-US" mode="NONE">Re: Aritmetica del filtro dati locale (ad es. per Graphlet)</LINGO-SUB><LINGO-BODY id="lingo-body-525478" slang="en-US" mode="NONE"><P>Ciao Jarmo.<BR /> Grazie mille per lo sniplet JSL - molto da imparare da esso ...</P><P> </P><P>È interessante:</P><OL><LI>Se il filtro dati locali viene creato all'interno della parte Generatore di grafici (il mio codice), viene sovrascritto dal filtro dati locali dal framework di estensione delle etichette al passaggio del mouse.</LI><LI>Se il Local Data Filter viene creato dopo il Graph Builder (il tuo codice), sovrascrive il Local Data Filter dal Hover Label Extrension Framework. *)</LI></OL><P> </P><P>*) Guardando più da vicino:</P><P>Questo vale solo per il grafico che si apre dopo aver fatto clic sul grafico in miniatura nell'etichetta al passaggio del mouse.<BR /> Il grafico in miniatura stesso mostra ancora tutte le età, quindi caso 1)</P><P>-> sorprendente che ci siano due distinti grafici generati. Con diversi modi per sovrascrivere il filtro dati locale?<BR /><BR /></P><P>Un'ultima domanda:<BR /> Esiste un tutorial che spiega le diverse funzioni di filtro dati locali.<BR /> ad esempio perché devi usare</P><PRE><CODE class=" language-jsl">f << (Filter Column(:age) << Where(::age == 14));
un perché lo fa
f << Add Filter(Columns(:age), Where(::age == 14));
aggiungere lo stesso filtro, ma senza alcun effetto?
Re: Aritmetica del filtro dati locale (ad es. per Graphlet)Puoi scrivere questo script, ma sarebbe sicuramente bello avere un'opzione in cui i filtri di dati locali potrebbero essere uniti. Questo codice può essere reso più pulito, ma l'ho appena forzato
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Variables(X(:sex)),
Elements(Bar(X, Legend(3))),
SendToReport(
Dispatch(
{},
"Graph Builder",
FrameBox,
{Set Graphlet(
Picture(
gb = Graph Builder(
Size(422, 474),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Overlay(:age)),
Elements(Points(X, Y, Legend(26)))
);
Insert Into(_filters, Name Expr(:age));
Eval(Substitute(
Expr(
f = gb << Local Data Filter(Add Filter(
columns(_col_list_), Where(_wheres_)
))
),
Expr(_col_list_),
_filters,
Expr(_wheres_),
Parse(_where)
));
f << (Filter Column(:age) << Where(::age == 14));
),
)}
)
)
);