Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?L'approccio che puoi adottare è quello di aggiungere al filtro dati locale, un gestore delle modifiche (Make Filter Change Handler), che quando il filtro cambia, acquisisce la clausola Where (clausola Ottieni dove) e quindi prende quel risultato e lo applica al Titolo nel titolo del grafico (impostare il testo).
La documentazione su come manipolare l'output può essere trovata nella sezione Scripting Guide su Display Trees.Questa documentazione è disponibile nella libreria della documentazione di JMP, disponibile nel menu a discesa Guida.
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?@hogi Grazie. Funzionerà, ma ho più di un pannello di filtri di dati e desidero che il titolo venga modificato in base a uno solo di essi (lo script sembra acquisire tutte le modifiche in uno qualsiasi dei pannelli di filtro di dati locali).
Come acquisire le modifiche in uno specifico pannello di filtro dei dati locali?
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Se ci sono più filtri dati nello stesso report, per ottenere quello corretto, puoi iniziare dal rispettivo oggetto GaphBuilder, andare un passo avanti e cercare il filtro dati:
ldf = (gb << parent)["Local Data Filter"] << get scriptable object;
codice completo:
Visualizza altro...
Alternative meno robuste:
ldf = (current report() << XPath("(//OutlineBox[text()='Local Data Filter'])"))[2] << get scriptable object;
ldf = current report()[OutlineBox(3)]<< get scriptable object;
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?@hogi Grazie per i vostri suggerimenti. Ho provato la tua seconda opzione meno robusta ma posso vedere che non è molto robusta come dici e non sono riuscito a farlo funzionare correttamente.
Nel seguente script, se voglio mostrare solo la selezione "età" sul riquadro del grafico, come scriverlo?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Scusa per il fraintendimento.
Se nel report è presente un solo filtro dati, non è necessario specificare il riferimento in modo più preciso.
D'altra parte:
Se vuoi restringere il titolo ad una parte del file Dove la clausola , hai bisogno di un'altra espressione Regex come quella qui sotto.
Cerca qualsiasi :età == tra parentesi tonde e restituisce l'intera stringa tra parentesi.
Quindi, per casi come
"Select Where( (:age == 14 | :age == 15) & :weight >= 113.5 )";
"Select Where( :age == 14 | :age == 16 | :age == 17 )"
restituirà solo la parte :age ....
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?@hogi . Il tuo script di seguito non mostra o modifica il titolo del grafico per me in JMP 16.2.0.
ames Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),".*\((:age == .*?)\).*","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);
È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Uso quanto segue per visualizzare "il mio testo" nella parte superiore dei miei grafici.
Dispatch( {}, "graph title", TextEditBox, {Set Text( "my text" )} )Tuttavia, vorrei che gli elementi selezionati nel filtro dei dati locali vengano visualizzati nel titolo del grafico mentre li seleziono (forse più sezioni delimitate da virgole?).
Come raggiungere questo obiettivo in JSL?
Personalizzazione di massaRi: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Bella espressione regolare!
Le parentesi vengono utilizzate in due modi intelligenti:
Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
All'inizio e alla fine del modello, il carattere backslash esce da una parentesi, \(...\) quindi corrisponde a una parentesi letterale nella clausola where. Lo spazio seguito da un asterisco corrisponde a zero o più spazi.
La coppia interna di parentesi Aspetto come se corrispondessero alle effettive parentesi nella clausola where, ma no! Le parentesi effettive erano già state abbinate. Queste parentesi interne sono parentesi di raggruppamento e formano il primo gruppo nella corrispondenza.
All'interno delle parentesi di raggruppamento, i caratteri letterali :età == sono abbinati, quindi .*? abbina i caratteri, uno alla volta, fino a quando non è possibile abbinare la parentesi letterale finale con escape. IL . corrisponde a qualsiasi cosa, * significa 0 o più e ? cambia lo 0 o più da avido (corsa fino alla fine) a riluttante (uno alla volta). Il comportamento riluttante assicura che venga utilizzata la prima parentesi.
Infine, il "\1" viene utilizzato per formattare un risultato: tutto corrisponde al primo gruppo di parentesi di raggruppamento.
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?@hogi Il tuo script qui sotto ora funziona in JMP 16.2 ma con i seguenti problemi.
- Il grafico inizia con nessuna età selezionata e nessun titolo mostrato, ma l'ultimo rimane mostrato sul titolo del grafico quando tutte le caselle di controllo dell'età sono deselezionate.
- Nel problema vero e proprio, il titolo inizia a essere visualizzato solo quando sono selezionate più di una casella di controllo.
Come risolvere questi due problemi (a meno che questa non sia specifica per la mia versione di JMP)?
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
gb = Graph Builder(
Size( 570, 518 ),
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :sex, :age, :weight ),
Display( :sex, "Check Box Display" ),
Display( :age, "Check Box Display" )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Hai ragione.
Se Regex non trova le informazioni sull'età, risulta mancante.
Quindi dopo
ldfText = Regex(ldf << get where clause(),"\( *(:age == .*?)\)","\1");
per favore Aggiungi
if(ismissing(ldfText),ldfText = "all ages");
per risolvere il problema.
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Se selezioni solo uno voce alla volta, è possibile utilizzare il file pagina dropzone per etichettare automaticamente il grafico:
[se vengono selezionate più voci, i rispettivi dati vengono suddivisi su più pagine]

Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Graph Builder(
Variables( X( :height ), Y( :weight ), Page( :age ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) ),
Local Data Filter(
Add Filter(
columns( :sex, :age, :weight ),
Where( :age == 14 )
)
)
);Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Il mio script di seguito (per il caso reale) sembra attivarsi solo dopo la seconda selezione della casella di controllo. Qualsiasi indizio sul perché sarebbe utile.
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\( *(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[4] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(
changeTitle();
);Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?Oh, scusa, ho sempre iniziato selezionando l'età - e poi mi sono perso il fatto che il titolo non si aggiornasse per il caso di una selezione di età + qualcos'altro.
Se c'è una sola selezione di età, non c'è bisogno di parentesi aggiuntive.
Quindi, che ne dici di saltare la prima parentesi?
NB: per favore non usare l'inverso con questa versione 

changeTitle = Function( {this},
print(this);
print(ldf << get where clause());
ldfText = Regex(ldf << get where clause(),"(:age == .*?)\)","\1");
if(ismissing(ldfText),ldfText = "any text you want");
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?@hogi . Non funziona per me in JMP 16.2.0. Ho aperto un nuovo thread su questo con un esempio migliore su ciò che non funziona qui ( collegamento ).
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dei dati locali (incluse le selezioni multiple)?In realtà, questa versione dovrebbe con Jmp 16.2.0:
Ri: È possibile aggiornare dinamicamente la selezione degli elementi basata sul "titolo del grafico" nel filtro dati locale (incluse selezioni multiple)?Ok grazie funziona correttamente, ma se mai come facciamo a mettere solo il nome cognome trovato nel database?
Nel tuo esempio verrà visualizzato solo il nome "KATIE"
R: È possibile aggiornare dinamicamente la selezione degli elementi in base al "titolo del grafico" nel filtro dati locale (incluse le selezioni multiple)?così funziona correttamente:
changeTitle = Function( {this},
Eval( Parse( "theRows = dt << get rows where" || Substr( ldf << get where clause(), 13 ) ) );
If( Length( theRows ) > 0,
theRow = theRows[1];
ldfText = :remarques[theRow],
ldfText = "All Names"
);
(Report( gb ) << XPath( "//TextEditBox" ))[1] << Set Text( ldfText );
);