Fai in modo che il gestore dello stato della riga smetta di funzionare se la tabella è ordinataÈ possibile applicare un gestore dello stato di riga a una tabella dati e fare in modo che il gestore continui a funzionare se la tabella dati viene modificata; ad esempio, se una colonna viene ordinata da uno script o in modo interattivo da un utente?
Al momento ho due tabelle di dati: una tabella con statistiche riassuntive, una con dati grezzi. L'utente seleziona una riga nella tabella di riepilogo, il gestore dello stato della riga rileva quale riga è selezionata, estrae il nome del parametro e crea un grafico dalla tabella dei dati grezzi utilizzando il parametro selezionato.
Funziona bene (sebbene rilevi la riga che è stata deselezionata all'inizio prima di trovare la riga appena selezionata), tuttavia si interrompe se l'utente ordina la tabella di riepilogo (ad esempio se vuole vedere il Cpk più basso o qualche altra metrica ).
Vedo lo stesso problema nel seguente semplice esempio basato sulla guida di scripting:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << Select Rows( 1 );
dt << sort( by( :weight ), replace table, order( ascending ) );
dt << Select Rows( 9 );L'uscita è:
Scriptable[]
[1]
Penso che questo possa essere correlato a questo elemento della lista dei desideri: https://community.jmp.com/t5/JMP-Wish-List/Improve-JMP-s-state-handlers-hover-label-row-state-handler/idi-p/527992 . C'è qualche soluzione alternativa?
Sto usando JMP17.0 su MacOS.
Grazie!
Automazione e scriptingRe: Make Row State Handler smette di funzionare se la tabella è ordinataA proposito, mi rendo conto che l'esempio con script che ho fornito potrebbe essere facilmente risolto aggiungendo
rs = dt << make row state handler( f );
subito dopo il mio comando Sort(). È il caso interattivo (in cui un utente ordina manualmente la tabella in base a una colonna, quindi seleziona una riga) che è il problema.
Ho provato una soluzione alternativa aggiungendo uno script alla tabella che reimposta il gestore dello stato della riga:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
f = Function( {a}, Print( a ) );
rs = dt << make row state handler( f );
dt << new script("Fix Row State Handler",
rs = dt << make row state handler( f );
); // errors when the script is run!
dt << Select Rows( 1 );
wait(0);
dt << sort( by( :weight ), replace table, order( ascending ) );
rs = dt << make row state handler( f ); // fixes issue when scripting
dt << Select Rows( 9 );ma ottengo un errore quando faccio clic sul triangolo verde per eseguire lo script:
Send Expects Scriptable Object in access or evaluation of 'Send' , dt << /*###*/make row state handler( f ) /*###*/ at line 6 in ...
Tuttavia, anche se funzionasse, non sarebbe l'ideale poiché richiede all'utente di ricordarsi di farlo dopo aver ordinato la tabella.
Grazie,
Matteo.
Re: Make Row State Handler smette di funzionare se la tabella è ordinataCiao,
Forse puoi usare un rapporto per guidare lo script. Le caselle di tabella possono eseguire script quando le righe sono selezionate e non sembrano rompersi quando la tabella di riepilogo viene ordinata: prova quanto segue per farti un'idea.
Names Default To Here(1);
dt = open ("$Sample_Data\Car Physical Data.jmp");
dtSum = dt << summary( group(:Country), mean(:weight) );
nw = new window("ex",
dtb = Data Table Box( dtSum,
<< Set Selectable rows,
<< Set Click Sort )
);
//do something when a row is selected. Here, we just print the country.
dtb << Set Row Change Function ( function( { this },
selCountry = this[1][this << get selected rows];
print(evalinsert("Selected country is: ^selCountry[1]^."))
) );
Saluti,
Brady
Re: Make Row State Handler smette di funzionare se la tabella è ordinataCiao Brady, è geniale, grazie! Questo mi ha dato una soluzione molto più robusta e utilizzabile che avevo prima.
Una domanda: è possibile interrogare la Data Table Box da JSL per scoprire in quale colonna (se presente) l'utente ha ordinato la tabella?
Saluti,
Matteo.
Re: Make Row State Handler smette di funzionare se la tabella è ordinataCiao Matteo,
Non conosco un modo per interrogare per vedere quale (se presente) colonna è stata utilizzata per ordinare la tabella. Potresti eseguire la forza bruta controllando le colonne, ma potrebbe diventare costoso, a seconda delle dimensioni della tabella.
Re: Make Row State Handler smette di funzionare se la tabella è ordinataCiao Brady,
grazie per il consiglio.
Non conosco un modo per interrogare per vedere quale (se presente) colonna è stata utilizzata per ordinare la tabella. Potresti eseguire la forza bruta controllando le colonne, ma potrebbe diventare costoso, a seconda delle dimensioni della tabella.
Potreste aiutarmi con il metodo della forzatura bruta? Ho provato a guardare le proprietà di DataTableColBox e la finestra stessa e non ho trovato nulla che mi aiuti a vedere se è ordinato.
Grazie,
Matteo.