Dans cette leçon, nous allons examiner deux scénarios qui montrent comment utiliser l'API setDimensionFilter de manière efficace. Nous commencerons par un scénario plus simple, en utilisant un seul graphique dans une présentation, puis nous passerons à un scénario plus complexe avec plusieurs graphiques.
Définition efficace de filtres à l'aide d'API - Scénario 1
Dans ce scénario, nous explorons comment définir efficacement des filtres à l'aide d'API dans une présentation SAP Analytics Cloud et analyser l'impact sur les performances de la présentation à l'aide de l'outil Analyse des performances. Nous cherchons à éviter le chargement de données supplémentaires de l'ensemble de résultats en empêchant la demande de données initiale à l'aide de l'API setRefreshPaused au lieu de définir un filtre dans le panneau Générateur.
Regardez cette vidéo pour en savoir plus.
Résumé
Dans le premier scénario, les étapes suivantes ont aidé à optimiser les performances de la présentation et à réduire le nombre d'appels au backend lors de l'utilisation d'un graphique unique.
- Dans le script d'événement onInitialization, nous ajoutons un script qui définit une valeur de filtre sur une dimension à l'aide de l'API setDimensionFilter. Dans notre scénario, nous indiquons le pays comme dimension et l'Allemagne comme valeur.
- Comme nous voulons éviter le chargement de données supplémentaires de l'ensemble de résultats, nous empêchons la demande de données initiale à l'aide de l'option Toujours suspendre dans les options Actualisation des données au niveau du widget de la présentation, combinée à l'API setRefreshPaused(false) dans le script d'événement onInitialization pour la page.
12Chart_1.getDataSource().setDimensionFilter("0D_NW_BP__0D_NW_CNTRY","DE");
Chart_1.getDataSource().setRefreshPaused(false);
Définition efficace de filtres à l'aide d'API - Scénario 2
Dans ce scénario, nous explorons un scénario plus complexe dans lequel nous avons trois graphiques et une liste déroulante utilisée pour sélectionner une dimension et l'appliquer comme filtre aux trois graphiques. Nous commençons par examiner le script d'événement onSelect requis pour lire les pays de la dimension et les écrire dans la liste déroulante qui servira de filtre pour les trois graphiques.
Nous examinons à la fois le bon et le mauvais moyen d'écrire le script et utilisons l'outil Analyse des performances pour analyser les performances et afficher les recommandations d'optimisation du script afin de réduire le nombre de déplacements supplémentaires vers le backend de trois à un seul trajet.
Regardez cette vidéo pour en savoir plus.
Résumé
Dans le deuxième scénario, les étapes suivantes ont permis d'optimiser les performances de la présentation et de réduire le nombre d'appels au backend lors de l'utilisation de plusieurs graphiques.
- Dans le script onSelect pour la liste déroulante, utilisez l'API copyDimensionFilter pour copier la description extraite du premier appel setDimensionFilter.
Avec l'API copyDimensionFilter, nous spécifions une autre source de données à partir de laquelle le filtre doit être copié. Dans notre exemple, source de données du premier graphique.
Code Snippet1234var ds = Chart_1.getDataSource(); ds.setDimensionFilter("0D_NW_BP__0D_NW_CNTRY",this.getSelectedKey()); Chart_2.getDataSource().copyDimensionFilterFrom(ds); Chart_3.getDataSource().copyDimensionFilterFrom(ds); - Dans le script d'événement onSelect, utilisez un objet MemberInfo pour fournir la valeur de filtre, au lieu de la fournir sous forme de chaîne.
L'objet MemberInfo est spécifié dans le style JSON à l'aide d'accolades autour des arguments ID et Description. Comme nous avons fourni les deux éléments lors de la création des entrées dans l'événement onInitialization, nous pouvons maintenant utiliser les méthodes getSelectedKey et getSelectedText pour les utiliser dans l'objet MemberInfo.
Code Snippet1234var ds = Chart_1.getDataSource(); ds.setDimensionFilter("0D_NW_BP__0D_NW_CNTRY",{id:this.getSelectedKey(), description:this.getSelectedText()}); Chart_2.getDataSource().copyDimensionFilterFrom(ds); Chart_3.getDataSource().copyDimensionFilterFrom(ds);
