[Power Query] Equivalent d'un NB.SI

Bonjour,

Je beugue sur une syntaxe "condensée" afin d'ajouter une colonne de dénombrement selon un ID.

Dans le fichier joint, le TS "T_Data" (ici quelques colonnes seulement, mais dans le réel, une bonne trentaine), et à côté, le résultat voulu.

Je cherche à résoudre en 1 ligne, un peu à la manière :

= Table.Combine(Source,Table.Group(Source, {"ID"}, {{"Nb", each Table.RowCount(_), Int64.Type}})[Nb])

Afin de ne pas avoir à développer (Expand), par la suite..

Vous remerciant par avance

Bonne fin de journée

Bonsoir à tous !

Une proposition ?

let
    Source = Excel.CurrentWorkbook(){[Name="T_Data"]}[Content],
    Nbre = Table.AddColumn(Source,"NB",each let a=[ID] in List.Count(List.Select(Source[ID],each _=a)))
in
    Nbre

Re-,

Que dire?

Perfect, as usual

Merci beaucoup JFL, finalement, le Combine n'était pas la bonne piste

Bonne soirée

Bonsoir à tous de nouveau !

Je vous remercie de ce retour.

Cela étant, cette manière de procéder (calcul itératif) me semble moins véloce que la procédure :

  • Création d'un index
  • GroupBy sur le champ ID
  • Expand
  • Tri de l'index pour récupérer l'ordre initial
  • Suppression de l'index.

Re-,

Comme les bases sur lesquelles je travaille peuvent aller de plusieurs milliers de lignes avec une trentaine, quarantaine de colonnes, je vais faire l'essai.

Merci de nouveau pour cette indication

Bonne soirée

Edit, de plus, l'index n'est pas obligatoire, donc, à tester

Bonsoir à tous,

@Cousinhub, pourriez vous après vos test sur plusieurs milliers de lignes la solution que vous aurez retenu ?,

Merci d'avance,

Cordialement,

Hello,

Une autre proposition sur ta base du Table.Group. Concernant la vélocité faudrait tester sur plusieurs milliers de lignes

= Table.AddColumn(Source,"NB", each let a = Table.Group(Source, {"ID"}, {{"NB", each Table.RowCount(_)}}) in a[NB]{List.PositionOf(a[ID],[ID])} )

Version sans le "let a = ... in" qui permet moins de visibilité, on duplique juste le Table.Group

= Table.AddColumn(Source,"NB", each Table.Group(Source, {"ID"}, {{"NB", each Table.RowCount(_)}})[NB]{List.PositionOf(Table.Group(Source, {"ID"}, {{"NB", each Table.RowCount(_)}})[ID],[ID])} )

A voir ce que vous en dites

@+

Bonsoir à tous de nouveau !

@BAROUTE78 :

Processus itératif avec un Table.Group ?.......Sur plusieurs milliers de lignes ? J'ai comme un doute....

Hi,

Pour clore (du moins pour ce soir), demain je vais faire les essais...

Faut que je me remette à Excel 2016 (version utilisée dans mon nouveau "taf"), les macros de comptage de timer, et tout, et tout...

Merci à tous pour les interventions, et à demain...

Bonne soirée

Bonjour,

Voici donc le résultat des courses...

Ben, rien ne vaut les vielles recettes (GroupBy + Expand)...

En effet, une info que vous n'aviez pas, et que je pensais sans incidence sur le déroulé de l'étape...

En début de requête, je rapatrie des données sur le serveur interne. L'ordre de grandeur des données est d'à peu près 1.5 Mo.

Lorsque je déroule les différentes "formules", c'est comme si le rapatriement se faisait à chaque "itération"...

Avec la 1ère proposition de JFL, ça a duré 4 à 5 minutes, et un téléchargement de l'ordre de 150 Mo.

Avec la 1ère de Baroute, un peu plus long.

Avec la 2ème de Baroute, Touche "Suppr" pour annuler (j'étais déjà à plus d'1 Go de téléchargement...)

PS- ma mémoire me jouant parfois des tours, je peux me tromper entre les 2 de Baroute, mais toujours est-il que j'ai du annuler une actualisation...

Je précise que j'ai effectué ces test sous 2016.

Avec le GroupBy + Expand, quasi immédiat...

Bref, faut savoir rester simple, bien souvent.

Merci encore à tous les participants...

Bonne fin d'apm sous la tempête...

PS, dans le traitement "TCD" avec "Ajout des données au modèle de données", je me suis également aperçu qu'une valeur null ou vide était comptabilisée comme valeur distincte

image image

Pour y remédier, il faut mettre un filtre en "filtre", et dé-sélectionner les vides ou nulles

image

(Je sais que ce n'était pas l'objet de mon post, mais si ça peut servir....)

Bonjour à tous !

Excellent retour ! Merci.

Bonsoir à tous,

Merci pour ce retour très intéressant sur la volumétrie,

Cordialement,

Hello cousinhub,

Merci beaucoup pour ce retour très intéressant, vaut mieux parfois faire un peu plus d'étapes du coup

Bonne soirée à tous

Hi,

C'est en tout cas ce que je vais en tirer comme conclusion.

Et de plus, si mon travail devait être repris par un "néophyte", un code simplifié ne pourrait qu'être bénéfique pour la maintenance.

Et honnêtement, je n'arrive pas à m'expliquer ce perpétuel "téléchargement en cours" lors du déroulement de l'étape...

PQ et "Itération" aurait ses limites? Perhaps...

En tout cas, merci pour tes propositions également

Bonne soirée

Re-,

Et je viens d'y penser (prochain essai demain si j'ai le temps...), p'têt qu'un Buffer pourrait soulager le réseau???

A suivre

Rechercher des sujets similaires à "power query equivalent"