Avalados por :

Optimización de Consultas SQL en CR para Análisis de Parámetros delimitados por Tuberías

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 11 Vistas
0
Cargando...

En mi limitada experiencia con CR, siempre he usado una conexión de base de datos de comando para poder escribir mi propio SQL. Sin embargo, ahora tengo que analizar un parámetro delimitado por tuberías para obtener mi valor para la cláusula where, por lo que estoy seleccionando varias tablas y uniéndolas a través de la pestaña Vínculos de Expertos en Bases de Datos. Todo funciona bien, pero después de hacer eso y luego analizar el parámetro con la fórmula a continuación en el Experto de Selección, noto que no hay cláusula where en la consulta SQL, y aunque el informe eventualmente muestra los valores correctos, primero recorre miles de registros. Aquí está mi fórmula de Experto de Selección de Registros:

StringVar array Parm1;

Parm1 := Split({?DATA_AREA}, "|");

{SO_ORDERS.CASE_ID} = Parm1[2]

Si cambio "Parm1[2]" en la última línea por un ID de Caso válido, entonces hay una cláusula where en el SQL y el informe se genera de inmediato.

Parece que la fórmula de selección de registros se aplica DESPUÉS de que se busquen todos los registros (sin una cláusula where) cuando uso el valor del parámetro analizado, pero cuando codifico un valor válido, lo coloca en la cláusula where ANTES de que se ejecute el SQL. ¿Hay alguna manera de analizar primero el parámetro y luego usar ese valor analizado en la cláusula where del SQL?

Gracias.

Bill

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

2 Respuestas

0
Cargando...

¡Perfecto! Me costó un poco porque me di cuenta de que necesitaba un segundo parámetro, pero simplemente duplicé lo que había hecho para el primero, creé una nueva fórmula en el informe principal y la asocié con el otro parámetro, y funcionó bien. ¡Gracias!

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Sí, Crystal ejecutará la consulta primero para obtener el 100% de los datos y luego aplicará la condición de selección de registros. Para aumentar el rendimiento, es necesario pasar la condición WHERE a nivel de comando en lugar de a nivel de informe. Por lo tanto, es necesario crear un informe utilizando el comando "add" de esta manera

select * from nombretabla where campo={?Parámetro}

{?Parámetro} es un parámetro a nivel de comando.

Ahora inserta este informe como un subinforme en otro informe que no tiene conexión pero tiene un parámetro

{?ÁREA_DE_DATOS} y crea una fórmula como esta en el informe principal

Split({?ÁREA_DE_DATOS}, "|")[2]

Ahora haz clic derecho en el subinforme y ve a cambiar enlaces de subinforme y agrega esta fórmula del informe principal y enlázala con el parámetro del subinforme {?Parámetro} sin enlazar ningún campo de base de datos del subinforme.

Ahora tu subinforme se ejecutará con la cláusula WHERE para obtener los datos.

Saludos,

Raghavendra

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?