CALCULATE, REMOVEFILTERS, VAR, time intelligence — ces formules DAX séparent un vrai Data Analyst d'un utilisateur Power BI basique. Voici ce qu'on évalue vraiment.
Le DAX est le vrai filtre en entretien Data Analyst Power BI. Pas les visuels, pas Power Query — le DAX. Un candidat qui maîtrise CALCULATE et le contexte de filtre a travaillé sur des projets réels. Un candidat qui ne connaît que SUM et COUNT n'a fait que du drag-and-drop.
Quelle est la différence entre un contexte de ligne et un contexte de filtre ? Dans quel cas CALCULATE transforme-t-il l'un en l'autre ?
CALCULATE est la fonction la plus importante de DAX. Elle permet de modifier le contexte de filtre d'une mesure — c'est-à-dire de calculer un résultat dans un contexte différent de celui du visuel.
-- Ventes uniquement pour la catégorie Technologie
Tech_Ventes = CALCULATE(
SUM(Ventes[Montant]),
Ventes[Categorie] = "Technologie"
)Signal d'alerte : un candidat qui ne sait pas expliquer la transition de contexte n'a pas encore travaillé sur des modèles complexes.
Quelle est la différence entre ALL() et REMOVEFILTERS() ? Donnez un cas où l'un est préférable à l'autre.
C'est la question qui sépare les profils confirmés des juniors. Les deux fonctions suppriment des filtres, mais leur comportement diffère dans certains contextes.
-- ALL supprime tous les filtres sur la table ou la colonne
Part_de_marche = DIVIDE(
[Total Ventes],
CALCULATE([Total Ventes], ALL(Produits))
)
-- REMOVEFILTERS est plus explicite et préférable pour la lisibilité
Part_de_marche_v2 = DIVIDE(
[Total Ventes],
CALCULATE([Total Ventes], REMOVEFILTERS(Produits))
)
-- KEEPFILTERS : respecte les filtres du visuel tout en ajoutant des conditions
Ventes_Chaussures = CALCULATE(
[Total Ventes],
KEEPFILTERS(Produits[Categorie] = "Chaussures")
)Pourquoi VAR améliore-t-il les performances DAX et pas seulement la lisibilité ?
VAR/RETURN est devenu incontournable en 2024-2025. Un profil qui ne l'utilise pas systématiquement écrit du DAX sous-optimal.
-- Sans VAR : SUM(Ventes[Montant]) est calculé deux fois
Croissance_YoY =
(SUM(Ventes[Montant]) - CALCULATE(SUM(Ventes[Montant]), DATEADD(Dates[Date], -1, YEAR)))
/ CALCULATE(SUM(Ventes[Montant]), DATEADD(Dates[Date], -1, YEAR))
-- Avec VAR : calculé une seule fois, plus lisible et plus rapide
Croissance_YoY =
VAR VentesActuelles = SUM(Ventes[Montant])
VAR VentesPrecedentes = CALCULATE(SUM(Ventes[Montant]), DATEADD(Dates[Date], -1, YEAR))
RETURN
DIVIDE(VentesActuelles - VentesPrecedentes, VentesPrecedentes)Bonne pratique : tout calcul qui réutilise une expression plus d'une fois devrait utiliser VAR. C'est le signal d'un profil qui pense à la maintenabilité.
Quelle est la différence entre DATEADD et SAMEPERIODLASTYEAR ? Dans quel cas l'un est-il plus adapté ?
La time intelligence est testée dans presque tous les entretiens Data Analyst. Les recruteurs veulent s'assurer que le candidat peut répondre à des questions business courantes : évolution annuelle, cumul progressif, comparaison de périodes.
-- Ventes de l'année précédente (même période)
Ventes_N1 = CALCULATE([Total Ventes], SAMEPERIODLASTYEAR(Dates[Date]))
-- Flexible : déplacer de n périodes (mois, trimestres, années)
Ventes_3_mois_avant = CALCULATE([Total Ventes], DATEADD(Dates[Date], -3, MONTH))
-- Cumul progressif depuis le début de l'année (YTD)
Ventes_YTD = TOTALYTD([Total Ventes], Dates[Date])
-- Cumul depuis le début du mois
Ventes_MTD = TOTALMTD([Total Ventes], Dates[Date])Prérequis indispensable : toutes les fonctions de time intelligence nécessitent une table de dates correctement marquée dans Power BI. Un candidat qui l'ignore n'a pas déployé de rapport en production.
Quand utilisez-vous SUMX plutôt que SUM ? Donnez un exemple concret.
-- SUM : additionne une colonne existante
Total_Ventes = SUM(Ventes[Montant])
-- SUMX : itère ligne par ligne avant d'agréger
Marge_Totale = SUMX(
Produits,
Produits[Prix_Vente] * Produits[Quantite] - Produits[Cout]
)
-- RANKX : classement dynamique
Rang_Commercial = RANKX(
ALL(Commerciaux[Nom]),
[Total Ventes],
,
DESC,
DENSE
)
-- SWITCH(TRUE()) : remplace les IF imbriqués
Segment_Client = SWITCH(
TRUE(),
[Total Ventes] > 50000, "Gold",
[Total Ventes] > 10000, "Silver",
"Bronze"
)Comment diagnostiquez-vous une mesure DAX lente ? Quels outils utilisez-vous ?
Au niveau Senior et Lead, la capacité à optimiser le DAX est un différenciateur clé. Un bon profil cite DAX Studio sans hésiter.
Signal GO Senior : le candidat mentionne spontanément DAX Studio, parle de cardinalité et de compression VertiPaq. Un profil qui n'a jamais ouvert DAX Studio n'a pas optimisé de modèle réel.
| Niveau | Maîtrise DAX attendue | Signal GO | NO-GO |
|---|---|---|---|
| Junior | SUM, COUNT, CALCULATE simple, mesures de base | Comprend la différence mesure vs colonne calculée, utilise DIVIDE | Ne connaît pas CALCULATE, confond mesure et colonne calculée |
| Confirmé | CALCULATE avancé, VAR/RETURN, time intelligence, SUMX/RANKX | Explique la transition de contexte, utilise VAR systématiquement, maîtrise SAMEPERIODLASTYEAR | Ne sait pas pourquoi VAR améliore les performances |
| Senior | Optimisation, DAX Studio, patterns avancés (semi-additive, security) | Cite DAX Studio, parle de cardinalité, a implémenté du RLS dynamique | N'a jamais utilisé DAX Studio, ne connaît pas les mesures semi-additives |
| Lead | Architecture du modèle sémantique, standards d'équipe, revues DAX | A défini des conventions de nommage DAX pour une équipe, a migré vers Fabric/SSAS | Ne peut pas expliquer ses choix d'architecture sémantique |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.