[Power Query] Decompte selon critères

Bonjour,

Je bloque un peu sur l'utilisation de List.Accumulate (je pense que la solution doit provenir de là, mais????)

Dans le fichier exemple, j'ai 2 Tableaux :
- le 1er détermine les critères : en colonne 1, le nom convivial, en colonne 2, l'abréviation à rechercher
- le 2ème est le tableau de données : en colonne 1, une liste de noms, en colonne 2, une liste d'abréviations, séparées par des virgules.

Le but est d'arriver au résultat du tableau final. Cependant, les données du tableau des critères peuvent évoluer, c'est donc un choix déterminé.

Merci pour toute aide

Bonne journée

19decompte.xlsx (11.42 Ko)

PS, petite précision, le tableau de données peut atteindre quelques milliers de lignes... (mais je ne suis pas pressé...)

Bonjour à tous !

Une double proposition ?

Hi,

Si après ça, le PSG revient bredouille de Munich....

Comme tu dois t'en douter, la méthode "Basique" n'est pas trop la méthode recherchée, mais je vais quand même tester la vélocité // à la 2ème méthode

Bravo pour cette 2ème méthode.

Je teste en grandeur nature demain, et donnerait les rapports de vélocité.

Merci, et bonne soirée

Bonjour à tous de nouveau !

Je teste en grandeur nature demain, et donnerait les rapports de vélocité.

Merci merci !

Bonne note est prise du pronostic....

Bonjour à tous de nouveau !

Pour le plaisir, une méthode 3 basée sur la fonction Record.FromList :

let
  Source = Excel.CurrentWorkbook(){[Name = "T_Data"]}[Content], 
  Rec = let
      ttr =  Table.ToRows(Table.SelectColumns(T_Crit,{"Abrev","Région"})),
      tac = Table.AddColumn(Source,"Record",each 
              let
                lrm = List.ReplaceMatchingItems(Text.Split([Visites], ", "), ttr), 
                lt  = Record.FromList(List.Transform(lrm, each true), lrm)
              in lt)
      in tac,
  ExpandRec = Table.ExpandRecordColumn(Rec, "Record", T_Crit[Région])
in
  ExpandRec

Re-,

Un nouveau test demain...

Merci pour cette nouvelle solution (en plus, j'aime bien les Records....)

Bonne fin d'apm

Re-,

Une préférence entre Table.ToRows et List.Zip?

ttr =  Table.ToRows(Table.SelectColumns(T_Crit,{"Abrev","Région"}))

équivaut également à ceci :

ttr = List.Zip({T_Crit[Abrev],T_Crit[Région]})

Je ne sais pas si j'aurai le temps de tester la différence demain, mais un jour prochain, peut-être???

Bonne soirée

Bonsoir à tous !

Compte tenu de la structure de la table T_Crit, la fonction List-Zip me semble plus appropriée.

Liste vs Table......? A départager avec une volumétrie conséquente....

Bonsoir à tous de nouveau !

Sur la base d'une table de 2 champs et 800.000 lignes, sur mon ordinateur portable, la méthode Table.ToRows semble plus véloce.

Caractéristiques de mon ordinateur :

image

Bonjour

Bonjour à tous

Un essai en traditionnel...

18decompte-v1.xlsm (22.65 Ko)

Bye !

Bonjour,

@gmb, merci pour ta solution, mais VBA, je ne l'utilise quasiment plus (sauf pour mettre à jour mes requêtes PQ). Merci quand même

@JFL

Bon, en terme de vélocité, pas grande différence (faut dire qu'il y a déjà un gros traitement en amont, les données ressemblant à tout sauf à des données...)

Je pense opter pour la version "Records", une fois que j'aurai réglé le cas où la cellule "Visites" est vide (mais dont je ne peux pas supprimer la ligne) (Essais in progress)

Merci encore, et bon W-E

Edit, comme ceci, cela semble fonctionnel

...
lrm = if [Visites]<> null then List.ReplaceMatchingItems(Text.Split([Visites], ", "), ttr) else {""},
...

Bonjour à tous !

Je pense opter pour la version "Records", une fois que j'aurai réglé le cas où la cellule "Visites" est vide (mais dont je ne peux pas supprimer la ligne) (Essais in progress)

...
lrm = if [Visites]<> null then List.ReplaceMatchingItems(Text.Split([Visites], ", "), ttr) else {""},
...

Autre voie :

Intégrer un try/otherwise en sortie de la variable "tac"

 in try lt otherwise null

Merci pour le retour d'expérience !

Re-,

Effectivement, fonctionnel tout pareil, en plus concis

Merci

Rechercher des sujets similaires à "power query decompte criteres"