1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| let
//Ci-dessous le code M pour créer une table de temps sur 24h avec précision à la seconde
//Si les secondes sont inutiles, il est possible de modifier le code pour être en granularité minute
//Pour une granularité en minute utilisé ci-dessous #duration(0,0,1,0) puisque les paramètres sont #duration(jour, heure, minute, seconde)
//Pensez aussi à supprimer les colonnes utilisant les secondes pour alléger la table (cf Commentaires en vert)
Source = List.Times(#time(0,0,0),24*60*60,#duration(0,0,0,1)),//Lister les heures de la journée par seconde
#"Convertir en Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),//...dans une table
#"COL HORAIRE" = Table.RenameColumns(#"Convertir en Table",{{"Column1", "Horaire"}}),//Colonne avec heure complète (heure, minute, seconde)
#"Typage en Heure" = Table.TransformColumnTypes(#"COL HORAIRE",{{"Horaire", type time}}),//...de type heure
#"Decoupe HEURE" = Table.AddColumn(#"Typage en Heure", "Heure", each Time.Hour([Horaire]), Int64.Type),//Extraire Heure seul de Heure complète
#"Decoupe Minute" = Table.AddColumn(#"Decoupe HEURE", "Minute", each Time.Minute([Horaire]), Int64.Type),//Extraire Minute seul
#"Decoupe Seconde" = Table.AddColumn(#"Decoupe Minute", "Seconde", each Time.Second([Horaire]), type number),//Extraire SECONDE seul
#"COL MATIN AM" = Table.AddColumn(#"Decoupe Seconde", "Matin/AM", each if [Heure] < 12 then "Matin" else "Après-midi"),//Colonne info matin ou AM
#"Type Modifié" = Table.TransformColumnTypes(#"COL MATIN AM",{{"Matin/AM", type text}}),//...de type texte
#"COL HEURE 2car" = Table.AddColumn(#"Type Modifié", "Prefix", each "0" & Text.From([Heure], "fr-FR"), type text),//Heure seule sur 2 caractères
#"Renommer Columns2" = Table.RenameColumns(#"COL HEURE 2car",{{"Prefix", "Heure 2car"}}),//Ajout du 0 en préfixe sur toutes les lignes
#"Derniers caractères extraits1" = Table.TransformColumns(#"Renommer Columns2", {{"Heure 2car", each Text.End(_, 2), type text}}),//Tronquer les deux derniers caractères sur toutes lignes
#"COL MINUTE 2car" = Table.AddColumn(#"Derniers caractères extraits1", "Prefix", each "0" & Text.From([Minute], "fr-FR"), type text),//idem que pour les Heure, pour les minutes
#"Derniers caractères extraits" = Table.TransformColumns(#"COL MINUTE 2car", {{"Heure 2car", each Text.End(_, 2), type text}}),
#"Renommer Columns3" = Table.RenameColumns(#"Derniers caractères extraits",{{"Prefix", "Minute 2car"}}),
#"Derniers caractères extraits2" = Table.TransformColumns(#"Renommer Columns3", {{"Minute 2car", each Text.End(_, 2), type text}}),
#"COL SECONDE 2car" = Table.AddColumn(#"Derniers caractères extraits2", "Prefix", each "0" & Text.From([Seconde], "fr-FR"), type text),//idem que pour les Heures, pour les SECONDE
#"Renommer Columns4" = Table.RenameColumns(#"COL SECONDE 2car",{{"Prefix", "Seconde 2car"}}),//Transfo SECONDE
#"Derniers caractères extraits3" = Table.TransformColumns(#"Renommer Columns4", {{"Seconde 2car", each Text.End(_, 2), type text}}),//FIN SECONDE
#"Ajout Index" = Table.AddIndexColumn(#"Derniers caractères extraits3", "Index", 0, 1),//Création d'un colonne d'index (clé)
#"Renommer Columns5" = Table.RenameColumns(#"Ajout Index",{{"Index", "TimeKey"}}),
#"Groupe 12h" = Table.AddColumn(#"Renommer Columns5", "Modulo", each Number.Mod([Heure], 12), Int64.Type),//Regrouper les heures par tranche de 12h (soit 2 groupes par jour)
#"Renommer Columns6" = Table.RenameColumns(#"Groupe 12h",{{"Modulo", "Heure / 12"}}),
#"Groupe 8h" = Table.AddColumn(#"Renommer Columns6", "Integer-Division", each Number.IntegerDivide([Heure], 8), Int64.Type),//Regrouper les heures par tranche de 8h (soit 3 groupes par jour)
#"Renommer Columns7" = Table.RenameColumns(#"Groupe 8h",{{"Integer-Division", "Heure / 8"}}),
#"Groupe 6h" = Table.AddColumn(#"Renommer Columns7", "Integer-Division", each Number.IntegerDivide([Heure], 6), Int64.Type),//Regrouper les heures par tranche de 6h (soit 4 groupes par jour)
#"Renommer Columns8" = Table.RenameColumns(#"Groupe 6h",{{"Integer-Division", "Heure / 6"}}),
#"Groupe 4h" = Table.AddColumn(#"Renommer Columns8", "Integer-Division", each Number.IntegerDivide([Heure], 4), Int64.Type),//Regrouper les heures par tranche de 4h (soit 6 groupes par jour)
#"Renommer Columns9" = Table.RenameColumns(#"Groupe 4h",{{"Integer-Division", "Heure / 4"}}),
#"Groupe 3h" = Table.AddColumn(#"Renommer Columns9", "Integer-Division", each Number.IntegerDivide([Heure], 3), Int64.Type),//Regrouper les heures par tranche de 3h (soit 8 groupes par jour)
#"Renommer Columns10" = Table.RenameColumns(#"Groupe 3h",{{"Integer-Division", "Heure / 3"}}),
#"Groupe 2h" = Table.AddColumn(#"Renommer Columns10", "Integer-Division", each Number.IntegerDivide([Heure], 2), Int64.Type),//Regrouper les heures par tranche de 2h (soit 12 groupes par jour)
#"Renommer Columns11" = Table.RenameColumns(#"Groupe 2h",{{"Integer-Division", "Heure / 2"}}),
#"Groupe 30mn" = Table.AddColumn(#"Renommer Columns11", "Integer-Division", each Number.IntegerDivide([Minute], 30), Int64.Type),//Regrouper les minutes par tranche de 30mn (soit 2 groupes par heure)
#"Multiplier par 30" = Table.TransformColumns(#"Groupe 30mn", {{"Integer-Division", each _ * 30, type number}}),
#"Renommer Columns12" = Table.RenameColumns(#"Multiplier par 30",{{"Integer-Division", "Minute / 30"}}),
#"Groupe 15mn" = Table.AddColumn(#"Renommer Columns12", "Integer-Division", each Number.IntegerDivide([Minute], 15), Int64.Type),//Regrouper les minutes par tranche de 15mn (soit 4 groupes par heure)
#"Multiplier par 15" = Table.TransformColumns(#"Groupe 15mn", {{"Integer-Division", each _ * 15, type number}}),
#"Renommer Columns13" = Table.RenameColumns(#"Multiplier par 15",{{"Integer-Division", "Minute / 15"}}),
#"Groupe 10mn" = Table.AddColumn(#"Renommer Columns13", "Integer-Division", each Number.IntegerDivide([Minute], 10), Int64.Type),//Regrouper les minutes par tranche de 10mn (soit 6 groupes par heure)
#"Multiplier par 10" = Table.TransformColumns(#"Groupe 10mn", {{"Integer-Division", each _ * 10, type number}}),
#"Renommer Columns14" = Table.RenameColumns(#"Multiplier par 10",{{"Integer-Division", "Minute / 10"}}),
//Ci-dessous deux méthodes de calcul pour savoir quelle équipe travaille quand
//Equipe v1 se base sur le principe Equipe 1 de 0h à 8h, puis Equipe 2 de 8h à 16h, et Equipe 3 de 16h à 24h
//Cette colonne peut donc être crée directement sur le formulaire de colonne conditionnelle
#"EQUIPE V1" = Table.AddColumn(#"Renommer Columns14", "Equipes v1", each if [Horaire] < #time(8, 0, 0) then "Equipe 1" else if [Horaire] < #time(16, 0, 0) then "Equipe 2" else if [Horaire] <= #time(23, 59, 59) then "Equipe 3" else "Problème"),
#"Type modifié" = Table.TransformColumnTypes(#"EQUIPE V1",{{"Equipes v1", type text}}),
//Equipe v2 se base sur des horaires de travail à cheval pour Equipe de nuit, Equipe de nuit = 22h-->6h, Equipe de jour = 6h-->14h, Equipe du soir = 14h-->22h
//Pour créer les conditions avec AND, il est nécessaire de saisir manuellement le AND dans l'Editeur Avancé de PQuery (donc impossible avec le formulaire de colonne conditionnelle)
#"EQUIPE v2" = Table.AddColumn(#"Type modifié", "Equipe v2", each if [Horaire] < #time(6, 0, 0) then "Equipe Nuit" else if [Horaire] >= #time(6, 0, 0) and [Horaire] < #time(14, 0, 0) then "Equipe Jour" else if [Horaire] >= #time(14, 0, 0) and [Horaire] < #time(22, 0, 0) then "Equipe Soir" else if [Horaire] >= #time(22, 0, 0) then "Equipe Nuit" else "Problème"),
#"Type modifié1" = Table.TransformColumnTypes(#"EQUIPE v2",{{"Equipe v2", type text}}),
//Création d'une colonne pour savoir si on est en horaire de nuit ou de jour (Possible de remplacer les textes par 0 ou 1)
#"HEURE de JOUR" = Table.AddColumn(#"Type modifié1", "Heures de JOUR", each if [Horaire] >= #time(7, 0, 0) and [Horaire] < #time(21, 0, 0) then 1 else 0),
#"HEURE de NUIT" = Table.AddColumn(#"HEURE de JOUR", "Heures de NUIT", each if [Horaire] < #time(7, 0, 0) or [Horaire] >= #time(21, 0, 0) then 1 else 0),
#"Type modifié2" = Table.TransformColumnTypes(#"HEURE de NUIT",{{"Heures de JOUR", Int64.Type}, {"Heures de NUIT", Int64.Type}})
in
#"Type modifié2" |
Partager