Come scriptare la GUI del filtro datiHo un filtro dati impostato su una colonna vuota.
L'idea è che l'utente fa cose e quella colonna ottiene i dati e l'utente continua fino a quando non ci sono elementi mancanti in quella colonna.
Ma ho un problema. Quando il filtro dati è impostato su condizionale, tutto sembra perfetto, ma nel momento in cui l'utente aggiorna la colonna condizionale, JMP perde la testa e scarta tutte le scelte di filtro che aveva!
Penso che il mio "evento" dovrebbe acquisire lo stato corrente del filtro e quindi REIMPOSTARE le selezioni del filtro per combattere questo "aggiornamento" indesiderato
Il problema è che non voglio utilizzare la meccanica di selezione delle righe, perché in tal caso gli elementi della GUI di Data Fitler non saranno sincronizzati con l'esperienza dell'utente ...
Sono arrivato al punto di utilizzare REGEX contro l'elemento "WHERE CLAUSE" per ottenere le impostazioni del filtro che devo ripristinare, ma non riesco a trovare alcun meccanismo per manipolare la GUI del filtro dati.
Tutte le risposte che ho trovato riguardano solo gli stati delle righe di scripting JSL.
Sono in JMP 16.1
ScriptingfinestreRi: Come scriptare la GUI del filtro datiFantastico, grazie
Ri: Come scriptare la GUI del filtro datiNel tuo esempio il filtro dati locale è all'interno del generatore di grafici, hai un po' più di flessibilità se lo sposti in un elemento separato.Ad esempio, puoi eliminarlo e ridisegnarlo dopo l'esecuzione della funzione, in questo modo:
Names Default To Here(1);
dt = open("$sample_data\Iris.jmp");
dt << New Column( "MY_COL",Character);
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
close(dt2,nosave);
a_window << Bring Window to Front;
);
a_window = New Window( "a_window",
data filter context box(
H List Box(
ldflb = h list box(
ldf = dt << data filter(
Local,
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
),
MY_GRAPH_BUILDER = dt << Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
),
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter",
wc = ldf << get script;
break_the_filter_fn();
(ldflb << Child) << Delete Box;
ldfExpr = Eval Expr( ldflb << Append( ldf = dt << Expr( Name Expr(wc) ) ) );
Eval( ldfExpr );
)
)
);
);
)
);
Ri: Come scriptare la GUI del filtro datiSì esatto, vorrei che il filtro 12 rimanesse anche se le righe della tabella vengono aggiornate con nuovi dati AND condizionale è impostato su true
In questo momento JMP cancella completamente il filtro dati sull'aggiornamento della tabella quando conditional è impostato su true. Quando il condizionale è disattivato, va tutto bene e il comportamento è quello previsto.
Quindi ho un grafico esistente e l'utente interagisce con il grafico per generare un nuovo stato per la tabella dati principale dietro il grafico, quando l'utente esegue il commit del nuovo stato creo una nuova tabella con le loro modifiche e aggiorno la tabella principale con il nuovo tavolo.
Tale evento fa sì che JMP scarti le selezioni di filtro effettuate nella tabella principale.
Quindi quello che farei è acquisire lo stato del filtro dati prima del mio evento di aggiornamento, eseguire l'aggiornamento, quindi reimpostare lo stato del filtro dati in modo che l'utente non si accorga che i filtri sono stati cancellati nel mezzo.
Funziona perfettamente per il filtro dati fintanto che "condizionale" è impostato su falso ...
Ma voglio che il condizionale sia impostato su true perché fornisce dati utili nel filtro dati sui conteggi delle righe rilevanti per ciò che stanno facendo.
ecco il mio esempio, perché è necessario reimpostare il filtro? Come posso evitare che l'utente subisca il ripristino del filtro?
Names Default To Here( 1 );
dt = Open( "$sample_data\Iris.jmp" );
dt << New Column( "MY_COL", Character );
break_the_filter_fn = Function( {},
dt << select rows( {1, 2, 3, 4, 5} );
dt2 = dt << Subset( Output Table( "just_some_rows" ), Selected Rows( 1 ) );
dt2:MY_COL[{1, 2, 3, 4, 5}] = "banana";
dt << Update( with( dt2 ), Match Columns( :sepal length == :sepal length, ) );
//close(dt2,nosave);
);
a_window = New Window( "a_window",
H List Box(
MY_GRAPH_BUILDER = Graph Builder(
Size( 531, 456 ),
Show Control Panel( 0 ),
Variables( X( :Sepal length ), Y( :Sepal width ) ),
Elements( Points( X, Y, Legend( 3 ) ) ),
Local Data Filter(
Conditional,
Add Filter(
columns( :Species, :Sepal length, :Sepal width ),
Modeling Type( :Sepal length, Nominal ),
Modeling Type( :Sepal width, Nominal ),
Where( :Species == {"setosa", "versicolor"} ),
Where( :Sepal length == {5, 5.1, 5.2, 5.3, 5.4, 5.5} ),
Display( :Sepal length, N Items( 15 ), Find( Set Text( "" ) ) ),
Display( :Sepal width, N Items( 15 ) )
)
)
);
Panel Box( "a btn box",
Lineup Box( N Col( 1 ), Spacing( 3 ),
Button Box( "break the filter", break_the_filter_fn() )
)
);
)
);
Ri: Come scriptare la GUI del filtro datiSto cercando di capire la tua domanda, stai dicendo che vuoi che 12 rimanga selezionato se un utente modifica i limiti di altezza nella finestra sottostante?

Names Default To Here( 1 );
dt = Open( "$Sample_data/big class.jmp" );
dt << Data Filter(
Location( {397, 156} ),
Conditional,
Add Filter(
columns( :height, :age ),
Where( :height >= 50 & :height <= 55 ),
Where( :age == 12 )
)
);