LOOKUPVALUE dans Power BI : la RECHERCHEV du DAX
LOOKUPVALUE va chercher une valeur dans une autre table. Elle remplace la RECHERCHEV d'Excel, sans exiger de relation. Elle est simple à écrire, et elle casse dès que la table de recherche contient un doublon. Cet article montre le mécanisme, l'erreur classique et le bon réflexe.
Télécharger notre exercice LOOKUPVALUE
Le pack est gratuit. Les données sont fictives. Vous complétez trois colonnes, et le classeur valide chaque réponse.
Un classeur .xlsx avec les onglets Accueil, Données, Exercices et Corrigé.
Les colonnes et mesures DAX, prêtes à coller dans Power BI Desktop.
Le code M pour charger les trois tables sources.
Ce que fait LOOKUPVALUE, sur un exemple simple
Deux tables suffisent. La table Ventes liste les commandes. La table Tarifs donne le prix de chaque produit. Aucune relation ne les relie.
Commande | Produit | Zone | Quantité |
C001 | Clavier | Nord | 10 |
C002 | Écran | Sud | 4 |
C003 | Souris | Nord | 20 |
C004 | Clavier | Sud | 6 |
C005 | Souris | Sud | 8 |
Voici la table Tarifs. Un produit, un prix.
Produit | Prix unitaire |
Clavier | 45 € |
Écran | 180 € |
Souris | 25 € |
On ajoute une colonne calculée dans la table Ventes.
Prix simple =
LOOKUPVALUE (
Tarifs[Prix unitaire],
Tarifs[Produit], Ventes[Produit]
)Power BI inscrit alors une valeur sur chaque ligne.
Commande | Produit | Prix simple |
C001 | Clavier | 45 € |
C002 | Écran | 180 € |
C003 | Souris | 25 € |
C004 | Clavier | 45 € |
C005 | Souris | 25 € |
Suivons la première ligne. La commande C001 porte le produit Clavier. La fonction cherche Clavier dans Tarifs[Produit]. Elle trouve une seule ligne. Elle renvoie donc 45 €.
La syntaxe de LOOKUPVALUE
Syntaxe
LOOKUPVALUE ( <colonne résultat>, <colonne cherchée>, <valeur cherchée>
[, <colonne cherchée 2>, <valeur cherchée 2>] … [, <alternateResult>] )
Les paramètres, un par un
Paramètre | Rôle |
colonne résultat | La colonne dont on veut la valeur. Ce ne peut pas être une expression. |
colonne cherchée | La colonne dans laquelle on cherche. Même table que la colonne résultat, ou table liée. |
valeur cherchée | La valeur à retrouver. Le plus souvent, une colonne de la table courante. |
alternateResult | Facultatif. La valeur renvoyée quand la recherche n'aboutit pas. |
Les couples colonne et valeur peuvent être répétés. C'est ce qui rend la recherche multicritère possible.
Le quatrième paramètre change tout
Sans ce paramètre, la fonction a deux comportements de panne. Elle renvoie BLANK quand aucune ligne ne correspond. Elle renvoie une erreur quand plusieurs valeurs différentes correspondent.
Avec alternateResult, les deux cas renvoient la valeur de votre choix. Microsoft déconseille d'encapsuler LOOKUPVALUE dans IFERROR ou ISERROR. Le quatrième paramètre est plus fiable et plus performant.

Quand la table de recherche gagne une colonne
Le tarif dépend maintenant de la zone. La table de recherche devient TarifsZone.
Produit | Zone | Prix unitaire |
Clavier | Nord | 45 € |
Clavier | Sud | 49 € |
Écran | Nord | 180 € |
Écran | Sud | 189 € |
Souris | Nord | 25 € |
L'erreur des valeurs multiples
La formule précédente, pointée sur TarifsZone, échoue. Voici ce qu'elle retient pour la commande C001.
Produit | Zone | Prix unitaire | Retenu ? |
Clavier | Nord | 45 € | ✓ |
Clavier | Sud | 49 € | ✓ |
Écran | Nord | 180 € | ✗ |
Écran | Sud | 189 € | ✗ |
Souris | Nord | 25 € | ✗ |
Deux lignes correspondent. Elles portent deux prix différents, 45 € et 49 €. Power BI ne peut pas trancher.
Le message affiché est le suivant : une table de plusieurs valeurs a été fournie alors qu'une valeur unique était attendue.
C'est la panne n°1 de LOOKUPVALUE. Elle ne vient jamais de la formule. Elle vient toujours de la table de recherche.
La recherche à deux critères
Il faut ajouter un second couple colonne et valeur.
Prix par zone =
LOOKUPVALUE (
TarifsZone[Prix unitaire],
TarifsZone[Produit], Ventes[Produit],
TarifsZone[Zone], Ventes[Zone],
0
)La sélection se resserre sur une seule ligne.
Produit | Zone | Prix unitaire | Retenu ? |
Clavier | Nord | 45 € | ✓ |
Clavier | Sud | 49 € | ✗ |
Écran | Nord | 180 € | ✗ |
Écran | Sud | 189 € | ✗ |
Souris | Nord | 25 € | ✗ |
Une ligne satisfait les deux critères. La fonction renvoie 45 €. Voici le résultat complet.
Commande | Produit et zone | Prix par zone | Montant |
C001 | Clavier, Nord | 45 € | 450 € |
C002 | Écran, Sud | 189 € | 756 € |
C003 | Souris, Nord | 25 € | 500 € |
C004 | Clavier, Sud | 49 € | 294 € |
C005 | Souris, Sud | 0 € | 0 € |
Total | 2 000 € |
Le résultat vide, et comment le contrôler
La commande C005 porte Souris et Sud. Ce couple n'existe pas dans TarifsZone. Aucune ligne ne satisfait les deux critères.
Sans quatrième paramètre, la colonne renvoie BLANK. Le montant de la ligne devient vide, et non zéro. Le total, lui, reste juste.
Le piège est ailleurs. La correspondance doit être totale. Souris existe bien dans la table de recherche. Mais pas en zone Sud. Un seul critère satisfait ne donne aucun résultat.
Bon à savoir
LOOKUPVALUE n'est pas disponible dans les calculs visuels.
Ceux-ci ont leurs propres fonctions, LOOKUP et LOOKUPWITHTOTALS.
Les calculs visuels sont en disponibilité générale depuis mai 2026.
LOOKUPVALUE, RELATED ou fusion Power Query
LOOKUPVALUE n'est pas toujours le bon outil. Trois solutions existent, et l'ordre des questions compte.

Situation | Outil | Pourquoi |
Une relation existe déjà | RELATED | Microsoft la juge plus efficace que LOOKUPVALUE dans ce cas. |
La valeur peut être figée | Fusion Power Query | La colonne est chargée une fois, puis compressée comme les autres. |
Clé sur plusieurs colonnes | LOOKUPVALUE | Une relation ne porte que sur une colonne. Ici, c'est la seule option simple. |
Une limite est à connaître. LOOKUPVALUE n'est pas prise en charge en mode DirectQuery, dans les colonnes calculées et dans les règles de sécurité au niveau des lignes.
Le contexte de filtre joue aussi son rôle ici. Si le sujet est neuf pour vous, relisez notre article sur la fonction CALCULATE.
LOOKUPVALUE dans une mesure : le piège du contexte
Dans une colonne calculée, Power BI parcourt la table ligne par ligne. Ventes[Produit] désigne donc une valeur unique.
Dans une mesure, ce contexte de ligne n'existe pas. Écrire Ventes[Produit] seul provoque une erreur.
Prix sélectionné =
LOOKUPVALUE (
TarifsZone[Prix unitaire],
TarifsZone[Produit], SELECTEDVALUE ( Ventes[Produit] ),
TarifsZone[Zone], SELECTEDVALUE ( Ventes[Zone] ),
BLANK ()
)SELECTEDVALUE ramène la sélection à une valeur unique. Si l'utilisateur sélectionne deux produits, la mesure renvoie BLANK.
Pour totaliser, il faut au contraire ouvrir un contexte de ligne.
Total montant =
SUMX (
Ventes,
Ventes[Quantité]
* LOOKUPVALUE (
TarifsZone[Prix unitaire],
TarifsZone[Produit], Ventes[Produit],
TarifsZone[Zone], Ventes[Zone],
0
)
)SUMX parcourt Ventes ligne par ligne. À l'intérieur, Ventes[Produit] redevient une valeur unique. Le résultat attendu est de 2 000 €.
Une dernière remarque de performance. Dans une mesure, LOOKUPVALUE se réévalue à chaque ligne parcourue. Sur une grande table de faits, la fusion Power Query reste préférable.
Le pack d'exercices reprend exactement ces trois calculs. Téléchargez-le, remplissez les cellules jaunes, et le classeur vous corrige.



