Calcul du stock (mesures) via date de création et date de cloture

Accueil – Le CFO masqué Forums Power BI Calcul du stock (mesures) via date de création et date de cloture

  • Ce sujet contient 3 réponses, 2 participants et a été mis à jour pour la dernière fois par 24.marko, le il y a 1 mois.
4 sujets de 1 à 4 (sur un total de 4)
  • Auteur
    Messages
  • #151067
    24.marko
    Participant

    Bonjour,

    j’ai une table de transactions assez simple, contenant pour chaque transaction :
    – clé primaire pour récupérer le dernier statut
    – date de transaction
    – statut (Open, ou Match qui correspond à clos)
    – date de cloture (uniquement renseignée si statut = Match)
    – et d’autres attributs comme l’organisation interne (Business unit, business line…), le type de transaction, le type de compte… ((importants car je souhaite que la mesure du stock puissent être actualisées en fonction des attributs)

    J’ai créé une table ‘calendar’ paramétrée comme table de dates et avec des relations actives (entre la date de transaction et la date ‘calendar’) ou non (entre la date de cloture et la date ‘calendar’)

    le résultat attendu doit correspondre à la table calculée stock (mais inutilisable car ce résultat ne tiens pas compte des attributs, mais permet de comprendre ce que je dois produire)

    je suis parvenu à créer une mesure pour calculer le nombre de transactions créées à date :

    Items_created_at_date =
    CALCULATE (
    COUNTA ( Transactions[Transaction_date] ),
    FILTER (
    ALL ( ‘Calendar'[Date] ),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )

    cependant, impossible de créer la mesure pour calculer le nombre de transactions cloturées à date même avec différentes méthodes :

    Items_closed_at_date =
    CALCULATE (
    COUNTA ( Transactions[Closing_date] ),
    FILTER (
    ALLSELECTED ( ‘Calendar’),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )

    ou

    Items_closed_at_date2 =
    CALCULATE (
    COUNTA ( Transactions[Closing_date]
    ),
    USERELATIONSHIP (Transactions[Closing_date], ‘Calendar'[Date] ),
    FILTER (
    ALL ( ‘Calendar’ ),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )

    KO car j’ai l’impression qu’il affiche le compteur à la date de transaction et non de cloture dans la visualisation par un graphe de type matrice

    ou encore

    Closed_Transactions =
    FILTER ( Transactions, Transactions[Status] = “Match” )

    puis

    Items_closed_at_date3 =
    0+
    CALCULATE (
    COUNTA ( Closed_Transactions[Closing_date] ),
    FILTER (
    ALLSELECTED ( ‘Calendar’),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )

    j’ai meme essayé d’ajouter des colonnes dans la table calendar :

    nb_In =
    calculate(
    count(transactions[Transaction_date]),
    filter(
    transactions,
    ‘Calendar'[Date]=transactions[Transaction_date]
    )
    )

    et

    nb_Out =
    calculate(
    count(Transactions[Closing_date]),
    filter(
    Transactions,
    ‘Calendar'[Date]=Transactions[Closing_date]
    )
    )

    Bref, je galère à mesurer le nombre de transactions fermées et ainsi calculer le stock global (puis après selon les différents attributs)

    est-ce que vous voyez ce qui cloche ?

    merci d’avance

    Attachments:
    You must be logged in to view attached files.
    #151077
    Aline Clozel
    Participant

    Bonjour,
    Je ne suis pas experte mais il me semble que tout ça est lié à la structure des données et à leur relation. Moi je décomposerai avec
    -une table pour la commande, une table pour la livraison, un table de date,
    -une jointure entre la table commande et la table livraison avec l’id transaction
    -une jointure entre chaque table commande et livraison avec la table de date.
    Quand tu fais le calculate sur ta table livraison il faut appeller/filtrer la table de date (et non la table livraison)
    J’espère t’aider et ne pas t’engager dans une fausse piste mais c’est comme ça que j’essaierai !
    A +

    #151081
    24.marko
    Participant

    Bonjour aline.closel

    j’ai essayé mais cela ne marche pas
    – j’ai créé 2 sous-tables:
    Open_transactions = FILTER ( Transactions, Transactions[Status] = “Open” )
    Closed_transactions = FILTER ( Transactions, Transactions[Status] = “Match” )
    – j’ai mis à jour les relations
    – j’ai créé une mesure dans la table Closed_transactions :
    Items_closed_at_date3 =
    0+
    CALCULATE (
    COUNTA ( Closed_Transactions[Closing_date] ),
    FILTER (
    ALLSELECTED ( ‘Calendar’),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )
    ==> cette mesure ne me ramène que des 0

    j’ai même tenté auter chose en dépivotant la table Transactions :
    Transactions_unpivot =
    UNION(
    SELECTCOLUMNS(Transactions,”Date”, Transactions[Transaction_date], Transactions[Transaction_ID], “Status”,”Open”,Transactions[BU_viaDAX], Transactions[BL_viaDAX]),
    SELECTCOLUMNS(filter( Transactions, transactions[Status] = “Match”),”Date”, Transactions[Closing_date],Transactions[Transaction_ID],”Status”,”Closed”,Transactions[BU_viaDAX], Transactions[BL_viaDAX])
    )

    et en ajoutant un compteur :
    compteur =
    if(Transactions_unpivot[Status]=”Open”,
    1,
    -1
    )

    et 3 nouvelles mesures :
    Stock =
    CALCULATE (
    sum ( Transactions_unpivot[compteur] ),
    FILTER (
    all(‘Calendar’),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )
    Ne marche pas

    Items_created_at_date_unpivot =
    CALCULATE (
    COUNTROWS(
    FILTER (
    Transactions_unpivot,
    Transactions_unpivot[Status]=”Open”
    )
    ),
    FILTER (
    ALLSELECTED ( ‘Calendar’),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )
    qui fonctionne

    et là, chose super étrange, la même mesure mais juste en adaptant le filtre sur le statut ne fonctionne pas du tout (ramène des 2 qlq que soit la date)
    Items_closed_at_date_unpivot =
    CALCULATE (
    COUNTROWS(
    FILTER (
    Transactions_unpivot,
    Transactions_unpivot[Status]=”Closed”
    )
    ),
    FILTER (
    ALLSELECTED ( ‘Calendar’),
    ISONORAFTER ( ‘Calendar'[Date] , MAX ( ‘Calendar'[Date] ), DESC )
    )
    )

    en PJ, le pbix remis à jour

    Attachments:
    You must be logged in to view attached files.
    #151084
    24.marko
    Participant

    oulà,

    j’avais fait une erreur grossière…
    en effet, la date de mise à jour du statut = datetime (par ex: 01/03/2025 09:45:00)

    j’ai oublié que cela ne pouvait pas marcher car j’avais une info sur l’heure, donnée qui est absente du calendar…

    j’ai donc dupliquer la colonne via PQ et j’en ai extrait la date…

    encore qlq soucis, mais j’ai déjà un comportement plus cohérent… ouf

4 sujets de 1 à 4 (sur un total de 4)
  • Vous devez être connecté pour répondre à ce sujet.