Partager via


Améliorer les performances des rapports à l’aide de filtres

Les rapports qui renvoient de grands ensembles de données peuvent être difficiles à utiliser et peuvent entraîner des problèmes de performances. Pour limiter les données présentées dans un rapport, appliquez des filtres de données.

En plus du filtrage des données pris en charge par Reporting Services, Microsoft Dynamics 365 Customer Engagement (on-premises) prend en charge le préfiltrage des données. Vous pouvez utiliser le préfiltrage des données pour :

  • Rendre les rapports contextuels en réduisant l’étendue d’un rapport pour retourner des données plus pertinentes ;

  • Extraire et afficher un ensemble de résultats plus rapidement car seules les données les plus pertinentes sont renvoyées ;

  • Autoriser le filtrage du rapport à l’aide de la fonctionnalité Recherche avancée.

Important

Actuellement, les requêtes de rapport contenant des opérateurs hiérarchiques, comme l’opérateur Under, ne peuvent pas être utilisées avec le filtrage de rapport. Lorsque vous essayez d’exécuter un rapport qui utilise un opérateur hiérarchique, celui-ci ne s’affiche pas.

Activation du préfiltrage des données dans les rapports Fetch

Les rapports Fetch ne prennent en charge que le préfiltrage automatique des données. Un rapport peut avoir plusieurs ensembles de données et plusieurs requêtes FetchXML. Un ensemble de données prend en charge une seule requête FetchXML. Pour activer le préfiltrage pour l’entité principale ou liée dans un rapport Fetch, vous devez définir la valeur du paramètre enableprefiltering sur « 1 », puis spécifiez un nom de paramètre dans la propriété prefilterparametername. Le nom du paramètre doit commencer par « CRM_ » pour être spécifié comme paramètre masqué. Comme pour le rapport SQL Server, ce paramètre spécifié dans la requête FetchXML agit comme une sous-requête dans la requête FetchXML, et la sous-requête est construite avec la valeur spécifiée par l’utilisateur dans la zone Recherche avancée lors de l’exécution d’un rapport.

L’exemple suivant affiche comment activer le préfiltrage pour l’entité principale dans la requête FetchXML.

<CommandText  
 <fetch distinct="false" mapping="logical">  
   <entity name="account" enableprefiltering="1" prefilterparametername="CRM_FilteredAccount">  
      <attribute name="name" />  
      <attribute name="accountid" />  
   </entity>  
 </fetch>  
</CommandText>  
<DataSourceName>CRM</DataSourceName>  
  1. De même, vous pouvez activer le préfiltrage pour l’entité liée. Vous pouvez spécifier une autre condition de préfiltrage pour l'entité liée dans la requête FetchXML en spécifiant un nom différent et unique pour le nom du paramètre dans la propriété prefilterparametername.

    Si vous modifiez manuellement une définition de rapport Fetch sans utiliser l’Assistant Rapport ou SQL Server Data Tools pour activer le préfiltrage pour les entités principales et liées, veillez à :

    <fetch distinct="false" mapping="logical">  
    <entity name="account" enableprefiltering="1" refilterparametername="CRM_FilteredAccount">  
    
  2. Créez un paramètre de requête correspondant avec le même nom que celui spécifié pour la propriété prefilterparametername. Assurez-vous que le nom du paramètre commence par CRM_ pour être spécifié comme paramètre masqué.

    <QueryParameters>  
    <QueryParameter Name="CRM_FilteredAccount">  
    <Value>=Parameters!CRM_FilteredAccount.Value</Value>  
    </QueryParameter>  
    
  3. Créez un paramètre de rapport correspondant portant le même nom.

    <ReportParameters>  
    <ReportParameter Name="CRM_FilteredAccount">  
    <DataType>String</DataType>  
    <Prompt>CRM Filtered Account</Prompt>        
    </ReportParameter>  
    </ReportParameters>    
    

Activation du préfiltrage des données dans les rapports basés sur SQL (Dynamics 365 On-premises uniquement)

Il existe deux manières d’activer le préfiltrage des données sur les rapports Microsoft Dynamics 365 basés sur SQL : automatique et explicite.

Préfiltrage automatique

Le préfiltrage automatique des données est adapté aux requêtes simples. Pour activer le préfiltrage automatique des données sur un rapport, vous pouvez utiliser des alias pour les tables d’entité dans les requêtes. Pour ce faire, utilisez un nom d’alias qui commence par CRMAF_.

Par exemple, les exemples suivants montrent deux requêtes simples, dont une modifiée pour activer le préfiltrage sur l’entité Compte.

Requête sans préfiltrage.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount; 

Lorsque vous activez la fonctionnalité de préfiltrage automatique des données à l’aide d préfixe CRMAF_, Microsoft Dynamics 365 modifie la requête pour inclure un paramètre (par exemple, P1) lorsqu’elle est chargée vers Dynamics 365, comme illustré dans les exemples suivants.

Requête avec préfiltrage automatique.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount;

Dynamics 365 transmettra une requête au paramètre P1 en fonction de la manière dont le rapport est filtré. En d’autres termes, le préfiltrage automatique des données agit comme une sous-requête dans la requête existante.

Les exemples suivants illustrent comment Dynamics 365 transmet les requêtes au paramètre (P1) selon différentes exigences de filtrage. Dans ces exemples, on suppose que vous exécutez le rapport à partir de la section Rapports dans Dynamics 365 et utilisez l’option de filtrage des données.

Exemple 1

Si vous souhaitez afficher uniquement les comptes actifs, la requête résultante sera la suivante :

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE statecode = 0)
AS CRMAF_FilteredAccount

Exemple 2

Si vous êtes dans un compte spécifique et que vous exécutez le rapport, la requête résultante sera la suivante :

SELECT <column1>, <column2>, <columnN>
FROM (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId = '<CurrentAccountId>')
AS CRMAF_FilteredAccount

Exemple 3

Si vous disposez d’une liste de trois comptes sélectionnés et que vous choisissez l’option d’exécuter le rapport sur les enregistrements sélectionnés, la requête résultante sera la suivante :

SELECT <column1>, <column2>, <columnN>
FROM  (SELECT FilteredAccount.* FROM FilteredAccount WHERE AccountId in ('<1stAccountId>', '<2ndAccountId>', '<3rdAccountId>') 
AS CRMAF_FilteredAccount

Lorsqu’un nom de table d’entité est associé à un alias, l’interface utilisateur Recherche avancée est automatiquement incluse dans le rapport déployé lorsqu’il est exécuté à partir de Dynamics 365.

Pour attribuer un alias à un nom de table d’entité dans le générateur de requêtes, cliquez avec le bouton droit sur chaque table de votre rapport, sélectionnez Propriétés, puis entrez la valeur d’alias sous la forme CRMAF_Entitéfiltrée, par example : CRMAF_Comptefiltré.

Limitation du préfiltrage automatique

Lorsque vous utilisez le préfixe CRMAF_ pour activer le préfiltrage automatique, Dynamics 365 ajoute un paramètre dans la requête. Avec une requête plus complexe, telle qu’une requête qui utilise des instructions UNION, cela peut entraîner des résultats inattendus, car Dynamics 365 ne peut ajouter le paramètre qu’à la première requête.

Par exemple, considérons la requête suivante contenant des instructions UNION :

SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = ‘FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

Lorsque vous chargez le rapport, Dynamics 365 peut filtrer uniquement la première requête à l’aide du paramètre. Cela conduit à ce que le filtrage ne soit pas appliqué à la deuxième requête :

SELECT <column1>, <column2>, <columnN>
FROM  (@P1) AS CRMAF_FilteredAccount WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

Dans l’exemple précédent, lors de l’exécution du rapport à partir de la section Rapports des Dynamics 365 et en choisissant le filtre « revenu annuel supérieur à 1 000 000 », Dynamics 365 transmettra une requête au paramètre P1 comme suit :

SELECT <column1>, <column2>, <columnN>
FROM  (SELECT FilteredAccount.* from FilteredAccount where AnnualRevenue > 1000000) AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'FL'
UNION
SELECT <column1>, <column2>, <columnN>
FROM FilteredAccount AS CRMAF_FilteredAccount
WHERE address1_stateorprovince = 'CA'

Cela implique que la requête ne renverra que les comptes en Floride dont le revenu annuel est supérieur à 1 000 000 USD et tous les comptes en Californie, ce qui n’est pas ce que vous vouliez. Vous vouliez voir tous les comptes en Floride et en Californie avec un revenu annuel supérieur à 1 000 000 USD.

Si vous téléchargez le rapport depuis Dynamics 365 et que vous l’ouvrez dans Microsoft Visual Studio, vous verrez la version originale du rapport que vous avez chargé dans Dynamics 365. Si vous téléchargez le rapport directement depuis Microsoft SQL Server Reporting Services, vous remarquerez que Dynamics 365 a modifié la requête mais n’a pas placé le paramètre là où vous vouliez qu’il se trouve.

Pour les requêtes complexes comme celle-ci, vous devez utiliser un préfiltrage explicite.

Préfiltrage explicite

Pour les requêtes complexes telles que les requêtes utilisant des instructions UNION, vous devrez peut-être utiliser un préfiltrage explicite. Contrairement au préfiltrage automatique, Dynamics 365 ne réécrit pas la requête de rapport en transmettant des valeurs aux paramètres lors du préfiltrage explicite lorsqu’un tel rapport est chargé dans Dynamics 365. Vous devez explicitement apporter les modifications requises au rapport en ajoutant le paramètre de préfiltrage au rapport, puis en faisant référence au paramètre dans la requête. Vous devez ensuite exécuter la requête à l’aide du SQL dynamique.

Lorsque vous utilisez le SQL dynamique, le filtrage via la Recherche avancée est activé en créant un paramètre masqué nommé CRM_FilteredEntity, par example, CRM_FilteredAccount, et en utilisant ce paramètre dans une expression de requête SQL dynamique. Ce paramètre rend possible le filtrage sur les données de table obtenues à partir de la vue filtrée spécifiée.

Prenant le même exemple que celui décrit précédemment pour mettre en évidence la limitation du préfiltrage automatique, le tableau suivant montre une requête avec un préfiltrage automatique modifié pour utiliser un préfiltrage explicite à l’aide du SQL dynamique. Il est également supposé que lors de l’exécution du rapport à partir de la section Rapports de Dynamics 365, le filtre a été appliqué en tant que revenu annuel supérieur à 1 000 000.

Requête avec préfiltrage automatique.

   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount
   WHERE address1_stateorprovince = ‘FL'
   UNION
   SELECT <column1>, <column2>, <columnN>
   FROM FilteredAccount AS CRMAF_FilteredAccount
   WHERE address1_stateorprovince = 'CA'

Note

La plupart des rapports SQL standard de Dynamics 365 utilisent l’option de préfiltrage explicite.

Transmission des filtres dans les critères de filtrage

Un critère de filtrage affiche la valeur du filtre utilisé lorsqu’un rapport est exécuté. Dans les rapports, il est affiché sous la forme d’un élément de rapport de zone de texte dans l’en-tête du rapport, qui contient la valeur de texte de filtre. Lorsque l’utilisateur exécute un rapport, la visionneuse de rapports affiche un bouton Modifier le filtre. Lorsque le bouton est actionné, il permet à l’utilisateur de définir un filtre de données. Un exemple de critère de filtrage se trouve dans le rapport Résumé sur l’utilisateur intégré à Customer Engagement (on-premises).

Pour ajouter un critère de filtrage à un rapport, procédez comme suit :

  1. Créez un paramètre de chaîne masqué appelé CRM_FilterText.

  2. Ajoutez un élément de rapport de zone de texte et définissez sa propriété Value comme suit :
    =Parameters!CRM_FilterText.Value.

    Lors de l’exécution du rapport, la valeur du paramètre CRM_FilterText sera définie par le système sur le texte du filtre actif.

Filtres par défaut

Lorsque vous publiez un rapport, vous pouvez définir un filtre par défaut. Pour tous les rapports créés à l’aide de l’assistant Rapport, si vous ne définissez pas de filtre par défaut, le filtre est automatiquement défini sur tous les enregistrements de l’entité modifiée dans les 30 derniers jours. Pour que la procédure définisse un filtre de rapport par défaut, voir Publier des rapports.

Voir aussi

Guide sur les rapports et analyses
Considérations relatives à la création de rapports dans Dynamics 365 for Customer Engagement (on-premises)