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?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']")Ri: Come utilizzare il gestore modifiche 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 modifiche 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 modifiche 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?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 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 modifiche 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 modifiche 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?

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 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?