Cómo programar la GUI del filtro de datosTengo un filtro de datos que está configurado en una columna vacía.
La idea es que el usuario haga cosas y esa columna obtenga datos y el usuario continúe hasta que no falten elementos en esa columna.
Pero tengo un problema. Cuando el filtro de datos se establece en condicional, todo se ve muy bien, pero en el momento en que el usuario actualiza la columna condicional, JMP pierde la cabeza y descarta todas las opciones de filtro que tenía.
Creo que mi "evento" debería capturar el estado actual del filtro y luego RESTABLECER las selecciones de filtro para combatir esta "actualización" no deseada
El problema es que no quiero usar la mecánica de selección de filas, porque entonces los elementos de la GUI de Data Fitler no estarán sincronizados con la experiencia del usuario...
Llegué a usar REGEX contra el elemento "WHERE CLAUSE" para obtener la configuración del filtro que necesito restablecer, pero no puedo encontrar ningún mecanismo para manipular la interfaz gráfica de usuario del filtro de datos.
Todas las respuestas que he encontrado solo involucran estados de fila de secuencias de comandos JSL.
Estoy en JMP 16.1
secuencias de comandosventanasRe: Cómo programar la GUI del filtro de datosGenial gracias
Re: Cómo programar la GUI del filtro de datosEn su ejemplo, el filtro de datos locales está dentro del generador de gráficos, tiene un poco más de flexibilidad si lo mueve a un elemento separado.Por ejemplo, podría eliminarlo y volver a dibujarlo después de que se ejecute su función, así:
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 );
)
)
);
);
)
);
Re: Cómo programar la GUI del filtro de datosSí, exactamente, me gustaría que el filtro 12 permanezca incluso si las filas de la tabla se actualizan con nuevos datos. AND condicional se establece en verdadero
En este momento, JMP borra completamente el filtro de datos en la actualización de la tabla cuando el condicional se establece en verdadero. Cuando condicional está desactivado, todo está bien y el comportamiento es el esperado.
Entonces, tengo un gráfico existente y el usuario interactúa con el gráfico para generar un nuevo estado para la tabla de datos principal detrás del gráfico, cuando el usuario confirma el nuevo estado, creo una nueva tabla con sus cambios y actualizo la tabla principal con el nuevo mesa.
Ese evento hace que JMP descarte las selecciones de filtro que había realizado en la tabla principal.
Entonces, lo que haría sería capturar el estado del filtro de datos antes de mi evento de actualización, realizar la actualización y luego restablecer el estado del filtro de datos para que el usuario no notara que los filtros se borraron en el medio.
Esto funciona totalmente bien para el filtro de datos siempre que "condicional" se establezca en falso...
Pero quiero que el condicional se establezca en verdadero porque proporciona datos útiles en el filtro de datos sobre el recuento de filas que son relevantes para lo que están haciendo.
aquí está mi ejemplo, ¿por qué es necesario restablecer el filtro? ¿Cómo puedo evitar que el usuario experimente el restablecimiento 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() )
)
);
)
);
Re: Cómo programar la GUI del filtro de datosEstoy tratando de entender su pregunta, ¿está diciendo que desea que 12 permanezca seleccionado si un usuario cambia los límites de altura en la ventana a continuación?

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 )
)
);