4.4Comandos SQL e informes multifuente
Lo esencial en 30 segundos
- El comando SQL = escribir su propia consulta : en lugar de dejar que Crystal Reports genere, se escribe SELECT, FROM, WHERE, JOIN — ejecutada tal cual como una « tabla virtual ».
- Control y rendimiento máximos : combinaciones exactas, filtros y agregaciones empujados del lado base de datos — decisivo con grandes volúmenes y para consultas complejas (subconsultas, UNION).
- Reflejo de Farès : parámetros Crystal en la consulta para filtrar del lado servidor ; subinformes para las fuentes diferentes — y nunca una credencial escrita en la orden.
Minicaso hilado — Farès y el top clientes del lado servidor
Farès, controlador de gestión en Argel, debe sacar la facturación por cliente sobre el año elegido : vía la interfaz, Crystal trae todas las líneas y luego agrega — demasiado lento con cientos de miles de pedidos. Añade un comando SQL que filtra por año vía un parámetro y agrega del lado base de datos (GROUP BY), trayendo solo los totales. Para la segunda fuente (un archivo de descuentos no combinable), mantiene un subinforme vinculado (ver 4.1). Cuarto hito del hilo conductor : Farès hace trabajar a la base de datos, no al puesto cliente.
Suite de los casos 4.1-4.3 — Farès pasa de lo visual al rendimiento del lado base de datos.
1. El comando SQL : escribir en lugar de hacer clic
Para las necesidades avanzadas, el comando SQL (SQL Command) : en lugar de elegir tablas y dejar que Crystal Reports genere la consulta, se escribe su propia consulta (SELECT … FROM … WHERE … JOIN …) que se convierte en la fuente del informe, ejecutada tal cual como una « tabla virtual ». Se añade en el asistente de conexión.
Usos : control total (combinaciones, filtros, cálculos del lado base de datos), consultas complejas imposibles o penosas vía la interfaz (combinaciones elaboradas, subconsultas, agrupaciones SQL, UNION, funciones específicas de la base de datos), rendimiento (empujar el trabajo hacia la base de datos, optimizada para ello, y traer solo el resultado). Allí se integran parámetros Crystal para un filtrado interactivo ejecutado del lado servidor, como el parámetro año de Farès.
2. Los informes multifuente : elegir según la naturaleza de las fuentes
Combinar varios orígenes según el caso. Misma base de datos → combinaciones clásicas o comando SQL (eficaz : la base de datos combina en una consulta). Fuentes diferentes no combinables (dos bases de datos, base + archivo) → subinformes (ver 4.1), a menudo el mejor enfoque : cada fuente en su informe, vinculado por un campo común.
Crystal Reports permite también añadir varias conexiones en un mismo informe (multiconexiones), pero las combinaciones entre fuentes se hacen a veces del lado cliente — costosas con volúmenes importantes, a reservar a los casos pequeños. Para combinaciones complejas, recurrentes o voluminosas, lo más robusto es a menudo consolidar aguas arriba (vista de base de datos, tabla de síntesis, ETL) y luego conectar el informe a una fuente única.
3. Competencia y mantenimiento : el precio del control
El comando SQL exige dominar SQL : la consulta debe ser válida y optimizada — una consulta incorrecta da un informe lento o falso — y es código para mantener (documentar, versionar), al contrario del arrastrar y soltar. En caso de duda, empezar por la interfaz ; pasar al comando SQL solo al topar con un límite.
Es el nivel en que el reporting se une al dominio de las bases de datos — potente, pero exigente en competencias y en rigor. Del lado seguridad : cuenta de solo lectura, parámetros en lugar de concatenación, ninguna contraseña escrita (ver prudencia más abajo).
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Filtrar del lado servidor en SQL
El top clientes de Farès : un parámetro en la consulta, la agregación del lado base de datos.
SELECT client, SUM(montant) AS total
FROM commandes
WHERE annee = {?Annee}
GROUP BY client
→ La base filtra y agrega ; Crystal recibe el mínimo.
Lectura : WHERE parametrizado + GROUP BY del lado base de datos = solo los totales transitan.
Lección : control y rendimiento máximos con grandes volúmenes — consulta válida, optimizada, documentada.
Vocabulario de la sección
- Comando SQL (SQL Command)
- Escribir SU PROPIA consulta SQL (SELECT, FROM, WHERE, JOIN) como fuente del informe, ejecutada tal cual por la base de datos.
Ejemplo sencillo: Farès escribe el top clientes por año en lugar de dejar que Crystal genere la consulta.
Lo que no es: una selección de tablas por arrastrar y soltar.
Reflejo: límite de la interfaz o lentitud : pasar al comando SQL.
- Filtrado del lado servidor
- Parámetros Crystal integrados en la consulta : la base de datos filtra y agrega, Crystal solo recibe el resultado necesario.
Ejemplo sencillo: El año elegido por Farès filtra en el WHERE ejecutado por la base de datos.
Lo que no es: traer todas las líneas y luego filtrar en el informe.
Reflejo: gran volumen : WHERE parametrizado + agregación del lado base de datos.
- Informes multifuente
- Combinar varios orígenes : combinaciones o SQL (misma base de datos), SUBINFORMES (fuentes diferentes), multiconexiones (combinaciones del lado cliente, costosas).
Ejemplo sencillo: Farès : comando SQL para la base de datos de pedidos, subinforme para el archivo de descuentos.
Lo que no es: mezclarlo todo en una sola conexión multifuente con grandes volúmenes.
Reflejo: fuentes diferentes no combinables : primero los subinformes.
- Consolidación aguas arriba
- Preparar los datos antes de Crystal (vista, tabla de síntesis, ETL) y luego conectar el informe a una fuente única — lo más robusto para los casos pesados.
Ejemplo sencillo: Farès hace crear una vista anual de las ventas para los informes recurrentes.
Lo que no es: combinar en cada ejecución volúmenes heterogéneos del lado cliente.
Reflejo: combinación compleja o recurrente : consolidar una vez, informar a menudo.
En la práctica — En práctica — Usar un comando SQL
- En el asistente de conexión, añada un COMANDO SQL : escriba su consulta (SELECT … FROM … JOIN … WHERE …) — se convierte en la fuente del informe.
- Integre PARÁMETROS Crystal en la consulta para un filtrado interactivo empujado del lado servidor.
- Verifique que la consulta es VÁLIDA y OPTIMIZADA (combinaciones, filtros, agregaciones del lado base de datos) ; pruebe el resultado y el rendimiento.
- Para fuentes DIFERENTES no combinables, prefiera SUBINFORMES (4.1) antes que la multiconexión (combinaciones del lado cliente costosas).
Guion listo para decir — explicar el comando SQL a la DSI (30 s)
« Soy Farès : para el top clientes anual, he escrito un comando SQL que filtra por año y agrega del lado base de datos — solo traemos los totales en lugar de cientos de miles de líneas. La consulta está probada, documentada, y el informe funciona con una cuenta en solo lectura, sin contraseña escrita. »
Para decir para hacer validar el acceso base : presente la consulta, la cuenta usada y la ganancia medida.
Plantilla copiar-pegar — comando SQL parametrizado (válido)
SELECT c.nom_client AS client,
SUM(l.montant) AS total
FROM clients AS c
INNER JOIN commandes AS l
ON l.id_client = c.id_client
WHERE l.annee = {?Annee}
GROUP BY c.nom_client
ORDER BY total DESC
Top clientes anual
Como Farès : WHERE sobre el año parametrizado + GROUP BY del lado base de datos — solo los totales transitan.
Consulta compleja (UNION)
Combinar dos SELECT compatibles por UNION en el comando cuando la interfaz no lo permite.
Fuentes heterogéneas
Base de datos de un lado, archivo del otro : subinforme vinculado antes que multiconexión costosa.
Caso recurrente voluminoso
Pedir una vista o una tabla de síntesis aguas arriba : el informe se conecta a una fuente única y rápida.
✓ Buenas prácticas
- Empiece por la interfaz ; pase al comando SQL si topa con un límite.
- Empuje combinaciones, filtros y agregaciones del lado base de datos ; explote los índices.
- Consolide aguas arriba (vista, tabla) para las combinaciones complejas o voluminosas.
✗ Errores frecuentes
- Una consulta SQL mal escrita (informe lento o falso).
- Multiconexiones con grandes volúmenes (combinaciones del lado cliente).
- Olvidar que el comando SQL es código para mantener.
Puntos clave
- El COMANDO SQL = escribir SU PROPIA consulta como fuente. Control y RENDIMIENTO máximos : combinaciones, filtros, agregaciones y subconsultas del lado BASE DE DATOS.
- Usos : consultas COMPLEJAS (subconsultas, UNION, agregaciones, funciones), control total, rendimiento. PARÁMETROS integrados (filtrado del lado servidor).
- MULTIFUENTE : combinaciones o SQL (misma base de datos) ; SUBINFORMES para fuentes DIFERENTES ; multiconexiones posibles pero combinaciones DEL LADO CLIENTE (costosas) ; consolidar aguas arriba para los casos pesados.
- Exige DOMINAR SQL (consulta válida y optimizada) y es CÓDIGO PARA MANTENER.
Desafío 48h — aplíquelo mañana
Convierta un informe lento : reescriba su fuente en comando SQL (filtro parametrizado + agregación del lado base de datos), mida la ganancia y documente la consulta.
- Sé escribir un comando SQL válido y optimizado con parámetros.
- Sé elegir el enfoque multifuente según la naturaleza de las fuentes.
- Trabajo en solo lectura, sin credencial escrita, consulta documentada.
Preguntas frecuentes
¿Cuándo escribir un comando SQL en lugar de usar la interfaz de selección de tablas ?
La INTERFAZ (tablas + vínculos, Crystal genera la consulta) es accesible, visual y fácil de mantener : la opción por defecto para la mayoría de los informes. Escriba un COMANDO SQL para : las consultas COMPLEJAS que la interfaz gestiona mal (subconsultas, UNION, agregaciones avanzadas, funciones específicas), el rendimiento MÁXIMO (empujar combinaciones, filtros y agregaciones a la base de datos — decisivo con grandes volúmenes), el CONTROL preciso sobre la consulta. Condición : dominar SQL (consulta válida, optimizada, documentada). En caso de duda, empiece por la interfaz y pase a SQL al topar con un límite.
¿Cómo combinar datos de varias fuentes diferentes ?
Según la naturaleza de las fuentes. MISMA base de datos → COMBINACIONES o comando SQL : la base de datos combina en una consulta (eficaz). Fuentes DIFERENTES no combinables → SUBINFORMES vinculados (cada fuente en su informe, vinculado por un campo común ; rendimiento al nivel del grupo) o multiconexiones (Crystal combina DEL LADO CLIENTE — lento con grandes volúmenes, solo casos pequeños). Para combinaciones complejas, recurrentes o voluminosas, lo más robusto es CONSOLIDAR aguas arriba (vista, tabla de síntesis, ETL) y luego conectar un informe a fuente única.
¿Qué permite un comando SQL frente a la selección de tablas ?