Support formation Rapports Power BI

Exemples exécutables

Cette page reprend les formules de la page Contextes de ligne et de filtre sous forme de cellules DAX exécutables. Cliquez sur Exécuter (ou Ctrl+Entrée) sous chaque cellule, dans l'ordre : une cellule Nom = expression crée une mesure que les cellules suivantes réutilisent, une cellule EVALUATE affiche un tableau.

Le modèle utilisé

La table d'exemple de la page parente (Ventes avec Région, Client, Montant) est remplacée par le modèle Brévalis, plus riche :

  • Ventes : une ligne par vente (Quantite, PrixUnitaire, Remise), reliée aux dimensions.
  • Client : Client, Secteur, Region (Bretagne, Pays de la Loire, Normandie, Île-de-France, Nouvelle-Aquitaine).
  • Produit, Date, Site : autres dimensions.
Page parenteIci
Ventes[Région]Client[Region]
Ventes[Client]Client[Client]
SUM ( Ventes[Montant] )SUMX sur Quantite × PrixUnitaire × (1 − Remise)
ALL ( Ventes )ALL ( Client ), la table qui porte la colonne Region
Région OuestRégion Bretagne

Une cellule EVALUATE SUMMARIZECOLUMNS (...) joue le rôle d'un visuel Tableau : chaque colonne de regroupement est un filtre implicite, comme une ligne du tableau dans le rapport. Un argument TREATAS (...) joue le rôle d'un segment.

Mesure de base

Total Ventes = SUMX ( Ventes, Ventes[Quantite] * Ventes[PrixUnitaire] * ( 1 - Ventes[Remise] ) )
Total Qte = SUM(Ventes[Remise] )

Contexte de ligne : il ne filtre rien

ADDCOLUMNS parcourt les régions avec un contexte de ligne. SUM seul ignore la région de la ligne et renvoie le total général sur chaque ligne. Entouré de CALCULATE, le contexte de ligne devient un filtre (transition de contexte) et la quantité de chaque région apparaît.

EVALUATE
ADDCOLUMNS (
    VALUES ( Client[Region] ),
    "SUM seul", SUM ( Ventes[Quantite] ),
    "Avec CALCULATE", CALCULATE ( SUM ( Ventes[Quantite] ) )
)

Ordre de résolution : explicites > implicites

Ventes Bretagne = CALCULATE ( [Total Ventes], Client[Region] = "Bretagne" )

Ventes Bretagne (KEEPFILTERS) = CALCULATE ( [Total Ventes], KEEPFILTERS ( Client[Region] = "Bretagne" ) )

Visuel par région (même colonne)

EVALUATE
SUMMARIZECOLUMNS (
    ROLLUPADDISSUBTOTAL ( Client[Region], "Total" ),
    "Total Ventes", [Total Ventes],
    "Ventes Bretagne", [Ventes Bretagne],
    "Ventes Bretagne (KEEPFILTERS)", [Ventes Bretagne (KEEPFILTERS)]
)
  • Ventes Bretagne affiche le montant de la Bretagne sur toutes les lignes : le filtre explicite remplace le filtre de la ligne.
  • Ventes Bretagne (KEEPFILTERS) n'est rempli que sur la ligne Bretagne : les deux filtres se croisent.

Visuel par secteur (colonnes différentes)

EVALUATE
SUMMARIZECOLUMNS (
    Client[Secteur],
    "Total Ventes", [Total Ventes],
    "Ventes Bretagne", [Ventes Bretagne]
)

Le secteur et la région sont deux colonnes différentes : les filtres s'additionnent. Chaque ligne affiche les ventes du secteur réalisées en Bretagne.

ALL et ALLSELECTED : pourcentage du total général ou visible

% du total général = DIVIDE ( [Total Ventes], CALCULATE ( [Total Ventes], ALL ( Client ) ) )

% du total visible = DIVIDE ( [Total Ventes], CALCULATE ( [Total Ventes], ALLSELECTED ( Client ) ) )

Le TREATAS ci-dessous joue le rôle d'un segment Région où Île-de-France et Nouvelle-Aquitaine sont décochées.

EVALUATE
SUMMARIZECOLUMNS (
    ROLLUPADDISSUBTOTAL ( Client[Region], "Total" ),
    TREATAS ( { "Bretagne", "Normandie", "Pays de la Loire" }, Client[Region] ),
    "Total Ventes", [Total Ventes],
    "% du total général", [% du total général],
    "% du total visible", [% du total visible]
)
  • ALL ignore aussi le segment : la ligne Total n'atteint pas 100 %.
  • ALLSELECTED respecte le segment : la ligne Total vaut 100 %.

ALLEXCEPT : part de chaque client dans sa région

Total Région = CALCULATE ( [Total Ventes], ALLEXCEPT ( Client, Client[Region] ) )

% dans la région = DIVIDE ( [Total Ventes], [Total Région] )
EVALUATE
SUMMARIZECOLUMNS (
    Client[Region],
    Client[Client],
    TREATAS ( { "Île-de-France", "Nouvelle-Aquitaine" }, Client[Region] ),
    "Total Ventes", [Total Ventes],
    "Total Région", [Total Région],
    "% dans la région", [% dans la région]
)

Le filtre Client est supprimé, le filtre Region est conservé : chaque client est comparé au total de sa région.

Piège : ALLEXCEPT sans la région dans le visuel

Ici, le visuel n'affiche que le client, filtré sur quatre clients de deux régions. Aucun filtre ne porte sur Region : Total Région renvoie le total général sur chaque ligne. La variante robuste retrouve la région du client.

Total Région (robuste) =
CALCULATE ( [Total Ventes], REMOVEFILTERS ( Client ), VALUES ( Client[Region] ) )
EVALUATE
SUMMARIZECOLUMNS (
    Client[Client],
    TREATAS ( { "Atlantique Marine", "Odet Industrie", "Celtic Énergies", "Rance Mécanique" }, Client[Client] ),
    "Total Ventes", [Total Ventes],
    "Total Région", [Total Région],
    "Total Région (robuste)", [Total Région (robuste)]
)

Rapport interactif

Le panneau Rapport ci-dessous reprend toutes les mesures de la page. Cochez ou décochez des régions dans le segment et observez quelles colonnes changent : % du total visible suit le segment, % du total général ne le suit pas, Ventes Bretagne ne bouge pas.

Rapport

Exercice

Écrivez la mesure % du total produits : la part de chaque catégorie de produits (Produit[Categorie]) dans le total de tous les produits. Le résultat s'affiche ventilé par catégorie ; exécutez la cellule pour savoir s'il est juste.

% du total produits = DIVIDE ( [Total Ventes], CALCULATE ( [Total Ventes], ALL ( Produit ) ) )

Sources

  • Source (Microsoft Learn, SUMMARIZECOLUMNS)
  • Source (Microsoft Learn, TREATAS)
  • Source (Microsoft Learn, KEEPFILTERS)
  • Source (Microsoft Learn, ALLSELECTED)
  • Source (Microsoft Learn, ALLEXCEPT)