4.4Commandes SQL & rapports multi-sources
Pour les besoins avancés, Crystal Reports permet d'aller au-delà de la simple sélection de tables : la COMMANDE SQL (SQL Command). Au lieu de choisir des tables et de laisser Crystal générer la requête, on ÉCRIT SA PROPRE REQUÊTE SQL (SELECT … FROM … WHERE … JOIN …) qui devient la source du rapport. Crystal exécute cette requête telle quelle et utilise le résultat comme une « table virtuelle ». À quoi ça sert ? (1) Contrôle total : maîtriser exactement les jointures, les filtres, les calculs faits CÔTÉ BASE (performance optimale). (2) Requêtes complexes impossibles ou pénibles via l'interface graphique : jointures élaborées, sous-requêtes, regroupements SQL, fonctions spécifiques à la base, UNION. (3) Performance : pousser un maximum de travail (jointures, agrégations, filtres) vers la base, qui est optimisée pour cela, et ne rapatrier que le résultat nécessaire. La commande SQL est l'outil des utilisateurs qui MAÎTRISENT le SQL et veulent un contrôle et une performance maximum. On peut y intégrer des PARAMÈTRES Crystal (pour un filtrage interactif poussé côté serveur).
Les RAPPORTS MULTI-SOURCES. Combiner des données de plusieurs origines se fait de plusieurs façons selon le cas. (1) Si les tables sont dans la MÊME base : jointures classiques (niveau 0) ou commande SQL. (2) Si les données viennent de SOURCES DIFFÉRENTES (deux bases, une base + un fichier) qui ne peuvent être jointes directement : les SOUS-RAPPORTS (4-1) sont une solution (chaque source dans son rapport). (3) Crystal Reports propose aussi un mode qui permet d'AJOUTER plusieurs connexions dans un même rapport et de les lier — utile pour combiner des sources hétérogènes, mais avec des limites (les jointures inter-sources se font parfois côté client, coûteuses). Points importants. (1) La COMMANDE SQL donne un CONTRÔLE et une PERFORMANCE maximum en écrivant la requête soi-même — pour ceux qui maîtrisent le SQL (jointures, sous-requêtes, agrégations poussées côté base). (2) On y intègre des PARAMÈTRES pour un filtrage interactif exécuté côté serveur. (3) Pour des SOURCES DIFFÉRENTES non jointables, les sous-rapports sont souvent la meilleure approche ; le multi-connexions existe mais peut être coûteux (jointures côté client). (4) La commande SQL doit être VALIDE et OPTIMISÉE (une mauvaise requête SQL = un rapport lent ou faux) — elle demande des compétences SQL. (5) Attention à la MAINTENANCE : une commande SQL est du code à maintenir (contrairement au glisser-déposer). Maîtriser les commandes SQL et les approches multi-sources permet de traiter les cas COMPLEXES et EXIGEANTS (requêtes élaborées, performance critique, données hétérogènes) — c'est le niveau où le reporting rejoint la maîtrise des bases de données. Ces outils sont puissants mais demandent des compétences techniques (SQL) et de la rigueur.
Vocabulaire de la section
- Commande SQL (SQL Command)
- Écrire SA PROPRE requête SQL (SELECT/FROM/WHERE/JOIN) comme source du rapport, exécutée telle quelle par la base — au lieu de laisser Crystal générer la requête. Contrôle et performance maximum.
- Usages de la commande SQL
- Contrôle total des jointures/filtres/calculs côté base ; requêtes COMPLEXES (sous-requêtes, agrégations, UNION, fonctions spécifiques) ; PERFORMANCE (pousser le travail à la base, rapatrier le minimum).
- Paramètres dans une commande SQL
- On peut intégrer des paramètres Crystal dans la requête pour un filtrage interactif exécuté CÔTÉ SERVEUR (performance).
- Rapports multi-sources
- Combiner plusieurs origines : jointures/commande SQL (même base) ; SOUS-RAPPORTS (sources différentes non jointables) ; multi-connexions (possible mais jointures inter-sources parfois côté client, coûteuses).
- Exigence de compétence & maintenance
- La commande SQL demande de MAÎTRISER le SQL (requête valide et optimisée) ; c'est du CODE à maintenir (contrairement au glisser-déposer).
Quand écrire une COMMANDE SQL plutôt que d'utiliser l'interface de sélection des tables ?
En pratique — Utiliser une commande SQL
- Dans l'assistant de connexion, ajoutez une COMMANDE SQL : écrivez votre requête (SELECT … FROM … JOIN … WHERE …) — elle devient la source du rapport.
- Intégrez des PARAMÈTRES Crystal dans la requête pour un filtrage interactif poussé côté serveur.
- Vérifiez que la requête est VALIDE et OPTIMISÉE (jointures, filtres, agrégations côté base) ; testez le résultat et la performance.
- Pour des sources DIFFÉRENTES non jointables, préférez des SOUS-RAPPORTS (4-1) plutôt que le multi-connexions (jointures côté client coûteuses).
Points clés à retenir
- La COMMANDE SQL (SQL Command) = écrire SA PROPRE requête SQL comme source du rapport (au lieu de laisser Crystal générer). Contrôle et PERFORMANCE maximum : jointures, filtres, agrégations, sous-requêtes poussés CÔTÉ BASE.
- Usages : requêtes COMPLEXES (sous-requêtes, UNION, agrégations, fonctions spécifiques), contrôle total, performance (rapatrier le minimum). On y intègre des PARAMÈTRES pour un filtrage interactif côté serveur.
- MULTI-SOURCES : jointures/commande SQL (même base) ; SOUS-RAPPORTS pour des sources DIFFÉRENTES non jointables (souvent la meilleure approche) ; multi-connexions possible mais jointures inter-sources parfois CÔTÉ CLIENT (coûteuses).
- Exige de MAÎTRISER le SQL (requête valide et optimisée — une mauvaise requête = rapport lent ou faux) et c'est du CODE à MAINTENIR. Le niveau où le reporting rejoint la maîtrise des bases de données.
Questions fréquentes
Quand écrire une commande SQL plutôt que d'utiliser l'interface de sélection des tables ?
La commande SQL offre contrôle et performance maximum mais exige de maîtriser le SQL ; l'interface graphique est plus simple et suffit dans la plupart des cas — voici comment choisir. L'INTERFACE graphique (sélection de tables + liens) : (1) On choisit des tables, on définit les liens (jointures) visuellement, et Crystal GÉNÈRE la requête SQL sous le capot. (2) Avantages : ACCESSIBLE (pas besoin de connaître le SQL), visuel, rapide pour des rapports standards, facile à maintenir (on modifie via l'interface). (3) Convient pour : la majorité des rapports — tables reliées par des clés, filtres simples, regroupements via l'interface. C'est le choix par défaut. La COMMANDE SQL (requête écrite à la main) : (1) On écrit soi-même le SELECT/FROM/WHERE/JOIN, qui devient la source. (2) Avantages : CONTRÔLE TOTAL (jointures exactes, filtres, calculs côté base), possibilité de requêtes COMPLEXES (sous-requêtes, UNION, agrégations SQL, fonctions spécifiques à la base) impossibles ou pénibles via l'interface, et PERFORMANCE optimale (on pousse le maximum de travail à la base, on ne rapatrie que le nécessaire). (3) Convient pour : les cas complexes ou exigeants — requêtes élaborées, performance critique sur gros volumes, logique que l'interface ne permet pas. (4) Inconvénients : exige de MAÎTRISER le SQL, c'est du CODE à maintenir (moins accessible que le glisser-déposer), et une requête mal écrite peut être lente ou fausse. Quand écrire une COMMANDE SQL : (1) Requête COMPLEXE que l'interface ne gère pas bien : sous-requêtes, UNION (combiner plusieurs SELECT), agrégations avancées, fonctions SQL spécifiques, logique de jointure élaborée. (2) PERFORMANCE critique : pour pousser jointures, filtres et agrégations vers la base (optimisée) et minimiser les données rapatriées — décisif sur de gros volumes. (3) CONTRÔLE précis nécessaire sur la requête (le SQL exact exécuté). (4) Réutiliser une requête SQL EXISTANTE et éprouvée. Quand rester sur l'INTERFACE : (1) Rapport STANDARD (tables reliées, filtres simples). (2) Vous ne maîtrisez PAS le SQL. (3) Vous voulez la SIMPLICITÉ et une maintenance facile. (4) L'interface suffit à produire ce que vous voulez. Comment décider : (1) L'interface répond au besoin et vous voulez la simplicité → INTERFACE (par défaut). (2) Besoin de complexité (sous-requêtes, UNION…), de performance maximale, ou de contrôle précis, ET vous maîtrisez le SQL → COMMANDE SQL. (3) En cas de doute, commencez par l'interface ; passez à la commande SQL seulement si vous butez sur une limite (complexité, performance). Bonnes pratiques pour une commande SQL : (1) Écrivez une requête VALIDE et OPTIMISÉE (bonnes jointures, filtres côté base, index exploités). (2) Intégrez des PARAMÈTRES Crystal pour le filtrage interactif (poussé côté serveur). (3) TESTEZ le résultat (justesse) et la performance. (4) Documentez la requête (c'est du code à maintenir). En résumé : utilisez l'INTERFACE graphique par défaut (accessible, simple, suffisante pour la plupart des rapports) ; écrivez une COMMANDE SQL quand vous avez besoin de requêtes COMPLEXES (sous-requêtes, UNION, agrégations), d'une PERFORMANCE maximale (pousser le travail à la base) ou d'un CONTRÔLE précis — et que vous MAÎTRISEZ le SQL. La commande SQL est puissante (contrôle, performance) mais exige des compétences SQL et de la rigueur (code à maintenir, requête à optimiser). Choisissez selon la complexité du besoin et vos compétences : simple et standard → interface ; complexe/performant → commande SQL.
Comment combiner des données de plusieurs sources différentes dans un même rapport ?
Combiner plusieurs sources dépend de leur nature : si elles sont dans la même base, on les joint ; si elles sont dans des sources DIFFÉRENTES non jointables, les sous-rapports sont souvent la meilleure solution — voici les approches et leurs limites. Cas 1 — les tables sont dans la MÊME base : (1) Utilisez des JOINTURES classiques (niveau 0) : sélectionnez les tables, reliez-les par leurs clés. La base combine tout en une requête (performant). (2) Ou une COMMANDE SQL (4-4) pour un contrôle/une performance maximum sur des jointures complexes. C'est le cas le plus simple : une seule connexion, des jointures. Cas 2 — les données viennent de SOURCES DIFFÉRENTES (deux bases distinctes, une base + un fichier Excel, une base + une source SAP) qui ne peuvent PAS être jointes directement par la base : (1) SOUS-RAPPORTS (approche recommandée, niveau 4-1) : chaque source dans son propre rapport (le principal sur la base A, un sous-rapport sur la base B ou le fichier). On LIE le sous-rapport au principal par un champ commun (le sous-rapport affiche les données correspondantes de l'autre source). C'est souvent la meilleure façon de combiner des sources hétérogènes proprement. Attention à la performance (placer le sous-rapport lié au niveau d'un groupe, pas des détails). (2) Multi-connexions dans un même rapport : Crystal permet d'ajouter plusieurs connexions et de tenter de lier des tables de sources différentes. MAIS les jointures INTER-SOURCES ne peuvent pas être faites par une seule base : Crystal doit rapatrier les données des deux sources et les combiner CÔTÉ CLIENT — ce qui peut être LENT et lourd sur des volumes importants. À utiliser avec prudence, sur des volumes modérés. (3) Préparer les données en amont : parfois, la meilleure solution est de ne PAS tout faire dans Crystal — consolider les données dans une base/vue intermédiaire (via un ETL, une vue de base de données, une table de synthèse) puis brancher Crystal sur cette source unique. Cela déporte la complexité vers la base (performant, maintenable) et simplifie le rapport. Comment choisir : (1) MÊME base → jointures (ou commande SQL). (2) Sources différentes, besoin d'afficher des données correspondantes → SOUS-RAPPORTS liés (recommandé, en soignant la performance). (3) Sources différentes, volumes modérés, jointure simple → multi-connexions (avec prudence, jointures côté client). (4) Combinaison complexe/récurrente ou gros volumes → CONSOLIDER en amont (vue/table intermédiaire) puis un rapport sur source unique — souvent la solution la plus robuste et performante. Les points d'attention : (1) Performance : les combinaisons inter-sources (sous-rapports liés dans les détails, multi-connexions côté client) peuvent être coûteuses — préférez le niveau groupe pour les sous-rapports, limitez les données, ou consolidez en amont. (2) Cohérence des données : combiner des sources suppose des clés communes fiables et des données cohérentes (mêmes identifiants). (3) Maintenance : plus il y a de sources et de mécanismes (sous-rapports, connexions multiples), plus le rapport est complexe à maintenir. En résumé : combinez plusieurs sources selon leur nature — JOINTURES (ou commande SQL) si elles sont dans la MÊME base ; SOUS-RAPPORTS liés (approche recommandée, en soignant la performance) pour des sources DIFFÉRENTES non jointables ; multi-connexions possible mais coûteux (jointures côté client) ; et pour les cas complexes ou volumineux, CONSOLIDER les données en amont (vue/table intermédiaire) puis brancher un rapport sur cette source unique — souvent le plus robuste. Choisissez en fonction de la jointabilité des sources, du volume et de la performance visée. Combiner des sources hétérogènes est un besoin réel mais délicat ; les sous-rapports et la consolidation en amont sont les approches les plus fiables.