Power Query: agrégation et calculs

Sep 29 2020

Je travaille dans un rapport PowerBi, essayant de pré-traiter les données avec Power Query. Je ne peux pas résoudre ça: j'essaye de filtrer une table en regroupant les lignes selon un critère (lignes avec le même ID) tout en faisant un calcul sur les valeurs des lignes groupées (somme de Feature2) et en l'enregistrant par écraser la même colonne (ou ajouter cette valeur dans une nouvelle colonne). Je m'excuse pour mon anglais. En un mot:

Ce que j'ai c'est:

ID      Feature1    Feature2                                    
AB100   fs789s      10.3    
AB101   j35325      5.1 
AB102   jlkh234     24.4    
AB102   df87        10.4    
AB305   sfd         6.6 
BD200   gfgs233     5.0 
BD200   kj3244      4.9 
BD301   sdg33       3.1 

Ce que je veux, c'est (1):

ID      Feature1    Feature2                                        
AB100   fs789s      10.3    
AB101   j35325      5.1 
AB102   jlkh234     34.8    
AB305   sfd         6.6 
BD200   gfgs233     9.9 
BD301   sdg33       3.1 

ou (2):

ID      Feature1    Feature2    NewFeature                                  
AB100   fs789s      10.3        10.3        
AB101   j35325      5.1         5.1     
AB102   jlkh234     24.4        34.8        
AB102   df87        10.4        34.8        
AB305   sfd         6.6         6.6     
BD200   gfgs233     5.0         9.9     
BD200   kj3244      4.9         9.9     
BD301   sdg33       3.1         3.1 

J'ai cherché deux types de solutions sans succès:

I) Un filtre dans l'éditeur Power Query J'ai essayé d'appliquer une étape de lignes groupées dans l'éditeur Power Query:

= Table.Group(#"Filtered Rows", {"ID"}, {{"NewFeature", each List.Sum([Feature2]), type nullable number}})

mais cela supprime le reste des colonnes que je souhaite conserver. J'ai effectué quelques solutions de contournement avec Table.AddColumn, sans succès.

II) Une nouvelle table obtenue via une expression DAX

Table = GROUPBY(OriginalTable,OriginalTable[ID],"New Column",SUMX(CURRENTGROUP(),OriginalTable[Feature2]))

mais cela ne fonctionne pas: le reste des colonnes et les filtres appliqués sont perdus.

Aucune suggestion? Merci d'avance!

Réponses

1 MarcPincince Sep 29 2020 at 02:55

Il suffit de reprendre là où vous avez commencé, avec le regroupement après avoir filtré vos lignes, cela suffirait:

#"Grouped Rows" = Table.Group(#"Filtered Rows", {"ID"}, {{"Feature2", each List.Sum([Feature2]), type nullable number}, {"AllData", each _, type table [ID=nullable text, Feature1=nullable text, Feature2=nullable number]}}),
#"Expanded AllData" = Table.ExpandTableColumn(#"Grouped Rows", "AllData", {"Feature1"}, {"Feature1"}),
#"Reordered Columns" = Table.ReorderColumns(#"Expanded AllData",{"ID", "Feature1", "Feature2"})

Tout ce que j'ai fait, c'est mettre en place le groupement comme ceci:

Ce qui m'a donné ceci:

Ensuite, j'ai développé la colonne AllData, en sélectionnant uniquement Feature1 et en n'utilisant pas le nom de la colonne d'origine comme préfixe:

Ce qui m'a donné ceci:

Ensuite, j'ai fait glisser la colonne Feature1 à gauche de la colonne Feature2 pour obtenir ceci: