Accueil – Le CFO masqué › Forums › Power Query › Heure UTC – Heure d’été / Heure d’hiver
- Ce sujet contient 2 réponses, 2 participants et a été mis à jour pour la dernière fois par
Daniel, le il y a 2 années et 7 mois.
-
AuteurMessages
-
9 septembre 2022 à 0 h 54 min #107031
CopyCat
ParticipantBonjour,
Je travail sur une base de données permettant de suivre le production d’une machine.
L’automate de la machine remonte les données en UTC(+1). Elles sont ensuite compilées en UTC(0), choix du service IT centrale.
Avec Power Query je pense être capable de gérer les UTC, mais je ne sais pas comment gérer l’heure d’été (UTC(+1) +1 heure à 02:00 AM le dernier dimanche du mois de mars) et l’heure d’hiver(UTC(+1) à 02:00 AM le dernier dimanche du mois d’octobre.
Avez-vous une idée?9 septembre 2022 à 2 h 01 min #107032CopyCat
ParticipantJe réussi à faire le calcul avec Excel :
=SI(OU(Tableau1[@[Heure UTC(0)]]+TEMPS(1;0;0)<(DATE(ANNEE(A2);4;)-MOD(DATE(ANNEE(A2);4;)-1;7)+TEMPS(2;0;0));Tableau1[@[Heure UTC(0)]]+TEMPS(1;0;0)>DATE(ANNEE(A2);11;)-MOD(DATE(ANNEE(A2);11;)-1;7)+TEMPS(2;0;0));Tableau1[@[Heure UTC(0)]]+TEMPS(1;0;0);Tableau1[@[Heure UTC(0)]]+TEMPS(1;0;0)+TEMPS(1;0;0))En A2 j’ai une date en UTC (0)
11 septembre 2022 à 23 h 27 min #107109Daniel
ParticipantBonjour CopyCat, Le Forum,
En espérant avoir bien compris, dans l’exemple j’ai deux colonnes une pour les dates et l’autre pour les heures, que je rassemble après (une colonne en entrée devrait suffire).
– Création d’une colonne Année
– Grouper sur cette colonne en sélectionnant Toutes les lignes
– Heure d’été : dernier dimanche du mois de Mars, je suis parti du 01/03/ année de la ligne de donnée, puis je prends le dernier jour du mois de cette date et calcul du dernier dimanche (7-6+jour de la semaine du dernier jour du mois). A cette date, je rajoute le temps soit 2 heures du matin.
– Heure hiver : même principe que pour Heure été mais en partant du 01/10
Cette partie peut être simplifiée en partant directement du dernier jour du mois de Mars et d’OctobreDébut Requête
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau2″]}[Content],
ModificationTypeDonnées = Table.TransformColumnTypes(Source,{{“Date de relevé”, type date}, {“Heure UTC (0)”, type time}}),
DateHeureReleve = Table.AddColumn(ModificationTypeDonnées, “DateHeureRelevé”, each #datetime(Date.Year([Date de relevé]),Date.Month([Date de relevé]),Date.Day([Date de relevé]),Time.Hour([#”Heure UTC (0)”]),Time.Minute([#”Heure UTC (0)”]),Time.Second([#”Heure UTC (0)”]))),
AjoutColonneAnnee = Table.AddColumn(DateHeureReleve, “Année”, each Date.Year([Date de relevé]), Int64.Type),
GroupByAnnee = Table.Group(AjoutColonneAnnee , {“Année”}, {{“AnnéeCalendaire”, each _, type table [Date de relevé=nullable date, #”Heure UTC (0)”=nullable time, Année=number]}}),
DateDébutEte = Table.AddColumn(GroupByAnnee, “DébutEté”, each Table.AddColumn([AnnéeCalendaire],”DateDébutEté”,each Date.AddDays(Date.EndOfMonth(Date.FromText(“01/03/”&Text.From([Année]))), -(7-6+Date.DayOfWeek(Date.EndOfMonth(Date.FromText(“01/03/”&Text.From([Année])))))))),
DateFinEte = Table.AddColumn(DateDébutEte, “FinEté”, each Table.AddColumn([DébutEté],”DateFinEté”,each Date.AddDays(Date.EndOfMonth(Date.FromText(“01/10/”&Text.From([Année]))), -(7-6+Date.DayOfWeek(Date.EndOfMonth(Date.FromText(“01/10/”&Text.From([Année])))))),type date)),
DateTimeDebutEte= Table.AddColumn(DateFinEte, “DateHeureEté”, each Table.AddColumn([FinEté], “DateHeureDebutEte”, each #datetime(Date.Year([DateDébutEté]),Date.Month([DateDébutEté]),Date.Day([DateDébutEté]),Time.Hour(Time.FromText(“02:00:00am”)),Time.Minute(Time.FromText(“02:00:00am”)),Time.Second(Time.FromText(“02:00:00am”))), type datetime)),
DateTimeFinEte = Table.AddColumn(DateTimeDebutEte, “DateHeureFinEté”, each Table.AddColumn([DateHeureEté], “DateHeureFinEte”, each #datetime(Date.Year([DateFinEté]),Date.Month([DateFinEté]),Date.Day([DateFinEté]),Time.Hour(Time.FromText(“03:00:00am”)),Time.Minute(Time.FromText(“03:00:00am”)),Time.Second(Time.FromText(“03:00:00am”))), type datetime)),
SuppressionColonnes = Table.SelectColumns(DateTimeFinEte,{“DateHeureFinEté”}),
DevelopperTableData = Table.ExpandTableColumn(SuppressionColonnes, “DateHeureFinEté”, {“DateHeureRelevé”, “DateHeureDebutEte”, “DateHeureFinEte”}, {“DateHeureRelevé”, “DateHeureDebutEte”, “DateHeureFinEte”}),
CalculHeuresUTC = Table.AddColumn(DevelopperTableData, “DateHeureRelevé UTC”, each if [DateHeureRelevé] >= [DateHeureDebutEte] and [DateHeureRelevé] <= [DateHeureFinEte] then [DateHeureRelevé]+#duration(0,2,0,0) else [DateHeureRelevé] + #duration(0,1,0,0)),
SuppressionAutresColonnes = Table.SelectColumns(CalculHeuresUTC,{“DateHeureRelevé UTC”, “DateHeureRelevé”}),
PermutationColonnes = Table.ReorderColumns(SuppressionAutresColonnes,{“DateHeureRelevé”, “DateHeureRelevé UTC”})
/*
Fin du mois Mars = Date.EndOfMonth(Date.FromText(“01/03/”&Text.From([Année])))
Jour de fin du mois Mars = Date.DayOfWeek(Date.EndOfMonth(Date.FromText(“01/03/”&Text.From([Année]))))
Calcul du dernier Dimanche = Date.AddDays(Date.EndOfMonth(Date.FromText(“01/03/”&Text.From([Année]))), -(7-6+Date.DayOfWeek(Date.EndOfMonth(Date.FromText(“01/03/”&Text.From([Année]))))))
7 : pour 7 jours dans la semaine
6 : chiffre correspond à dimanche
Date.DayOfWeek(Date.EndOfMonth(Date.FromText(“01/03/”&Text.From([Année])))) : Jour de la semaine du dernier jour du mois
HeureChgHeureEte = Time.FromText(“02:00:00am”)
DateTimeDebutEte= Table.AddColumn(DateDébutEté, “Début Date été”, each #datetime(Date.Year([DateDébutEté]),Date.Month([DateDébutEté]),Date.Day([DateDébutEté]),Time.Hour(Time.FromText(“02:00:00am”)),Time.Minute(Time.FromText(“02:00:00am”)),Time.Second(Time.FromText(“02:00:00am”))), type datetime)
*/
in
PermutationColonnesFin Requête
Cela te donnera au moins des pistes à étudier, cela reste à tester sur un grand nombre de lignes afin de voir la performance et de l’améliorer au besoin.
Cordialement
DanielAttachments:
You must be logged in to view attached files. -
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.