Collega i filtri dati locali tra le finestre del Generatore di grafici da diverse tabelle di datiSupponiamo di avere due finestre di Graph Builder da diverse tabelle di dati, ciascuna con un filtro dati locale che filtra su "numero di esecuzione" e "ora".
È possibile collegare i due filtri dati locali in modo che rimangano sincronizzati?
O forse con JSL per estrarre le impostazioni correnti dal filtro dati locale n. 1 e applicarle al filtro dati locale n. 2?
(Immagino che il passaggio 1 stia ottenendo un riferimento ai filtri di dati locali, non ho ancora capito come farlo - ecco cosa ho finora:
// get the last Graph Builder
win = Get Window List();
graphs = Filter Each({w}, win,
If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0)
);
last_gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;
localDataFilter = last_gb << XPath("//OutlineBox[text()='Local Data Filter']");)
Automazione e scriptingOggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiPotresti concatenare le tabelle insieme e quindi utilizzare una sorta di colonna di raggruppamento per separarle in grafici diversi? Potrebbe essere più facile che fare scherzi con i gestori di cambio filtro.
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiNon proprio: una tabella è un riepilogo di alto livello dei risultati dell'esecuzione e identifichiamo i problemi da tale riepilogo, quindi passiamo al grafico dettagliato dell'esecuzione e selezioniamo l'esecuzione specifica nel filtro dati.Non è ovvio per me come l'unione di queste due tabelle consentirebbe quel tipo di comportamento.
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiChe ne dici di unioni virtuali?
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datipost simile:
https://community.jmp.com/t5/Discussions/Virtual-linking-two-tables-via-JSL-scripting/mp/657682/highlight/true#M84705
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiImmagino che siano necessari filtri di dati non locali in modo tale che la funzionalità di invio/ricezione dei collegamenti virtuali trasmetta le impostazioni del filtro.
Per il mio caso, questo era troppo lento.
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiE se vuoi copiare l'intero filtro, puoi usare copia/incolla:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :height ), Y( :weight ), Overlay( :sex ) ),
Elements( Points( X, Y, Legend( 1 ) ), Smoother( X, Y, Legend( 2 ) ) )
);
gb2 = dt << Graph Builder(
Show Control Panel( 0 ),
Variables( X( :sex ), X( :age, Position( 1 ) ), Y( :weight ), Overlay( :sex ) ),
Elements( Bar( X( 1 ), X( 2 ), Y, Legend( 3 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :age ),
Where( :age == 15 ),
Display( :age, N Items( 6 ) )
)
);
df1 << copy local data filter();
gb2 << paste local data filter();
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiMi piace l'idea, ma ovviamente c'è qualcosa che non capisco nella tua soluzione, poiché si blocca quando provo a eseguirlo.
Ecco cosa ho finora:
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb1 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
gb2 = dt << Graph Builder(
Graph Spacing( 5 ),
Variables( X( :sex ), Y( :height ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
df1 = gb1 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "M" ),
Display( :sex, N Items( 2 ) )
)
);
df2 = gb2 << Local Data Filter(
Add Filter(
columns( :sex ),
Where( :sex == "F" ),
Display( :sex, N Items( 2 ) )
)
);
broadcastFilter = Function( {},
//get the script
filterScript = df1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval(
Substitute(
Expr(
df2 << Start Over << _filter_
),
Expr( _filter_ ), Name Expr( filterExpression )
)
);
);
// activate the Filter Change Handler
rs = df1 << Make Filter Change Handler( broadcastFilter );Ecco l'errore: "broadcastFilter ha 0 parametri () ma sono stati forniti 1 argomenti (18)".Qualche idea di cosa stia parlando?Non credo di fornire argomenti in quest'ultima riga...
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiOH. Scusa.
broadcastFilter = Function( {x}, Oggetto: collegare i filtri dati locali tra le finestre di Graph Builder da diverse tabelle di datiAlla fine, sono tornato ai filtri di dati locali e ho aggiunto un gestore di modifica del filtro al primo filtro di dati.
Funziona abbastanza bene - Se non dimentichi il
rs=
Gestore di modifica del filtro
broadcastFilter=Function({x}, // Make Filter Change Handler need a function with 1 Argument
//get the script
filterScript = DataFilter1 << get Script();
//search for the "Add filter" part
For( i = 1, i <= N Arg( filterScript ), i++,
If( Head( Arg( filterScript, i ) ) == Expr( Add Filter() ),
filterExpression = Arg( filterScript, i )
)
);
// broadcast it to the other Data filter
Eval( Substitute( Expr( Datafilter2 << Start Over << _filter_ ), Expr( _filter_ ),
Name Expr( filterExpression ) ) );
// activate the Filter Change Handler
rs = DataFilter1 << Make Filter Change Handler( broadcastFilter); // will call broadcastFilter() with 1 Argument: # of selected rows
edit:argomento x aggiunto e commentato. Una funzione
broadcastFilter=Function({},-senza argomenti - non funziona.
Oggetto: collegare i filtri di dati locali tra le finestre di Graph Builder da diverse tabelle di datiFunziona!Vorrei aver capito cosa stava facendo quel codice...
Ultima domanda: supponendo che io abbia già una finestra di Graph Builder aperta con un filtro dati locale, so come posso ottenere la variabile oggetto gb .jsl:
win = Get Window List();
graphs = Filter Each({w}, win, If(Length(w << XPath("//OutlineBox[@helpKey='Graph Builder']")) > 0, 1, 0) );
gb = graphs[N Items(graphs)][OutlineBox("Graph Builder")] << Get Scriptable Object;... ma come posso ottenere la variabile oggetto df1 dalla variabile oggetto gb?(Mi sembra di aver provato 100 cose diverse...)
Oggetto: collegare i filtri dati locali tra le finestre di Graph Builder da diverse tabelle di datiUn'opzione è usare un'idea simile a quella che usi per il generatore di grafici
df = (gb << top parent)[Outline Box("Local Data Filter")] << Get Scriptable Object;
il filtro dei dati locali non è all'interno del costruttore di grafici, quindi devi prima viaggiare a un livello superiore (in questo caso uso << top parent). L'utilizzo di XPath con l'attributo helpKey e il valore Data Filter potrebbe essere una soluzione un po' più robusta e sarebbe qualcosa del genere
(gb << top parent) << XPath("//OutlineBox[@helpKey='Data Filter']")
Modifica: se hai la possibilità di più filtri di dati nella stessa finestra, potresti dover rendere la definizione del punto di partenza un po' più specifica rispetto al semplice utilizzo di << top parent.