Il est souvent requis de calculer le nombre de jours entre deux dates dans toutes sortes de contextes. Par exemple, pour calculer les ventes moyennes par jour ou pour calculer en combien de jours l’inventaire de certains produits ont été écoulés.
Avec le langage DAX, il est possible de générer des calculs dynamiques d’écart de dates de différentes façons. Nous en verrons 2 dans cet article.
Pour illustrer ces 2 fonctions, j’utiliserai une table de dates et les deux mesures suivantes :
- DebutPeriode = FIRSTDATE(DimDates[Date])
- FinPeriode = LASTDATE(DimDates[Date])
J’ai créé un visuel permettant de visualiser les résultats :
Méthode #1 : La fonction DATEDIFF
Pour effectuer un calcul très simple de différence entre deux dates, la fonction DATEDIFF est tout indiquée. Elle permet, comme son nom le porte à croire, d’effectuer la différence entre deux dates. Son attrait réside surtout dans le fait que cette différence peut être retournée selon différents incréments de temps (Secondes, minutes, heures, jours, semaines, mois, trimestres et années). Voyons comment elle fonctionne.
Syntaxe de DATEDIFF
La syntaxe de la fonction est la suivante : DATEDIFF(<Date1>, <Date2>, <Interval>)
Les dates doivent être des valeurs de format Date ou Datetime.
L’intervalle doit être l’une des options suivantes :
- SECOND
- MINUTE
- HOUR
- DAY
- WEEK
- MONTH
- QUARTER
- YEAR
Je vais tout d’abord calculer le nombre de jours dans chaque mois. Pour y arriver, la date1 de la fonction sera égale à la mesure DebutPeriode, la date2 sera égale à la mesure FinPeriode et l’intervalle sera fixé à DAY.
NbJoursDATEDIFF = DATEDIFF([DebutPeriode], [FinPeriode],DAY)
Jetons un coup d’œil au résultat
Remarquez que le nombre de jours pour janvier est de 30 jours. Ce qui veut dire que la mesure calcule 31 – 1 = 30 (calcul exclusif). Si vous souhaitez obtenir un nombre de jours dans le mois de janvier, vous devez ajouter « +1 » dans la formule.
NbJoursDATEDIFF = DATEDIFF([DebutPeriode], [FinPeriode],DAY)+1
Et maintenant, remarquons que le résultat a été ajusté.
Avec la fonction DATEDIFF, il est aussi possible d’obtenir la différence entre deux dates en heures ou en minutes, par exemple.
NbHeuresDATEDIFF = DATEDIFF([DebutPeriode], [FinPeriode],HOUR)+24
NbMinutesDATEDIFF = DATEDIFF([DebutPeriode], [FinPeriode],MINUTE)+1440
Comme nos mesures dépendent réellement des dates de début et dates de fin sélectionnées, notez que le résultat s’ajustera selon le niveau de détail affiché dans le visuel. Par exemple, si nous décidions de présenter l’information par année plutôt que par mois, le résultat serait le suivant :
Méthode #2 : La fonction NETWORKDAYS
Dans sa mise à jour de Juillet 2022, Microsoft a introduit la fonction NETWORKDAYS. Comme le permettait DATEDIFF, NETWORKDAYS calcule le nombre de jours entre deux dates. Mais avec quelques particularités.
Tout d’abord, le calcul d’écart de la fonction NETWORDAYS est inclusif. Ce qui veut dire que pour calculer le nombre de jours dans le mois de janvier, nous n’aurons plus besoin d’ajouter le « +1 » à la formule.
Ensuite, la fonction NETWORKDAYS nous permet d’exclure les jours fériés et les jours de fin de semaine.
Syntaxe de NETWORKDAYS
Voici la syntaxe de la fonction NETWORKDAYS : NETWORKDAYS(<start_date>, <end_date>[, <weekend>, <holidays>])
Tout comme la fonction DATEDIFF, les 2 premiers paramètres à saisir sont la date de début et la date de fin.
Le 3e paramètre permet de déterminer quels sont les jours de fin de semaine à exclure du calcul. Par défaut, les samedis et dimanches seront exclus du calcul mais plusieurs autres options sont possibles.
Le 4e paramètre permet d’indiquer des jours fériés à exclure du calcul de différence de dates. Ce paramètre doit faire référence à une table contenant uniquement les jours fériés. Ce paramètre est facultatif.
Voici un exemple où la formule est utilisée dans sa plus simple expression :
NbJoursSemaine = NETWORKDAYS([DebutPeriode],[FinPeriode])
Remarquez que puisque qu’aucune information n’est saisie comme 3e paramètre, les samedis et dimanches sont exclus automatiquement.
Excluons le dimanche seulement et les jours fériés
Pour exclure les dimanches seulement, j’ai saisi la valeur « 11 » dans le 3e paramètre.
NbJoursSaufDimanches = NETWORKDAYS([DebutPeriode],[FinPeriode],11)
Finalement, j’ai importé une liste de jours fériés dans la table « JoursFeries ».
J’ai donc pu ajouter cette table dans le 4e paramètre de la fonction de façon à obtenir tous les jours de la période sauf les dimanches et les jours fériés.
NbJoursSaufDimanchesEtFeries = NETWORKDAYS([DebutPeriode],[FinPeriode],11,JoursFeries)
Fichier d’accompagnement VIP à télécharger
Pour télécharger le fichier utilisé dans ce tutoriel, devenez membre VIP du CFO masqué.
Formation complémentaire
Pour une introduction au langage DAX, utilisé par Power Pivot et par Power BI Desktop, qui permet de créer des tableaux de bord flexibles et faciles à mettre à jour en plus de créer des visualisations de données évoluées et pertinentes, suivez la formation Introduction au langage DAX (Power BI et Power Pivot).
Cette formation est très compréhensive. Merci