Selección de fila de filtro de datos anidadosHola,
Estoy trabajando en un proyecto en el que tendré datos categorizados en una tabla de datos y los usuarios seleccionarán una opción específica a través de una interfaz que estoy creando.
Lo que quiero que haga el siguiente script es:
- En el cuadro de selección de la izquierda, Opción 1, la persona selecciona la edad.
- En la tabla de datos, todas las filas que no tienen esa edad están ocultas y excluidas en la tabla de datos.
- En el cuadro de selección de la derecha, Opción 2, se actualiza dinámicamente para mostrar solo las opciones que no están ocultas ni excluidas y contendrá una lista de nombres para elegir.
- Una vez que se seleccionan ambas opciones, solo quedará 1 fila, cuyo número de fila se devuelve en my_row.
En que me gustaria que me ayudaran:
- Las filas no se ocultan ni se excluyen automáticamente cuando se seleccionan las opciones de la Opción 1, aunque mostrar(1) e incluir(1) se incluyen en los términos del filtro.
- El cuadro de radio 2 no se actualiza dinámicamente como resultado de la opción 1
- Ambos no "funcionan juntos", la Opción 2 sobrescribe los estados de fila de la Opción 1 y puede seleccionar desde cualquier fila. Esto probablemente se deba a que no se actualiza dinámicamente (?)
Referencias
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Clear Row States;
New Window( "Example",
Data Filter Context Box(
H List Box(
Panel Box( "Choice 1",
dt << Data Filter(
Add Filter(
columns( :age ),
Display( :age, Size( 140, 185 ), "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
) ) ),
Panel Box( "Choice 2",
H List Box(
Data Filter Context Box(
V List Box(
dt << Data Filter(
Add Filter(
columns( :name ),
Display( :name, Size( 160, 150 ), Radio Box Display ),
Mode( Select( 1 ) )
) ) ) ) ) ) ) ) );
my_row = dt << Get selected rows;
show( my_row );
Otrosecuencias de comandosventanasRe: Selección de fila de filtro de datos anidadosAquí hay un ejemplo de lo que estoy buscando, pero no sé cómo llegar al código, ya que es una aplicación.
Cuando tiene varias tablas de datos:
Semiconductor Toolkit (enlace a continuación) > Utilidades (arriba a la derecha) > Adjuntar límites de tabla
Primero hace clic en la tabla para la que desea ver las columnas, luego se genera una segunda lista a la derecha de las columnas que están presentes en la tabla de datos en la que hizo clic. Esto se actualizará dinámicamente si elige una nueva tabla de datos.
Encontré algo similar en el hilo a continuación, pero me resulta difícil traducir este código a lo que necesito.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Volviendo a la publicación original:
- Opción 1: si hago clic en "15", se seleccionan 7 filas en el dt, el resto debe excluirse y ocultarse.
- Una opción secundaria es usar resumir (lista de nombres = por (: nombre)), que me dará una lista de nombres únicos que no están excluidos ni ocultos, pero sin usar el cuadro de opción, esta lista se incluirá en la opción 2. No estoy seguro de cómo hacer esta dinámica.
- La opción 2 actualizará dinámicamente una lista de nombres basada en la edad seleccionada en la opción 1.
- Una vez que se realiza una selección en la Opción 2, solo se seleccionará una fila.
Digamos que selecciono: Opción 1 = 15 y Opción 2 = Amy, luego se seleccionará la fila 29 y puedo usar << Obtener filas seleccionadas para guardar este número de fila en una variable.
Complemento del kit de herramientas de semiconductores:
https://community.jmp.com/t5/JMP-Add-Ins/Semiconductor-Toolkit/ta-p/22460
Re: Selección de fila de filtro de datos anidadosEl uso de filtros totalmente personalizados podría ser una solución bastante simple. Esto, por otro lado, podría no ser incluso si funciona (esta vez)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << Data Filter(
Location({2793, 233}),
Conditional,
Mode(Show(1), Include(1)),
Add Filter(
columns(:age, :name),
Display(:age, N Items(6)),
Display(:name, N Items(15), Find(Set Text("")))
)
);
(Window("Data Filter for Big Class")["Data Filter",LineUpBox(2)]) << NCol(2);
(Window("Data Filter for Big Class")["Data Filter",LineUpRulerBox(1)]) << Widths({300,300});
A continuación, se muestran algunas modificaciones a su secuencia de comandos utilizando el Controlador de cambio de filtro (los controladores de estado pueden tener muchos errores y ser quisquillosos en JMP, se le advirtió
)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
dt << clear row states;
Summarize(myage = By(:age));
//make a dialog window
nw = New Window("Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(Add Filter(columns(:age)), Display(:age, "Radio Box Display"), Mode(Select(1), Show(1), Include(1)))
),
lb2 = Border Box()
)
);
// Creates list of names that are not excluded or hidden
f = function({a},
Try(Summarize(myname = By(:name)));
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try((lb2 << child) << delete box());
//append a new col list box, with all columns of the data table selected in the listbox
lb2 << append(
Panel Box("Select Script", sel1 = Radio Box(myname, Show(my_names = sel1 << Get Selected)))
);
);
fch = obj1 << Make Filter Change Handler(f);Re: Selección de fila de filtro de datos anidadosTengo la sensación de que estoy cerca, me estoy encontrando con dos problemas ahora.
He modificado aún más el código de solución del hilo a continuación.
https://community.jmp.com/t5/Discussions/How-to-Dynamically-List-Column-names-of-Selected-Data-Table/mp/415321#M66444
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << clear row states;
Summarize( myage = By( :age ) );
//make a dialog window
nw = New Window( "Sample",
vlb1 = H List Box(
lb1 = Border Box(
obj1 = dt << Data Filter(
Add Filter( columns( :age ) ),
Display( :age, "Radio Box Display" ),
Mode( Select( 1 ), Show( 1 ), Include( 1 ) )
);
Wait( 0 );
// Creates list of names that are not excluded or hidden
Try( namelist = Summarize( myname = By( :name ) ) );
//here is the script that runs each time someone clicks in the top box
//delete the current column list box, if it exists
Try( lb2 << delete );
//append a new col list box, with all columns of the data table selected in the listbox
vlb1 << append( lb2 = Border Box( Left( 10 ), Right( 10 ), bottom( 10 ), top( 10 ), sides( 15 ), // Col title
Panel Box( "Select Script",
sel1 = radio box( eval( namelist ), show( my_names = sel1 << Get Selected) ) )
), all ) );
)
);
Si comentas todo vlb1, obtienes un pequeño cuadro que puedes seleccionar entre las diferentes edades en Big Class. Las otras filas están excluidas y ocultas.
Problemas:
- El segundo resumen, la lista de nombres, no se actualiza dinámicamente con una selección de edad diferente. ¿Cómo se puede actualizar el script para hacer esto?
- El segundo Try() es del código de la solución y es dinámico, por lo que no estoy seguro de por qué el primero no lo sería.
- JMP falla cuando el vlb1 no está comentado, imagen de error a continuación. No estoy seguro de dónde está la referencia del objeto eliminado en esta parte del código. ¿Alguien puede verlo?

Creo que si estos dos pueden resolverse, entonces debería poder encontrar alguna forma de devolver un solo número de fila.
Re: Selección de fila de filtro de datos anidados@jthi ¡Gracias una vez más por tu increíble ayuda!La respuesta fue muy simple, una vez más jajaja.
Modifiqué tu primera sugerencia para adaptarla a mis necesidades porque veo lo que quieres decir con Los manejadores estatales tienen errores y son quisquillosos en JMP.
Re: Selección de fila de filtro de datos anidadosHe creado un elemento de la Lista de deseos con respecto a diferentes controladores de estado en JMP . Mejorar los controladores de estado de JMP (etiqueta flotante, controlador de estado de fila, controlador de estado de filtro, programador, ...) .