[Power Query] Célérité dans sélection de lignes

Bonjour,

Je dois effectuer une sélection de lignes d'une base de données, en fonction d'un Tableau "Filtre", contenant les valeurs à conserver.

Le fichier joint est très minimaliste (dans mon fichier réel, 46 000 lignes dans le T_Data, et une centaine de lignes dans T_Filtre)

J'ai effectué ce filtre avec 2 méthodes, et on peut voir déjà une grosse différence de temps entre la fonction "ListContains", et la "Fusion externe droite"

ListContains met 0.32 s, là où un Nested prend 0.06 (les calculs sont effectués par macro, si vous ne savez pas compléter le code, peu importe, je le ferai)

(Dans mon fichier réel, ça allait de 50 s à 20s)

Si vous connaissez quelque chose de plus rapide...

(Attention, ne pas prendre en compte le premier résultat, faussé car il n'y a pas encore de connexion effective lors de la première méthode - il faut appuyer une deuxième fois...)

Merci par avance

Hey,

Un premier essai, je mets les suivants dans le même post quand ils seront faits

let
    Source = Excel.CurrentWorkbook(){[Name="T_Data"]}[Content],
    ListPosition = Table.FromColumns({List.Select( Source[Données] , each List.PositionOf(T_Filtre[Filtre],_)<> -1)},{"Données"})
in
    ListPosition

@+

PS : je serais curieux d'avoir les résultats de tes tests avec un petit classement du plus rapide au moins rapide

Hi,

Pour le moment :

Nested : 0.06

ListContains et FromColumns, 0,30, sensiblement tout pareil

Hey,

Un autre essai

= List.Difference(Source[Données],List.ReplaceMatchingItems(Source[Données] , List.Zip({T_Filtre[Filtre] , List.Repeat({null},List.Count(T_Filtre[Filtre]))})))

Je doute que ce soit plus performant

@+

Bonjour à tous !

Pour ma part, et pour les filtres "simples", je privilégie la méthode "jointure".

Voir l'impact d'une "bufferisation" des sources ?!

Re-,

@Baroute, de l'ordre de 0.09 (sensiblement pareil), mais sort sous forme de liste (et mon tableau réel comporte une quarantaine de colonnes...info non fournie, mea culpa...)

@JFL, j'en suis arrivé au même postulat. Je vais tester en Bufferisant la table

Merci à vous deux, j'espère néanmoins que ce fil pourra servir, au moins pour ce type de traitement de données

Merci à toi pour ces tests !

De mon côté j'utilisais plutôt le ListContains donc je vais vite passer à la jointure

Re-,

En "Bufférisant", on arrive à pratiquement les mêmes durées (Nested, sans impact, les autres descendent de 0.30 à 0.07 ou 0.09)

Brest Bref, hormis la méthode List.Difference, on pourrait tout utiliser, mais je pense rester avec la jointure, chère à JFL

Je clos ce sujet, merci pour vos participations

Bonjour à tous de nouveau !

La recherche d'une vélocité optimale oblige à multiplier les pistes pour comparaison.

Et l'usage de fonctions techniques, notamment les List....., n'est pas un gage de célérité.

J'ai le souvenir d'une vidéo traitant de l'élimination des espaces superflus : Les fonctions List.Generate, List.Accumulate étaient très largement dépassées par un simple et "banal" fractionnement encapsulé par un combine.

Re-,

Je ne peux que plussoyer, j'ai déjà remarqué que les simples fonctions manuellement réalisées par un clic souris dans un ruban quelconque prenait moins de temps (même si cela peut générer plus d'étapes) que des fonctions condensées.

Merci encore, et bon appétit

Rechercher des sujets similaires à "power query celerite selection lignes"