Total DAX incorrect dans mon tableau

Étiquetté : , ,

  • Total DAX incorrect dans mon tableau

    Posté par Charlotte sur 27 septembre 2024 à 9h59

    Bonjour à tous !

    J’ai besoin de votre aide car je me fais des noeuds au cerveau toujours à propos des totaux DAX. J’avoue avoir du mal à comprendre quel calcul il fait car j’ai l’impression d’être déjà au niveau le plus fin.

    Je vous explique simplement mon affaire.
    Je restitue un stock valorisé par article (j’ai donc une table article et une table des faits dans laquelle se trouve les stocks à date, j’ai aussi une table calendrier). Je filtre une date et je vais chercher le dernier état des stocks (mouvement) à cette date donnée (c’est un peu plus complexe donc j’ai un champs [Tri] qui prend en compte la date et d’autres règles.

    • J’ai donc 1 mesure qui va me chercher mon dernier prix dans la table des faits :

    <div>
    <div>Dernier prix =</div>
    <div>CALCULATE(</div>
    <div> LASTNONBLANKVALUE(TableFait[Tri], Sum(‘TableFait'[Prix]))</div>
    <div> </div>
    <div> </div>
    <div>

    • J’ai 1 autre mesure qui va me chercher ma dernière qté de stock dans la table des faits :

    </div>
    <div>Dernier stock qté =</div>
    <div>
    <div>CALCULATE(</div>
    <div> LASTNONBLANKVALUE(TableFait[Tri], Sum(‘TableFait'[Stock qté])</div>
    <div> </div>
    <div> </div>
    <div>

    • Ensuite pour chaque article je vais multiplier le prix et le stock :

    </div>
    <div>Stock valorisé =</div>
    <div>
    <div>
    <div> CALCULATE(</div>
    <div> SUMX(</div>
    <div> VALUES(TableArticle[Num Article]),</div>
    <div> [Dernier prix] * [Dernier stock qté])</div>
    <div>)</div>
    </div>
    <div> </div>
    <div>SAUF que quand je fais un simple tableau avec Numéro article et Stock valorisé, le total n’est pas égal à la somme de chaque ligne (et donc à des niveaux + aggrégés non plus).

    Je ne comprends pas pourquoi.
    J’ai fait plein de tests et je n’arrive pas à trouver où ça coince …

    J’espère que l’un de vous pourra m’éclairer un peu.
    C’est vraiment le sujet que je n’arrive pas à maîtriser en DAX … j’ai pourtant lu avec attention les articles de sqlbi.com mais je n’y arrive pas.

    Merci par avance pour votre aide !!</div>
    </div>
    </div>
    </div>

    • Cette discussion a été modifiée Il y a 1 mois, 3 semaines par  Charlotte.
    Charlotte a répondu Il y a 1 mois, 3 semaines 3 Membres · 6 Réponses
  • 6 Réponses
  • Philippe

    Membre
    27 septembre 2024 à 10h21

    Bonjour Charlotte,

    Cette question revient régulièrement sur ce forum. Il s’agit d’une spéficité du DAX : Le DAX ne fonctionne pas comme Excel. Toutes les cellules d’un tableau sont le résultat du calcul du DAX mais dans le contexte de chacune des cellules. Donc dans la ligne de total, la valeur est le résultat de la formule mais sans tenir compte des attributs des lignes au dessus. Tristan pourra en dire largement plus… 🙂

    Pour cela, il y a deux solutions : soit adapter la requête DAX pour lui dire que lors des totaux, c’est le résultat de la somme des lignes de détail. dans ce cas, cela fonctionne pour tous les visuels. Soit utiliser un calcul visuel et cela s’applique qu’à un visuel.

    Bien à vous,

    PGeiger

  • Charlotte

    Membre
    27 septembre 2024 à 10h31

    Bonjour Philippe,

    Et oui, j’ai bien compris le concept !

    Mais justement je pensais avoir bien adapté ma requête DAX pour lui dire que les totaux sont bien la somme des lignes de détail :

    Stock valorisé =

    CALCULATE (

    SUMX (

    VALUES(TableArticle[Num Article]),

    Dernier prix] * [Dernier stock qté])

  • Jonathan

    Membre
    27 septembre 2024 à 15h06

    Bonjour Charlotte,

    Je me permets de vous signaler que les fonctions CALCULATE que vous avez utilisées n’apportent aucune valeur dans leur contexte actuel. Vous pouvez donc les retirer sans impact.

    La logique métier des calculs de stock peut varier selon les besoins. Parfois, il est nécessaire de récupérer la dernière valeur disponible à une date donnée et, en l’absence de données, renvoyer un null. D’autres fois, il est préférable de chercher la dernière date, même si elle se situe dans le passé, et parfois, on prolonge cette valeur de manière artificielle sur les lignes suivantes.

    Je vous ai préparé un exemple dans ce fichier PBIX, qui prend en compte ces différents cas de figure. Vous pourrez vous en inspirer pour affiner votre logique DAX.

    En ce qui concerne la différence entre LASTNONBLANK et LASTNONBLANKVALUE, cette dernière force une transition de contexte, ce qui n’est pas toujours nécessaire en fonction de la logique métier. Dans ce cas, il vaut mieux utiliser LASTNONBLANK avec un CALCULATE.

    Pour faciliter la compréhension, j’ai mis en orange les tableaux qui ne correspondent pas ou peu à un cas métier réel, et en vert ceux qui sont utilisables (J’ai ajouté des commentaires pour qu’on comprenne mieux).

    J’espère que cela vous sera utile. Bon courage pour la suite de votre projet !

  • Jonathan

    Membre
    27 septembre 2024 à 15h07

    Bonjour Charlotte,

    Je me permets de vous signaler que les fonctions CALCULATE que vous avez utilisées n’apportent aucune valeur dans leur contexte actuel. Vous pouvez donc les retirer sans impact.

    La logique métier des calculs de stock peut varier selon les besoins. Parfois, il est nécessaire de récupérer la dernière valeur disponible à une date donnée et, en l’absence de données, renvoyer un null. D’autres fois, il est préférable de chercher la dernière date, même si elle se situe dans le passé, et parfois, on prolonge cette valeur de manière artificielle sur les lignes suivantes.

    Je vous ai préparé un exemple dans ce fichier PBIX, qui prend en compte ces différents cas de figure. Vous pourrez vous en inspirer pour affiner votre logique DAX (il faut le télécharger, n’essayez pas de vous connecter).

    En ce qui concerne la différence entre LASTNONBLANK et LASTNONBLANKVALUE, cette dernière force une transition de contexte, ce qui n’est pas toujours nécessaire en fonction de la logique métier. Dans ce cas, il vaut mieux utiliser LASTNONBLANK avec un CALCULATE.

    Pour faciliter la compréhension, j’ai mis en orange les tableaux qui ne correspondent pas ou peu à un cas métier réel, et en vert ceux qui sont utilisables (J’ai ajouté des commentaires pour qu’on comprenne mieux).

    J’espère que cela vous sera utile. Bon courage pour la suite de votre projet !

  • Jonathan

    Membre
    27 septembre 2024 à 15h08

    Arf, c’est galère quand on veut modifier un message, désolé pour le doublon 😀

    Je rajoutais juste qu’il faut télécharger le fichier et non pas essayer de s’y connecter.

    A plus tard,

  • Charlotte

    Membre
    27 septembre 2024 à 16h09

    Merci mille fois Jonathan pour votre aide, je vais regarder attentivement et vous ferai un retour.
    Merci pour les conseils.

Connectez-vous pour répondre.