webleads-tracker

Les exceptions d’agrégation sont un concept classique que nous rencontrons fréquemment sur nos projets. Bien qu’elles soient maîtrisées par beaucoup d’entre nous, je me permettrai un petit rappel avant d’expliquer comment les mettre en place dans deux outils SAP (SAP HANA Studio et Query Bex).

 

1. Différence entre une exception d’agrégation et une agrégation standard.

Une agrégation est par définition, une agrégation d’indicateurs, généralement une somme, un Max ou un Min. Quand on utilise une agrégation standard, cela signifie que nous agrégeons les indicateurs en les sommant par exemple. SAP associe automatiquement l’option SUM au champ d’agrégation car elle est généralement la plus utilisée. Cependant, une agrégation standard ne traite les lignes qu’individuellement sans prendre en compte les axes d’analyses.

Exemple agrégation simple

Exemple agrégation simple sur total (1 : Produit, 2 : Quantité associé au produit, 3 : Vaut 1 si la quantité du produit est > 10 ou 0 si la condition n’est pas respectée)

Ci-dessus, les produits sont regroupés et sommés dans la dernière ligne « TOTAL ». Utilisant une agrégation standard, la règle dans la troisième colonne traite la ligne total individuellement.

L’exception d’agrégation agrège elle aussi des indicateurs mais en fonction d’une caractéristique de référence définie (souvent une caractéristique de temps, mais cela peut aussi être un type de produit ou un groupe de matériel par exemple). Elle effectue son traitement et affiche le résultat en gardant la caractéristique de référence en ligne de compte sans pour autant l’afficher.

Exception d'agrégation

Exemple exception d’agrégation

Ci-dessus, on utilise le même exemple que pour l’agrégation simple mais en utilisant le produit comme caractéristique de référence afin de créer notre exception d’agrégation sur la colonne 3. On somme ensuite le résultat (ligne TOTAL) tout en gardant en mémoire la granularité de la caractéristique de référence.

 

2. Exception d’agrégation dans SAP HANA studio

Dans cette partie, nous utiliserons un jeu de données similaire auquel nous ajoutons des villes où se situent les magasins présentant ces produits.

Dans une vue HANA, dès lors que l’on va agréger notre set de données, l’utilisation de l’option « keep flag » nous permet d’effectuer notre exception agrégation.
Activer l’option keep flag sur un ou plusieurs attributs dans une agrégation, permet lors des calculs d’assurer la granularité sur ces derniers.
Pour cet exemple, nous créons une colonne calculée QTY_excpt_agreg, correspondant aux quantités supérieures à 10.

Keep Flag, properties, outpout

Output et Properties du nœud d’agrégation, on positionne le Keep Flag de l’attribut produit sur True.

Ainsi, lorsque l’on effectue un data preview de la vue, nous pouvons étudier les différences de comportements entre les deux types d’agrégation.

Exception agrégation: data

Niveau de détail « produit »

 

Agrégation simple

Résultat agrégé et sans le Keep Flag

 

Exception d'agrégation

Résultat agrégé avec le Keep Flag

 

Les résultats sans le keep flag montrent que le calcul de QTY_excpt_agreg va s’effectuer sur les quantités agrégées. Lyon, Nice et Paris possédant tous au total plus de 10 pour la colonne quantité, le résultat est donc 10. Si on active le Keep Flag, on peut voir que le calcul va se faire avec la granularité de l’attribut Produit. Lyon, par exemple, possède un total de 37 en quantité, mais seulement deux produits qui dépassent le seuil des 10.

 

3. Exception d’agrégation dans Query Bex

On peut aussi choisir d’effectuer les exceptions d’agrégation dans les Query Bex. Lorsque l’on créé une Calculated Keyfigure dans, par exemple, un composite provider, l’onglet Agrégation permet de lister les caractéristiques de références . A noter qu’il est impératif de rentrer un type d’exception d’agrégation pour pouvoir utiliser les caractéristiques de références.

Key figure

Création de la Key Figure

 

Query agrégation d'exception

Sélection du type d’agrégation ainsi que caractéristiques de références souhaité

Il suffit ensuite de rentrer la formule de calcul souhaité dans l’ongle Calculations.

Malheureusement, mal implémentées, les exceptions d’agrégations augmentent le temps d’exécution de votre requête. Ainsi nous montrerons par la suite dans quelles mesures et comment il est possible de réduire ces temps d’exécution.

 

4. Pushdown dans HANA

En poussant l’agrégation dans la base de données Hana, nous optimisons les temps d’exécution des requêtes contenant des exceptions d’agrégations. Cela est possible en RSRT via les propriétés de query « Operations in BWA/HANA » et en réglant l’option sur 6 ou directement dans les « Runtime Profile Properties » de votre requête. Une telle action sollicite le moteur d’HANA, plus puissant et promettant une vitesse d’exécution plus rapide que le moteur OLAP.

RSRT: push down Hana

Menu propriétés de query via le moniteur de requête ‘rsrt’.

 

Query push down agrégation

Runtime Properties accessible directement dans la query.

Cependant, certaines conditions sont requises pour effectuer un pushdown de ou des exceptions d’agrégations.
Nous devons ainsi connaître et respecter ces conditions afin d’utiliser cette option.

 

5. Cas dans lesquels l’exception d’agrégation ne pourra être « pushed down » dans HANA

Dans les trois cas suivants, le « push down » ne pourra pas être réalisé (au détriment des performances en temps d’exécution) :

– Le composite provider contient une ou plusieurs jointures ambiguës.
On appelle join ambiguës des jointures entre des tables dans lesquelles l’Analytic Engine doit s’assurer que les ratios ne sont pas dupliqués quand la jointure n’est pas unique. C’est un problème générique avec des cardinalités comme a:n, n:A ou n:m.

Table

Table 1

 

Table bis

Table 2

 

Join Table

Join table 1/table 2

Le résultat attendu après jointure est 10 et non 20; ce qui peut être obtenu grâce à l’Analytic Engine.

– La ou les caractéristiques de référence possèdent des CMP problem (compounding problem).
Si on utilise un InfoObject couplé avec un autre InfoObject en tant que caractéristique de référence, il faut alors mapper ces deux InfoObject à l’ensemble des sources utilisées dans la requête. Dans le cas contraire, un CMP problem empêchera le pushdown.
(Pour davantage d’informations sur les CMP problem, je vous invite à lire ce wiki SAP)

– Le traitement des SID n’est pas assuré dans le champ cible.
Dans le composite provider, il est possible de cocher le flag « User Confirmed Referential Integrity » ce qui l’autorise à faire une jointure avec la table de base des SID.

Referential integrity

Le pushdown de l’exception d’agrégation pourra se faire dans HANA une fois toutes ces conditions validées.
Nous pouvons vérifier l’absence de problème de pushdown dans rsrt via l’affichage des données statistique de notre requête (article à paraître prochainement).

 

Conclusion

Les exceptions d’agrégations sont des éléments simples à comprendre qui peuvent se montrer fort utile lorsqu’elles sont bien utilisées.

C’est pourquoi il est important de les comprendre théoriquement afin de pouvoir en profiter le moment venu.

 

The following two tabs change content below.
Aymeric Alos

Aymeric Alos

Aymeric est un consultant junior spécialisé en Business Intelligence. Dynamique et proactif, il est à l’écoute des besoins et attentes de nos clients. Il possède de solides compétences sur les derniers outils de restitution SAP ainsi que sur HANA.
Lorem Sed id accumsan pulvinar elementum
Share This

Fatal error: Uncaught RuntimeException: Language of wp-content/plugins/download-monitor/languages/download-monitor-fr_FR-dlm_gutenberg_blocks.json cannot be recognized in /home/bilinkso/www/wp-content/plugins/wpml-string-translation/classes/translations-file-scan/translations-file/wpml-st-translations-file-locale.php:46 Stack trace: #0 /home/bilinkso/www/wp-content/plugins/wpml-string-translation/classes/translations-file-scan/wpml-st-translations-file-entry.php(165): WPML_ST_Translations_File_Locale->get() #1 /home/bilinkso/www/wp-content/plugins/wpml-string-translation/classes/jed-translations/wpml-st-jed-file-update-hooks.php(47): WPML_ST_Translations_File_Entry->get_file_locale() #2 /home/bilinkso/www/wp-includes/class-wp-hook.php(287): WPML_ST_JED_File_Update_Hooks->update_imported_file(Object(WPML_ST_Translations_File_Entry)) #3 /home/bilinkso/www/wp-includes/class-wp-hook.php(311): WP_Hook->apply_filters(NULL, Array) #4 /home/bilinkso/www/wp-includes/plugin.php(478): WP_Hook->do_action(Array) #5 /home/bilinkso/www/ in /home/bilinkso/www/wp-content/plugins/wpml-string-translation/classes/translations-file-scan/translations-file/wpml-st-translations-file-locale.php on line 46