IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POWER Discussion :

PWBI - DAX : CALCULATETABLE - erreur sur le filtre


Sujet :

POWER

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 012
    Billets dans le blog
    40
    Par défaut PWBI - DAX : CALCULATETABLE - erreur sur le filtre
    Bonjour à tous,

    L'objectif est de créer une table qui identifie les clients qui n'ont pas acheter depuis plus de 20 jours.

    Le jour de référence pour calculer la période est la date du dernier achat dans la table des Ventes (Fsales)

    Mon code initial ci-dessous génère l'erreur
    A function 'CALCULATE' has been used in a True/False expression that is used as a table filter expression. This is not allowed.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SalesCustomerLastPurchase = 
         CALCULATETABLE
                (  SUMMARIZE 
                    (   fSales// table
                        , fSales[customer_id]
                        , dCustomer[customer_first-name] 
                        , "sale date last", MAX(fSales[transaction_date])
                        , "Period no sales", DATEDIFF(CALCULATE(MAX(fSales[transaction_date]), all(fSales)) , MAX(fSales[transaction_date]), DAY)
                    )
                , DATEDIFF(MAX(fSales[transaction_date]), CALCULATE(MAX(fSales[transaction_date]), all(fSales)), DAY) >= 20   // => CALCULATE' has been used in a True/False expression that is used as a table filter expression. This is not allowed.
                )

    Le code pour le filtre ci-dessous génère la même erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      , MAX(fSales[transaction_date])- CALCULATE(MAX(fSales[transaction_date]), all(fSales)) >= 20 // CALCULATE' has been used in a True/False expression that is used as a table filter expression. This is not allowed.


    Qui a une idée ?
    Merci par avance


    Mes solutions de contournement mais la solution 2 pose une autre question (Cf. Solution 2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    fSalesCustomerLastPurchase =     
        FILTER
        (    CALCULATETABLE
             (  SUMMARIZE 
                (   fSales// table
                    , fSales[customer_id]
                    , dCustomer[customer_first-name] 
                    , "sale date last", MAX(fSales[transaction_date])
                    , "Period no sales", DATEDIFF(MAX(fSales[transaction_date]),CALCULATE(MAX(fSales[transaction_date]), all(fSales)), DAY)
                )
            )
            , [Period no sales] >= 20
        )
    Solution 2 mais elle suscite une autre question, pourquoi faut-il utiliser CALCULATE dans DATEDIFF sur les 2 dates sinon cela ne fonctionne pas alors que dans la solution 1 seulement sur 1 seul !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CustomerLastPurchase = /*SELECTCOLUMNS
    ( */FILTER
        (   ADDCOLUMNS
            (    SUMMARIZE
                (   'fSales',
                    'fSales'[customer_id]
                    ,'dCustomer'[customer_first-name]
                )
                ,"LastPurchaseDate", MAX('fSales'[transaction_date])
                ,"Period no sale",DATEDIFF(CALCULATE(MAX('fSales'[transaction_date])), CALCULATE(MAX('fSales'[transaction_date]), ALL('fSales')), DAY)
            )
            , [Period no sale] >= 20
        ) 
     /*   ,'fSales'[customer_id],'dCustomer'[customer_first-name], [LastPurchaseDate]
    )*/
    
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus



    Mes réponses vous ont aidés, merci de cliquer sur le pouce vert
    Bonjour chez vous

  2. #2
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 219
    Par défaut
    Bonjour

    difficile de répondre sans fichier exemple (et je maîtrise bien moins DAX que Power Query - beaucoup moins de pratique )

    néanmoins il est toujours utile de décomposer les formules avec des lignes VAR
    par exemple pour CALCULATE(MAX(fSales[transaction_date]), all(fSales)).

    par ailleurs, il y a un forum dédié Power BI plutôt que Excel

    https://www.developpez.net/forums/f2...t-bi/power-bi/

    Stéphane

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 1 012
    Billets dans le blog
    40
    Par défaut
    Merci Stéphane pour les infos et l'existence du forum PWBI.
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus



    Mes réponses vous ont aidés, merci de cliquer sur le pouce vert
    Bonjour chez vous

  4. #4
    Membre Expert
    Homme Profil pro
    ingénieur
    Inscrit en
    Mars 2015
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ingénieur
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2015
    Messages : 1 219
    Par défaut
    Re-bonjour

    une façon de faire
    étape 1 : liste complète des clients (avec VALUES ou DISTINCT)
    étape 2 : liste de ceux qui ont une commande dans les 20 derniers jours avec CALCULATETABLE pour filtrer sur les dates > à la date max -20
    ceux qui vous intéressent sont ceux de la liste 1 qui ne sont pas dans la 2 (fonction EXCEPT)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    VAR Clients = VALUES('Table'[Client])
    VAR Derniers_Clients = CALCULATETABLE(VALUES('Table'[Client]), 'Table'[Date]>(MAX('Table'[Date])-20))
    RETURN EXCEPT(Clients, Derniers_Clients)
    Stéphane

Discussions similaires

  1. [AC-2010] Erreur sur filtre pour un Dlookup
    Par myrddin99 dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/08/2013, 21h54
  2. Erreur Sur filtre !
    Par scandinave dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 22/01/2013, 11h16
  3. [AC-2007] Erreur d'exécution sur certains filtres en mode runtime
    Par joeyr dans le forum Runtime
    Réponses: 2
    Dernier message: 25/05/2012, 12h14
  4. [XL-2000] Erreur sur la 1ere ligne de filtre
    Par cobra38 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/02/2011, 19h35
  5. erreur sur un non filtre
    Par nico.chev dans le forum Access
    Réponses: 1
    Dernier message: 20/09/2005, 13h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo