Club Power BI

Please login or click SIGN UP FOR FREE to create your PowerBIUG account to join this user group.
 View Only
  • 1.  question sur CALCULATE et le contexte

    Posted Mar 21, 2022 12:10 PM
    Bonjour à tous,
    j'ai du mal à comprendre (même si cela fonctionne correctement ;) la syntaxe DAX suivante qui permet de cumuler des ventes sur toutes les années :



    Total Montant Cumulé =
    CALCULATE
    (
    [Total Ventes],
    ALLSELECTED(Ventes),
    Ventes[Date commande]<=MAX( Ventes[Date commande])
    )

    Pourquoi MAX(Ventes[Date commande]) tient-il compte du contexte (il retourne sur chaque ligne la date max du mois),
    alors que Ventes[Date commande] ne tient pas compte du contexte  ? (on a toutes les dates depuis le début grâce à ALLSELECTED)

    Merci de votre éclairage ;)


    ------------------------------
    LAURENT SANCHEZ
    Formateur Consultant
    laurent@sanchezconsultant.com
    LE HAVRE
    662527022
    ------------------------------


  • 2.  RE: question sur CALCULATE et le contexte

    Top Contributor
    Posted Mar 21, 2022 03:52 PM
    Edited by Jonathan CHANAL Mar 21, 2022 04:01 PM
    Bonjour Laurent,

    Il s'agit d'une syntaxe smplifiée (Sugar Syntax). En réalité, ce que le code fait en arrière plan c'est un FILTER ALLSELECTED. FILTER étant une fonction itérative, c'est ce qui explique le contexte de lignes utilisé (ALLSELECTED fait tomber le filtre de date).

    Je pense que la bonne façon de l'écrire, c'est d'itérer sur la table des dates et non sur une table de faits :

    Total Montant Cumulé =
    CALCULATE (
        [Total Ventes],
        FILTER (
            ALLSELECTED ( Date[Date] ),
            Date[Date]
                <= MAX ( Date[Date] )
        )
    )​



    ------------------------------
    Jonathan CHANAL
    Power BI Consultant/Formateur
    MCSA Power BI & Excel
    ------------------------------



  • 3.  RE: question sur CALCULATE et le contexte

    Posted Mar 21, 2022 04:00 PM
    Merci, je comprends un (petit) peu mieux, mais me confirmes tu que la fin de la phrase est ... <= MAX(Ventes[Date Commande]) et non <= MAX(Date[Date]) ?


    ------------------------------
    LAURENT SANCHEZ
    Formateur Consultant
    laurent@sanchezconsultant.com
    LE HAVRE
    662527022
    ------------------------------



  • 4.  RE: question sur CALCULATE et le contexte

    Posted Mar 21, 2022 04:03 PM
    Ok j'ai testé et ta syntaxe est correcte. ;)

    Merci pour ton retour et ta réactivité

    ------------------------------
    LAURENT SANCHEZ
    Formateur Consultant
    laurent@sanchezconsultant.com
    LE HAVRE
    662527022
    ------------------------------



  • 5.  RE: question sur CALCULATE et le contexte

    Posted Mar 21, 2022 04:08 PM
    Mais j'ai tout de même du mal à comprendre cette phrase :

    'Calendar'[Date]<=MAX( 'Calendar'[Date]

    pourquoi la partie gauche ('Calendar'[Date) prend en compte TOUTES les dates (qu'il cumule),
    alors que la partie droite ne prend que le dernier jour du mois du filtre  : MAX( 'Calendar'[Date]) ?


    ------------------------------
    LAURENT SANCHEZ
    Formateur Consultant
    laurent@sanchezconsultant.com
    LE HAVRE
    662527022
    ------------------------------



  • 6.  RE: question sur CALCULATE et le contexte

    Top Contributor
    Posted Mar 21, 2022 04:50 PM
    La fonction ALLSELECTED fait tomber le filtre de date pour chacune des lignes de la table. Résultat : la table à filtrer dans la première partie du Filter est une table qui contient toutes les lignes de la table des dates. L'expression de filtre est un booléen true/false évalué pour chacune des lignes de la table. Il passe donc sur chacune des lignes et vérifie si la date est bien inférieure ou égale à la date maximale dans le contexte (et c'est toujours true, donc ça cumule la valeur).

    Pour plus de détails, cet article peut être intéressant : "A filter argument in CALCULATE is always an iterator".

    ------------------------------
    Jonathan CHANAL
    Power BI Consultant/Formateur
    MCSA Power BI & Excel
    ------------------------------



  • 7.  RE: question sur CALCULATE et le contexte

    Top Contributor
    Posted Mar 21, 2022 04:06 PM
    Si tu fais une itération sur la table des ventes oui, sinon non. Dans les fonctions itératives, tu n'as accès qu'aux colonnes de la table sur laquelle tu fais l'itération. A mon avis, c'est plus performant d'itérer sur une table des dates (peu de lignes) que sur une table de faits (potentiellement plusieurs millions de lignes).

    ------------------------------
    Jonathan CHANAL
    Power BI Consultant/Formateur
    MCSA Power BI & Excel
    ------------------------------



  • 8.  RE: question sur CALCULATE et le contexte

    Posted Mar 23, 2022 02:58 AM
    Bonjour Jonathan,
    merci pour ton explication sur FILTER

    ------------------------------
    LAURENT SANCHEZ
    Formateur Consultant
    laurent@sanchezconsultant.com
    LE HAVRE
    662527022
    ------------------------------