Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Grow your Fabric skills and prepare for the DP-600 certification exam by completing the latest Microsoft Fabric challenge.

Reply
Aurélien
Frequent Visitor

Response times

Bonjour,

 

J'ai un problème dans Power BI, je n'arrive pas à calculer les délais d'intervention

J'ai:
  • "La date de création du ticket" au format JJ / MM / AAA HH: MM: SS
  • "Date d'intervention" au format JJ / MM / AAA HH: MM: SS

 

J'utilise la FORMULE DAX: "DATEDIFF" , mais je veux calculer le temps de réponse en "Minute" sans tenir compte des  samedi et dimanche.

 
Exemple:
Date de la demande d'interventionVendredi 03/09/2020 10:30:00
Date d'intervention09/09/2020 15:00:00

Résultat = 6030 MINUTES OU 100,5 HEURES

 

Vous remerciant à l'avance

Au revoir

1 ACCEPTED SOLUTION

There is a difference between an empty string ("") and no data (null).  The COALESCE function only works with the second scenario.  If you know that for BP your demand data may be an empty string ""  then you need to either adjust the first line, or replace the empty string with BLANK() (which produces a null value)

View solution in original post

19 REPLIES 19
lbendlin
Super User
Super User

Here is a sample table definition for a table called "Intervention"

 

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WstQ31jcyMDJQMDSwMjawMjBQ0gGKWULFTIECILHYWAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Start = _t, End = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Start", type datetime}, {"End", type datetime}})
in
    #"Changed Type"

 

And here is the calculated column that calculates the difference in minutes minus your specified weekend days

 

Difference = 
var db = CALENDAR(Intervention[Start],Intervention[End])
var we = ADDCOLUMNS(db,"WE",if(WEEKDAY([Date],2)>5,1,0))
return DATEDIFF(Intervention[Start],Intervention[End],MINUTE)-1440*sumx(we,[WE])

 

Bonjour,

Merci pour cette reponse rapide, mais je ne comprend pas à quoi fait référence cette partie là:

 

if (WEEKDAY ([Date], 2)> 5,1,0))

 

Merci par avance, 

This marks Saturday and Sunday as 1 and all other weekdays as 0. 

Merci mais à quoi fait référence "Date" ?

2020-09-21 13_39_36-Calcul de délais - Power BI Desktop.png

 

2020-09-21 13_39_58-Calcul de délais - Power BI Desktop.png

 

Youe ADDCOLUMNS line references CompteRendu, but it should reference the previously created table variable db.

Voici ce que j'ai :

2020-09-21 14_35_14-Calcul de délais - Power BI Desktop.png

 

Le probléme c'est que parfois la date de la demande peut être inférieur à la date d'intervention et dans ce cas la valeur doit être 0.

 

Merci pour l'aide

That's something you want to control in your data before you call the CALENDAR function.  You can use the DATEDIFF function to find out if you have that issue, for example.

 

Here is a more compact version that checks for the date issue.

 

 

 

Difference = 
var d = DATEDIFF(CompteRendu[Date et Heure Demande],CompteRendu[Date et Heure Début],MINUTE)
return if(d<0,0,d-1440*sumx(CALENDAR(CompteRendu[Date et Heure Demande],CompteRendu[Date et Heure Début]),if(WEEKDAY([Date],2)>5,1,0)))

 

 

  

Il ce peux aussi que l'intervention n'ai pas encore débutée

2020-09-21 15_04_42-Calcul de délais - Power BI Desktop.png

 

Je ne comprend pas d'où vient le [Date].

 

Merci, cordialement

What does DATEDIFF return for an empty Début date?

 

 

Difference = 
var d = DATEDIFF(CompteRendu[Date et Heure Demande],CompteRendu[Date et Heure Début],MINUTE)
return if(ISBLANK(CompteRendu[Date et Heure Début])  || d<0,0,d-1440*sumx(CALENDAR(CompteRendu[Date et Heure Demande],CompteRendu[Date et Heure Début]),if(WEEKDAY([Date],2)>5,1,0)))

 

"Date" is a hardcoded column name result of the CALENDAR function.

 

Quand la date est vide  alors on calcule le délais par rapport à "today()" ou "now()".

 

Exemple:

Date de la demande: 20/09/2020 à 08h00

Date de début (si vide): NOW()

 

Merci 

 

Now you are entering really dangerous territory. NOW() can have many different meanings. Here is one interpretation.

 

Difference = 
var e = COALESCE(CompteRendu[Date et Heure Début],UTCNOW())
var d = DATEDIFF(CompteRendu[Date et Heure Demande],e,MINUTE)
return if(d<0,0,d-1440*sumx(CALENDAR(CompteRendu[Date et Heure Demande],e),if(WEEKDAY([Date],2)>5,1,0)))

 

 

 

Afin de recentrer le probléme voici le tableau:

Pour résumé, le tableau résume les compte rendu des demandes d'intervention mais aussi des maintenances.

 

/!\  Les maintenance n'ont pas de "date et heure de demande"

 

CRSURDétailDate et heure demandeDate et heure débutRésultat attendu
1DI21Serait il possible de baisser le chauffage11/8/20 15:3416/8/20 8:30Délais en minutes
2DI23Serait il possible de baisser le chauffage3/9/20 11:209/9/20 15:22Délais en minutes
3BP34Maintenance climatisation(vide) / 016/9/20 9:120
4DI56Serait il possible de baisser le chauffage4/9/20 12:1519/8/20 13:14Délais en minutes
5BP36Maintenance chauffage(vide) / 016/9/20 10:210

 

Le but est de calculer le délais d'intervention sur les demandes sans prendre en compte les samedi et dimanche.

Si la date de début est antérieur à la date de la demande, alors =0.

Si BP alors = 0

Si pas de date de début alors = Now.

 

Merci pour l'aide, je suis vraiment dans une impasse.

please revalidate your rule/expected outcome for row 4.

 

Here is the adjusted calculated column after re-reading your explanation.

 

 

Difference = 
var e = COALESCE(CompteRendu[Date et Heure Demande],UTCNOW())
var d = DATEDIFF(e,CompteRendu[Date et Heure Début],MINUTE)
return if(d<0,0,d-1440*sumx(CALENDAR(e,CompteRendu[Date et Heure Début]),if(WEEKDAY([Date],2)>5,1,0)))

 

2020-09-22 08_19_25-Calcul de délais - Power BI Desktop.png

 

J'ai toujours ce message d'erreur, car lorsque j'ai un "bp" la  valeur  de "Date et Heure Demande" est  vide. Ou parfois il n'y a pas de date de début.

 

 

There is a difference between an empty string ("") and no data (null).  The COALESCE function only works with the second scenario.  If you know that for BP your demand data may be an empty string ""  then you need to either adjust the first line, or replace the empty string with BLANK() (which produces a null value)

Super,  cà fonctionne !!! Mais j'ai desormais un autre probléme, je refais un topic.

 

Ps: cette formule peut elle être adaptée en Power Query ?

Yes, since the computation happens inside the row it is possible to implement in Power Query.  You would need to use the same process - create the list, and then identify sat/sun via https://docs.microsoft.com/en-us/powerquery-m/date-dayofweek

 

This actually reminds me - what do you want to do when the start or end dates are on weekend days?

Here's a slightly different approach, same result.

 

 

Difference =
DATEDIFF ( Intervention[Start], Intervention[End], MINUTE )
    - 1440 * SUMX (
            CALENDAR ( Intervention[Start], Intervention[End] ),
            IF ( WEEKDAY ( [Date], 2 ) > 5, 1, 0 )
        )

 

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.