top of page
Rechercher

LOOKUPVALUE dans Power BI : la RECHERCHEV du DAX

Groupe Kronoscope
21 sept.
5 min de lecture

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.


Schéma des trois issues possibles de la fonction LOOKUPVALUE en DAX. Une seule valeur trouvée renvoie la valeur. Aucune ligne trouvée renvoie BLANK. Plusieurs valeurs différentes renvoient une erreur, sauf si le quatrième argument est renseigné.



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.


Arbre de décision entre LOOKUPVALUE, RELATED et la fusion Power Query dans Power BI. Le choix dépend de l'existence d'une relation entre les tables, puis de la possibilité de figer la valeur à l'actualisation.

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.

 
 
bottom of page