Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?In allegato è riportata una tabella dati di esempio. Lo script seguente tenta di tracciare ogni parametro selezionato tramite il filtro dati locale in una nuova "pagina" nel Costruttore di grafici. Allo stato attuale, il titolo dell'asse y viene visualizzato come "Mediana" ogni volta che viene selezionato un nuovo "Parametro" tramite il filtro dati locale.
Vorrei che il nome del parametro fosse il titolo dell'asse y quando un nuovo parametro viene selezionato e tracciato su una nuova "Pagina".
Ho provato a utilizzare il gestore della modifica del filtro per questo, ma il mio script non funziona del tutto. Penso di aver bisogno che l'indice i sotto venga aggiornato ogni volta che viene selezionato un nuovo parametro o potrebbe esserci un altro modo. Qualsiasi direzione sarà utile.
XPath( "//TextEditBox" ))[i]
ecco la mia sceneggiatura
Names Default To Here (1);
Clear Log ();
gb = Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
ldf = Current Report()["Local Data Filter"] << get scriptable object;
changeTitle = Function( {this},
print(this);
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
if(ismissing(ldfText),ldfText = " Selected Test Parameter ");
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
);
fsh = ldf << Make Filter Change Handler(changeTitle());Automazione e scriptingfinestreRi: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Grazie. Al momento del controllo iniziale, il tuo primo script funziona come previsto (anche con tutti deselezionati). Fornisce il titolo dell'asse y previsto in tutti i casi. Il secondo script non mostra in ogni caso il titolo corretto dell'asse y (mostra sempre Median come titolo dell'asse y).
Trascorrerò più tempo con i due script e tornerò se avrò domande.
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Ciò che viene restituito può essere un po' complicato secondo la mia esperienza (specialmente quando non viene selezionato nulla/tutto). Successivamente dovresti capire cosa fare in quelle situazioni e quindi dovresti essere in grado di modificare il mio script precedente.
Di seguito sono riportate alcune soluzioni a tutta questa faccenda che funzionano per me, non sono sicuro che quella "più semplice" funzioni in JMP16. Non suggerirei di esaminarli finché non sarai riuscito a capire cosa potresti fare nella situazione "Vuoto" in modo da capire che tipo di problemi potrebbero esserci.
Visualizza altro...Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
, // else, this wasn't solved
visible_parameters = all_params;
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(visible_parameters),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, visible_parameters, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
update_title = Function({this},
gb << inval;
page_texts = Report(gb) << XPath("//GraphBuilderGroupBox/text()"); // Not sure if this can be used in JMP16
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
For Each({page_text, idx}, page_texts,
y_tebs[idx] << Set Text(Word(-1, page_text, "="));
);
gb << update window;
wait(0);
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Grazie, pensavo di aver controllato deselezionando tutto, a quanto pare no. Ho la stessa cosa di te.
(Ho appena controllato, questo problema sembra essere presente anche nello script precedente , ovvero deselezionando tutto non si ottiene l'output previsto)

Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Se non hai apportato alcuna modifica al mio script, c'è ancora una situazione che non è stata risolta

Se si passa da una selezione singola a nessuna/cancella selezioni. Questo dovrebbe essere risolto prima
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi penso che ottengo lo stesso. Vedi sotto.
Il prossimo compito è introdurre la funzione per modificare il titolo dell'asse Y su ogni nuova pagina?
(Sembra che il tuo modo precedente di farlo dovrebbe cambiare ora)


Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Se funziona con i dati di esempio JMP, passa all'esempio più semplice possibile con i tuoi dati
Names Default To Here(1);
dt = Open("$DOWNLOADS/exampleSummaryTableNoLimsNew.jmp");
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
filter_ref = gb << Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
);
Summarize(dt, all_params = By(:Parameter));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_parameters = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(visible_parameters));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_parameters(1);
f = filter_ref << Make Filter Change Handler(get_selected_parameters);
Questi conteggi dovrebbero sempre corrispondere

Ri: Come utilizzare il gestore modifiche filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Grazie. Il tuo ultimo script funziona quando lo eseguo e i risultati sono quelli previsti con JMP Sample Data (vero per tutti i tuoi script finora). Il motivo per cui ho utilizzato la mia tabella dati è perché pensavo che il modulo dati in mio possesso potesse causare il mio problema.
Temo di essere un po' perso ora con tutti i diversi copioni sul tavolo.
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Segui i semplici dati di esempio JMP e risolvi i tuoi problemi uno per uno. Per prima cosa devi definire i tuoi problemi. Tralascio alcuni problemi che devi risolvere (o che hai già risolto) per far funzionare tutto e cerco di concentrarmi sul problema attuale:
- Al livello più alto vuoi essere in grado di capire come aggiornare i titoli dell'asse Y in base al nome della pagina
- Hai filtri che influenzano quali pagine sono visibili
- È possibile impostare il filtro su tutti, uno, molti e nessuno
- Tutti e nessuno sono sostanzialmente uguali (tutte le pagine sono visibili) ma devono essere gestiti in modo separato
- Come puoi gestire queste diverse situazioni; Tutti, nessuno, uno e molti?
- Come puoi gestire queste situazioni all'interno di una funzione utilizzata nel gestore di modifica del filtro?
Finché non avrai risolto questo problema, non ha senso passare all'applicazione completa che hai (se rimani bloccato, potresti prima risolvere qualche problema separato se li hai). Di seguito è riportato uno script di esempio, dovresti essere in grado di fare in modo che l'istruzione else restituisca sempre 41 (o piuttosto un elenco completo di stati se rimuovi N Items()).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
gb = dt << Graph Builder(
Size(630, 590),
Show Control Panel(0),
Include Missing Categories(1),
Variables(X(:State)),
Elements(Treemap(X, Legend(4))),
Local Data Filter(
Conditional,
Add Filter(columns(:Region, :POP), Display(:Region, N Items(6)))
)
);
Summarize(dt, all_states = By(:State));
show(N Items(all_states));
filter_ref = (Report(gb) << top parent)[OutlineBox("Local Data Filter")] << Get Scriptable Object;
get_selected_states = function({a},
cur_rows = filter_ref << Get Filtered Rows;
If(!Is Empty(cur_rows),
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(visible_states));
,
Show("Empty..."); // Your problem, you should have all states visible here
);
);
get_selected_states(1);
f = filter_ref << Make Filter Change Handler(get_selected_states);Ri: Come utilizzare il gestore modifiche filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi utilizzando la mia tabella dati exampleSummaryTableNoLimsNew.jmp, quanto segue sembra funzionare come previsto (ho controllato manualmente la tabella dati e gli output). Come si procede da questo al mio problema reale in cui il filtro dei dati si trova all'interno del Costruttore di grafici. Trovo che gli array associativi siano molto confusi, quindi chiedo aiuto qui.
Names Default To Here(1);
clear log ();
dt = Current Data Table();
obj = dt << Data Filter(Conditional,
Add Filter(columns(:TestDate, :Has Limits?, :TestStage, :Parameter) ),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_Parameters = By(:Parameter));
show(all_Parameters);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_Parameters = Associative Array(dt[cur_rows, "Parameter"]) << get keys;
Show(N Items(all_Parameters), N Items(visible_Parameters));
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?L'utilizzo dell'abbonamento alla tabella dati è un'opzione
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP)),
Mode(Select(0), Show(0), Include(1))
);
Summarize(dt, all_states = By(:State));
show(all_states);
// Change filter value at this point and run the code below
cur_rows = obj << Get Filtered Rows;
visible_states = Associative Array(dt[cur_rows, "State"]) << get keys;
Show(N Items(all_states), N Items(visible_states));Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Grazie, ho provato a vedere quali righe vengono filtrate e lo script funziona parzialmente con la tabella dati exampleSummaryTableNoLimsNew.jmp, ma non in tutti i casi di filtro.
Sto cercando di selezionare le righe filtrate nella tabella dati e di verificare manualmente se sono corrette. Attualmente sono bloccato.
Chiaramente è la mia mancanza di comprensione del flusso del codice che mi impedisce di eseguire ulteriormente il debug, quindi richiederei ulteriore aiuto.
Script modificato di seguito (la riga 28 è dove controllo con get filtered rows ).
Names Default To Here(1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("Trend Chart")}))
);
ldf = gb<<LOCAL data="https://community.jmp.com/" filter=""></LOCAL>Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Potresti semplicemente provare cosa fa quando lo invii a un filtro dati.
Ecco un esempio dall'indice di scripting JMP17
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Cities.jmp");
obj = dt << Data Filter(
Add Filter(columns(:Region, :POP), where(:Region == {"C", "N"})),
Mode(Select(0), Show(0), Include(1))
);
obj << Get Filtered Rows; // [1, 4, 5, 6, 7, 19, 20, 26, 36, 40, 42, 46]Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Grazie, ma il mio Scripting Index (JMP 16.2) ha fornito qualche esempio su come utilizzare << Ottieni righe filtrate.
Potrei avere qualche aiuto su come utilizzarlo nel mio caso?

Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Questo controllo sta causando i problemi.

Esistono più filtri che possono causare una situazione in cui non tutti i parametri sono visibili. Un'opzione potrebbe essere quella di utilizzare << Ottieni righe filtrate e calcolare quali parametri sono visibili invece di dare per scontato che lo siano tutti.
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Nei casi di esempio finora tutto funziona come previsto e corrisponde a ciò che vedi.
Tuttavia, sono riuscito a riprodurre parte del problema che sto affrontando con i miei dati reali creando un'altra tabella dati che corrisponda maggiormente ai miei dati reali. La tabella dei dati è allegata e utilizza lo script seguente
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 571, 174 ),
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestDate, :Has Limits?, :TestStage, :Parameter ),
Where( :Has Limits? == "Yes" ),
Where( :TestStage == "STG5" ),
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());Ottengo quanto segue quando non sono selezionati parametri,

e questo dopo aver selezionato tutti i parametri e averli nuovamente deselezionati. Qui il grafico in alto ottiene solo l'etichetta corretta dell'asse y.

Spero che se questi problemi verranno risolti, anche il mio caso di dati effettivo inizierà a funzionare come previsto. Qualsiasi indicazione sarebbe molto utile.
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Utilizzando exampleSummarTable.jmp e l'ultimo script che ho fornito.
Dopo che un valore è stato filtrato

Deseleziona quel singolo valore (quindi nulla viene filtrato)

Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Non capisco cosa intendi con "Funziona se selezioni un valore e poi rimuovi tutte le selezioni dal filtro?". Potresti per favore riformulare? Inoltre, utilizzo JMP 16.2.
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Non sono sicuro di cosa potrebbe esserci di sbagliato in quanto sembra funzionare bene con i dati originali e con data2 dopo aver rimosso la risposta multipla (usando JMP17.2). Funziona se selezioni un valore e poi rimuovi tutte le selezioni dal filtro?
Visualizza altro...
Names Default To Here(1);
dt = Current Data Table();
gb = dt << Graph Builder(
Show Control Panel(0),
Variables(X(:PartID), Y(:Median), Page(:Parameter), Color(:TestStage)),
Elements(Points(X, Y, Legend(34))),
Local Data Filter(
Conditional,
Add Filter(
columns(:TestStage, :Parameter),
Where(:TestStage == {"A", "B"})
)
),
SendToReport(Dispatch({}, "graph title", TextEditBox, {Set Text("myTitleGoesHere")}))
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function({this},
param_where = Regex(local_filter << get where clause(), "\(?\s*(:Parameter == .*?)\)", "\1");
If(Is Missing(param_where),
param_list = uniq_params,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs = tebs[4 :: N Items(tebs) :: 2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
Return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list, y_tebs[idx] << Set Text(param_val));
gb << update window;
Return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Grazie. Questo funziona senza errori nel caso del mio set di dati effettivo, ma i grafici iniziali sono ancora privi dei nomi dei parametri corretti sull'asse y. I titoli corretti dell'asse y vengono attivati solo quando seleziono un secondo TestStage (inizialmente ne viene selezionato solo uno tramite lo script).
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Come ho detto, molto probabilmente è dovuto al filtraggio dei parametri
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
Summarize(dt, uniq_params = By(:Parameter));
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
If(Is Missing(param_where),
param_list = uniq_params;
,
param_where_list = Words(param_where, "|");
param_list = Transform Each({where_str}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute(title, "\!"", "");
);
);
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; // skip title, subtitle and xaxis?
If(N Items(y_tebs) != N Items(param_list),
return(0); // some problem
);
gb << inval;
For Each({param_val, idx}, param_list,
y_tebs[idx] << Set Text(param_val);
);
gb << update window;
return(1);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Nel caso dei dati reali, se commento
update_title(local_filter);
come in
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
//update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());
Tutto funziona come previsto, tranne che i grafici iniziali non hanno il titolo corretto dell'asse Y. Il titolo dell'asse Y diventa corretto solo dopo aver selezionato un altro TestStage. È il mio posizionamento di
update_title(local_filter);
corretto o va messo altrove?
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Questo non sta restituendo quello che dovrebbe
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
Uno dei motivi potrebbe essere che non sono stati selezionati valori nel filtro dati locale. Potresti aggiungere un ulteriore controllo per i valori mancanti e se param_where manca, tornare presto dalla funzione senza fare nulla (o meglio, allora hai tutti i valori come parametri e devi ottenere i valori dei parametri in qualche altro modo)
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Grazie, la rimozione della risposta multipla dalle proprietà dei parametri fa funzionare lo script per i dati di esempio (exampleSummaryTable2). Ma ho ancora problemi con il mio set di dati effettivo in cui non sono presenti colonne con un set a risposta multipla (purtroppo non posso condividere i dati effettivi). Cos'altro potrebbe essere?

Posso anche riprodurre lo stesso errore se utilizzo questo commento nello script
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"}come in
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
//Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2]; //show (y_tebs);
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());Nel mio caso di dati reale, non posso permettermi il lusso di preselezionare uno o più parametri tramite il filtro dati locale. Forse questo è ciò che causa il problema nel caso dei dati reali. Qualche modo per aggirare questo problema?
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Il problema è molto probabile che tu abbia una colonna a risposta multipla come parametro


Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Ok. Ho notato il grilletto. Lo script non funziona se ho un carattere di sottolineatura nel nome del parametro (ho pochi caratteri di sottolineatura nei nomi dei parametri nei miei dati effettivi). Tabella dati di esempio allegata con carattere di sottolineatura nel nome del parametro. Lo script seguente genera un errore sulla funzione Words con la tabella dati allegata.
Dovevo anche commentare Size() senza il quale i grafici iniziali sembravano strani.
Names Default To Here (1);
clear log ();
dt = Current Data Table();
gb = dt << Graph Builder(
//Size( 531, 525 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage_1", "Capacitance_1"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return();
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
update_title(local_filter);
filter_handler = local_filter << Make Filter Change Handler(update_title());Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Attivare la funzione una volta prima di creare il gestore della modifica del filtro
update_title(local_filter);

Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Funziona tranne che il grafico iniziale (prima che il gestore della modifica del filtro venga inserito dai bambini) ha ancora Median come titolo dell'asse y. Qualche modo per risolvere questo problema?

Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Un'opzione sarebbe quella di analizzare la clausola get where
ldfText = Regex(ldf << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
in elementi separati, esegui il loop su questi e imposta i titoli nel loop.
Modificare:
Ciò richiederà una piccola modifica anche alla parte in cui ottieni riferimenti alle caselle di modifica del testo per l'asse y. Di seguito è riportata un'opzione che potrebbe funzionare
Names Default To Here (1);
dt = Open("$DOWNLOADS/exampleSummaryTable.jmp");
gb = dt << Graph Builder(
Size( 531, 325 ),
Show Control Panel( 0 ),
Variables( X( :PartID ), Y( :Median ), Page( :Parameter ), Color( :TestStage ) ),
Elements( Points( X, Y, Legend( 34 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :TestStage, :Parameter ),
Where( :TestStage == {"A", "B"} ),
Where( :Parameter == {"BKDVoltage", "Capacitance"} )
)
),
SendToReport( Dispatch( {}, "graph title", TextEditBox, {Set Text( "myTitleGoesHere" )} ) )
);
update_title = Function( {this},
param_where = Regex(local_filter << get where clause(),"\(?\s*(:Parameter == .*?)\)","\1");
param_where_list = Words(param_where, "|");
tebs = Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox");
y_tebs= tebs[4::N Items(tebs)::2];
If(N Items(y_tebs) != N Items(param_where_list),
return(); // some problem
);
For Each({where_str, idx}, param_where_list,
title = Trim Whitespace(Word(-1, where_str, "="));
Substitute Into(title, "\!"", "");
y_tebs[idx] << Set Text(title);
);
);
local_filter = Current Report()["Local Data Filter"] << get scriptable object;
filter_handler = local_filter << Make Filter Change Handler(update_title());
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?@jthi Funziona in parte, ma tutti i parametri selezionati vengono visualizzati come titolo dell'asse Y in tutti i grafici tracciati uno sotto l'altro.
Ho cambiato
(Report( gb ) << XPath( "//TextEditBox" ))[6] << Set Text(ldfText);
A
(Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")) << Set Text(ldfText);e prendi

È necessario solo il nome del parametro tracciato come titolo dell'asse Y su ciascun grafico.
Ri: Come utilizzare il gestore delle modifiche del filtro per lavorare con l'opzione Pagina nel Costruttore di grafici?Potresti provare a rendere la tua query XPath più accurata (esplora l'XML e l'albero delle proprietà). Qualcosa del genere potrebbe funzionare
Report(gb) << XPath("//GraphBuilderTitleBox/TextEditBox[text()='Median']")