Partager via


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

Date de publication : novembre 2016

S’applique à : Dynamics CRM 2015

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 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.

Contenu de la rubrique

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

Activation du préfiltrage des données dans les rapports SQL (CRM local uniquement)

Transmission des filtres dans les critères de filtrage

Filtres par défaut

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 Microsoft 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>

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 dans l'application Web SQL Server Data Tools ou Microsoft Dynamics 365 pour activer le préfiltrage pour les entités principales et liées, veillez à :

  1. Définissez la valeur du paramètre enableprefiltering sur 1 pour l'entité obligatoire ou liée, puis spécifiez un nom unique de paramètre pour la propriété prefilterparametername.

    <fetch distinct="false" mapping="logical">
       <entity name="account" enableprefiltering="1" prefilterparametername="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 SQL (CRM local uniquement)

Deux méthodes sont disponibles pour activer le préfiltrage des données sur les rapports Microsoft Dynamics 365SQL : automatique et explicite.

Préfiltrage automatique

Le préfiltrage automatique des données convient 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és des requêtes. Pour ce faire, utilisez un nom d’alias qui commence par CRMAF_.

Par exemple, le tableau suivant illustre une requête simple modifiée pour activer le préfiltrage sur l'entité Account.

Requête sans préfiltrage

Requête modifiée avec le préfiltrage automatique activé

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

Lorsque vous activez la fonctionnalité de préfiltrage automatique des données en utilisant le préfixe CRMAF_, Microsoft Dynamics 365 modifie la requête pour inclure un paramètre (par exemple, P1) lorsqu'il est chargé sur Microsoft Dynamics 365, comme l'illustre le tableau suivant.

Requête avec préfiltrage automatique

Modifiée par Microsoft Dynamics 365

SELECT <column1>, <column2>, <columnN> 
FROM FilteredAccount AS CRMAF_FilteredAccount;
SELECT <column1>, <column2>, <columnN> 
FROM (@P1) AS CRMAF_FilteredAccount;

Microsoft Dynamics 365 transmettra une requête au paramètre P1 selon la façon 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 expliquent comment Microsoft Dynamics 365 transmet des requêtes au paramètre(P1) selon différents critères de filtre. Dans ces exemples, il est supposé que vous exécutez le rapport depuis la zone Rapports dans Microsoft Dynamics 365, puis utilisez l'option de filtrage des données.

Exemple 1 : Si vous ne voulez afficher que les comptes actifs, la requête correspondante 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 exécutez le rapport, la requête correspondante sera la suivante :

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

Exemple 3 : Si vous affichez une liste de trois comptes sélectionnés et sélectionnez l'option d'exécution du rapport sur les enregistrements sélectionnés, la requête correspondante sera la suivante :

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

Lorsque tous les noms de tables d'entités sont associés avec à alias, l'interface utilisateur de recherche avancée est automatiquement incluse dans le rapport déployé lorsqu'il est exécuté depuis Microsoft Dynamics 365.

Pour associer à un alias un nom de table d’entités dans le générateur de requêtes, cliquez avec le bouton droit sur chaque table de votre rapport, choisissez Propriétés, puis entrez une valeur d’alias dans le formulaire CRMAF_FilteredEntity, par exemple CRMAF_FilteredAccount.

Limitation du préfiltrage automatique

Lorsque vous utilisez le préfixe CRMAF_ pour activer le préfiltrage automatique, Microsoft 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 Microsoft Dynamics 365 peut uniquement ajouter le paramètre à la première requête.

Par exemple, prenez la requête suivante qui contient 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 téléchargez le rapport, Microsoft Dynamics 365 peut ne filtrer que la première requête utilisant le paramètre. Ainsi, le filtrage n'est 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 ci-dessus, lors de l'exécution du rapport depuis la zone Rapports de Microsoft Dynamics 365 et la sélection du filtre comme chiffre annuel supérieur à 1 000 000, Microsoft 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 renverrait que les comptes en Floride avec un chiffre annuel supérieur à 1 000 000 €, ainsi que tous les comptes en Californie, ce qui n'est pas ce que vous vouliez. Vous vouliez afficher tous les comptes en Floride et en Californie ayant un chiffre annuel supérieur à 1 000 000 €.

Si vous téléchargez le rapport depuis Microsoft Dynamics 365 et l'ouvrez dans Microsoft Visual Studio, vous verrez la version d'origine du rapport que vous avez téléchargé dans Microsoft Dynamics 365. Si vous téléchargez le rapport directement à partir de Microsoft SQL Server Reporting Services, vous noterez que Microsoft Dynamics 365 a modifié la requête, mais n'a pas placé le paramètre où vous vouliez qu'elle soit.

Pour des requêtes complexes comme cela, vous devez utiliser le préfiltrage explicite.

Préfiltrage explicite

Pour des requêtes complexes telles que des requêtes utilisant des instructions UNION, vous devrez peut-être utiliser le préfiltrage explicite. Contrairement du préfiltrage automatique, lors d'un préfiltrage explicite, Microsoft Dynamics 365 ne réécrit pas la requête du rapport en transmettant des valeurs aux paramètres lorsqu'un rapport de ce type est téléchargé sur Microsoft Dynamics 365. Vous devez explicitement effectuer les modifications requises dans le rapport en ajoutant le paramètre de préfiltrage au rapport, puis en référençant le paramètre dans la requête. Vous pouvez ensuite exécuter la requête à l'aide d'une instruction SQL dynamique.

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

Si l'on prend le même exemple que celui décrit précédemment pour la limitation du préfiltrage automatique, le tableau suivant illustre une requête avec un préfiltrage automatique modifié pour utiliser un préfiltrage explicite à l'aide d'une instruction SQL dynamique. Nous supposons également que pendant l'exécution du rapport depuis la zone Rapports de Microsoft Dynamics 365, le filtre appliqué est Chiffre annuel supérieur à 1 000 000.

Requête avec préfiltrage automatique

Requête modifiée pour utiliser le préfiltrage explicite

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'
DECLARE @SQL nvarchar(4000)
DECLARE @CRM_FilteredAccount nvarchar(2000)
Set @CRM_FilteredAccount = 'Select FilteredAccount.* FROM FilteredAccount where AnnualRevenue > 1000000'
SET @SQL = 'SELECT <column1>, <column2>, <columnN>
FROM ('+@CRM_FilteredAccount+') AS FA where address1_stateorprovince = ''FL''
UNION
SELECT <column1>, <column2>, <columnN> 
FROM ('+@CRM_FilteredAccount+') as CA where address1_stateorprovince  = ''CA'' '
EXEC (@SQL)

Notes

La plupart des rapports Microsoft Dynamics 365SQL standard 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 Microsoft Dynamics 365, 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é à Microsoft Dynamics 365.

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 la 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 les rapports.

Voir aussi

Création de rapports avec CRM 2015 local
Considérations relatives à la création de rapports Microsoft Dynamics 365 (en ligne)

© 2016 Microsoft Corporation. Tous droits réservés. Copyright