Limite las opciones y permita solo una selección en el filtro de consulta de base de datosQuiero un filtro de consulta que solo muestre una parte de las entradas en la base de datos. También me gustaría limitar a los usuarios a una opción. Aquí hay un código de ejemplo que he usado en una publicación anterior.
New SQL Query(
Version( 130 ), Connection( "JMP" ),
JMP Tables(
["SAT" => "$SAMPLE_DATA\SAT.jmp",<BR /> "SATByYear" => "$SAMPLE_DATA\SATByYear.jmp"]
),
QueryName( "SATQuery" ),
Select( Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table( "SAT", Alias( "t2" ),
Join( Type( Left Outer ),
EQ( Column( "State", "t1" ), Column( "State", "t2" ) ) &
EQ( Column( "% Taking (2004)", "t1" ),
Column( "% Taking (2004)", "t2" ) )
& EQ( Column( "X", "t1" ), Column( "X", "t2" ) )
& EQ( Column( "Y", "t1" ), Column( "Y", "t2" ) )
& EQ( Column( "Population", "t1" ), Column( "Population", "t2" ) )
& EQ( Column( "Latitude", "t1" ), Column( "Latitude", "t2" ) )
& EQ( Column( "Longitude", "t1" ), Column( "Longitude", "t2" ) )
)
)
),
Where(
In List( Column( "State", "t1" ),
_AllRows_,
UI( SelectListFilter(
ListBox,
Base( "Categorical",
Prompt( "State:", Character, PromptName( "t1.State_1" ),
ValueSource( Column( "State", Alias( "State" ), Table( "SATByYear" ) ) )
)
)
)
)
)
)
) << Run;Por ejemplo, ¿qué pasa si solo quiero mostrar a los usuarios Alaska, California, Hawái, Oregón y Washington?
Puedo reemplazar _AllRows_, con {"Alaska", "California", "Hawaii", "Oregon", "Washington"}. Sin embargo, eso todavía muestra todos los estados. Simplemente preselecciona los 5 estados de la lista.
Mi aplicación real es una gran base de datos con múltiples filtros, por lo que no quiero usar tablas intermedias.
Además, me gustaría permitir que los usuarios seleccionen solo un estado. ¿Es posible? Puedo cambiar el tipo de filtro.
Re: Limite las opciones y permita solo una selección en el filtro de consulta de base de datosUna opción es producir un aviso para que la selección del usuario pase esos valores seleccionados a una instrucción SQL para su ejecución.El script puede usar el Crear conexión de base de datos () y Ejecutar SQL () para interactuar con su base de datos. El siguiente es un ejemplo más simple que se puede usar para crear una secuencia de comandos más robusta, por lo que requerirá más trabajo para que esto funcione para su caso de uso. Con suerte, esto le ayudará a obtener los resultados que desea.
//clearing all symbols.
Delete Symbols ();
//defining an empty value for selection so it can handle when nothing is selected.
selection = {};
//Prompt providing values available for said user
nwp = New Window( "States",
<<MODAL></MODAL>Re: Limite las opciones y permita solo una selección en el filtro de consulta de base de datosGracias por gestionar mis expectativas. Una corrección es que no pedí que hiciera todo. Devolver listas vacías es tan fácil como devolver listas completas cuando no se selecciona nada. Limitar a los usuarios a una opción es común para muchos idiomas y API. Exponer solo un subconjunto de opciones potenciales podría ser la solicitud más exigente. Los desarrolladores pueden estar interesados en saber que hay interés en esas características particulares.
Entiendo que las cosas toman tiempo, y no esperes ninguna de estas características muy pronto. Mientras tanto, las soluciones alternativas sugeridas han sido muy útiles. Se agradece este foro.
Si alguien puede recomendar recursos para crear interfaces de filtro de consulta de base de datos personalizadas dentro de JMP, estoy muy interesado.
También estoy explorando otras opciones, como JavaScript, Rails, R, etc. Sin embargo, empujar a las personas a otros idiomas no parece un uso apropiado de un foro de discusión de JMP. Entonces, si diseño algo más, no lo publicaré aquí.
Re: Limite las opciones y permita solo una selección en el filtro de consulta de base de datosPuede ser difícil para una herramienta general como el generador de consultas de JMP hacer todo.¿Ha considerado crear su propia interfaz personalizada para la consulta?Será más trabajo al principio, pero luego tendrá exactamente las funciones que desea.
Re: Limite las opciones y permita solo una selección en el filtro de consulta de base de datosGracias, gzmorgan0 , Su esfuerzo es útil y apreciado. No se ajusta a mi esperanza de evitar tablas intermedias, pero puedo ver cómo el uso de Invisible y Set Dirty podría hacer que funcione para mi caso con múltiples filtros. No conocía esa solución. Marcaré su respuesta como una solución y espero que alguien publique una mejora.
He estado tratando de hacer cosas en Where y In List, sobre todo con ValueSource. Por lo que puedo decir, ValueSource no está haciendo nada en mis scripts. No lo veo en el índice de secuencias de comandos.
Tal vez estoy mimado por los formularios en línea. Aún así, quiero solicitar la lectura de cualquier desarrollador de JMP. ¿Puede agregar la siguiente funcionalidad a los filtros de consulta de base de datos?
- Devuelve una lista vacía cuando no se selecciona nada (mi publicación anterior)
- Permitir la publicación de un subconjunto de una columna en un cuadro de filtro ListBox, tal vez usando una lista en algún lugar de Dónde o En la lista
- Permitir situaciones para limitar a los usuarios a elegir solo un artículo.
Re: Limite las opciones y permita solo una selección en el filtro de consulta de base de datosProbé 3 opciones:
- Una simple modificación a su secuencia de comandos enumeraría todos los estados, pero preseleccionaría la lista de estados del Pacífico. El usuario ve la lista resaltada, pero necesita hacer clic en CTRL para seleccionar o deseleccionar.
- La publicación eliminada contenía un script que usaba una lista manual. Aparecería una lista de estados del Pacífico. Sin embargo, no filtró según las selecciones del usuario. Probé Ands y otra sintaxis, pero la consulta siempre devolvía el conjunto completo de estados del Pacífico.
- La única forma en que podía obtener la lista más pequeña era abrir SATByYear, hacer un subconjunto usando la consulta y luego usar esa tabla subdividida en New SQL Query. Nota << Set Dirty(0) establece la tabla como sin editar y SQL Query la cerrará una vez que se ejecute la consulta.
Names Default to Here(1);
dt0 = Open("$Sample_Data\SATByYear.jmp", "Invisible");
satby_dt = query(Table(dt0, "t1"),"Invisible", "SELECT DISTINCT * FROM t1
WHERE t1.State IN ( 'Alaska' , 'California' , 'Hawaii' , 'Oregon' , 'Washington' ) ");
close(dt0,NoSave);
satby_dt << Set Name("SATByYear");
satby_dt << set dirty(0);
wait(1);
New SQL Query(
Version( 130 ),
Connection( "JMP" ),
JMP Tables(
[ "SATByYear" => "Source(satby_dt)", "SAT" => "$Sample_Data\SAT.jmp" ]
),
QueryName( "SQLQuery" ),
Select(
Distinct,
Column( "State", "t1" ),
Column( "% Taking (2004)", "t1" ),
Column( "2004 Verbal", "t2" ),
Column( "2004 Math", "t2" )
),
From(
Table( "SATByYear", Alias( "t1" ) ),
Table(
"SAT",
Alias( "t2" ),
Join(
Type( Left Outer ),
EQ( Column( "State", "t2" ), Column( "State", "t1" ) ) &
EQ(
Column( "% Taking (2004)", "t2" ),
Column( "% Taking (2004)", "t1" )
) & EQ( Column( "X", "t2" ), Column( "X", "t1" ) ) &
EQ( Column( "Y", "t2" ), Column( "Y", "t1" ) ) &
EQ( Column( "Population", "t2" ), Column( "Population", "t1" ) ) &
EQ( Column( "Latitude", "t2" ), Column( "Latitude", "t1" ) ) &
EQ( Column( "Longitude", "t2" ), Column( "Longitude", "t1" ) )
)
)
),
Where(
In List(
Column( "State", "t1" ),
_AllRows_,
UI(
SelectListFilter(
ListBox,
Base(
"Categorical",
Prompt(
"State:",
Character,
PromptName( "t1.State_1" ),
ValueSource(
Column(
"State",
Alias( "State" ),
Table( "SATByYear" )
)
)
)
)
)
)
)
)
) << Run;
Re: Limite las opciones y permita solo una selección en el filtro de consulta de base de datosBorré mi primera respuesta. La lista manual proporcionó las indicaciones esperadas, pero no filtró según la selección del usuario.
Busque una actualización, pronto.