Versions concernées : BI 4.2, 4.3, BI 2025 · Temps de lecture : 9 min
Définition. Dans Web Intelligence, une variable est une formule nommée, réutilisable dans tout le document. Un contexte de calcul est l’ensemble des dimensions selon lesquelles une mesure est agrégée. Par défaut, Webi déduit ce contexte des dimensions présentes dans le bloc (tableau, section, rupture) où la formule est affichée. Les opérateurs In, ForEach, ForAll et Where servent à forcer un autre contexte quand celui par défaut ne donne pas le résultat attendu.
C’est la notion la plus recherchée, et la plus mal comprise, de Webi. Ce guide fusionne la documentation SAP, les questions les plus fréquentes de la SAP Community et quinze ans de retours terrain en un seul endroit.
Pourquoi le contexte par défaut ne suffit-il pas ?
Prenons un tableau avec les colonnes Année, Trimestre et CA. La cellule CA d’une ligne est calculée dans le contexte (Année ; Trimestre). Si vous ajoutez une colonne =Sum([CA]), Webi la calcule dans le même contexte : vous obtenez la même valeur que CA. Or ce que vous vouliez, c’était probablement le total de l’année, ou le total du rapport, pour calculer une part ou un écart. Le contexte par défaut est donc correct mais trop fin pour ces besoins.
Inversement, dès qu’une formule retourne plusieurs valeurs pour une seule cellule (parce que son contexte est plus fin que le bloc), Webi affiche #MULTIVALUE. Les contextes servent à résoudre ces deux situations.
Contexte d’entrée et contexte de sortie : la clé de tout
Toute mesure agrégée passe par deux étapes :
- Le contexte d’entrée : à quel niveau les lignes sont d’abord agrégées (ce qui est écrit à l’intérieur de la parenthèse de l’agrégat).
- Le contexte de sortie : à quel niveau le résultat est ensuite affiché (ce qui est écrit après la parenthèse).
Lecture : « calcule le CA par année et trimestre (entrée), puis prends le maximum de ces valeurs et affiche-le par année (sortie) ». Résultat : le meilleur trimestre de chaque année, dans un tableau qui ne contient que l’année. Sans contexte d’entrée, Max([CA]) par année renverrait simplement le CA annuel.

In, ForEach, ForAll, Where : lequel utiliser ?
| Opérateur | Effet sur le contexte | Exemple | Quand l’employer |
|---|---|---|---|
In |
Remplace le contexte par la liste exacte de dimensions indiquée | Sum([CA] In ([Année])) |
Quand vous savez précisément à quel niveau agréger. Le plus lisible, à privilégier. |
ForEach |
Ajoute des dimensions au contexte par défaut | Sum([CA] ForEach([Client])) |
Pour descendre à un niveau plus fin que le bloc sans énumérer toutes ses dimensions. |
ForAll |
Retire des dimensions du contexte par défaut | Sum([CA] ForAll([Trimestre])) |
Pour remonter d’un niveau (total annuel dans un tableau trimestriel, par exemple). |
Where |
Ne change pas le contexte, filtre les lignes prises en compte | Sum([CA] Where ([Pays]="France")) |
Pour une mesure conditionnelle sans filtrer le bloc entier. |
Règle pratique : ForEach et ForAll sont relatifs au bloc, donc une même variable peut donner des résultats différents selon l’endroit où elle est placée. In est absolu et donc prévisible : quand une variable doit être réutilisée dans plusieurs blocs ou graphiques, écrivez-la avec In.

In remplace, ForEach ajoute, ForAll retire. Ici In ([Année]) et ForAll([Trimestre]) donnent le même résultat, mais seul In reste vrai si la variable change de bloc.

Les mots-clés de contexte : Report, Section, Break, Block, Body
Plutôt que de lister des dimensions, vous pouvez désigner une zone du rapport. C’est indispensable pour les formules de part et de pourcentage.
| Mot-clé | Contexte obtenu |
|---|---|
Report |
Aucune dimension : le total du rapport (après filtres de rapport). |
Section |
La dimension de la section englobante. |
Break |
Les dimensions de la rupture en cours. |
Block |
Toutes les dimensions du bloc, ruptures incluses : le total du tableau. |
Body |
Le contexte par défaut de la cellule : utile pour annuler explicitement un contexte hérité. |
8 formules prêtes à l’emploi
| Besoin | Formule |
|---|---|
| Part du total du rapport | =[CA] / Sum([CA] In Report) |
| Part dans la section (ex. part du client dans sa région) | =[CA] / Sum([CA] In Section) |
| Meilleur trimestre de chaque année | =Max([CA] In ([Année];[Trimestre])) In ([Année]) |
| Nombre de clients dont le CA dépasse 10 000 | =Sum(If([CA] > 10000; 1; 0) ForEach([Client])) |
| CA moyen par client dans un tableau par région | =Average([CA] ForEach([Client])) |
| CA France uniquement, sans filtrer le bloc | =Sum([CA] Where ([Pays] = "France")) |
| Écart au total annuel dans un tableau trimestriel | =[CA] - Sum([CA] ForAll([Trimestre])) |
| Rang du client sur tout le rapport, quel que soit le bloc | =Rank(Sum([CA] In ([Client])); [Client]) |
#MULTIVALUE, #CONTEXT, #DATASYNC : comment corriger ?

| Erreur | Cause | Correction |
|---|---|---|
#MULTIVALUE |
Plusieurs valeurs pour une cellule : le contexte de sortie est plus fin que le bloc, ou une dimension est renvoyée sans agrégat. | Entourer d’un agrégat (Sum, Max, Min), ou ajouter In ([dimensions du bloc]) en sortie. |
#CONTEXT |
Le contexte demandé est incompatible avec les données : dimension d’une autre requête non fusionnée, ou objet inexistant dans ce fournisseur. | Fusionner les dimensions, ou reformuler avec des objets du même fournisseur. |
#DATASYNC |
Un bloc mélange des dimensions non fusionnées de plusieurs requêtes. | Fusionner la dimension commune, ou créer une variable détail rattachée à la dimension fusionnée. |
#INCOMPATIBLE |
Objets incompatibles au sens de l’univers (contextes SQL différents). | Séparer en deux requêtes puis fusionner, ou revoir l’univers. |

PourChaque. Entourer la formule d’un Max() suffit à rétablir 760 et 670.Et si vous décriviez la formule au lieu de l’écrire ?
La difficulté des contextes n’est pas conceptuelle, elle est syntaxique : on sait ce que l’on veut (« le meilleur trimestre de chaque année »), on ne sait pas toujours comment l’écrire, et Webi ne propose ni assistant ni message d’erreur explicite. C’est précisément ce que N4V Intelligence adresse : vous décrivez le calcul en langage naturel, directement dans Webi, et l’assistant génère la variable avec le bon contexte d’entrée et de sortie, prête à être vérifiée et insérée dans le document. Il explique aussi une formule existante ou une erreur #MULTIVALUE en une phrase.
N4V Intelligence :
=Sum([CA] In ([Région];[Client])) / Sum([CA] In ([Région])) — contexte d’entrée région + client, contexte de sortie région, indépendant du bloc où la variable est placée.
5 bonnes pratiques pour des variables maintenables
- Nommer les variables par leur intention (
CA part région,Meilleur trimestre) et non par leur formule. - Préférer
Inavec la liste complète des dimensions dès qu’une variable est réutilisée dans plusieurs blocs ou graphiques. - Écrire les contextes d’entrée et de sortie explicitement, même quand l’un des deux est celui par défaut : la formule devient auto-documentée.
- Tester une nouvelle variable dans un tableau plat contenant toutes les dimensions avant de la placer dans un bloc agrégé.
- Éviter d’empiler plus de deux niveaux de variables imbriquées : au-delà, le débogage devient impossible et les performances chutent.

Questions fréquentes
Quelle est la différence entre In, ForEach et ForAll ?
In fixe exactement les dimensions du contexte. ForEach ajoute des dimensions au contexte par défaut. ForAll en retire. Les trois sont équivalents si vous écrivez la liste complète avec In ; ce dernier est simplement plus lisible et indépendant du bloc.
Pourquoi ma variable affiche #MULTIVALUE ?
Le contexte de sortie de la formule contient plus de dimensions que le bloc : Webi trouve plusieurs valeurs pour une seule cellule. Agrégez la formule ou réduisez son contexte de sortie.
Les contextes fonctionnent-ils dans les graphiques ?
Oui, un graphique est un bloc comme un autre : son contexte par défaut est constitué des dimensions placées en axe et en légende. Les mêmes règles s’appliquent.
Les contextes ont-ils changé entre BI 4.2, 4.3 et BI 2025 ?
Non. La syntaxe et le moteur de calcul sont identiques ; ce guide s’applique à toutes les versions supportées.
Faut-il maîtriser les contextes si l’on utilise une extension comme N4V ?
Oui : les widgets, cartes et tableaux de bord construits sur Webi consomment les variables du document. Une variable correctement contextualisée s’affiche juste partout, y compris dans les graphiques enrichis.
Sources et références
- SAP Help Portal — Guide l’utilisateur SAP BusinessObjects Web Intelligence (BI 4.3 / 2025)
- SAP Community — Hub SAP BusinessObjects BI Platform
- Retours terrain Need4Viz sur des déploiements BI 4.1 à BI 2025
👉 Découvrez Need4Viz et ce que nous apportons vraiment à SAP Web Intelligence
Need4Viz étend SAP Web Intelligence avec des capacités avancées de dataviz, d'interactivité, d'automatisation et d'IA pour transformer vos rapports en véritables outils de pilotage.
Découvrir Need4Viz