Cumul Progressif Power Query List.Generate

Bonjour à tous de nouveau !

Bien...

Je vous remercie de ce retour.

Bonjour à tous,

Mes données de travail fonctionne bien avec votre dernière version JFL mais je vous joins une version différente, car pour d'autres sujets la date sera souvent fin de mois,

En utilisant votre code pour le calcul mensuel, cela ne fonctionne plus et je ne sais où modifier celui ci,

Je joins le fichier avec l'onglet MENSUEL FIN DE MOIS,

Merci d'avance,

Cordialement,

Bonjour à tous !

L'utilisation de la fonction Date.StartOfMonth devrait retourner le résultat attendu.

Bonjour JFL,

Merci beaucoup pour ce retour de nouveau gagnant ,

Bonne journée à vous,

Cordialement,

Bonjour à tous de nouveau !

Parfait !

Je vous remercie de ce retour.

Bonjour à tous,

JFL, suite à une analyse plus poussée de votre proposition j'ai un petit souci, car lorsque l'on passe à l'année suivante (du 31/12 au 31/01), le montant mensuel n'est plus bon.

Je pense qu'il manque une condition sur l'année non ?,

Merci d'avance,

Cordialement,

Hello,

Une proposition avec uniquement de l'interface utilisateur, légèrement plus compréhensible

let
    Source = Excel.CurrentWorkbook(){[Name="TEST2"]}[Content],

    Type = Table.TransformColumnTypes(Source,{{"Date", type date}}),

    AddDateJoin = Table.AddColumn(Type, "Personnalisé", each Date.AddMonths([Date],-1)),

    Join = Table.NestedJoin(AddDateJoin, {"Personnalisé", "Raison1", "Libellés"}, AddDateJoin, {"Date", "Raison1", "Libellés"}, "Personnalisée ajoutée", JoinKind.LeftOuter),

    Expand = Table.ExpandTableColumn(Join, "Personnalisée ajoutée", {"Valeurs"}, {"Valeurs.1"}),

    Sort = Table.Sort(Expand,{{"Libellés", Order.Descending}, {"Raison1", Order.Ascending}, {"Date", Order.Ascending}}),

    Replace = Table.ReplaceValue(Sort,null,0,Replacer.ReplaceValue,{"Valeurs.1"}),

    AddValDef = Table.AddColumn(Replace, "Val def", each [Valeurs]-[Valeurs.1]),

    ColSupp = Table.RemoveColumns(AddValDef,{"Valeurs", "Personnalisé", "Valeurs.1"})
in
    ColSupp

@+

15test-baroute.xlsx (26.84 Ko)

Bonjour à tous de nouveau !

Version amendée pour tenir compte de la contrainte "changement d'année" :

Bonsoir à tous,

Merci pour vos retours, je vais tester tout cela

@Baroute78, merci pour cette proposition, j'avais déjà quelque chose de semblable, le hic c'est que je veux tester la fonction List.Generate qui est plus véloce,

Bonne soirée à vous,

Cordialement,

Bonjour à tous,

Après comparaison sur un gros volume de données de fichiers extérieurs, j'ai par le biais d'une autre méthode proposé par JFL sur un sujet similaire, une alternative plus rapide que List.Generate : pourriez vous m'expliquer pourquoi car j'ai lu que c' était la fonction la plus véloce ?

J'ai donc un test comparatif mensuel fin de mois pour vous monter la démarche, mais afin d'harmoniser mes pratiques, j'aimerai par la même méthode parvenir au test comparatif cumul fin de mois, mais j'ai des erreurs dans le calcul du cumul de celui-ci,

Merci d'avance pur votre aide,

Cordialement,

Bonsoir à tous !

1/ Vélocité
Elle n'est aucunement liée à la technicité mise en œuvre.
j'ai souvenir d'une vidéo démontrant que l'élimination des espaces surnuméraires se traitait (très nettement) mieux avec un simple Text.split associé à une List.RemoveNulls et Text.Combine qu'avec des fonctions sophistiquées comme List.Generate ou List.Accumulate.

2/ Erreurs du cumul
La deuxième méthode, utilisée pour calculer une valeur cumulée progressive, n'est absolument pas adaptée puisqu'elle fait référence à la valeur source précédente et non au cumul calculé précédent.

Bonsoir Jfl,

Merci pour votre retour, je me serais donc fourvoyer avec cette fonction !!! , que je n'utiliserai donc plus pour faire un calcul de cumul progressif,

Concernant la méthode non adaptée, auriez vous une idée pour une approche similaire ?,

Merci d'avance,

Cordialement,

Bonsoir,

[N'apporte aucune solution, juste un petit point de vue]

Travaillant très régulièrement avec des bases de données d'une quarantaine de milliers de lignes, sur plus d'une centaine de colonnes, j'ai pu constater que bien souvent, le plus simple, c'était le plus rapide...
[Souvenir d'une comparaison entre un List.Contains, et une simple jointure]

Et que 5 lignes de codes, n'était pas forcément plus rapide que 25.

Le code que t'a fourni Baroute, as-tu réellement testé sa vélocité // au code List.Generate?

Et je rejoins donc l'excellente analyse de JFL, sur "une fausse idée" de la technicité // vélocité

Private Joke, désolé si ce n'est pas ton équipe...

Bonjour à tous !

Concernant la méthode non adaptée, auriez vous une idée pour une approche similaire ?,

Je vous propose de tester l'utilisation de la fonction List.Buffer dans la méthode List.Generate.
Le code modifié des trois listes de l'étape "Cumul" est le suivant :

 listR1= List.Buffer(Tri[Raison1]),
 listDa= List.Buffer(Tri[Date]),
 listQa= List.Buffer(Tri[Valeurs]),

Bonjour à tous de nouveau !

Pour éviter l'éventuel impact coûteux lié à la manipulation de trois listes (voir méthode List.Generate), il est possible d'opérer à partir des records.
Et pour offrir une piste nouvelle, la fonction List.Accumulate est utilisée.

Avant de présenter cette proposition, pouvez-vous confirmer (je m'y perds.....), que la poursuite du calcul du cumul nécessite les conditions suivantes :

  1. le "Libellés" équivalent,
  2. la "Raison1" identique,
  3. et enfin que l'on soit dans la même année.

Bonsoir à tous,

@Cousinhub, oui je vois que parfois condensé un code requête n'est pas forcément synonyme de rapidité d'exécution.

Le code proposé par Baroute, que je remercie au passage, est plus rapide mais pas autant que je le souhaiterai,

Je reste donc ouvert à une proposition alternative avec List.Accumulate que je ne connais pas,

Je rejoins donc un fichier identique aux autres mais uniquement avec les deux méthodes List.Generate permettant le calcul cumulé & le calcul mensuel.

Je vous JFL ces trois conditions :

  1. le "Libellés" équivalent,
  2. la "Raison1" identique,
  3. et enfin que l'on soit dans la même année.

Merci d'avance pour votre aide,

Cordialement,

Bonsoir à tous !

Avez-vous testé la "bufférisation" préconisée ? Si oui, quel est votre ressenti ?

Ci-après la méthode List.Accumulate (avec des records) pour retourner le cumul progressif lié aux conditions définies.

Bonsoir JFL,

Oui j'avais testé avec la "bufférisation" des list mais ca n'était pas très concluant, le table .Buffer sur l'étape Tri était plus convaincante,

Merci pour votre proposition que je testerai sur le mon gros volume de données, et vous ferez un retour,

Par contre pourriez vous faire une proposition similaire avec la méthode List.Accumulate mais pour la partie mensuel FDM ? ,

Je vais tenter de comprendre cette nouvelle fonction !

Merci d'avance pour votre aide,

Cordialement,

Bonsoir à tous de nouveau !

Merci pour votre proposition que je testerai sur le mon gros volume de données, et vous ferez un retour,

Qu'entendez-vous par "gros volume de données" ?

Bonsoir jfl,

J'ai environ 1000 lignes par mois, et je remonte à N-1 jusqu'au mois de l'année en cours.

Au max cela ferait 24000 lignes de données.

Les données sont extraites à partir de fichiers extérieurs.

Cordialement,

Rechercher des sujets similaires à "cumul progressif power query list generate"