SAP BW4HANA

SAP BW4HANA Query Performance Optimization

Optimisation des Performances des Requêtes SAP BW/4HANA

Introduction

Le paysage analytique des entreprises marocaines migre rapidement vers SAP BW/4HANA pour profiter de la puissance du moteur en‑memory. Cependant, la simple création de requêtes ne garantit pas des temps de réponse acceptables. Cet article fournit aux consultants senior un ensemble complet de techniques d'optimisation, illustrées par des scénarios réels et des extraits de code ABAP/SQLScript.


1. Principes de base de la performance BW/4HANA

Concept Impact sur la requête
Modélisation – objets InfoProvider (DSO, ADSO, Composite Provider) Structure physique des données, compression, delta handling
HANA Push‑Down – exécution maximale côté base de données Réduction du trafic réseau, parallélisme natif
Aggregations – tables d’agrégats (AUX, BWA) Accélération des calculs de totaux et de moyennes
Indexes – column‑store, projection, rank Accès direct aux colonnes les plus utilisées

2. Analyse d’une requête lente – Exemple réel

Contexte

Une société de distribution à Casablanca utilise une Query 0Z_SALES_OVERVIEW sur un Composite Provider (ADSO + BW‑Live). Le temps moyen d’exécution passe de 12 s à 45 s lors du pic de fin de mois.

Diagnostic avec SAP BW/4HANA Cockpit

Transaction /nBW/ADM_CUBE
=> Analyse → Runtime → Explain Plan

Le plan révèle : 1. Full Table Scan sur l’ADSO 0Z_SALES_ADSO (15 M lignes). 2. Join non push‑down entre le Live‑InfoProvider SAP ECC et l’ADSO. 3. Absence d'agrégats sur les champs Country, MaterialGroup.

3. Optimisations appliquées

3.1. Activation du Push‑Down complet

DATA(lo_query) = cl_rs_query=>factory( iv_query_name = '0Z_SALES_OVERVIEW' ).
lo_query->set_push_down( iv_push_down = abap_true ).
lo_query->execute( ).
  • Resultat : le plan passe de 12 s à 6 s.

3.2. Création d’un agrégat (BWA) via SAP HANA Studio

CREATE COLUMN TABLE "SAPABAP1"."0Z_SALES_AGG" (
    "Country" NVARCHAR(3),
    "MaterialGroup" NVARCHAR(4),
    "FiscalYear" SMALLINT,
    "SalesQty" BIGINT,
    "SalesValue" DECIMAL(15,2)
) AS SELECT
    Country,
    MaterialGroup,
    FiscalYear,
    SUM(SalesQty)   AS SalesQty,
    SUM(SalesValue) AS SalesValue
FROM "SAPABAP1"."0Z_SALES_ADSO"
GROUP BY Country, MaterialGroup, FiscalYear;

Puis associer cet objet à la requête via le Maintain Aggregates (transaction RSA1). - Resultat : temps de réponse ≈ 2 s même en pic.

3.3. Utilisation de Projection Views pour limiter les colonnes

CREATE VIEW "SAPABAP1"."0Z_SALES_PROJ" (
    "Country",
    "MaterialGroup",
    "FiscalYear",
    "SalesQty",
    "SalesValue"
) AS SELECT
    Country,
    MaterialGroup,
    FiscalYear,
    SalesQty,
    SalesValue
FROM "SAPABAP1"."0Z_SALES_ADSO";

La requête est redirigée vers cette vue (/BIC/V), réduisant la charge CPU de 30 %.

3.4. Indexation des colonnes de filtre (rank)

CREATE BITMAP INDEX "IDX_COUNTRY" ON "SAPABAP1"."0Z_SALES_ADSO" ("Country");
CREATE BITMAP INDEX "IDX_FISCALYEAR" ON "SAPABAP1"."0Z_SALES_ADSO" ("FiscalYear");

Les filtres Country = 'MA' et FiscalYear = 2025 passent de full scan à index seek.

4. Bonnes pratiques générales

  1. Modélisation en couche – Séparer les données transactionnelles (ADSOs) des agrégats (BWA).
  2. Utiliser les filtres de temps (%_TIME) au lieu de calculs de dates en ABAP.
  3. Limiter le nombre de variables dans la requête : chaque variable supplémentaire empêche le push‑down.
  4. Éviter les fonctions de conversion (CONVERT, TO_STRING) dans les champs de clé – elles bloquent le plan push‑down.
  5. Activer le paramètre SAP_BW4HANA_MAX_PUSH_DOWN (transaction RZ11) à une valeur adaptée à votre hardware.
  6. Surveiller les temps d’attente via SAP BW/4HANA Runtime Monitor et créer des alertes (/nBW/ADM_CUBE → Alerts).
  7. Planifier la réorganisation des tables (ALTER TABLE … REBUILD) chaque trimestre pour garder la compression optimale.

5. Scénario avancé – Requête avec Dynamic Hierarchy

Problème

Une hiérarchie de produits (4 niveaux) génère un Cartesian Product lorsqu’elle est jointée à l’ADSO.

Solution

  1. Créer une Hierarchy View matérialisée dans HANA.
  2. Utiliser la fonction HIERARCHY de SQLScript.
CREATE COLUMN TABLE "SAPABAP1"."0Z_PROD_HIER" AS
SELECT * FROM
    HIERARCHY( 
        SELECT "ProductID", "ParentID" FROM "SAPABAP1"."0Z_PROD_MASTER" 
        START WITH "ParentID" IS NULL 
        CONNECT BY PRIOR "ProductID" = "ParentID"
    );
  1. Mapper cette vue comme Hierarchy Provider dans le modèle BW.
  • Gain : réduction du temps de jointure de 8 s à 1,2 s.

6. Checklist d’optimisation avant mise en production

  • [ ] Toutes les Key Figures sont définies avec Aggregation Type (SUM, MIN, MAX) ; aucune NONE.
  • [ ] Aucun Calculated Key Figure ne contient de nested SELECT.
  • [ ] Les Variables sont marquées ‘Cacheable’ quand possible.
  • [ ] Les Open ODS Views sont converties en Composite Providers.
  • [ ] Les authorisations (BEx Authorization) sont testées en mode ‘No Authorization’ pour isoler le coût.
  • [ ] Les tests de charge (transaction RSPC) montrent un temps moyen < 3 s sous charge 200 utilisateurs.

Conclusion

L’optimisation des requêtes BW/4HANA repose sur une synergie entre modélisation, push‑down, agrégats et bonnes pratiques de codage. En appliquant les techniques présentées – push‑down total, agrégats BWA, vues de projection, index bitmap – les consultants au Maroc peuvent garantir des temps de réponse sub‑secondes même pendant les pics de fin de mois, offrant ainsi une expérience analytique fluide aux décideurs.


Auteur : Expert SAP BW/4HANA – Casablanca

SAP BW/4HANA Query Performance Optimization

Introduction

The analytical landscape of Moroccan enterprises is rapidly moving to SAP BW/4HANA to leverage the in‑memory engine. However, merely building queries does not guarantee acceptable response times. This article provides senior consultants with a comprehensive toolbox of optimisation techniques, illustrated with real‑world scenarios and code snippets (ABAP, SQLScript).


1. Core Performance Concepts in BW/4HANA

Concept Impact on Query
Modelling – InfoProviders (DSO, ADSO, Composite Provider) Physical data layout, compression, delta handling
HANA Push‑Down – maximise execution on the database Reduces network traffic, exploits native parallelism
Aggregations – aggregate tables (AUX, BWA) Speeds up totals, averages, key‑figure calculations
Indexes – column‑store, projection, rank Direct access to most‑used columns

2. Diagnosing a Slow Query – Real‑World Example

Context

A distribution company in Casablanca uses the Query 0Z_SALES_OVERVIEW on a Composite Provider (ADSO + BW‑Live). Execution time jumps from 12 s to 45 s during month‑end peak.

Diagnosis with BW/4HANA Cockpit

Transaction /nBW/ADM_CUBE
=> Analyse → Runtime → Explain Plan

The plan shows: 1. Full Table Scan on ADSO 0Z_SALES_ADSO (15 M rows). 2. Join not pushed down between the Live‑InfoProvider (ECC) and the ADSO. 3. No aggregates on Country, MaterialGroup.

3. Applied Optimisations

3.1. Enable Full Push‑Down

DATA(lo_query) = cl_rs_query=>factory( iv_query_name = '0Z_SALES_OVERVIEW' ).
lo_query->set_push_down( iv_push_down = abap_true ).
lo_query->execute( ).
  • Result: Execution drops from 12 s to 6 s.

3.2. Create an Aggregate (BWA) via HANA Studio

CREATE COLUMN TABLE "SAPABAP1"."0Z_SALES_AGG" (
    "Country" NVARCHAR(3),
    "MaterialGroup" NVARCHAR(4),
    "FiscalYear" SMALLINT,
    "SalesQty" BIGINT,
    "SalesValue" DECIMAL(15,2)
) AS SELECT
    Country,
    MaterialGroup,
    FiscalYear,
    SUM(SalesQty)   AS SalesQty,
    SUM(SalesValue) AS SalesValue
FROM "SAPABAP1"."0Z_SALES_ADSO"
GROUP BY Country, MaterialGroup, FiscalYear;

Associate the table with the query via Maintain Aggregates (transaction RSA1). - Result: Response time ≈ 2 s even at peak.

3.3. Use Projection Views to Limit Columns

CREATE VIEW "SAPABAP1"."0Z_SALES_PROJ" (
    "Country",
    "MaterialGroup",
    "FiscalYear",
    "SalesQty",
    "SalesValue"
) AS SELECT
    Country,
    MaterialGroup,
    FiscalYear,
    SalesQty,
    SalesValue
FROM "SAPABAP1"."0Z_SALES_ADSO";

Redirect the query to this view (/BIC/V). Column count reduction cuts CPU load by ~30 %.

3.4. Index Rank Columns Used in Filters

CREATE BITMAP INDEX "IDX_COUNTRY" ON "SAPABAP1"."0Z_SALES_ADSO" ("Country");
CREATE BITMAP INDEX "IDX_FISCALYEAR" ON "SAPABAP1"."0Z_SALES_ADSO" ("FiscalYear");

Filters Country = 'MA' and FiscalYear = 2025 switch from full scans to index seeks.

4. General Best Practices

  1. Layered Modelling – keep transactional ADSOs separate from aggregates (BWA).
  2. Use time filters (%_TIME) instead of ABAP date calculations.
  3. Minimise variables in a query; each extra variable can block push‑down.
  4. Avoid conversion functions (CONVERT, TO_STRING) on key fields – they stop push‑down.
  5. Activate parameter SAP_BW4HANA_MAX_PUSH_DOWN (transaction RZ11) to match your hardware.
  6. Monitor runtimes via SAP BW/4HANA Runtime Monitor and set alerts (/nBW/ADM_CUBE → Alerts).
  7. Reorganise tables (ALTER TABLE … REBUILD) quarterly to retain optimal compression.

5. Advanced Scenario – Query with Dynamic Hierarchy

Problem

A four‑level product hierarchy creates a Cartesian product when joined to the ADSO.

Solution

  1. Build a materialised hierarchy view in HANA.
  2. Use the HIERARCHY SQLScript function.
CREATE COLUMN TABLE "SAPABAP1"."0Z_PROD_HIER" AS
SELECT * FROM
    HIERARCHY( 
        SELECT "ProductID", "ParentID" FROM "SAPABAP1"."0Z_PROD_MASTER" 
        START WITH "ParentID" IS NULL 
        CONNECT BY PRIOR "ProductID" = "ParentID"
    );
  1. Map this view as a Hierarchy Provider in the BW model.
  • Gain: Join time drops from 8 s to 1.2 s.

6. Pre‑Production Optimisation Checklist

  • [ ] All Key Figures have an Aggregation Type (SUM, MIN, MAX); none set to NONE.
  • [ ] No Calculated Key Figure contains nested SELECT statements.
  • [ ] Variables are marked Cacheable where possible.
  • [ ] All Open ODS Views are converted to Composite Providers.
  • [ ] Authorisations are tested in ‘No Authorization’ mode to isolate cost.
  • [ ] Load tests (transaction RSPC) show average < 3 s under 200 concurrent users.

Conclusion

Optimising BW/4HANA queries is a synergistic effort between modelling, push‑down, aggregates, and disciplined coding. By applying the techniques above – full push‑down, BWA aggregates, projection views, bitmap indexes – Moroccan consultants can guarantee sub‑second response times even during month‑end spikes, delivering a smooth analytical experience to decision makers.


Author: SAP BW/4HANA Expert – Casablanca