Script para abrir el filtro de datos en la columna seleccionada actualmente, con Buscar y Regex habilitadosDivulgación completa: no soy un programador y JSL me hace pasar un momento particularmente difícil, sin embargo, siento que esta parte del guión que estoy escribiendo debería ser mucho más fácil de lo que ha sido. Uso el filtro de datos con frecuencia, con "Buscar" y "Expresiones regulares" habilitados (ver imagen), sin embargo, no hay opción para guardar estas configuraciones, por lo que deben volver a habilitarse engorrosamente cada vez que abro el filtro. Lo que me gustaría es un script de tabla incrustado que:
1) abre el filtro de datos
2) agrega automáticamente la columna seleccionada actualmente (es decir, seleccionaré una columna y luego iniciaré el script)
3) Habilitar "Buscar"
4) Habilitar "Expresión regular"

Desafortunadamente, la opción de guardar script solo guarda esto:
Current Data Table() << Data Filter(
Location( {630, 160} ),
Conditional,
Add Filter( columns( :name ), Display( :name, Size( 160, 225 ), List Display ) )
);Find y Regex no se guardan con el script. . .
Pero, aquí está la parte que me obligó a buscar ayuda, no puedo descifrar cómo pasar el nombre de la columna seleccionada actualmente a las funciones "columnas ()" y "Display ()".
He probado muchas cosas, por ejemplo esta:
Names Default to Here( 1 );
dt = Current Data Table( );
col_selected = dt << Get Selected Columns(string);
dt << Data Filter(
Location( {630, 160} ),
Conditional,
Add Filter( columns( col_selected ), Display( col_selected, Size( 160, 225 ), List Display ) )
);Pero me sale un error:
"Columna especificada no encontrada en la tabla de datos. en acceso o evaluación de 'columnas', columnas (col_selected) /*###*/"
Probablemente porque col_selected es una lista, pero no puedo averiguar cómo obtener solo el nombre de la lista de un elemento. Realmente no debería ser tan difícil.
Re: Script para abrir el filtro de datos en la columna actualmente seleccionada, con Buscar y Regex habilitadosGracias @Mark_Bailey esto también funciona aunque filtra solo la primera columna si se seleccionan varias. Sin embargo, usar su sugerencia para obtener la referencia de la columna me permitió crear un bucle FOR que hace exactamente lo que quiero.
Names Default to Here( 1 );
dt = Current Data Table( );
list = dt << Get Selected Columns( );
obj = dt << Data Filter( );
For( i = 1, i <= N Items( list ), i++,
obj << Add Filter( columns( Column( list[i] ) )
)
);
Re: Script para abrir el filtro de datos en la columna actualmente seleccionada, con Buscar y Regex habilitadosEsa forma es enrevesada. Sin embargo, no es la única forma en que funciona. Las expresiones son poderosos constructores, pero no siempre son necesarias. Tenga en cuenta que el argumento Columns() espera una referencia de columna. Eso es todo lo que hay que hacer. Puede ser un valor literal (nombre de columna), un valor almacenado en una variable o un valor devuelto por una función.
Names Default to Here( 1 );
// open example data table
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// select a column (mimic result by interactive user)
dt << Go To( :age );
// identify selection
col = dt << Get Selected Columns( String );
// obtain column reference
col = Column( col[1] );
// launch data filter on selected column
df = dt << Data Filter(
Add Filter( Columns( col ) )
);
Re: Script para abrir el filtro de datos en la columna actualmente seleccionada, con Buscar y Regex habilitados@ionatx Estoy contigo.Luché con esto yo mismo y finalmente encontré la solución aquí en los foros.Mi entendimiento aproximado es que necesitas pasar por todo este galimatías para insertar una expresión en otra expresión. Con su código original, col_selected nunca fue evaluado.Data Filter() solo vio los caracteres "col_selected" que no reconoció como título de columna, por lo que devolvió el error " Columna especificada no encontrada en la tabla de datos ".Entonces lo encierra dentro de Expr(), lo que significa que es una expresión que necesita ser evaluada.Luego encierre todo dentro de Eval Expr() para forzar la evaluación de las cosas que están encerradas dentro de Expr().Luego envuelva un Eval() alrededor de todo expresión que esencialmente ejecuta la expresión para producir la salida deseada.Todo se siente muy complicado, pero así es como funciona.
¿Le gustaría saber más?https://community.jmp.com/t5/JSL-Cookbook/Insert-one-expression-into-another-using-Eval-Insert-Eval-Expr/ta-p/48998
Re: Script para abrir el filtro de datos en la columna actualmente seleccionada, con Buscar y Regex habilitados@Chris_Rodrigues eso funciono no entiendo por qué funcionó, pero funcionó.
@Jeff_Perkinson gracias por el seguimiento, y sí, lo haré.
Re: Script para abrir el filtro de datos en la columna actualmente seleccionada, con Buscar y Regex habilitados@Chris_Rodrigues tiene un control sobre cómo hacer que la variable se evalúe dentro del mensaje Data Filter(), y puedo confirmar que no hay soporte JSL para activar las opciones Buscar y Regex.
Si cree que sería valioso, asegúrese de ingresarlo en el Lista de deseos de JMP .
Re: Script para abrir el filtro de datos en la columna actualmente seleccionada, con Buscar y Regex habilitadosPara pasar una variable como col_selected a la función de filtro de datos, debe usar la construcción Eval(Eval Expr(Expr())).JSL es tan raro.Pero esto es lo que parece:
Names Default to Here( 1 );
dt = Current Data Table( );
col_selected = dt << Get Selected Columns(string);
Eval(
Eval Expr(
dt << Data Filter(
Location( {630, 160} ),
Conditional,
Add Filter( columns( Expr(col_selected) ), Display( Expr(col_selected), Size( 160, 225 ), List Display ) )
);
)
);Para las opciones Buscar y Regex... Dudo que eso sea posible.Si observa la documentación de Data Filter() en la guía de secuencias de comandos, no se mencionan esas opciones.Dudo que la interfaz de secuencias de comandos tenga ese nivel de granularidad y esas casillas de verificación solo se pueden mostrar de forma interactiva.Yo podría, sin embargo, estar equivocado.Alguien más podría intervenir con una solución para eso.