Récemment, un lecteur a posé une question sur notre forum concernant l’éditeur de requêtes Power Query qui, je le rappelle, peut être utilisé via Excel ou via Power BI. Cet article vise à répondre à cette question, qui consiste en gros à créer une table avec le nombre de jours actifs par mois dans Power Query.
Question du lecteur : Table avec le nombre de jours actifs par mois dans Power Query
Voici la question posée par notre lecteur sur notre forum:
Données originales
Voici les données originales proposées par notre lecteur, une fois que nous les avons importées dans l’éditeur de requêtes de Power BI:
Voici également une table de jours fériés. Nous allons effectivement résoudre la même problématique, en considérant cette fois les jours fériés.
Résultat recherché : Table avec le nombre de jours actifs par mois dans Power Query
À partir de ces données, notre lecteur cherche à créer le tableau suivant:
Ce tableau présente le nombre de jours actifs dans le mois, selon les dates de début et de fin spécifiées pour chacun des items en ligne (ne considère pas les week-ends).
En considérant les jours fériés, le tableau recherché est plutôt celui-ci:
Vous devez analyser de grandes quantités de données et les présenter dans des rapports et tableaux de bord, avec des indicateurs de performance pertinents ? Développez vos compétences avec nos formations en Power BI en français ou en anglais. |
---|
Création de paramètres pour la table avec le nombre de jours actifs par mois dans Power Query
Nous devrons tôt ou tard créer une fonction qui permettra de calculer le nombre de jours écoulés dans chaque mois. Pour ce faire, nous aurons besoin d’une date de début et d’une date de fin. Ce faisant, nous avons d’abord créé 2 paramètres, Début et Fin, auxquels nous avons attribué des valeurs temporaires.
Création de requêtes qui seront converties en fonctions
Nous avons créé une nouvelle requête qui sera ensuite convertie en fonction CALENDRIER RÉGULIER.
D’abord, nous avons créé une liste qui débute avec notre paramètre Début et se termine avec notre paramètre Fin. À noter que ceci crée une liste de nombres (et non de dates) avec un pas de 1.
Cette fonction nous a donc permis de créer la liste suivante. À noter qu’il ne s’agit pas d’une table mais bien d’une liste.
Nous avons ensuite converti notre liste en table, nous avons transformé les nombres en dates et nous avons ajouté des colonnes d’année et mois, tel qu’illustré ci-dessous.
En guise de dernière étape, nous avons ajouté une colonne qui permet de fusionner les informations d’année et de mois.
Au final, nous avons converti cette requête en fonction CALENDRIER RÉGULIER.
Nous avons répété le même processus afin de créer la fonction CALENDRIER OUVRABLE, que nous avons ensuite complété de la façon suivante.
D’abord, nous avons inséré une colonne Jour de la semaine, tel qu’illustré ci-dessous.
Ensuite, nous avons fusionné la requête résultante avec la table de jours fériés, ce qui nous a permis ensuite de filtrer le jour de la semaine pour exclure les 1 et les 7 (samedi et dimanche) et la colonne Fermé pour exclure les lignes non null (i.e. les lignes qui sont des journées fériées).
Nous avons converti la requête finale en fonction CALENDRIER OUVRABLE.
Utilisation de nos 2 fonctions calendrier
Maintenant que nous avons 2 fonctions calendrier, nous pouvons les utiliser dans notre table de départ. Pour cela, nous utilisons l’option Invoquer une fonction du menu Ajouter une colonne. Ceci nous permet d’obtenir le résultat suivant:
Nous avons ensuite déployé les résultats, ce qui a généré une ligne par date pour chacune des dates présente dans les intervalles spécifiés dans les colonnes Debut et Fin.
Maintenant, il ne nous reste plus qu’à compter le nombre de dates pour chaque intervalle, ce que nous pouvons faire aisément avec la fonctionnalité Regrouper par.
Nous obtenons alors le tableau suivant pour la fonction CALENDRIER RÉGULIER. Nous pouvons répéter la même procédure avec la fonction CALENDRIER OUVRABLE. Ces deux tables nous permettrons ensuite de créer les deux visualisations présentées en début d’article.
Conclusion
Il est de plus en plus facile dans Power Query, de créer des requêtes performantes sans faire intervenir beaucoup de code M. J’essaie de résoudre les problématiques qui me sont soumises en utilisant le moins possible de code M, pour démontrer aux utilisateurs que Power Query est un outil qu’ils peuvent programmer, sans avoir à être des “programmeurs” chevronnés.
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
Afin d’approfondir vos connaissances avec Power BI et plus particulièrement vos compétences avec l’éditeur de requête Power Query, nous vous recommandons notre formation Recettes magiques pour transformer vos données.
Voici quelques commentaires d’apprenants ayant suivi la formation en ligne Recettes magiques pour transformer vos données :
Bonjour Sophie,
Je vous salue de la Belgique et vous remercie vivement pour votre bel exposé.
J’aimerais y aojouter une contribution pour éviter le “if … then”.
D’une façon identique à votre fonction pour créer la liste du calendrier global, j’ai créé une fonction qui crée une liste par projet que je converti ensuite en tableau.
En prenant le query Debut_Fin j’y ajoute ma fonction qui crée par dossier toutes les dates.
Comme vous, après extraction du tableau, j’y ajoute “Premiers caractères” pour avoir le mois de chaque date.
Finalement je regroupe la colonne “Premiers caractères” qui calcule le nombre de rangées par mois (et par projet).
Ainsi j’obtiens exactement le même résultat sans devoir programmer d’outre mesure.
L’avantage de cette méthode est que vous pouvez même affiner le tout en calculant les jours ouvrables (au lieu des jours calendrier) selon votre deuxième méthode que vous avez si bien expliqué dans https://www.lecfomasque.com/power-query-trouver-le-nombre-de-jours-ouvrables/.
Cordialement,
Dirk
Bonjour Dirk,
Salutations à vous!
Je ne suis pas certaine de comprendre votre procédure mais elle me rend très curieuse! Vous seriez d’accord pour me la transférer par courriel à info@lecfomasque.com?
Au plaisir,
Sophie