Fabric is Generally Available. Browse Fabric Presentations. Work towards your Fabric certification with the Cloud Skills Challenge.
Bonjour,
J'ai un problème dans Power BI, je n'arrive pas à calculer les délais d'intervention
J'utilise la FORMULE DAX: "DATEDIFF" , mais je veux calculer le temps de réponse en "Minute" sans tenir compte des samedi et dimanche.
Date de la demande d'intervention | Vendredi 03/09/2020 10:30:00 |
Date d'intervention | 09/09/2020 15:00:00 |
Résultat = 6030 MINUTES OU 100,5 HEURES
Vous remerciant à l'avance
Au revoir
Solved! Go to 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)
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" ?
Youe ADDCOLUMNS line references CompteRendu, but it should reference the previously created table variable db.
Voici ce que j'ai :
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
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"
CR | SUR | N° | Détail | Date et heure demande | Date et heure début | Résultat attendu |
1 | DI | 21 | Serait il possible de baisser le chauffage | 11/8/20 15:34 | 16/8/20 8:30 | Délais en minutes |
2 | DI | 23 | Serait il possible de baisser le chauffage | 3/9/20 11:20 | 9/9/20 15:22 | Délais en minutes |
3 | BP | 34 | Maintenance climatisation | (vide) / 0 | 16/9/20 9:12 | 0 |
4 | DI | 56 | Serait il possible de baisser le chauffage | 4/9/20 12:15 | 19/8/20 13:14 | Délais en minutes |
5 | BP | 36 | Maintenance chauffage | (vide) / 0 | 16/9/20 10:21 | 0 |
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)))
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 )
)
Check out the November 2023 Power BI update to learn about new features.
Read the latest Fabric Community announcements, including updates on Power BI, Synapse, Data Factory and Data Activator.
Join us for a free, hands-on Microsoft workshop led by women trainers for women where you will learn how to build a Dashboard in a Day!