XL 2016 Power Query - Moyenne glissante

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

danielco

XLDnaute Barbatruc
Bonjour,

J'ai une colonne de dates et une colonne de valeurs. Est-il possible de créer une colonne de valeurs moyennes entre deux dates ? Je cherche à avoir une moyenne glissante.

Cordialement.

Daniel
 
Bonjour,

Voici une fonction en M qui vous donnera la moyenne des ventes entre deux dates (début et fin) pour une table 'T_Ventes' ayant une colonne 'Date' et une colonne 'Vente'

Code:
let MoyenneGlissante = (début as date,fin as date) => let       
        Lignes = Table.SelectRows(T_Ventes,  each [Date]>=début and [Date]<=fin),
        Resultat = List.Average(Lignes[Vente])
        in Resultat
in MoyenneGlissante

Sans plus d'explication sur le pourquoi du comment du pataquès difficile de faire plus.

bonne journée
 
Bonjour,

Voici une piste sur le lien ci-dessous :

Cordialement
Bonjour et merci.

C'est peut-être la solution mais j'avoue que je ne sais pas manipuler directement M. Je sais juste faire des colonnes perso ;-(
Bonjour,

Voici une fonction en M qui vous donnera la moyenne des ventes entre deux dates (début et fin) pour une table 'T_Ventes' ayant une colonne 'Date' et une colonne 'Vente'

Code:
let MoyenneGlissante = (début as date,fin as date) => let      
        Lignes = Table.SelectRows(T_Ventes,  each [Date]>=début and [Date]<=fin),
        Resultat = List.Average(Lignes[Vente])
        in Resultat
in MoyenneGlissante

Sans plus d'explication sur le pourquoi du comment du pataquès difficile de faire plus.

bonne journée
Bonjour @Roblochon ,
Je joins une copie d'écran de ce que je voudrais avec PQ : une moyenne glissant sur 7 jours :
Capture d’écran 2020-11-16 183442.png


Daniel
 
Bonsoir @ tous,
VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Valeur", Int64.Type}}),
    #"Index ajouté" = Table.AddIndexColumn(#"Type modifié", "Index", 1, 1, Int64.Type),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Index ajouté", "Moyenne Semaine", each List.Average(List.Range(Source[Valeur],[Index]-7,7))),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Personnalisée ajoutée",{"Moyenne Semaine"}),
    #"Type modifié1" = Table.TransformColumnTypes(#"Autres colonnes supprimées",{{"Moyenne Semaine", type number}}),
    #"Erreurs remplacées" = Table.ReplaceErrorValues(#"Type modifié1", {{"Moyenne Semaine", null}})
in
    #"Erreurs remplacées"
Voir PJ


Cordialement
 

Pièces jointes

Bonsoir danielco, le fil,

Votre formule en C7 va bien sauf quand on ajoute ou supprime des lignes.

Dans ce cas il faut utiliser :
Code:
=SIERREUR(MOYENNE(DECALER(B7;;;-7));"")
Ce devrait maintenant être simple sur Power Query.

A+
Bonjour @job75 ,
Merci de ta réponse. Effectivement (dans mon cas, il n'y a ni ajout ni suppression. Ces dates représentent le passé).

Daniel
 
Bonsoir @ tous,
VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Valeur", Int64.Type}}),
    #"Index ajouté" = Table.AddIndexColumn(#"Type modifié", "Index", 1, 1, Int64.Type),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Index ajouté", "Moyenne Semaine", each List.Average(List.Range(Source[Valeur],[Index]-7,7))),
    #"Autres colonnes supprimées" = Table.SelectColumns(#"Personnalisée ajoutée",{"Moyenne Semaine"}),
    #"Type modifié1" = Table.TransformColumnTypes(#"Autres colonnes supprimées",{{"Moyenne Semaine", type number}}),
    #"Erreurs remplacées" = Table.ReplaceErrorValues(#"Type modifié1", {{"Moyenne Semaine", null}})
in
    #"Erreurs remplacées"
Voir PJ


Cordialement
Oui ! Merci ! Si j'ai bien compris, "List.Range" est l'équivalent de DECALER d'Excel ? (cf. Job75).

Daniel
 
Re,
Oui ! Merci ! Si j'ai bien compris, "List.Range" est l'équivalent de DECALER d'Excel ? (cf. Job75).
Oui c'est bien cela

Merci à toi aussi. Je n'ai pas vu de différence avec la solution de R@chid.
Oui il y quelques différences,
= Table.AddIndexColumn(#"Type modifié", "Index", 1, 1, Int64.Type) au lieu de 0 afin de ne pas se mélanger les pinceaux lors de = Table.AddColumn(#"Index ajouté", "Moyenne Semaine", each List.Average(List.Range(Source[Valeur],[Index]-7,7))) tu n'as pas besoin à écrire -6, comme ça tu sais très bien que tu vas utiliser le nombre de lignes que tu as besoin de prendre en compte dans les deux cotés 7 et -7 et pas 7 et -6.
En plus, avec List.Average() tu évites de faire la somme avec List.Accumulate() et diviser par le nombre de lignes.

Cordialement
 
Merci à toi aussi. Je n'ai pas vu de différence avec la solution de R@chid.
Re,
R@chid a bien compris et expliqué la différence entre les 2 solutions, il y a sinon effectivement une petite ressemblance.
Sinon, je n'ai fait que reprendre 1 pour 1 la solution présentée dans la vidéo de mon lien du poste #3 sans chercher à modifier ce code.
La proposition à R@chid est effectivement celle à retenir car plus simple dans la compréhension notamment par la colonne d'indexation à partir de 1 et de la fonction List.Average

Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
543
Réponses
8
Affichages
494
  • Question Question
Microsoft 365 Mediane occupation
Réponses
6
Affichages
130
  • Résolu(e)
Microsoft 365 DATEDIF
Réponses
11
Affichages
193
Réponses
5
Affichages
150
Retour