XL 2019 Power Query - Calcul d'une différence entre la 1re et la dernière semaine

Flx1er

XLDnaute Occasionnel
Bonjour,

L'objectif de l'exemple est de pouvoir calculer pour chaque séjour ("Séj"), la différence entre la première et la dernière semaine pour "DepPh et DepCo.
Ci-dessous le mode opératoire :
  • En premier, j'ai identifié, la 1re et la dernière semaine.
  • Puis, j'ai effectué une fusion afin de développer les données "DepPh" et "DepCo"
  • Ensuite, création d'un tableau croisé
  • Ensuite, combiner les réquêtes de "Semaine Min" avec "Semaine Max"
  • A ce stade, je peux calculer la différence entre la 1re et la dernière semaine.
En pièce jointe, vous trouverez un exemple, qui fonctionne, mais je pense que cela est optimisable.
Pouvez-vous me dire si autre solution plus élégante, méthodique existe ?
En vous remerciant.
Cordialement,
 

Pièces jointes

  • Determiner 1re et dernière semaine.xlsx
    36.1 KB · Affichages: 8

JFL_XLD

XLDnaute Junior
Bonjour à tous,
Je vous propose de tester le code suivant :
Code:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    GroupBySéjour = Table.Group(Source, {"Séj"}, {{"tbl", each _, type table [Index=nullable number, Séj=nullable text, Semaine=nullable number, DepPh=nullable number, DepCo=nullable number]}}),
    AjtDeltaDepPh = Table.AddColumn(GroupBySéjour, "Delta DepPh", each Record.Field( Table.Min([tbl],"Semaine"),"DepPh")-Record.Field( Table.Max([tbl],"Semaine"),"DepPh")),
    AjtDeltaDepCo = Table.AddColumn(AjtDeltaDepPh, "Delta DepCo", each Record.Field( Table.Min([tbl],"Semaine"),"DepCo")-Record.Field( Table.Max([tbl],"Semaine"),"DepCo")),
    ColSupp = Table.RemoveColumns(AjtDeltaDepCo,{"tbl"})
in
    ColSupp
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Proposition avec un tri sur séjour et Semaine avant regroupement pour accélérer les choses.
Les lignes étant triées en ordre croissant, la première de chaque groupe devient la minimale du groupe et la dernière la maximale.
VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Tri bufferisé" = Table.Buffer( Table.Sort(Source,{{"Séj", Order.Ascending}, {"Semaine", Order.Ascending}})),
    #"Lignes groupées" = Table.Group(#"Tri bufferisé", {"Séj"}, {
                                {"Delta DepPh", each List.First([DepPh]) - List.Last([DepPh]), type number},
                                {"Delta DepCo", each List.First([DepCo]) - List.Last([DepCo]), type number}
                        })
in
    #"Lignes groupées"

Vos "semaine" sont sous forme de texte. Est-ce intentionnel ? (pour les tris c'est pas top)

Cordialement
 

Pièces jointes

  • Determiner 1re et dernière semaine.xlsx
    48.6 KB · Affichages: 11
Dernière édition:

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400