Cómo traducir JMP-cláusula-dónde del filtro de datos a SQL-cláusula-dóndeEstimada comunidad,
Me gustaría usar el objeto de filtro de datos para permitir que los usuarios filtren algunos datos para consultarlos desde la base de datos de Oracle a través de SQL.
Así que extraje una pequeña parte de los datos en una tabla JMP,
y poner un filtro de datos sobre él.
Desde Data Filter puedo extraer la cláusula where,
puede verse de la siguiente manera:
Select Where(
(:PC == "A_PROCESS" | :PC == "C_PROCESS" | :PC == "D_PROCESS") & :TC == "01"
& (:POS >= 25 & :POS <= 126)
)
y me gustaría transferir esto a una cláusula Where de SQL como:
where
PC in ("A_PROCESS", "C_PROCESS", "D_PROCESS")
and TC == "01"
and POS between 25 and 126
Como no estoy tan familiarizado con el procesamiento de texto,
¿Hay una manera fácil de hacer esto en JMP?
especialmente cómo desensamblar la cláusula JMP-where- (que puede ser más compleja que solo las Y's concatenadas),
y volver a ensamblarlo en una cláusula SQL-where?
Gracias por cualquier pista, un saludo,
Jorge
Re: Cómo traducir la cláusula-dónde de JMP del filtro de datos a la cláusula-dónde de SQLHola Jorge,
No estoy seguro de seguir esta declaración: "Pero no fue posible una especie de filtro de tablas (detener y guardar Query en el paso de unión)".
En los filtros, AND está implícito.Puedo ver cómo eso es confuso.Pero si solo agrega un montón de filtros sin hacer clic en el botón O, obtiene Y.En esta consulta, por ejemplo:
yo arrastré Clasificación desde el Columnas disponibles lista en el filtros lista, y luego arrastré Dias libre , y luego arrastré Estado .Nunca hice clic en el O botón.Así que esos tres filtros se combinan con Y, ese filtro es (Clasificación = 'PG' Y DaysOut >= 5 Y Estado = 'FL') .Por lo tanto, puede tener un solo grupo de filtros AND, o puede tener varios filtros individuales que tienen OR juntos, o puede tener grupos de filtros AND que tienen OR entre sí.Lo único que no puede tener es un grupo de filtros que tienen OR juntos que tienen AND con otro grupo de filtros que tienen OR juntos.
En última instancia, si no puede llegar hasta lo que necesita con Query Builder, puede llegar tan lejos como sea posible y luego usar el menú del triángulo rojo en la esquina superior izquierda y seleccionar Convertir a consulta SQL personalizada .Eso generará el SQL para la consulta a medida que lo haya creado de forma interactiva y lo colocará en un editor de texto para que pueda editarlo a mano para obtener lo que necesita:

Una vez que haga cambios en SQL personalizado modo, realmente no puede volver al modo interactivo.
HH,
eric
Re: Cómo traducir la cláusula-dónde de JMP del filtro de datos a la cláusula-dónde de SQLHola Eric,
gracias por la pronta respuesta, me ayudo
y Query Builder tiene algunas características muy interesantes. Así que miraré, dónde usar.
Podría guardar la consulta con combinaciones definidas,
y úsalo de nuevo.
Pero no fue posible una especie de filtro de tablas (detener y guardar Consulta en el paso de unión),
y no encontré la posibilidad de conectar filtros con AND en lugar de OR.
Atentamente,
Jorge
Re: Cómo traducir la cláusula-dónde de JMP del filtro de datos a la cláusula-dónde de SQLHola Jorge,
Gran pregunta.Esto es lo que hago:
- Inicie Query Builder y conéctese a la base de datos.
- Utilizar el Seleccionar tablas para consulta cuadro de diálogo para agregar las tablas y unir las relaciones que espera usar con frecuencia.
- Hacer clic Crear consulta .
- Cuando el Consultor de construcción aparece la ventana, no agregue ninguna columna o filtro a la consulta.En su lugar, haga clic inmediatamente en Ahorrar y dar a la consulta un nombre como complex_query_template.jmpquery.
- Cuando desee crear una consulta utilizando esa plantilla como punto de partida, busque complex_query_template.jmpquery en el Hogar ventana Archivos recientes lista, haga clic derecho sobre ella y seleccione Editar una copia .Esto iniciará Query Builder con todas las tablas y uniones en su lugar como se definió en la plantilla, y luego puede proceder a seleccionar columnas y agregar filtros.
Si su consulta de plantilla no está en la lista de archivos recientes de la ventana de inicio, puede usar Archivo abierto para abrirlo, pero solo tienes que recordar hacer inmediatamente una Guardar como para que después de agregar cosas a la consulta y guardarla, no sobrescriba su plantilla.
HH,
eric
Re: Cómo traducir la cláusula-dónde de JMP del filtro de datos a la cláusula-dónde de SQLHola Eric,
tu comentario me lleva a otra pregunta,
como tenemos bases de datos muy complejas con muchos esquemas y tablas,
¿JMP Query Builder permite iniciarlo definido por el usuario?
Es decir, ¿puedo iniciar el generador de consultas con esquemas predefinidos y tablas filtradas?
para que no necesite varios minutos para hacer clic en la base de datos?
Atentamente,
Jorge
Re: Cómo traducir la cláusula-dónde de JMP del filtro de datos a la cláusula-dónde de SQLHola Eric,
gracias por su respuesta, sí, eché un vistazo a Query Builder.
Utilizo Query Builder en varios scripts, etc., pero siempre no uso el cuadro de diálogo, sino solo el método sql personalizado.
Esto es por dos razones:
- nuestras bases de datos son bastante complejas (muchos esquemas, tablas, etc.), por lo que es necesario hacer muchos clics antes de que alguien pueda encontrar la tabla correcta
- la documentación / consultas guardadas en la tabla de datos se ven bastante feas, cuando ha hecho clic en la tabla en lugar de usar sql personalizado,
para que no se pueda volver a usar...
Así que me gusta trabajar con "Nueva consulta SQL" + SQL personalizado, especialmente para usar las tablas generadas de esa manera (por ejemplo, actualizar desde la base de datos y volver a hacer el mismo análisis ...).
Mi objetivo es construir una interfaz de usuario para consultar datos muy complejos,
la primera parte se realiza en la base de datos (el cliente con jmp no puede hacerlo por motivos de rendimiento),
y la segunda parte la realiza jmp, comenzando por obtener los datos de la base de datos mediante una GUI personalizada fácil de usar.
Aquí JMP ofrece herramientas perfectas, pero a veces queda un pequeño problema por resolver, como la cláusula where.
Atentamente,
Jorge
Re: Cómo traducir la cláusula-dónde de JMP del filtro de datos a la cláusula-dónde de SQLHola Jorge,
¿Has visto Query Builder en JMP?Archivo > Base de datos > Generador de consultas.Le permite crear consultas de forma interactiva en fuentes de datos ODBC, incluido el filtrado, filtros incluidos que solicitan, y luego puede ejecutar las consultas de forma interactiva o usarlas en JSL.Para la mayoría de las personas, requiere mucho menos tiempo que escribir su propio SQL a mano (pero si desea escribir su propio SQL para usarlo con Query Builder, esa también es una opción).
Gracias,
eric
Re: Cómo traducir la cláusula-dónde de JMP del filtro de datos a la cláusula-dónde de SQLEstimados,
mientras tanto resolví el problema. Me di cuenta de que mi secuencia de comandos no tiene que comprender la cláusula JMP-where, sino que simplemente debe traducirla a una cláusula SQL-where que funcione.
Así que aquí hay un ejemplo de JSL para hacer esto.
// Example for translating a JMP-where-clause from e.g. Data Filter to a SQL-where-clause
JMP_where_clause =
"Select Where(
(:PC == \!"A_PROCESS\!" | :PC == \!"C_PROCESS\!" | :PC == \!"D_PROCESS\!") & :TC == \!"01\!"
& (:POS >= 25 & :POS <= 126)
)";
jmp2sql_where = Function( {jmp_where},
// remove "Select Where()" from the string
df_list = Regex Match( jmp_where, "Select Where\((.*)\)" );
// replace JMP keywords by SQL keywords
sql_where = "AND " || Substitute( df_list[2], "\!"", "'", "==", "=", ":", "CZIM.", "&", "AND", "|", "OR" );
Return( sql_where );
);
sql_where = jmp2sql_where( JMP_where_clause);
show(sql_where);<BR /><BR />Y el resultado es:
sql_where = "AND
(CZIM.PC = 'A_PROCESS' OR CZIM.PC = 'C_PROCESS' OR CZIM.PC = 'D_PROCESS') AND CZIM.TC = '01'
AND (CZIM.POS >= 25 AND CZIM.POS <= 126)
";
Atentamente,
Jorge