Résolution des problèmes de performances de rapport

Nouveau : 17 novembre 2008

Cette rubrique décrit différentes techniques permettant d'accroître les performances du rapport.

Pour résoudre les problèmes de performances de rapport, utilisez les fichiers journaux de Reporting Services pour déterminer la phase qui nécessite le plus de temps d'activité : l'extraction des données, le traitement de la disposition du rapport ou le rendu du rapport. Pour plus d'informations, consultez Dépannage des problèmes liés aux rapports.

Après cela, utilisez les sections suivantes pour vous aider à résoudre les problèmes spécifiques.

Amélioration des performances d'extraction de données

Amélioration des performances de traitement des rapports

Amélioration des performances de rendu des rapports

Amélioration des performances d'extraction de données

Une quantité de données de rapport plus importante utilise davantage de ressources et davantage de stockage, crée davantage de trafic réseau et requiert davantage de temps de traitement. Pour vous aider à contrôler les performances des rapports, vous devez vous efforcer de concevoir des rapports avec une quantité de données et une complexité raisonnables. Par exemple, peu d'utilisateurs souhaitent visualiser un rapport d'un millier de pages. Il est difficile de suivre le contexte pour un rapport d'extraction si la table contient trop de niveaux d'imbrication ou d'analyser une table avec un nombre de colonnes trop élevé. Les graphiques à secteurs qui contiennent des centaines de secteurs sont difficilement lisibles. Vous devez analyser soigneusement les spécifications de vos rapports afin de déterminer la quantité de données nécessaire, puis extraire uniquement ces données à partir des sources de données de rapport.

Utilisez les informations des sections suivantes pour vous aider à réduire la durée nécessaire à l'extraction des données pour votre rapport.

Extraction d'une quantité de données supérieure aux besoins réels

Il est plus efficace de filtrer, trier et agréger de grandes quantités de données sur la source de données plutôt que durant le traitement du rapport. Écrivez les requêtes de façon à retourner uniquement les données que vous souhaitez afficher dans le rapport. Si vous prévoyez d'afficher uniquement un résumé des données, calculez les valeurs agrégées sur la source de données et n'extrayez pas les données détaillées. La liste suivante contient quelques suggestions pour l'évaluation de chaque requête de rapport dans le rapport :

  • Écrivez des requêtes avec des clauses WHERE ou HAVING de manière à limiter les données uniquement à ce que l'utilisateur doit visualiser dans le rapport. Utilisez des paramètres de requêtes pour limiter les données extraites au moment de l'exécution. Pour plus d'informations, consultez Filtrage des lignes avec les clauses WHERE et HAVING.
    Lorsque vous créez un rapport instantané avec des paramètres de rapport qui filtrent les données, toutes les données qui peuvent être affichées dans le rapport doivent être enregistrées dans la capture instantanée. Dans ce cas, n'utilisez pas de paramètres de requêtes dans les requêtes de dataset. Au lieu de cela, créez manuellement des paramètres de rapport que vous pouvez utiliser dans des expressions de filtre afin de permettre aux utilisateurs de spécifier les données du rapport souhaitées.
  • Écrivez des requêtes avec la clause ORDER BY afin d'effectuer un tri préalable des données extraites pour un rapport. Triez les données dans l'ordre dans lequel vous souhaitez qu'elles soient triées dans le rapport. Le tri préalable des données améliore la durée de traitement du rapport grâce à la manière dont elles sont stockées en mémoire. Pour de nombreuses tâches de traitement de rapport, il n'est pas nécessaire de trier les données avant de les traiter. Par exemple, SUM ne dépend pas de l'ordre de tri. Les données dans les instances de groupes ne sont pas triées automatiquement. Si vous n'avez pas besoin de trier les données dans le rapport, n'utilisez pas d'expressions de tri sur le dataset ou la région de données. Pour plus d'informations, consultez Clause ORDER BY (Transact-SQL) et Tri des données dans un rapport.
    Toutefois, le tri des groupes ou le tri par valeurs agrégées est plus simple à effectuer dans le rapport que dans la requête. Il est souvent plus efficace de trier les groupes dans le rapport plutôt que dans la requête.
  • Écrivez des requêtes avec la clause GROUP BY pour agréger les valeurs sur la source de données
    Bien souvent, le moyen le plus efficace de communiquer des informations consiste à agréger des valeurs et à afficher des résumés. Vous pouvez calculer certains niveaux d'agrégation sur la source de données et les extraire pour un dataset. Les données « détaillées » dans le dataset désignent maintenant des valeurs agrégées calculées sur la source de données. Pour plus d'informations sur l'agrégation dans la requête, consultez Synthèse des résultats d'une requête (Visual Database Tools).
    Une fois que ces valeurs pré-agrégées se trouvent dans un rapport, vous pouvez continuer à agréger les valeurs tant que vous utilisez une fonction d'agrégation mathématiquement transitive, par exemple SUM. Supposons par exemple que vous disposez d'un ensemble de six valeurs : 1, 2, 3, 4, 5, 6. Si vous groupez les valeurs par paires, vous obtenez un ensemble de trois valeurs : 3, 7, 11. Vous pouvez calculer la somme sur le premier ensemble (21) et calculer la somme du deuxième ensemble (21) ; les sommes sont égales quel que soit le groupement. Si vous calculez la moyenne des valeurs dans les ensembles à l'aide de la fonction AVG, vous obtenez un résultat différent pour chaque ensemble. La moyenne pour l'ensemble des six valeurs est 21/6 ou 3,5. La moyenne de l'ensemble des trois valeurs est 21/3 ou 7. AVG n'est pas une fonction transitive.
  • Considérez l'analyse et l'optimisation des performances des requêtes sur la source de données. Par exemple, pour en savoir plus sur l'optimiseur de requête pour SQL Server 2005, consultez Performance des requêtes et Traitement d'une instruction SQL unique.
  • Considérez la quantité de données nécessaire pour un graphique. Dans un graphique en courbes, le fait de dessiner des centaines de points dans quelques pixels sur un moniteur entraîne une dégradation des performances et n'améliore pas l'affichage visuel du graphique. Dans un graphique à secteurs, il est préférable de ne pas utiliser plus de sept ou huit secteurs.
  • Pour les éléments de rapport avec une visibilité conditionnelle, le processeur de rapport doit appliquer des expressions de groupement, de tri et de filtrage même si seul le niveau supérieur des données est initialement visible. Si l'utilisateur ne souhaite pas toujours visualiser des données détaillées, il est préférable d'utiliser un rapport d'extraction. Les rapports d'extraction ne s'exécutent que lorsqu'un utilisateur clique sur le lien d'extraction dans le rapport principal. Les rapports ou sous-rapports d'extraction traitent toutes les données, même lorsqu'elles sont initialement masquées. Pour plus d'informations, consultez Ajout de liens à un rapport.
  • Envisagez la création de captures instantanées d'exécution pour un rapport. Une capture instantanée de rapport inclut toutes les données de rapport extraites pour les datasets dans la définition de rapport. Pour plus d'informations, consultez Captures instantanées de rapport.

Un trafic réseau élevé entraîne des durées d'attente prolongées

De grandes quantités de données passées en tant que trafic réseau peuvent être synonymes de durées d'attente pour l'utilisateur. Si vous connaissez la base utilisateur prévue et le volume de visualisations de rapports prévu, vous pouvez sélectionner la méthode appropriée pour le déploiement des composants de serveur de rapports.

Considérez les stratégies suivantes pour aider à réduire les temps d'attente pour l'utilisateur :

  • Conservez la base de données du serveur de rapports sur le même ordinateur que le serveur de rapports.
    La base de données du serveur de rapports tempdb gère les données de rapport extraites pour chaque requête de dataset. Conservez tempdb sur le serveur de rapports afin de réduire le trafic réseau qui peut ralentir l'exécution des rapports.
  • Pour les sources de données d'entrepôt de données, conservez l'entrepôt de données sur un serveur distinct du serveur de rapports.
    Bien que l'extraction de données sur le réseau ajoute une tâche supplémentaire pour l'exécution de rapport, le fait d'avoir l'entrepôt de données et Reporting Services sur le même serveur peut ralentir les performances car ils sont tous deux en conflit pour la mémoire.

Pour plus d'informations, consultez Planification d'un déploiement de Reporting Services.

Expiration de délai d'attente de requête

Si le délai d'attente d'une requête de dataset arrive à expiration avant qu'elle ait pu extraire les données, vous pouvez spécifier une valeur de délai d'attente dans le rapport. Cette valeur est par défaut de 30 secondes. Pour définir la valeur du délai d'attente pour une requête de dataset, consultez Procédure : créer un dataset (Concepteur de rapports). Pour plus d'informations, consultez Définition des valeurs de délai d'attente pour l'exécution d'un rapport.

Amélioration des performances de traitement des rapports

Le traitement du rapport se produit une fois que les données ont été extraites pour les datasets de rapport et les paramètres de rapport. Le processeur de rapport combine la disposition du rapport et les données afin de créer un format de rapport temporaire, qui est ensuite passé au module de rendu de rapport. La durée de traitement du rapport peut être affectée par la disposition du rapport, la pagination et les expressions complexes dans les éléments de rapport qui ont de nombreuses instances. Utilisez cette section pour améliorer les performances de traitement de rapport.

Choix de la région de données appropriée

Utilisez des régions de données de liste ou de table dans la mesure du possible. Le traitement d'une table ou d'une liste est plus efficace que le traitement d'une matrice. Les régions de données de liste ou de table prennent en charge les éléments dynamiques uniquement pour les lignes ; les dispositions matricielles prennent en charge les éléments dynamiques pour les lignes et les colonnes, ce qui crée une structure de disposition plus complexe.

Évitez d'utiliser la valeur Nombre total de pages dans l'en-tête ou le pied de page pour les modules de rendu de pages physiques

Une référence au champ global TotalPages peut affecter les performances de traitement de rapport lorsque le rapport est rendu par une extension de rendu de disposition qui effectue une pagination pour les pages physiques, par exemple PDF ou Image. Pour plus d'informations sur les modules de rendu, consultez Éléments d'appréciation à prendre en considération pour le rendu d'un rapport.

Utilisation de groupement de régions de données complexes et de fonctions d'agrégation

Une quantité élevée de niveaux de groupes imbriqués dans une région de données de matrice ou de table peut affecter les performances de traitement de rapport. Vous devez prendre en compte à la fois le niveau de groupement, le nombre d'instances de groupes et l'utilisation des fonctions d'agrégation qui requièrent une évaluation après que les expressions de groupe, de filtre et de tri ont été appliquées.

Évitez les agrégats post-tri. Les agrégats post-tri dépendent de l'ordre de tri et incluent les fonctions suivantes : Previous, First, Last et RunningValue. Lorsque vous incluez une ou plusieurs de ces fonctions dans une expression, le processeur de rapport doit trier les données cibles avant d'appliquer la fonction. Dans la mesure du possible, évitez d'inclure des agrégats post-tri dans des expressions dans des dispositions matricielles qui ont des définitions de groupes complexes, telles que plusieurs groupes adjacents ou imbriqués.

Évaluez la conception du rapport et déterminez si une agrégation des données peut avoir lieu sur la source de données. La réduction de la quantité de données dans le rapport peut suffire à fournir un niveau de performances acceptable sans modifier d'appels de fonctions d'agrégation.

Pour plus d'informations sur les fonctions d'agrégation, consultez Utilisation de fonctions de rapport dans des expressions (Reporting Services).

Spécification de récursivité inutile dans des expressions

Spécifiez une expression parente pour un groupe uniquement si vous définissez une hiérarchie récursive, par exemple un rapport organisationnel qui dresse une liste de responsables et d'employés. La propriété Parent s'applique uniquement aux données récursives. La propriété Parent ne s'applique pas à la relation parent-enfant des groupes imbriqués.

Utilisation de sous-rapports dans une région de données avec de nombreuses lignes

Vous devez vous assurer de bien comprendre les avantages et les inconvénients liés à l'utilisation des sous-rapports. Chaque instance de sous-rapport est une exécution de requête distincte et une tâche de traitement de rapport distincte.

  • Utilisez des sous-rapports dans une région de données lorsqu'il n'y a que quelques instances de sous-rapports.
  • Évitez d'utiliser des sous-rapports dans un groupe de régions de données lorsqu'il y a de nombreuses instances de groupes. Par exemple, pour afficher une liste de ventes et de retours pour chaque client, envisagez l'utilisation de rapports d'extraction. Déterminez si vous pouvez écrire une requête de manière à joindre les données des clients aux données de ventes et de retours, puis à effectuer un groupement par ID de client.
  • Utilisez des sous-rapports lorsque ceux-ci utilisent une source de données différente du rapport principal. Si les performances revêtent une grande importance, envisagez la modification de la requête de dataset dans le rapport principal à l'aide des stratégies suivantes :
    • Recueillez les données dans un entrepôt de données et utilisez celui-ci comme source de données pour un dataset unique.
    • Utilisez des serveurs liés SQL Server et écrivez une requête qui extrait des données à partir de plusieurs bases de données.
    • Utilisez la fonctionnalité OPEN ROWSET pour spécifier différentes bases de données.

Utilisation du tri interactif

Évitez d'utiliser des boutons de tri interactif, à moins que les utilisateurs ne requièrent la capacité à modifier l'ordre de tri des données du rapport.

Utilisation d'images

Vous devez vous assurer de bien comprendre les exigences de ressources pour les images.

  • Évitez d'utiliser de grandes images, y compris des images d'arrière-plan. Les grandes images requièrent des ressources de mémoire, de processeur et de rendu, en particulier lorsqu'elles sont rendues avec des modules de rendu tels que PDF, impression ou images de document.
  • Évitez d'utiliser de nombreuses instances de petites images à partir d'une base de données ou sur un serveur, par exemple des indicateurs de performance clés. Incluez ces images en tant qu'images imbriquées dans le rapport.
  • Pour les rapports qui contiennent de nombreuses images, affectez à la propriété AutoSize des images une valeur différente, telles que Ajuster.

Processus en conflit pour la même mémoire sur le serveur de rapports

Le fait que plusieurs applications soient en conflit pour les mêmes ressources mémoire sur un serveur de rapports peut affecter le traitement des rapports.

Contactez votre administrateur système afin de vérifier que la configuration de gestion de la mémoire est adaptée à votre utilisation du serveur de rapports. Pour plus d'informations, consultez Configuration de la mémoire disponible pour Reporting Services.

L'exécution d'un rapport dépasse le délai d'attente

Pour exécuter de grands rapports, vous devez ajuster deux délais d'attente : le délai d'attente d'exécution de rapport et le d'attente d'exécution ASP.NET.

Les valeurs de délai d'attente d'exécution sont spécifiées sur le serveur de rapports. Pour plus d'informations, consultez Définition des valeurs de délai d'attente pour l'exécution d'un rapport.

La stratégie de délai d'attente ASP.NET est contrôlée par le fichier de configuration du serveur de rapports. L'emplacement par défaut de ce fichier est <drive>:\Program Files\Microsoft SQL Server\MSSQL.n\Reporting Services\ReportServer\web.config. Pour définir le nombre maximal de secondes pendant lesquelles une requête peut s'exécuter, affectez comme valeur de l'élément httpRuntime la valeur de délai d'attente en secondes. Le fragment XML suivant indique où ajouter cet élément dans le fichier de configuration :

<configuration>
   . . .
   <system.web>
      . . .
      <httpRuntime executionTimeout="90"/>
      . . .
   </system.web>
   . . .
</configuration>

Pour les requêtes longues ou les rapports complexes, vous devrez peut-être spécifier une valeur qui représente plusieurs heures.

Amélioration des performances de rendu des rapports

Le rendu du rapport a lieu après que les données et la disposition ont été combinées et passées à une extension de rendu. La durée de rendu dépend de la quantité de données, du nombre d'instances d'éléments de rapport et des tailles de pages. Un module de rendu de rapport détermine la quantité de données qui s'ajuste sur une page. La définition d'une page varie d'un module de rendu à un autre. Une page pour le module de rendu Excel est une feuille de calcul. Une page pour le module de rendu PDF, qui peut imprimer un rapport, est la page physique. Une page pour la visionneuse HTML peut être l'intégralité du rapport. La conception du rapport pour une page imprimée peut différer de la conception du rapport pour la visualisation en ligne. Si vous savez que vos utilisateurs visualiseront un rapport dans un format spécifique, concevez le rapport pour ce rapport. Pour plus d'informations, consultez Éléments d'appréciation à prendre en considération pour le rendu d'un rapport.

Les tableaux suivants suggèrent quelques méthodes pour améliorer les performances de rendu de rapport.

Format de rendu Description

Tous

  • Dans la mesure du possible, évitez de répéter les lignes d'en-tête et de pied de page pour une région de données qui s'étend sur plusieurs pages. Cela comprend à la fois les lignes d'en-tête et de pied de page et les lignes d'en-tête et de pied de page de groupe pour une région de données de table, de matrice ou de liste.
  • Pour les rapports qui contiennent de nombreuses zones de texte, affectez la valeur False aux propriétés de zone de texte CanGrow et CanShrink. Par défaut, chaque cellule dans une région de données de table ou de matrice contient une zone de texte avec la propriété CanGrow définie sur True. Lorsqu'une table ou une matrice contient de nombreuses lignes ou colonnes, le nombre de zones de texte augmente rapidement.
  • Dans la mesure du possible, évitez de définir la propriété KeepTogether sur les régions de données de table, de matrice et de liste. Lorsque la propriété KeepTogether a la valeur True, le processeur de rapport doit déterminer si l'ensemble de la région de données peut être ajusté sur une même page, puis déterminer la page à utiliser.
  • Lorsque vous concevez des dispositions libres à l'aide de régions de données de liste, utilisez des rectangles comme conteneurs pour le groupement des zones de texte. Les conteneurs aident les modules de rendu à déterminer ce qui peut s'ajuster sur une page.
  • Les graphiques sont généralement rendus sous la forme d'images. Évitez d'imbriquer un graphique dans une table ou une matrice contenant plusieurs milliers de lignes. Lorsqu'ils sont rendus par la visionneuse HTML, ces rapports doivent consommer des ressources quand le processeur de rapport extrait chaque image du graphique à partir du serveur de rapports. Lorsqu'ils sont rendus par d'autres formats, ces rapports doivent générer chaque image de graphique pour le format de sortie, ce qui produit de plus gros fichiers de sortie et allonge la durée nécessaire au rendu.
    Concevez les graphiques pour le module de rendu cible. Il n'est pas nécessaire de disposer de la même résolution sur un moniteur et sur une page imprimée. Par exemple, par défaut, le paramètre points par pouce pour un fichier PDF est 300. Vous pouvez modifier ce paramètre à l'aide des paramètres d'informations de périphérique pour le module de rendu PDF. Toutefois, plus la résolution est élevée, plus la mémoire requise est importante.
    Dd353300.note(fr-fr,SQL.90).gifRemarque :

Excel

  • Ajoutez des sauts de page lorsque cela vous semble logique. Chaque saut de page définit une nouvelle feuille de calcul. Chaque feuille de calcul peut contenir jusqu'à 65 536 lignes. Pour plus d'informations, consultez Procédure : ajouter un saut de page (Générateur de rapports).
  • Alignez les éléments de rapport verticalement. Le module de rendu Excel ajoute des cellules supplémentaires lorsqu'elles sont nécessaires pour aligner les bords des éléments de rapport sur l'aire de conception du rapport. Cela provoque des fusions de cellules dans la feuille de calcul Excel. Pour éviter les fusions de cellules, alignez verticalement les bords des éléments de rapport avec les colonnes de table et de matrice. Pour éviter les erreurs d'arrondi qui se produisent lorsque vous spécifiez des unités en pouces (in) et fractions de pouces, spécifiez les unités en points (pts). Les unités par défaut dans Excel sont les points.
  • Pour les zones de texte, évitez d'affecter la valeur Général à la propriété TextAlign. Cette valeur requiert un traitement conditionnel en fonction du contenu de la zone de texte.

HTML

  • Pour les grands rapports, évitez d'affecter la valeur 0 à la propriété de rapport InteractiveHeight. Les modules de rendu HTML ne sont pas efficaces pour les grandes pages HTML. Lorsque InteractiveHeight a la valeur 0, l'intégralité du rapport est traité comme une seule page.

PDF

Image

TIFF

Impression

  • Évitez les sauts de page horizontaux. Pour supprimer les pages horizontales supplémentaires, passez en revue les marges, les largeurs de colonnes et les espaces dans un rapport. Le processeur de rapport conserve les espaces blancs que vous voyez sur l'aire de conception du rapport. Pour vérifier vos modifications, exportez le rapport dans un fichier TIFF et affichez-le dans Aperçu des images et des télécopies Microsoft Windows.
  • Évitez d'inclure une référence au champ intégré TotalPages dans l'en-tête ou le pied de page. Les modules de rendu qui affichent les rapports sur des pages physiques doivent traiter un rapport avec cette valeur à deux reprises : une fois pour déterminer le nombre total de pages et une deuxième fois pour restituer chaque page avec la valeur correcte.
  • Dans la mesure du possible, évitez d'affecter la valeur True à la propriété d'élément de rapport RepeatWith pour les rapports qui s'étendent sur plusieurs pages horizontales.
  • Vérifiez que la valeur de taille de page est raisonnable, par exemple 8,5 in.

Si vous ne parvenez pas à restituer un rapport dans un format, sélectionnez un format qui génère un fichier plus petit, par exemple CSV). Pour un rapport publié, vous pouvez spécifier un format de rendu dans l'URL. Pour plus d'informations, consultez Specifying a Rendering Format in a URL.

Si vous ne pouvez pas sélectionner un autre format car la barre d'outils Rapport n'est pas disponible, vous pouvez définir un abonnement afin de définir un format de rendu et remettre le rapport sous forme de document statique sur un partage de fichiers. Pour plus d'informations, consultez Remise par partage de fichiers dans Reporting Services.

Voir aussi

Concepts

Fichiers journaux de Reporting Services
Traitement des rapports volumineux

Autres ressources

Dépannage de Reporting Services
Erreurs et événements de Reporting Services
Dépannage des problèmes liés aux rapports

Aide et Informations

Assistance sur SQL Server 2005