Pourquoi ma requête s’exécute-t-elle plusieurs fois ?
Lorsque vous actualisez vos données dans Power Query, de nombreuses actions ont lieu en arrière-plan pour tenter de vous offrir une expérience utilisateur fluide ainsi que pour exécuter vos requêtes de manière efficace et sécurisée. Toutefois, dans certains cas, vous pouvez remarquer que plusieurs demandes sont envoyées à la source de données par Power Query au moment de l’actualisation des données. Parfois, ces demandes sont normales, mais dans certains cas, elles peuvent être évitées.
Les sections suivantes décrivent quelques exemples où Power Query peut envoyer plusieurs demandes à une source de données.
Les connecteurs peuvent effectuer plusieurs appels à une source de données pour diverses raisons, notamment les métadonnées, la mise en cache des résultats, la pagination, etc. Ce comportement est normal et est conçu pour fonctionner ainsi.
Plusieurs demandes peuvent être envoyées à la même source de données si plusieurs requêtes extraient des informations de cette source de données. Ces demandes peuvent avoir lieu même dans le cas où une seule requête référence la source de données. Si une ou plusieurs autres requêtes font référence à cette requête, chaque requête - ainsi que toutes les requêtes dont elle dépend - est évaluée indépendamment.
Dans un environnement Desktop, une seule actualisation de toutes les tables du modèle de données est exécutée à l’aide d’un seul cache partagé. La mise en cache peut réduire la probabilité que plusieurs demandes soient envoyées à la même source de données, car une requête peut tirer parti du fait qu’une même demande a déjà été exécutée et mise en cache pour une autre requête. Même dans ce cas, vous pouvez recevoir plusieurs demandes :
- La source de données n'est pas mise en cache (par exemple, les fichiers CSV locaux).
- La demande adressée à la source de données est différente d'une demande qui a déjà été mise en cache en raison d'opérations en aval (qui peuvent modifier le pliage).
- Le cache est trop petit (ce qui est relativement peu probable).
- Les requêtes sont exécutées à peu près en même temps.
Dans un environnement en nuage, chaque requête est actualisée à l'aide de son propre cache. Une requête ne peut donc pas bénéficier du fait que la même requête a déjà été mise en cache pour une autre requête.
Parfois, la couche de Query Folding de Power Query peut générer l’envoi de plusieurs demandes à une source de données, en fonction des opérations effectuées en aval. Dans ce cas, vous pouvez éviter plusieurs demandes en utilisant Table.Buffer
. Plus d’informations : Mettre votre table en mémoire tampon
Dans Power BI Desktop, Analysis Services (AS) actualise les données à l’aide de deux évaluations : l’une pour extraire le schéma (ce que fait Analysis Services en ne demandant aucune ligne), et l’autre pour extraire les données. Si le calcul du schéma sans ligne nécessite l’extraction des données, il est possible que des demandes dupliquées soient envoyées à la source de données.
La confidentialité des données effectue ses propres évaluations de chaque requête pour déterminer si les requêtes peuvent être exécutées ensemble de manière sécurisée. Cette évaluation peut parfois entraîner l’envoi de plusieurs demandes à une source de données. Il existe un indice qui montre qu’une demande spécifique provient d’une analyse de confidentialité des données : elle a une condition « 1 000 premiers » (bien que toutes les sources de données ne prennent pas en charge une telle condition). En règle générale, la désactivation de la confidentialité des données (en supposant que cela soit acceptable) entraîne l’élimination des demandes des « 1 000 premiers » ou autres demandes liées à la confidentialité des données durant l’actualisation. Plus d’informations : Désactiver le pare-feu de confidentialité des données
À l’image des évaluations effectuées pour la confidentialité des données, l’Éditeur Power Query télécharge par défaut un aperçu des 1 000 premières lignes de chaque étape de requête. Le téléchargement de ces lignes permet de garantir que l’aperçu des données est prêt à s’afficher dès qu’une étape est sélectionnée, mais il peut également entraîner l’envoi de demandes dupliquées à la source de données. Plus d’informations : Désactiver l’analyse en arrière-plan
Diverses tâches en arrière-plan de l’Éditeur Power Query peuvent également déclencher l’envoi de demandes supplémentaires à la source de données (par exemple l’analyse du Query Folding, le profilage de colonne, l’actualisation automatique de l’aperçu des 1 000 lignes que Power Query déclenche après avoir chargé les résultats dans Excel, etc.).
Vous pouvez isoler des instances de plusieurs requêtes en désactivant des parties spécifiques du processus d’interrogation pour isoler l’origine des demandes dupliquées. Par exemple, si vous démarrez :
- Dans l’Éditeur Power Query
- Avec le pare-feu désactivé
- Avec l’analyse en arrière-plan désactivée
- Avec le profilage de colonne et toutes les autres tâches en arrière-plan désactivés
- [Facultatif] En effectuant un
Table.Buffer
Dans cet exemple, vous n’avez qu’une seule évaluation M qui se produit quand vous actualisez l’aperçu de l’Éditeur Power Query. Si des demandes dupliquées ont lieu à ce stade, elles sont inhérentes à la façon dont la requête est créée. Sinon, et si vous activez les paramètres décrits précédemment un par un, vous pouvez alors observer à quel moment les demandes en double commencent à se produire.
Les sections suivantes décrivent ces étapes plus en détail.
Vous n’avez pas besoin de vous reconnecter ou de recréer votre requête. Ouvrez simplement la requête à tester dans l’Éditeur Power Query. Vous pouvez dupliquer la requête dans l’éditeur si vous ne souhaitez pas interférer avec la requête existante.
L’étape suivante consiste à désactiver le pare-feu de confidentialité des données. Cette étape suppose que les fuites de données entre les sources ne sont pas pour vous un sujet d’inquiétude. Vous pouvez donc désactiver le pare-feu de confidentialité des données à l’aide de l’option Toujours ignorer les paramètres de niveau de confidentialité décrite dans Définir l’option de combinaison rapide au sein d’Excel, ou à l’aide du paramètre Ignorer les niveaux de confidentialité et potentiellement améliorer les performances décrit dans Niveaux de confidentialité Power BI Desktop au sein de Power BI Desktop.
Veillez à annuler cette étape avant de reprendre les tests normaux.
L’étape suivante consiste à désactiver l’analyse en arrière-plan. L’analyse en arrière-plan est contrôlée par le paramètre Autoriser le téléchargement de l’aperçu des données en arrière-plan décrit dans Désactiver l’actualisation en arrière-plan de Power Query pour Power BI. Vous pouvez également désactiver cette option dans Excel.
Si vous le souhaitez, vous pouvez également utiliser Table.Buffer
pour forcer la lecture de toutes les données, ce qui permet d’imiter ce qui se passe durant un chargement. Pour utiliser Table.Buffer
dans l’Éditeur Power Query :
Dans la barre de formule de l’Éditeur Power Query, sélectionnez le bouton fx pour ajouter une nouvelle étape.
Dans la barre de formule, indiquez le nom de l’étape précédente de la façon suivante : Table.Buffer(<nom de l’étape précédente à placer ici>). Par exemple, si l’étape précédente s’appelait
Source
, la barre de formule doit afficher= Source
. Modifiez l’étape dans la barre de formule pour spécifier= Table.Buffer(Source)
.
Plus d’informations : Table.Buffer
Pour exécuter le test, effectuez une actualisation dans l’Éditeur Power Query.