Power Query : Répartition d'une ligne suivant plusieurs conditions

Bonjour, je rencontre un problème sur un cas particulier au sein de Power Query. Je suis actuellement en train de développer des indicateurs de performance dans le cadre de mon projet d'alternance.

Je mets ci-dessous mon besoin.

Contexte

J'ai à l'origine 4 colonnes qui sont les suivantes :

TimeFromAjusté (il s'agit de la date de début de l'action en Date et heure)

TimeToAjusté (il s'agit de la date de fin de l'action en Date et heure)

Shift (il s'agit du créneau horaire dans lequel se déroule l'action [la valeur "Matin" appartient au créneau 5h à 13h ; la valeur "Après-midi" appartient au créneau 13h à 21h ; la valeur "Nuit" appartient au créneau 21h à 5h])

TR (il s'agit de la durée en secondes de mon action)

Problématique

Actuellement la colonne shift ne se base que sur la date de début. Ainsi si la date de fin est dans un créneau horaire différent (jour y compris) de la date de début, la durée de mon action ne sera pas répartie suivant tous les créneaux horaires dans lesquels elle s'est déroulée.

Ps : information complémentaire mon changement de jour s'effectue à 5h et non à 0h pour me simplifier la tâche

J'essaye donc de passer de la situation initiale ci-dessous à la situation visée.

Situation initiale :

TimeFromAjustéTimeToAjustéShiftTR
30/06/2023 04:00:0001/07/2023 14:00:00Nuit36000

Situation visée :

TimeFromV2TimeToV2ShiftV2TR
30/06/2023 04:00:0001/07/2023 05:00:00Nuit3600
01/07/2023 05:00:0001/07/2023 13:00:00Matin28800
01/07/2023 13:00:0001/07/2023 14:00:00Après-midi3600

J'ai plusieurs idées mais pour le moment aucune n'a été concluante.

Je remercie toutes les personnes qui prendrons le temps de lire ce long post.

Bonjour

Le début du 30/06 avant 5h ne correspondait-il pas plutôt au 29/06 ?

La durée est-elle toujours inférieure ou égale à 24 heures ?

Bonjour Chris,

La durée peut être supérieure à 24 heures il n'y a pas de durée maximale pour une action mais en général ce cas de figure est très rare.
Pour ce qui est de la date de début dans mon exemple elle commence le 30/06. Mais en réalité cette information est faussée par moi même lors d'une modification.
Je m'explique :

A l'origine cette date était le 01/07/2023 mais comme j'ai transformé mon changement de jour à 5h et non plus à 0h alors celle-ci est devenue 30/06.

Si je n'ai pas été clair, n'hésite pas je reformulerai complètement le sujet. Merci pour ton retour.

Excusez moi, j'ai aussi oublié de préciser que je travailler dans Power Bi et non Excel.

Mais il me semble que les menus de Power Query restent les inchangés.

Bonjour à tous !

La demande est peu explicite....

Je tente néanmoins cette (double) proposition Power Query :

EDIT : Merci de préciser, dans votre profil, la nature de votre Excel ( 2019 ? 2021 ? 365 ? ...) et non le numéro de révision (2310).

Bonjour JFL,

Merci beaucoup pour votre retour, j'avais en effet tenté la première approche avec les listes mais je n'arrivais pas à les développer. Je n'ai pas tout à fait compris l'utilisation de la fonction.

Je suis désolé si je n'ai pas été clair, le problème est assez difficile pour moi (je suis encore novice sur Power Query).
Je me permets aussi de vous préciser qu'en fait mon changement de jour se fait à 5h et non pas à 0h.

Exemple :

Le passage du 30/06 au 01/07 se fera à 5 heure du matin et non à minuit, j'ai pensé qu'il serait plus simple ainsi pour que mon shift "nuit" (21h-5h) ne se balade pas sur deux jours différents.

Je vous partage mon fichier source ainsi que mon fichier Power BI dans lequel je réalise ma requête.

0tdb-perf-test.pbix (158.50 Ko)
1s26-apf.zip (864.06 Ko)

Je m'excuse encore pour le manque de lisibilité de mon premier texte.

Ps : Merci pour l'EDIT je corrige ça de suite, également qu'est ce qu'un M.P. ?

Bonjour à tous de nouveau !

mon changement de jour se fait à 5h et non pas à 0h.

Je ne comprends votre démarche qui se veut simplificatrice ?! Le résultat est inverse.

Comment analysez-vous la tâche qui va du 30/6/2023 15:00 au 01/07/2023 14:00 ?

Je n'ai pas tout à fait compris l'utilisation de la fonction.

Elle est utilisée pour alléger le code de la requête.

qu'est ce qu'un M.P. ?

Dans quel contexte cet acronyme est-il employé ?

RE,

mon changement de jour se fait à 5h et non pas à 0h.
En effet je raconte n'importe quoi cette démarche ne fonctionnera pas (étant depuis un petit moment sur le problème je commence à me perdre très rapidement).

30/06/2023 15:00 au 01/07/2023 14:00
Si je l'avais analysé avec ce changement de jour à 5 heures alors :

30/06/2023 15:00 au 30/06/2023 21:00
30/06/2023 21:00 au 01/07/2023 05:00 (avec donc le changement du 30/06 au 01/07 qui se fait à 5h)
01/07/2023 05:00 au 01/07/2023 13:00
01/07/2023 13:00 au 01/07/2023 14:00

Mais je me rends compte que ça ne fonctionne pas dans cette requête.
J'avais initialement utilisé cette méthode dans une autre requête "calcul du nombre de mouvements" dans laquelle je n'avais qu'une seule date (pas de début et de fin) et donc je voulais reproduire la même structure pour la requête "répartition temporelle".
L'objectif final est un taux de productivité (nb mvt / TR) le lien entre les 2 tables seraient alors les colonnes shift et dates c'est pourquoi j'ai fait cette suggestion de basculer le changement de jour à 5h.

changement jour 5h

Elle est utilisée pour alléger le code de la requête.
Ok merci, il faut que je me forme un peu alors sur ce point.

qu'est-ce qu'un M.P. ?
Je l'ai vu dans votre note sous votre post "Cordialement Aucune réponse ne sera apportée aux M.P. non sollicités JF",
je pensais qu'elle m'était adressée.


Retour sur les propositions :

Si j'utilise l'exemple ci-dessous ça ne fonctionne plus, je dépasse la limite de mon shift dans le TTA.

image

Ces deux lignes sont-elles celles qui doivent être ajustées ?

({"TTA_2", each List.Max([LD])+#duration(0,1,0,0) , type datetime},
{"TR", each Table.RowCount(_)*3600, Int64.Type})

Bonjour à tous de nouveau !

  • qu'est-ce qu'un M.P. ?

C'est un Message Privé. La sollicitation à laquelle vous faites référence fait partie de ma signature. Elle a une portée générale.

  • Retour sur les propositions

Mes requêtes ont été construites sur la base de votre exemple initial (là, vous devez toucher du doigt la double nécessité 1/ de poster un classeur, 2/ avec des données représentatives !). Le maigre exemple fourni donnait à penser que l'analyse portait sur des heures entières.
Je vais revoir le codage.

Vous trouverez ici mon fichier source complet (beaucoup de colonnes inutiles), ça sera peut être plus pratique pour vous que de construire des données sources.

1s26-apf.zip (864.06 Ko)

Re Bonjour,

J'ai structuré le problème de nouveau suite aux retours de plusieurs d'entre vous. J'ai également mis les fichiers correspondants en page 3.

Merci à tous.

2s26-apf.zip (864.06 Ko)

Bonsoir à tous !

Une version 2 sur la base de votre classeur "s26-apf.xlsx" ( à tester...!) :

Bonjour JF,

Merci beaucoup ça marche comme je le souhaitais, j'ai appliqué les filtres qui m'intéressent et ça fonctionne.

Voici le comparatif sur un cas entre avant et après :

image image

On retrouve bien la même durée, je vais donc le transversaliser sur Power BI.

Encore merci, et je m'excuse du temps perdu à cause des explications confuses de la problématique.
Je vous souhaite une bonne journée et peut être à bientôt.

Bonjour à tous !

Bien !

Quel est votre choix quant à la méthode ?

Avez-vous réalisé des tests sur la vélocité ?

A priori ma préférence va à celle basée sur List.Generate qui devrait être plus rapide.

Je vous remercie de ce retour.

Les 2 méthodes sont très satisfaisantes en ce qui concerne le temps de chargement sur Excel, il faut tout de même que je teste à nouveau sur les pc de l'entreprise qui sont un peu moins performant que le mien (je pourrai vous faire un comparatif si vous le souhaitez).

Toutefois d'un point de vue maintenance je comprends mieux celle sans fonction paramétrée (il faut que je me mette à niveau sur les fonctions et paramètres).

Il n'y a que la fonction "chemin source" pour récupérer le fichier source que je n'arrive pas à utiliser, je pense ne pas avoir compris le fonctionnement.

Il est aussi possible qu'à l'avenir je traite le cas des "week-end" indépendamment puisque les schémas horaires ne sont pas les mêmes, vous me recommandez de reprendre à ce moment là ces requêtes ou de construire quelque chose de nouveau ?

Bonjour à tous de nouveau !

Toutefois d'un point de vue maintenance je comprends mieux celle sans fonction paramétrée.

Cet argument est très légitime.

Il n'y a que la fonction "chemin source" pour récupérer le fichier source que je n'arrive pas à utiliser, je pense ne pas avoir compris le fonctionnement.

= Excel.CurrentWorkbook(){[Name="CheminClasseur"]}[Content]{0}[Column1]

Dans cette ligne de code le "= Excel.CurrentWorkbook(){[Name="CheminClasseur"]}[Content]" a pour but de lire la plage nommée "CheminClasseur" de la feuille Excel et de l'intégrer dans une table Power Query.

La fin {0}[Column1] signifie que désire l'enregistrement 0 (ligne 1 de la table) du champs "Column1" ==> on en retire le chemin du classeur à analyser.

Il est aussi possible qu'à l'avenir je traite le cas des "week-end" indépendamment puisque les schémas horaires ne sont pas les mêmes, vous me recommandez de reprendre à ce moment là ces requêtes ou de construire quelque chose de nouveau ?

Les requêtes pourraient être une bonne base de travail.

Il n'y a que la fonction "chemin source" pour récupérer le fichier source que je n'arrive pas à utiliser, je pense ne pas avoir compris le fonctionnement.

Donc le rôle de ce code est de générer le fichier source ?

Permet-il aussi de changer de fichier, par exemple prendre la semaine 27

J'avais utilisé la méthode présente sur la vidéo "Power Query - Créer une fonction paramétrée pour automatiser vos changements de sources." de Learnaccess

Aussi je me demande quelles sont les possibilités de conserver l'historique des semaines antérieures. Par exemple si actuellement j'ai généré les données de la semaine 26 et que je souhaite maintenant avoir ceux de la semaine 27 est-il possible de le faire sans écraser les données précédentes ?

Sur Excel c'est à partir de la fonctionnalité "charger dans" il me semble que l'on peut paramétrer la conservation des données précédentes, mais cette option n'est pas disponible dans Power BI alors peut être existe-t-il une autre méthode mutualisée.

Bonjour à tous de nouveau !

Il n'y a que la fonction "chemin source" pour récupérer le fichier source que je n'arrive pas à utiliser, je pense ne pas avoir compris le fonctionnement.

Donc le rôle de ce code est de générer le fichier source ?

Permet-il aussi de changer de fichier, par exemple prendre la semaine 27 ?

La finalité de ce code est de fournir à Power Query l'emplacement du classeur à lire. Si vous changez le nom et/ou l'emplacement, Power Query s'adaptera.

  • Concernant le "sujet autre" :

Power Query peut lire et traiter tous les classeurs d'un dossier dédié.
Vous pouvez aussi copier/coller (au besoin via VBA) le tableau final dans un classeur spécifique.

D'accord merci, je n'ai plus de questions je vous laisse tranquille.

Bonne soirée,

Bonjour à tous de nouveau !

Bien...

Je vous remercie de ce retour.

Rechercher des sujets similaires à "power query repartition ligne suivant conditions"