À propos de l’utilisation de DirectQuery dans Power BIAbout using DirectQuery in Power BI

Lorsque vous utilisez Power BI Desktop ou le service Power BI, vous pouvez vous connecter à toutes sortes de sources de données et établir ces connexions aux données de différentes façons.You can connect to all sorts of different data sources when using Power BI Desktop or the Power BI service, and make those data connections in different ways. Vous pouvez importer des données dans Power BI, ce qui est la méthode la plus courante pour obtenir des données ou vous connecter directement aux données dans le dépôt source d’origine, ce qu’on appelle une requête DirectQuery.You can import data to Power BI, which is the most common way to get data, or connect directly to data in the original source repository, which is known as DirectQuery. Cet article décrit les fonctionnalités de DirectQuery :This article describes DirectQuery capabilities:

  • Différentes options de connectivité pour DirectQueryDifferent connectivity options for DirectQuery
  • Conseils relatifs à l’opportunité d’utiliser DirectQuery plutôt qu’une importationGuidance for when you should consider using DirectQuery rather than import
  • Inconvénients de l’utilisation de DirectQueryDrawbacks of using DirectQuery
  • Bonnes pratiques d’utilisation de DirectQueryBest practices for using DirectQuery

Suivez les bonnes pratiques pour déterminer s’il est préférable d’utiliser l’importation ou DirectQuery :Follow best practices for using import versus DirectQuery:

  • Nous vous recommandons d’importer des données dans Power BI chaque fois que c’est possible.You should import data to Power BI wherever possible. L’importation tire parti du moteur de requête hautes performances de Power BI et vous offre une expérience très interactive et complète.Importing takes advantage of the high performance query engine of Power BI, and provides a highly interactive and fully featured experience.
  • Si vous ne pouvez pas atteindre vos objectifs en important des données, songez à utiliser DirectQuery.If your goals can't be met by importing data, consider using DirectQuery. Par exemple, lorsque les données changent fréquemment et que les rapports doivent refléter les données les plus récentes, DirectQuery est préférable.For example, if the data is changing frequently and reports must reflect the latest data, DirectQuery may be best. Cependant, l’utilisation de DirectQuery n’est possible que si la source de données sous-jacente est capable de fournir des requêtes interactives en moins de 5 secondes pour une requête d’agrégation type et qu’elle peut gérer la charge de requête ainsi générée.However, using DirectQuery is only feasible when the underlying data source can provide interactive queries, less than 5 seconds for the typical aggregate query, and can handle the query load that will be generated. De plus, la liste des limitations qui accompagnent l’utilisation de DirectQuery doit être examinée attentivement.Additionally, the list of limitations for the use of DirectQuery should be considered carefully.

L’ensemble de fonctionnalités offertes par Power BI pour l’importation et DirectQuery évolue au fil du temps.The set of capabilities offered by Power BI for import and DirectQuery evolve over time. Les changements apporteront une plus grande flexibilité lors de l’utilisation de données importées. L’importation pourra être utilisée dans davantage de cas, et certains inconvénients liés à l’utilisation de DirectQuery seront éliminés.Changes will include providing more flexibility when using imported data, such that import can be used in more cases and eliminating some of the drawbacks of using DirectQuery. Quelles que soient les améliorations, en cas d’utilisation de DirectQuery, les performances de la source de données sous-jacente restent une considération majeure.Regardless of improvements, when using DirectQuery, the performance of the underlying data source always remains a major consideration. Si cette source de données sous-jacente est lente, l’utilisation de DirectQuery demeure impossible.If that underlying data source is slow, using DirectQuery for that source will remain unfeasible.

Cet article a trait à DirectQuery avec Power BI, non à SQL Server Analysis Services.This article covers DirectQuery with Power BI, and not SQL Server Analysis Services. DirectQuery est également une fonctionnalité de SQL Server Analysis Services.DirectQuery is also a feature of SQL Server Analysis Services. De nombreuses informations fournies dans cet article s’appliquent à cette fonctionnalité.Many of the details described in this article apply to that feature. Il existe également des différences importantes.There are also important differences. Pour plus d’informations sur l’utilisation de DirectQuery avec SQL Server Analysis Services, consultez DirectQuery dans SQL Server 2016 Analysis Services.For information about using DirectQuery with SQL Server Analysis Services, see DirectQuery in SQL Server 2016 Analysis Services.

Si cet article se concentre sur le workflow recommandé pour DirectQuery, où le rapport est créé dans Power BI Desktop, il traite également de la connexion directe au service Power BI.This article focuses on the recommended workflow for DirectQuery, where the report is created in Power BI Desktop, but also covers connecting directly in the Power BI service.

Modes de connectivité Power BIPower BI connectivity modes

Power BI se connecte à un vaste éventail de sources de données, notamment :Power BI connects to a large number of varied data sources, encompassing:

  • services en ligne (Salesforce, Dynamics 365, etc.) ;Online services (Salesforce, Dynamics 365, others)
  • bases de données (SQL Server, Access, Amazon Redshift, etc.) ;Databases (SQL Server, Access, Amazon Redshift, others)
  • fichiers simples (Excel, JSON, etc.) ;Simple files (Excel, JSON, others)
  • autres sources de données (Spark, sites web, Microsoft Exchange, etc.).Other data sources (Spark, Web sites, Microsoft Exchange, others)

Pour ces sources, il est possible d’importer les données dans Power BI.For these sources, it's possible to import the data to Power BI. Pour certaines, il est également possible de se connecter à l’aide de DirectQuery.For some, it's also possible to connect using DirectQuery. Pour obtenir un récapitulatif des sources compatibles avec DirectQuery, consultez Sources de données prises en charge par DirectQuery.For a summary of the sources that support DirectQuery, see Data Sources supported by DirectQuery. D’autres sources seront prises en charge par DirectQuery dans le futur. L’accent sera mis principalement sur les sources susceptibles d’offrir de bonnes performances de requête interactive.More sources will be DirectQuery enabled in the future, focusing primarily on sources that can be expected to deliver good interactive query performance.

SQL Server Analysis Services constitue un cas spécial.SQL Server Analysis Services is a special case. Lors de la connexion à SQL Server Analysis Services, vous pouvez choisir d’importer les données ou d’utiliser une connexion active.When connecting to SQL Server Analysis Services, you can choose to import the data or use a live connection. L’utilisation d’une connexion active est similaire à l’utilisation de DirectQuery.Using a live connection is similar to DirectQuery. Aucune donnée n’est importée, et la source de données sous-jacente est toujours interrogée pour l’actualisation d’un visuel.No data is imported and the underlying data source is always queried to refresh a visual. Toutefois, elle s’en distingue également à maints égards, ce qui justifie l’utilisation de termes distincts (active et DirectQuery).A live connection is different in many other regards, so a different term, live connection versus DirectQuery, is used.

Trois options permettent la connexion aux données : importation, DirectQuery et Connexion active.These three options for connecting to data: import, DirectQuery, and live connection.

Connexions d’importationImport connections

Pour l’importation, quand vous utilisez la commande Obtenir des données dans Power BI Desktop pour vous connecter à une source de données telle que SQL Server, le comportement de cette connexion est le suivant :For import, when using Get Data in Power BI Desktop to connect to a data source like SQL Server, the behavior of that connection is as follows:

  • Au cours de l’exécution initiale de la commande Obtenir des données, les tables sélectionnées définissent chacune une requête qui retourne un jeu de données.During the initial Get Data experience, the set of tables selected each define a query that will return a set of data. Vous pouvez modifier ces requêtes avant le chargement des données, par exemple pour appliquer des filtres, agréger les données ou joindre des tables différentes.Those queries can be edited before loading the data, for example, to apply filters, or aggregate the data, or join different tables.
  • Lors du chargement, toutes les données définies par ces requêtes sont importées dans le cache Power BI.Upon load, all of the data defined by those queries will be imported into the Power BI cache.
  • Lors de la génération d’un visuel dans Power BI Desktop, les données importées sont interrogées.Upon building a visual within Power BI Desktop, the imported data will be queried. Le magasin Power BI assure la rapidité de la requête.The Power BI store ensures the query will be fast. Toutes les modifications apportées au visuel sont immédiatement répercutées.All changes to the visual are reflected immediately.
  • Les modifications apportées aux données sous-jacentes ne sont répercutées dans aucun visuel.Any changes to the underlying data aren't reflected in any visuals. Il est nécessaire de procéder à une actualisation pour réimporter les données.It's necessary to Refresh to reimport data.
  • Lors de la publication du rapport au format de fichier .pbix sur le service Power BI, un jeu de données est créé et chargé sur le service Power BI.Upon publishing the report as a .pbix file to the Power BI service, a dataset is created and uploaded to the Power BI service. Les données importées sont incluses dans ce jeu de données.The imported data is included with that dataset. Il est alors possible de planifier une actualisation de ces données, par exemple pour les réimporter quotidiennement.It's then possible to schedule refresh of that data, for example, to reimport the data every day. Selon l’emplacement de la source de données d’origine, il peut être nécessaire de configurer une passerelle de données locale.Depending upon the location of the original data source, it might be necessary to configure an on-premises data gateway.
  • Lors de l’ouverture d’un rapport existant dans le service Power BI ou de la création d’un rapport, les données importées sont de nouveau interrogées, ce qui garantit l’interactivité.When opening an existing report in the Power BI service, or authoring a new report, the imported data is queried again, ensuring interactivity.
  • Des visuels ou des pages de rapport entières peuvent être épinglés sous forme de vignettes de tableau de bord.Visuals, or entire report pages, can be pinned as dashboard tiles. Les vignettes sont actualisées automatiquement chaque fois que le jeu de données sous-jacent est actualisé.The tiles automatically refresh whenever the underlying dataset refreshes.

Connexions DirectQueryDirectQuery connections

Pour DirectQuery, quand vous utilisez la commande Obtenir des données dans Power BI Desktop pour vous connecter à une source de données, le comportement de cette connexion est le suivant :For DirectQuery, when using Get Data in Power BI Desktop to connect to a data source, the behavior of that connection is as follows:

  • Lors de l’exécution initiale de la commande Obtenir des données, la source est sélectionnée.During the initial Get Data experience, the source is selected. Pour des sources relationnelles, un ensemble de tables est sélectionné, chaque table définissant une requête qui retourne un jeu de données de façon logique.For relational sources, a set of tables are selected and each still define a query that logically returns a set of data. Pour des sources multidimensionnelles telles que SAP BW, seule la source est sélectionnée.For multidimensional sources, like SAP BW, only the source is selected.
  • Toutefois, au chargement, aucune donnée n’est importée dans le magasin Power BI.However, upon load, no data is imported into the Power BI store. Au lieu de cela, lors de la génération d’un visuel dans Power BI Desktop, des requêtes sont envoyées à la source de données sous-jacente pour extraire les données nécessaires.Instead, upon building a visual within Power BI Desktop, queries are sent to the underlying data source to retrieve the necessary data. Le temps d’actualisation du visuel varie selon les performances de la source de données sous-jacente.The time taken to refresh the visual depends on the performance of the underlying data source.
  • Les modifications apportées aux données sous-jacentes ne sont pas immédiatement répercutées dans tous les visuels existants.Any changes to the underlying data aren't immediately reflected in any existing visuals. Il est toujours nécessaire de procéder à une actualisation.It's still necessary to refresh. Les requêtes nécessaires sont renvoyées pour chaque visuel, et le visuel est mis à jour si nécessaire.The necessary queries are resent for each visual, and the visual is updated as necessary.
  • Lors de la publication du rapport sur le service Power BI, celui-ci génère à nouveau un jeu de données, tout comme pour une importation.Upon publishing the report to the Power BI service, it will again result in a dataset in the Power BI service, the same as for import. Toutefois, aucune donnée n’est incluse dans ce jeu de données.However, no data is included with that dataset.
  • Lors de l’ouverture ou de la création d’un rapport dans le service Power BI, la source de données sous-jacente est à nouveau interrogée pour extraire les données nécessaires.When opening an existing report in the Power BI service, or authoring a new one, the underlying data source is again queried to retrieve the necessary data. Selon l’emplacement de la source de données d’origine, il peut être nécessaire de configurer une passerelle de données locale comme c’est le cas pour le mode Importation si les données sont actualisées.Depending upon the location of the original data source, it might be necessary to configure an on-premises data gateway, as is needed for import mode if the data is refreshed.
  • Des visuels ou des pages de rapport entières peuvent être épinglés sous forme de vignettes de tableau de bord.Visuals, or entire report pages, can be pinned as Dashboard tiles. Pour garantir la rapidité de l’ouverture d’un tableau de bord, les vignettes sont actualisées automatiquement à intervalles réguliers, par exemple toutes les heures.To ensure that opening a dashboard is fast, the tiles are automatically refreshed on a schedule, for example, every hour. La fréquence de cette actualisation peut être contrôlée pour refléter la fréquence à laquelle les données changent et en fonction de l’importance d’afficher les données les plus récentes.The frequency of this refresh can be controlled, to reflect how frequently the data is changing, and how important it's to see the latest data. À l’ouverture d’un tableau de bord, les vignettes reflètent les données correspondant à l’heure de la dernière actualisation et pas nécessairement les dernières modifications apportées à la source de données sous-jacente.When opening a dashboard, the tiles reflect the data at the time of the last refresh, and not necessarily the latest changes made to the underlying source. Vous pouvez actualiser un tableau de bord ouvert pour vérifier qu’il est à jour.You can refresh an open dashboard to ensure it's current.

Connexions activesLive connections

Quand vous vous connectez à SQL Server Analysis Services, vous avez la possibilité d’importer les données à partir du modèle de données sélectionné ou d’établir une connexion active à celui-ci.When connecting to SQL Server Analysis Services, there's an option to either import data from or connect live to, the selected data model. Si vous utilisez l’importation, vous définissez une requête sur cette source SQL Server Analysis Services externe, et les données sont importées normalement.If you use import, you define a query against that external SQL Server Analysis Services source, and the data is imported as normal. Si vous utilisez une connexion active, aucune requête n’est définie, et le modèle externe tout entier apparaît dans la liste de champs.If you use connect live, there's no query defined, and the entire external model is shown in the field list.

La situation décrite dans le paragraphe précédent s’applique également à la connexion aux sources suivantes, à ceci près qu’il n’existe aucune option pour importer les données :The situation described in the previous paragraph applies to connecting to the following sources as well, except that there's no option to import the data:

  • Jeux de données Power BI, par exemple, quand vous vous connectez à un jeu de données Power BI précédemment créé et publié sur le service pour générer un nouveau rapportPower BI datasets, for example, when connecting to a Power BI dataset that has previously been created and published to the service, to author a new report over it.
  • Common Data ServicesCommon Data Services.

Le comportement des rapports sur SQL Server Analysis Services lors de la publication sur le service Power BI présente les similitudes suivantes avec les rapports DirectQuery :The behavior of reports over SQL Server Analysis Services, upon publishing to the Power BI service, is similar to DirectQuery reports in the following ways:

  • Lors de l’ouverture ou de la création d’un rapport dans le service Power BI, la source SQL Server Analysis Services sous-jacente est interrogée, ce qui nécessite éventuellement une passerelle de données locale.When opening an existing report in the Power BI service or authoring a new report, the underlying SQL Server Analysis Services source is queried, possibly requiring an on-premises data gateway.
  • Les vignettes de tableau de bord sont actualisées automatiquement à intervalles réguliers, par exemple toutes les heures.Dashboard tiles are automatically refreshed on a schedule, such as every hour.

Il existe également des différences importantes.There are also important differences. Par exemple, pour les connexions actives, l’identité de l’utilisateur qui ouvre le rapport est toujours transmise à la source SQL Server Analysis Services sous-jacente.For instance, for live connections, the identity of the user opening the report is always passed to the underlying SQL Server Analysis Services source.

Ces comparaisons étant faites, la suite de cet article porte exclusivement sur DirectQuery.With these comparisons out of the way, let's focus solely on DirectQuery for the rest of this article.

Quand DirectQuery est-il utile ?When is DirectQuery useful?

Le tableau suivant décrit les scénarios où une connexion avec DirectQuery peut être particulièrement utile,The following table describes scenarios where connecting with DirectQuery could be especially useful. notamment quand la conservation des données dans la source d’origine peut s’avérer avantageuse.It includes cases where leaving the data in the original source would be considered beneficial. La description inclut une discussion concernant la disponibilité du scénario spécifié dans Power BI.The description includes a discussion about whether the specified scenario is available in Power BI.

LimitationLimitation DescriptionDescription
Les données changent fréquemment et des rapports en quasi temps réel sont nécessairesData is changing frequently, and near real-time reporting is needed Les modèles avec des données importées peuvent être actualisés au maximum une fois par heure.Models with imported data can be refreshed at most once per hour. Si les données évoluent en permanence et qu’il est nécessaire que les rapports présentent les données les plus récentes, l’utilisation de l’importation avec une actualisation à intervalles réguliers peut ne pas répondre à ces besoins.Tf the data is continually changing, and it's necessary for reports to show the latest data, using import with scheduled refresh might not meet those needs. Vous pouvez envoyer les données en streaming directement à Power BI, même s’il existe des limites aux volumes de données pris en charge en pareil cas.You can stream data directly into Power BI, though there are limits on the data volumes supported for this case.

En revanche, l’utilisation de DirectQuery signifie que l’ouverture ou l’actualisation d’un rapport ou d’un tableau de bord affiche toujours les données les plus récentes dans la source.Using DirectQuery, by contrast, means that opening or refreshing a report or dashboard always shows the latest data in the source. Par ailleurs, les vignettes de tableau de bord peuvent être mises à jour plus fréquemment (jusqu’à toutes les 15 minutes).Additionally, the dashboard tiles can be updated more frequently, as often as every 15 minutes.
Les données sont très volumineusesData is very large Si les données sont très volumineuses, il est impossible de les importer toutes.If the data is very large, it wouldn't be feasible to import it all. À l’opposé, DirectQuery ne nécessite aucun transfert important de données, car celles-ci sont interrogées sur place.DirectQuery, by contrast, requires no large transfer of data, because it's queried in place.

Toutefois, des données volumineuses peuvent également impliquer un ralentissement excessif des performances des requêtes portant sur cette source sous-jacente comme expliqué dans la section Implications de l’utilisation de DirectQuery.However, large data might also imply that the performance of the queries against that underlying source is too slow, as discussed in Implications of using DirectQuery. Il n’est pas toujours nécessaire d’importer l’absolue totalité des données.You don't always have to import the full detailed data. Au lieu de cela, les données peuvent être pré-agrégées lors de l’importation.Instead, the data can be pre-aggregated during import. L’Éditeur de requête facilite précisément cette opération.The Query Editor makes it easy to pre-aggregate during import. À la limite, il serait possible d’importer exactement les données d’agrégation nécessaires pour chaque visuel.In the extreme, it would be possible to import exactly the aggregate data needed for each visual. Si DirectQuery constitue l’approche la plus simple pour des données volumineuses, l’importation de données agrégées peut offrir une solution si la source de données sous-jacente est trop lente.While DirectQuery is the simplest approach to large data, importing aggregate data might offer a solution if the underlying source is too slow.
Des règles de sécurité sont définies dans la source sous-jacenteSecurity rules are defined in the underlying source Quand les données sont importées, Power BI se connecte à la source de données en utilisant les informations d’identification de l’utilisateur actif (extraites de Power BI Desktop) ou des informations d’identification définies dans le cadre de la configuration de l’actualisation planifiée (extraites du service Power BI).When the data is imported, Power BI connects to the data source using the current user's credentials from Power BI Desktop, or the credentials defined as part of configuring scheduled refresh from the Power BI service. En cas de publication et de partage d’un tel rapport, veillez à le partager uniquement avec des utilisateurs autorisés à consulter les données concernées ou à définir une sécurité au niveau des lignes associée au jeu de données.In publishing and sharing such a report, be careful to only share with users allowed to see the same data, or to define row-level security as part of the dataset.

Dans l’idéal, étant donné que DirectQuery interroge toujours la source sous-jacente, cette configuration permettrait d’appliquer tout type de sécurité à cette source sous-jacente.Ideally, because DirectQuery always queries the underlying source, this configuration would allow any security in that underlying source to be applied. Toutefois, aujourd’hui, Power BI se connecte toujours à la source sous-jacente à l’aide des mêmes informations d’identification que celles utilisées pour l’importation.However, currently Power BI always connects to the underlying source using the same credentials as would be used for import.

Tant que Power BI ne permet pas que l’identité du consommateur du rapport soit transmise directement à la source sous-jacente, DirectQuery n’offre aucun avantage concernant la sécurité de la source de données.Until Power BI allows for the identity of the report consumer to pass through to the underlying source, DirectQuery offers no advantages for data source security.
Des restrictions de souveraineté des données s’appliquentData sovereignty restrictions apply Certaines organisations adoptent des stratégies relatives à la souveraineté des données, en vertu desquelles les données ne peuvent pas quitter le site de l’organisation.Some organizations have policies around data sovereignty, meaning that data can't leave the organization premises. Une solution basée sur l’importation occasionnerait clairement des problèmes.A solution based on import would clearly present issues. À l’opposé, avec DirectQuery, ces données restent dans la source sous-jacente.By contrast, with DirectQuery that data remains in the underlying source.

Toutefois, même avec DirectQuery, des caches de données au niveau du visuel sont conservés dans le service Power BI en raison de l’actualisation planifiée des vignettes.However, even with DirectQuery, some caches of data at the visual level are kept in the Power BI service because of scheduled refresh of tiles.
La source de données sous-jacente est une source OLAP contenant des mesuresUnderlying data source is an OLAP source, containing measures Si la source de données sous-jacente contient des mesures (comme c’est le cas dans SAP HANA ou SAP Business Warehouse), l’importation des données génère d’autres problèmes.If the underlying data source contains measures, such as SAP HANA or SAP Business Warehouse, then importing the data brings other issues. Cela signifie que les données importées présentent un niveau particulier d’agrégation, défini par la requête.It means that the data imported is at a particular level of aggregation, as defined by the query. Par exemple, mesurez TotalSales selon les critères Class, Year et City.For example, measures TotalSales by Class, Year, and City. Ensuite, si un visuel est créé, qui demande des données à un niveau supérieur d’agrégation (par exemple, TotalSales selon le critère Year), il agrège encore davantage la valeur agrégée.Then if a visual is built asking for data at a higher-level aggregate, such as TotalSales by Year, it's further aggregating the aggregate value. Cette agrégation convient pour des mesures additives (par exemple, Somme et Min), mais constitue un problème pour des mesures non additives (par exemple, Moyenne et DistinctCount).This aggregation is fine for additive measures, such as Sum and Min, but it's an issue for non-additive measures, such as Average, DistinctCount.

Pour faciliter l’obtention des données agrégées appropriées (en fonction des besoins du visuel) directement à partir de la source, il faudrait envoyer des requêtes par visuel comme c’est le cas dans DirectQuery.To make it easy to get the correct aggregate data, as needed for the particular visual, directly from the source, it would be necessary to send queries per visual, as in DirectQuery.

Lors de la connexion à SAP Business Warehouse (BW), le choix de DirectQuery permet ce traitement des mesures.When connecting to SAP Business Warehouse (BW), choosing DirectQuery allows for this treatment of measures. Pour plus d’informations sur SAP BW, consultez DirectQuery et SAP BW.For information about SAP BW, see DirectQuery and SAP BW.

Toutefois, actuellement, DirectQuery sur SAP HANA traite cela comme une source relationnelle et se comporte de façon similaire à une importation.However, currently DirectQuery over SAP HANA treats it the same as a relational source, and provides similar behavior to import. Cette approche est développée dans DirectQuery et SAP HANA.This approach is covered further in DirectQuery and SAP HANA.

En résumé, compte tenu des capacités actuelles de DirectQuery dans Power BI, il se révélera particulièrement avantageux dans les scénarios suivants :In summary, given the current capabilities of DirectQuery in Power BI, it offers the benefits in the following scenarios:

  • Les données changent fréquemment, et des rapports en quasi temps réel sont nécessaires.Data is changing frequently, and near real-time reporting is needed.
  • Les données gérées sont très volumineuses et ne nécessitent pas d’agrégation préalable.Handling very large data, without the need to pre-aggregate.
  • Des restrictions de souveraineté des données s’appliquent.Data sovereignty restrictions apply.
  • La source est multidimensionnelle et contient des mesures (par exemple, SAP BW).The source is a multidimensional source containing measures, such as SAP BW.

Les détails de la liste précédente ont trait à l’utilisation de Power BI seul.The details in the previous list relate to the use of Power BI alone. Vous avez cependant la possibilité d’utiliser un modèle SQL Server Analysis Services ou Azure Analysis Services externe pour importer des données,Instead, you could use an external SQL Server Analysis Services or Azure Analysis Services model to import data. puis d’utiliser Power BI pour la connexion à ce modèle.Then use Power BI to connect to that model. Si cette approche nécessite une configuration supplémentaire, elle offre davantage de flexibilité.While that approach would require additional configuration, it does provide greater flexibility. Elle permet d’importer des volumes de données beaucoup plus importants.Much larger volumes of data can be imported. Par ailleurs, elle n’impose aucune restriction quant à la fréquence d’actualisation des données.There's no restriction on how frequently the data can be refreshed.

Implications de l’utilisation de DirectQueryImplications of using DirectQuery

L’utilisation de DirectQuery peut avoir des conséquences négatives comme l’explique cette section.Use of DirectQuery does have potentially negative implications, as detailed in this section. Certaines de ces limitations peuvent varier légèrement selon la source utilisée.Some of those limitations are slightly different depending upon the exact source that is being used. Nous les abordons le cas échéant, et des articles distincts traitent des sources sensiblement différentes.We address limitations where applicable, and separate articles cover those sources that are substantially different.

Performances et charge sur la source sous-jacentePerformance and load on the underlying source

Lors de l’utilisation de DirectQuery, l’expérience globale dépend beaucoup des performances de la source de données sous-jacente.When using DirectQuery, the overall experience depends very much on the performance of the underlying data source. Si l’actualisation de chaque visuel, par exemple après la modification d’une valeur de segment, prend quelques secondes (généralement moins de 5 secondes), l’expérience peut être raisonnable.If refreshing each visual, for example, after changing a slicer value, takes a few seconds, usually less than 5 seconds, the experience would be reasonable. Elle peut cependant sembler lente par rapport à la réponse immédiate offerte par l’importation de données dans Power BI.The experience might feel sluggish compared to the immediate response when importing the data to Power BI. Si la lenteur de la source fait que l’actualisation d’un visuel prend plus que quelques dizaines de secondes, l’expérience devient très médiocre.If the slowness of the source causes individual visuals to take longer than tens of seconds, the experience becomes extremely poor. Les délais de requête peuvent même expirer.Queries may even time out.

Outre les performances de la source sous-jacente, il convient d’accorder une attention particulière à la charge placée sur celle-ci.Along with the performance of the underlying source, pay attention to the load placed upon the source. La charge a en effet un impact sur les performances.Load impacts performance. Chaque ouverture de rapport partagé par un utilisateur et chaque actualisation de vignette de tableau de bord ont pour effet d’envoyer au moins une requête par visuel à la source sous-jacente.Each user who opens a shared report, and each dashboard tile that refreshes, sends at least one query per visual to the underlying source. La source doit donc être en mesure de gérer une telle charge de requête tout en continuant à offrir des performances raisonnables.This fact requires that the source can handle such a query load, while still maintaining reasonable performance.

Implications en matière de sécurité lors de la combinaison de sources de donnéesSecurity implications when combining data sources

Il est possible d’utiliser plusieurs sources de données dans un modèle DirectQuery, tout comme lorsque vous importez des données, à l’aide de la fonctionnalité Modèles composites.It's possible to use multiple data sources in a DirectQuery model, just as when you import data, by using the Composite models feature. Si vous utilisez plusieurs sources de données, vous devez comprendre comment les données sont déplacées entre les sources de données sous-jacentes et les implications relatives à la sécurité qui s’ensuivent.When you use multiple data sources, it's important to understand how data is moved back and forth between the underlying data sources, and the security implications it brings.

Transformations de données limitéesLimited data transformations

De même, il existe des limitations aux transformations de données qui peuvent être appliquées dans l’Éditeur de requête.Similarly, there are limitations in the data transformations that can be applied within Query Editor. Avec des données importées, il est possible d’appliquer aisément un ensemble sophistiqué de transformations pour nettoyer les données et en modifier la forme avant de les utiliser pour créer des visuels, par exemple en analysant des documents JSON ou en faisant pivoter des données disposées en colonnes pour les disposer en lignes.With imported data, a sophisticated set of transformations can easily be applied to clean and reshape the data before using it to create visuals, such as parsing JSON documents, or pivoting data from a column to a row form. Ces transformations sont plus limitées dans DirectQuery.Those transformations are more limited in DirectQuery.

Tout d’abord, quand vous vous connectez à une source OLAP telle que SAP Business Warehouse, aucune transformation ne peut être définie et le modèle externe entier est extrait de la source.First, when connecting to an OLAP source like SAP Business Warehouse, no transformations can be defined at all, and the entire external model is taken from the source. Pour des sources relationnelles comme SQL Server, il est toujours possible de définir une série de transformations par requête, mais celles-ci sont limitées pour des raisons de performances.For relational sources, like SQL Server, it's still possible to define a set of transformations per query, but those transformations are limited for performance reasons.

Toutes les transformations de ce type doivent être appliquées à chaque requête adressée à la source sous-jacente, plutôt qu’une seule fois lors de l’actualisation des données, de sorte qu’elles sont limitées aux transformations qui peuvent raisonnablement être traduites dans une seule requête native.Any such transformation will need to be applied on every query to the underlying source, rather than once on data refresh, so they're limited to those transformations that can reasonably be translated into a single native query. Si vous utilisez une transformation trop complexe, vous recevez un message d’erreur indiquant que vous devez la supprimer ou que le modèle a basculé vers le mode Importation.If you use a transformation that is too complex, you receive an error that either it must be deleted or the model switched to import.

De plus, la requête qui résulte de la commande Obtenir des données ou de l’Éditeur de requête est utilisée dans une sous-sélection à l’intérieur des requêtes générées et envoyées pour extraire les données nécessaires pour un visuel.Additionally, the query that results from the Get Data dialog or Query Editor will be used in a subselect within the queries generated and sent to retrieve the necessary data for a visual. La requête définie dans l’Éditeur de requête doit être valide dans ce contexte.The query defined in Query Editor must be valid within this context. Cela signifie en particulier qu’il n’est pas possible d’utiliser une requête avec des expressions de table communes ou qui appelle des procédures stockées.In particular, it's not possible to use a query using Common Table Expressions, nor one that invokes Stored Procedures.

Limitations de la modélisationModeling limitations

Le terme modélisation dans ce contexte signifie affiner et enrichir les données brutes dans le cadre de la création d’un rapport qui les utilise.The term modeling in this context means the act of refining and enriching the raw data, as part of authoring a report using it. Voici quelques exemples :Examples include:

  • définition de relations entre des tables ;Defining relationships between tables
  • ajout de calculs (colonnes calculées et mesures) ;Adding new calculations (calculated columns and measures)
  • changement de nom et masquage de colonnes et de mesures ;Renaming and hiding columns and measures
  • définition de hiérarchies ;Defining hierarchies
  • définition de la mise en forme, de la synthèse par défaut et de l’ordre de tri pour une colonne ;Defining the formatting, default summarization and sort order for a column
  • regroupement ou clustering de valeurs.Grouping or clustering values

Quand vous utilisez DirectQuery, bon nombre de ces enrichissements de modèle peuvent être apportés, et le principe subsiste certainement que les données brutes sont enrichies pour améliorer leur consommation ultérieure.When using DirectQuery, many of these model enrichments can still be made, and certainly there's still the principle that the raw data is being enriched, so as to improve later consumption. Or, certaines fonctionnalités de modélisation ne sont pas disponibles ou sont limitées lors de l’utilisation de DirectQuery.However, there are some modeling capabilities that aren't available, or are limited, when using DirectQuery. Les limitations sont généralement appliquées pour éviter des problèmes de performances.The limitations are generally applied to avoid performance issues. Les limitations communes à toutes les sources DirectQuery sont listées ici.The set of limitations that are common to all DirectQuery sources are listed here. Des limitations supplémentaires peuvent s’appliquer à certaines sources comme décrit dans les articles présentés à la section Étapes suivantes.Additional limitations might apply to individual sources, as described in Next steps.

  • Aucune hiérarchie de dates intégrée : quand vous importez des données, une hiérarchie de dates intégrée est disponible pour chaque colonne de date/heure présente.No built-in date hierarchy: When importing data, every date/datetime column will also have a built-in date hierarchy available by default. Par exemple, lors de l’importation d’une table de commandes client incluant une colonne OrderDate, en cas d’utilisation d’OrderDate dans un visuel, il est possible de choisir le niveau approprié (année, mois, jour) à utiliser.For example, if importing a table of sales orders including a column OrderDate, then upon using OrderDate in a visual, it will be possible to choose the appropriate level (year, month, day) to use. Cette hiérarchie de dates intégrée n’est pas disponible si vous utilisez DirectQuery.This built-in date hierarchy isn't available when using DirectQuery. Si une table Date est disponible dans la source sous-jacente (comme c’est le cas dans de nombreux entrepôts de données), les fonctions Time Intelligence de DAX peuvent être utilisées normalement.If there's a Date table available in the underlying source, as is common in many data warehouses, then the DAX Time Intelligence functions can be used as normal.
  • Prise en charge de la date/heure seulement avec une précision à la seconde : Quand vous utilisez des colonnes de type heure dans votre jeu de données, Power BI émet des requêtes vers la source sous-jacente seulement à un niveau de détail de l’ordre de la seconde.Date/time support only to second accuracy: When using time columns in your dataset, Power BI only issues queries to the underlying source to a level of detail of seconds. Les requêtes ne sont pas envoyées à la source DirectQuery pour les millisecondes.Queries aren't sent to the DirectQuery source for milliseconds. Vous devez donc supprimer cette partie des heures dans vos colonnes sources.Remove this part of the times from your source columns.
  • Limitations dans les colonnes calculées : les colonnes calculées doivent figurer à l’intérieur d’une ligne, car elles peuvent uniquement faire référence à des valeurs d’autres colonnes de la même table, sans possibilité d’utiliser des fonctions d’agrégation.Limitations in calculated columns: Calculated columns are limited to being intra-row, as in, they can only refer to values of other columns of the same table, without the use of any aggregate functions. De plus, les fonctions scalaires DAX autorisées telles que LEFT() se limitent à celles qui peuvent simplement être envoyées (push) à la source sous-jacente.Additionally, the DAX scalar functions, such as LEFT(), that are allowed, are limited to those functions that can be pushed to the underlying source. Les fonctions varient selon les capacités exactes de la source.The functions vary depending upon the exact capabilities of the source. Les fonctions non prises en charge ne sont pas proposées dans la saisie semi-automatique lors de la création du DAX pour une colonne calculée et leur utilisation entraînerait une erreur.Functions that aren't supported aren't listed in autocomplete when authoring the DAX for a calculated column, and would result in an error if used.
  • Aucune prise en charge pour les fonctions DAX parent-enfant : le mode DirectQuery ne permet pas d’utiliser la famille de fonctions DAX PATH(), qui servent généralement à gérer des structures parent-enfant (par exemple, un graphique de comptes ou des hiérarchies d’employés).No support for parent-child DAX functions: When in DirectQuery mode, it's not possible to use the family of DAX PATH() functions that generally handle Parent-Child structures, such as chart of accounts, or employee hierarchies.
  • Les tables calculées ne sont pas prises en charge : la possibilité de définir une table calculée à l’aide d’une expression DAX n’est pas prise en charge en mode DirectQuery.Calculated tables aren't supported: The ability to define a calculated table using a DAX expression isn't supported in DirectQuery mode.
  • Filtrage des relations : pour plus d’informations sur le filtrage bidirectionnel, consultez Filtrage croisé bidirectionnel.Relationship filtering: For information about bi-directional filtering, see Bidirectional cross-filtering. Ce livre blanc présente des exemples dans le contexte de SQL Server Analysis Services.This whitepaper presents examples in the context of SQL Server Analysis Services. Les points fondamentaux s’appliquent de la même manière à Power BI.The fundamental points apply equally to Power BI.
  • Absence de clustering : DirectQuery ne permet pas d’utiliser la fonctionnalité de clustering pour rechercher automatiquement les groupes.No Clustering: When using DirectQuery, it's not possible to use the Clustering capability, to automatically find groups.

Limitations des rapportsReporting limitations

Presque toutes les fonctionnalités de rapports sont prises en charge pour les modèles DirectQuery.Almost all reporting capabilities are supported for DirectQuery models. Par conséquent, tant que la source sous-jacente offre un niveau de performances approprié, le même ensemble de visualisations peut être utilisé.As such, so long as the underlying source offers a suitable level of performance, the same set of visualizations can be used. Il existe des limitations importantes de certaines des autres fonctionnalités offertes dans le service Power BI après la publication d’un rapport :There are some important limitations in some of the other capabilities offered in the Power BI service after a report is published:

  • Quick Insights n’est pas pris en charge : Power BI Quick Insights effectue des recherches rapides dans différents sous-ensembles de votre jeu de données tout en appliquant un jeu d’algorithmes sophistiqués pour détecter les informations potentiellement intéressantes.Quick Insights isn't supported: Power BI Quick Insights searches different subsets of your dataset while applying a set of sophisticated algorithms to discover potentially interesting insights. Étant donné la nécessité de performances très élevées des requêtes, cette fonctionnalité n’est pas disponible sur des jeux de données en mode DirectQuery.Given the need for very high performance queries, this capability isn't available on datasets using DirectQuery.
  • La fonctionnalité Questions et réponses n’est pas pris en charge : la fonctionnalité Questions et réponses de Power BI vous permet d’explorer vos données à l’aide de fonctionnalités intuitives du langage naturel et de recevoir des réponses sous la forme de graphiques et de diagrammes.Q&A isn't supported: Power BI Q&A enables you to explore your data using intuitive, natural language capabilities and receive answers in the form of charts and graphs. Toutefois, elle n’est actuellement pas prise en charge sur des jeux de données en mode DirectQuery.However, it's currently not supported on datasets using DirectQuery.
  • L’exploration dans Excel risque d’entraîner une dégradation des performances : vous pouvez explorer vos données en utilisant la fonctionnalité « Explorer dans Excel » sur un jeu de données.Using Explore in Excel will likely result in poorer performance: You can explore your data by using the Explore in Excel capability on a dataset. Cette approche permet de créer des tableaux croisés dynamiques et des graphiques croisés dynamiques dans Excel.This approach allows Pivot Tables and Pivot Charts to be created in Excel. Quand cette fonctionnalité est prise en charge sur des jeux de données en mode DirectQuery, les performances sont généralement plus lentes que celles de la création de visuels dans Power BI. Ainsi, si l’utilisation d’Excel est importante pour vos scénarios, vous devez en tenir compte avant de décider d’utiliser DirectQuery.While this capability is supported on datasets using DirectQuery, the performance is generally slower than creating visuals in Power BI, and therefore if the use of Excel is important for your scenarios, this fact should be accounted for in your decision to use DirectQuery.

SécuritéSecurity

Comme indiqué plus haut dans cet article, un rapport dans DirectQuery utilise toujours les mêmes informations d’identification fixes pour se connecter à la source de données sous-jacente, après publication sur le service Power BI.As discussed earlier in this article, a report in DirectQuery always uses the same fixed credentials to connect to the underlying data source, after it's published to the Power BI service. Ce comportement s’applique spécifiquement à DirectQuery et non aux connexions actives à SQL Server Analysis Services qui diffèrent à cet égard.This behavior applies to DirectQuery, not to live connections to SQL Server Analysis Services, which is different in this respect. Immédiatement après la publication d’un rapport DirectQuery, il est nécessaire de configurer les informations d’identification de l’utilisateur qui seront utilisées.Immediately after publish of a DirectQuery report, it's necessary to configure the credentials of the user that will be used. Tant que cela n’est pas fait, l’ouverture du rapport sur le service Power BI entraîne une erreur.Until you configure the credentials, opening the report on the Power BI service would result in an error.

Une fois les informations d’identification fournies, celles-ci sont utilisées quel que soit l’utilisateur qui ouvre le rapport.Once the user credentials are provided, then those credentials will be used whichever user who opens the report. À cet égard, cela se passe exactement comme pour les données importées.In this way, it's exactly like imported data. Chaque utilisateur voit les mêmes données sauf si une sécurité au niveau des lignes a été définie dans le cadre du rapport.Every user sees the same data, unless row-level security has been defined as part of the report. Il convient d’accorder la même attention au partage du rapport si des règles de sécurité sont définies dans la source sous-jacente.The same attention must be paid to sharing the report, if there are any security rules defined in the underlying source.

Comportement dans le service Power BIBehavior in the Power BI service

Cette section décrit le comportement d’un rapport DirectQuery dans le service Power BI pour expliquer l’importance de la charge appliquée à la source de données back-end, compte tenu du nombre d’utilisateurs avec lesquels le rapport et le tableau de bord sont partagés, de la complexité du rapport et du fait qu’une sécurité au niveau des lignes a été définie ou non dans le rapport.This section describes the behavior of a DirectQuery report in the Power BI service, to explain the degree of load that will be placed on the back-end data source, given the number of users that the report and dashboard will be shared with, the complexity of the report, and whether row-level security has been defined in the report.

Rapports : ouverture, interaction, modificationReports – opening, interacting with, editing

À l’ouverture d’un rapport, tous les visuels sur la page visible sont actualisés.When a report is opened, all the visuals on the currently visible page refresh. Chaque visuel nécessite généralement au moins une requête à la source de données sous-jacente.Each visual generally requires at least one query to the underlying data source. Certains visuels peuvent nécessiter plusieurs requêtes.Some visuals might require more than one query. Par exemple, un visuel peut présenter des valeurs agrégées de deux tables de faits différentes ou contenir une mesure plus complexe ou des totaux d’une mesure non additive telle que Count Distinct.For example, a visual might show aggregate values from two different fact tables, or contain a more complex measure, or contain totals of a non-additive measure like Count Distinct. Le déplacement vers une nouvelle page entraîne l’actualisation de ces visuels.Moving to a new page refreshes those visuals. L’actualisation envoie un nouvel ensemble de requêtes à la source sous-jacente.Refreshing sends a new set of queries to the underlying source.

Chaque interaction utilisateur sur le rapport peut entraîner une actualisation des visuels.Every user interaction on the report might result in visuals being refreshed. Par exemple, la sélection d’une valeur différente sur un segment nécessite l’envoi d’un nouvel ensemble de requêtes pour actualiser tous les visuels concernés.For example, selecting a different value on a slicer requires sending a new set of queries to refresh all of the affected visuals. C’est également vrai en cas de clic sur un visuel pour opérer une sélection croisée d’autres visuels, ou de modification d’un filtre.The same is true for clicking on a visual to cross-highlight other visuals, or changing a filter.

De même, la modification d’un nouveau rapport exige l’envoi de requêtes à chaque étape de la production du visuel final.Similarly, editing a new report requires queries to be sent for each step on the path to produce the final visual.

Des résultats sont mis en cache.There's some caching of results. L’actualisation d’un visuel est instantanée si des résultats rigoureusement identiques ont été récemment obtenus.The refresh of a visual is instantaneous if the exact same results have recently been obtained. Si la sécurité au niveau des lignes n’est pas définie, ces caches ne sont pas partagés entre les utilisateurs.If row-level security isn't defined, such caches aren't shared across users.

Actualisation du tableau de bordDashboard Refresh

Il est possible d’épingler au tableau de bord des visuels ou des pages entières sous forme de vignettes.Individual visuals, or entire pages, can be pinned to dashboard as tiles. Les vignettes basées sur des jeux de données DirectQuery sont actualisées automatiquement selon une planification.Tiles based on DirectQuery datasets refresh automatically according to a schedule. Les vignettes envoient des requêtes à la source de données back-end.Tiles send queries to the back-end data source. Par défaut, les jeux de données sont actualisés toutes les heures. Cet intervalle peut cependant être défini dans le cadre du paramétrage des jeux de données entre une fois par semaine et toutes les 15 minutes.By default, datasets refresh every hour, but can be configured as part of dataset settings to be between weekly and every 15 minutes.

Si aucune sécurité au niveau des lignes n’est définie dans le modèle, chaque vignette est actualisée une seule fois et les résultats sont partagés entre tous les utilisateurs.If no row-level security is defined in the model, each tile is refreshed once, and the results shared across all users. Si une telle sécurité est définie, cela peut avoir un effet multiplicateur important.Otherwise, there can be a large multiplier effect. Chaque vignette nécessite l’envoi de requêtes distinctes à la source sous-jacente pour chaque utilisateur.Each tile requires separate queries per user to be sent to the underlying source.

Un tableau de bord comportant 10 vignettes, partagé avec 100 utilisateurs, créé sur un jeu de données à l’aide de DirectQuery avec une sécurité au niveau des lignes et configuré pour s’actualiser toutes les 15 minutes entraîne l’envoi d’au moins 1 000 requêtes toutes les 15 minutes à la source back-end.A dashboard with 10 tiles, shared with 100 users, created on a dataset using DirectQuery with row-level security, and configured to refresh every 15 minutes, would result in at least 1000 queries being sent every 15 minutes to the back-end source.

Soyez particulièrement attentif à l’utilisation de la sécurité au niveau des lignes et à la configuration de la planification de l’actualisation.Pay careful consideration to the use of row-level security, and the configuring of the refresh schedule.

Délais d’expirationTime-outs

Un délai d’expiration de quatre minutes est appliqué aux requêtes individuelles dans le service Power BI.A time-out of four minutes is applied to individual queries in the Power BI service. Les requêtes qui prennent plus de temps échouent.Queries taking longer than that will fail. Comme souligné précédemment, il est recommandé d’utiliser DirectQuery pour les sources qui offrent des performances de requêtes pratiquement interactives.As stressed earlier, we recommend that you use DirectQuery for sources that provide near interactive query performance. Cette limite vise à éviter les problèmes résultant de temps d’exécution trop longs.This limit is intended to prevent issues from overly long execution times.

Autres implicationsOther implications

Voici d’autres conséquences générales de l’utilisation de DirectQuery :Some other general implications of using DirectQuery are as follows:

  • Si les données évoluent, une actualisation est nécessaire pour que les données les plus récentes s’affichent : compte tenu de l’utilisation de caches, il n’est pas garanti que le visuel affiche toujours les données les plus récentes.If data is changing, it's necessary to refresh to ensure the latest data is shown: Given the use of caches, there's no guarantee that the visual is always showing the latest data. Par exemple, un visuel peut afficher les transactions du dernier jour.For example, a visual might show the transactions in the last day. Dans la mesure où un segment est modifié, il peut être actualisé pour présenter les transactions des deux derniers jours.Because of a slicer being changed, it might refresh to show the transactions for the last two days. Celles-ci peuvent inclure les transactions récentes, voire les nouvelles transactions.The transactions could include recent, newly arrived transactions. Le rétablissement du segment à sa valeur d’origine se traduit par le fait qu’il affiche à nouveau la valeur mise en cache obtenue précédemment.Returning the slicer to its original value would result in it again showing the cached value previously obtained.

    La sélection de l’option Actualiser a pour effet d’effacer tous les caches et d’actualiser tous les visuels sur la page pour afficher les données les plus récentes.Selecting Refresh clears any caches and refreshes all the visuals on the page to show the latest data.

  • Si les données changent, il n’existe aucune garantie de cohérence entre les visuels : des visuels différents, qu’ils figurent sur une même page ou sur des pages différentes, peuvent être actualisés à des moments différents.If data is changing, there's no guarantee of consistency between visuals: Different visuals, whether on the same page or on different pages, might be refreshed at different times. Si les données de la source sous-jacente changent, il n’existe aucune garantie que chaque visuel affiche des données correspondant précisément au même point dans le temps.If the data in the underlying source is changing, there's no guarantee that each visual shows the data at the exact same point of time. En effet, étant donné que plusieurs requêtes sont parfois nécessaires pour un seul visuel (par exemple, pour obtenir les détails et les totaux), la cohérence, y compris au sein d’un même visuel, n’est pas garantie.Indeed, given that sometimes more than one query is required for a single visual, for example, to obtain the details and the totals, then consistency even within a single visual isn't guaranteed. Garantir cette cohérence nécessiterait l’actualisation de tous les visuels chaque fois qu’un visuel est actualisé et l’utilisation de fonctionnalités coûteuses telles que l’isolement de capture instantanée dans la source de données sous-jacente.To guarantee this consistency would require the overhead of refreshing all visuals whenever any visual refreshed, in tandem with the use of costly features like Snapshot Isolation in the underlying data source.

    Ce problème peut être atténué dans une large mesure en sélectionnant à nouveau la commande Actualiser, qui a pour effet de mettre à jour tous les visuels de la page.This issue can be mitigated to a large extent by again selecting Refresh to refresh all of the visuals on the page. Même en utilisant le mode Importation, il existe un problème similaire de garantie de la cohérence en cas d’importation de données à partir de plusieurs tables.Even if using import mode, there's a similar problem of guaranteeing consistency while importing data from more than one table.

  • Une actualisation dans Power BI Desktop est nécessaire pour refléter les modifications des métadonnées : après la publication d’un rapport, la commande Actualiser a pour effet de mettre à jour les visuels dans le rapport.Refresh in Power BI Desktop is needed to reflect any metadata changes: After a report is published, Refresh will refresh the visuals in the report. Si le schéma de la source sous-jacente a changé, ces modifications ne sont pas automatiquement appliquées pour modifier les champs disponibles dans la liste de champs.If the schema of the underlying source has changed, then those changes aren't automatically applied to change the available fields in the field list. Si des tables ou des colonnes ont été supprimées de la source sous-jacente, cela peut entraîner un échec de requête lors de l’actualisation.If tables or columns have been removed from the underlying source, it might result in query failure upon refresh. L’ouverture du rapport dans Power BI Desktop et le choix de la commande Actualiser ont pour effet de mettre à jour les champs dans le modèle pour refléter les modifications.Opening the report in Power BI Desktop, and choosing Refresh updates the fields in the model to reflect the changes.

  • Limite d’un million de lignes retournées sur toute requête : une limite fixe d’un million de lignes s’applique au nombre de lignes qui peuvent être retournées dans une requête adressée à la source sous-jacente.Limit of 1 million rows returned on any query: There's a fixed limit of 1 million rows placed on the number of rows that can be returned in any single query to the underlying source. Cette limite n’a généralement pas de conséquences pratiques, et il est improbable que les visuels affichent autant de points.This limit generally has no practical implications, and visuals themselves aren't going to display that many points. Toutefois, la limite peut être atteinte dans les cas où Power BI n’optimise pas entièrement les requêtes envoyées et si des résultats intermédiaires demandés dépassent la limite.However, the limit can occur in cases where Power BI isn't fully optimizing the queries sent, and there's some intermediate result being requested that exceeds the limit. Cela peut également se produire lors de la création d’un visuel, en cherchant à obtenir un état final plus raisonnable.It can also occur while building a visual, on the path to a more reasonable final state. Par exemple, à défaut d’application d’un filtre, l’inclusion de Customer et de TotalSalesQuantity entraîne le dépassement de cette limite s’il y a plus de 1 million de clients.For example, including Customer and TotalSalesQuantity would hit this limit if there were more than 1 million customers, until some filter were applied.

    L’erreur retournée serait : « Le jeu de résultats d’une requête sur une source de données externe a dépassé la taille maximale autorisée de « 1 000 000 » lignes. »The error that would be returned would be: "The resultset of a query to external data source has exceeded the maximum allowed size of '1000000' rows."

  • Impossible de changer à partir de l’importation en mode DirectQuery : s’il est possible de basculer un modèle du mode DirectQuery au mode Importation, cela signifie que toutes les données nécessaires doivent être importées.Can't change from import to DirectQuery mode: While it's possible to switch a model from DirectQuery mode to use import mode, all the necessary data must be imported. Il est également impossible de rebasculer dans l’autre sens, principalement en raison des fonctionnalités non prises en charge en mode DirectQuery.It's also not possible to switch back, primarily because of the set of features not supported in DirectQuery mode. Les modèles DirectQuery sur des sources multidimensionnelles telles que SAP BW ne peuvent pas non plus être basculés du mode DirectQuery vers le mode Importation, en raison du traitement différent des mesures externes.DirectQuery models over multidimensional sources, like SAP BW, also can't be switched from DirectQuery to import, because of the different treatment of external measures.

DirectQuery dans le service Power BIDirectQuery in the Power BI service

Toutes les sources sont prises en charge à partir de Power BI Desktop.All sources are supported from Power BI Desktop. Certaines sources sont également accessibles directement à partir du service Power BI.Some sources are also available directly from within the Power BI service. Par exemple, il est possible qu’un utilisateur professionnel utilise Power BI pour se connecter à ses données dans Salesforce et obtienne immédiatement un tableau de bord, sans utiliser Power BI Desktop.For example, it's possible for a business user to use Power BI to connect to their data in Salesforce, and immediately get a dashboard, without use of Power BI Desktop.

Seules deux des sources compatibles avec DirectQuery sont disponibles directement dans le service :Only two of the DirectQuery enabled-sources are available directly in the service:

  • SparkSpark
  • Azure SQL Data WarehouseAzure SQL Data Warehouse

Toutefois, dès lors que vous utilisez DirectQuery sur ces deux sources, nous vous recommandons de commencer dans Power BI Desktop.However, we recommend that any use of DirectQuery over those two sources start within Power BI Desktop. En effet, lors de l’établissement initial de la connexion dans le service Power BI, de nombreuses limitations clés s’appliquent.The reason is that when the connection is initially made in the Power BI service, many key limitations will apply. Si le point de départ est facile (à partir du service Power BI), il existe des limitations à l’amélioration du rapport obtenu.While the start point was easy, starting in the Power BI service, there are limitations on enhancing the resulting report any further. Par exemple, il n’est pas possible, ensuite, de créer des calculs, d’utiliser de nombreuses fonctionnalités analytiques, voire d’actualiser les métadonnées pour refléter des modifications apportées au schéma sous-jacent.For example, it's not possible then to create any calculations, or use many analytical features, or even refresh the metadata to reflect any changes to the underlying schema.

Aide pour une utilisation fructueuse de DirectQueryGuidance for using DirectQuery successfully

Si vous prévoyez d’utiliser DirectQuery, cette section fournit des conseils d’ordre général sur la façon de l’utiliser correctement.If you're going to use DirectQuery, this section provides you with some high-level guidance on how to ensure success. L’aide fournie dans cette section est dérivée des conséquences de l’utilisation de DirectQuery décrites dans cet article.The guidance in this section is derived from the implications of using DirectQuery that have been described in this article.

Performances de la source de données back-endBack-end data source performance

Vérifiez que les visuels simples sont actualisés sous un délai raisonnable.Validate that simple visuals refresh in a reasonable time. Pour bénéficier d’une expérience interactive raisonnable, ce délai d’actualisation ne doit pas dépasser 5 secondes.A refresh time should be within 5 seconds to have a reasonable interactive experience. Si l’actualisation des visuels prend plus de 30 secondes, il est très probable que d’autres problèmes se produisent après la publication du rapport,If visuals are taking longer than 30 seconds, it's highly likely that further issues will occur following publication of the report. ce qui peut rendre la solution impraticable.These issues can make the solution unworkable.

Si les requêtes sont lentes, examinez celles envoyées à la source sous-jacente et la cause des problèmes de performances des requêtes.If queries are slow, examine the queries being sent to the underlying source, and the reason for the query performance. Cet article ne couvre pas toutes les bonnes pratiques d’optimisation de base de données sur l’ensemble des sources sous-jacentes potentielles.This article doesn't cover the wide range of database optimization best practices across the full set of potential underlying sources. Il porte sur les pratiques standard relatives aux bases de données, applicables à la plupart des situations :This article does cover the standard database practices that apply to most situations:

  • Les relations basées sur des colonnes d’entiers sont généralement plus performantes que les jointures de colonnes dont les types de données diffèrent.Relationships based on integer columns generally perform better than joins on columns of other data types.
  • Les index appropriés doivent être créés.The appropriate indexes should be created. La création d’index implique généralement d’utiliser des index de stockage en colonne dans les sources qui les prennent en charge, par exemple SQL Server.Index creation generally means the use of column store indexes in those sources that support them, for example, SQL Server.
  • Toutes les statistiques nécessaires dans la source doivent être mises à jour.Any necessary statistics in the source should be updated.

Aide à la conception d’un modèleModel Design Guidance

Quand vous définissez le modèle, tenez compte des recommandations suivantes :When defining the model, consider following this guidance:

  • Évitez les requêtes complexes dans l’Éditeur de requête.Avoid complex queries in Query Editor. L’Éditeur de requête convertit une requête complexe en une requête SQL unique.Query Editor translates a complex query into a single SQL query. Celle-ci apparaît dans la sous-sélection de chaque requête envoyée à cette table.The single query appears in the subselect of every query sent to that table. Si cette requête est complexe, elle peut entraîner des problèmes de performances à chaque requête envoyée.If that query is complex, it might result in performance issues on every query sent. La requête SQL réelle pour un ensemble d’étapes peut être obtenue en sélectionnant la dernière étape dans l’Éditeur de requête, puis en choisissant Afficher la requête native dans le menu contextuel.The actual SQL query for a set of steps can be obtained by selecting the last step in Query Editor, and choosing View Native Query from the context menu.

  • Veillez à utiliser des mesures simples.Keep measures simple. Au départ, nous recommandons de limiter les mesures à des agrégats simples.At least initially, we recommend limiting measures to simple aggregates. Ensuite, si celles-ci offrent des performances satisfaisantes, vous pouvez définir des mesures plus complexes en restant attentif aux performances de chacune d’elles.Then if the measures operate in a satisfactory manner, more complex measures can be defined, but paying attention to the performance for each.

  • Évitez les relations sur des colonnes calculées.Avoid relationships on calculated columns. Cette recommandation s’applique aux bases de données impliquant des jointures de plusieurs colonnes.This guidance is relevant to databases where you need to do multi-column joins. Actuellement, Power BI ne permet pas qu’une relation soit basée sur plusieurs colonnes comme la relation FK/PK.Power BI today doesn't allow a relationship to be based on multiple columns as the FK/PK. La solution de contournement courante consiste à concaténer les colonnes à l’aide d’une colonne calculée et à baser la jointure sur cette colonne.The common workaround is to concatenate the columns together using a calculated column, and base the join on that column. Si cette solution de contournement est raisonnable pour des données importées, en cas d’utilisation de DirectQuery, elle aboutit à une jointure sur une expression.While this workaround is reasonable for imported data, for DirectQuery, it results in a join on an expression. Ce résultat empêche généralement l’utilisation d’index et entraîne une dégradation des performances.That result commonly prevents use of any indexes, and leads to poor performance. La seule solution de contournement consiste à matérialiser réellement les colonnes multiples dans une colonne unique de la base de données sous-jacente.The only workaround is to actually materialize the multiple columns into a single column in the underlying database.

  • Évitez les relations sur des colonnes uniqueidentifier.Avoid relationships on uniqueidentifier columns. Power BI ne prend pas en charge un type de données uniqueidentifier en mode natif.Power BI doesn't natively support a datatype of uniqueidentifier. La définition d’une relation entre des colonnes de type uniqueidentifier entraîne une requête avec une jointure impliquant un cast.Defining a relationship between columns of type uniqueidentifier column results in a query with a join involving a cast. Là encore, cette approche aboutit généralement à une dégradation des performances.Again, this approach commonly leads to poor performance. Tant que ce cas n’est pas spécifiquement optimisé, la seule solution de contournement consiste à matérialiser des colonnes d’un autre type dans la base de données sous-jacente.Until this case is specifically optimized, the only workaround is to materialize columns of an alternative type in the underlying database.

  • Masquez la colonne sur des relations.Hide the to column on relationships. La colonne à sur les relations est généralement la clé primaire sur la table à.The to column on relationships is commonly the primary key on the to table. Cette colonne doit être masquée.That column should be hidden. Si elle est masquée, elle n’apparaît pas dans la liste de champs et ne peut pas être utilisée dans les visuels.If hidden, it doesn't appear in the field list and can't be used in visuals. Souvent, les colonnes sur lesquelles reposent des relations sont en fait des colonnes système, par exemple, des clés de substitution dans un entrepôt de données.Often the columns on which relationships are based are in fact system columns, for example, surrogate keys in a data warehouse. Il est conseillé de masquer ces colonnes dans tous les cas.It's good practice to hide such columns anyway. Si la colonne a du sens, introduisez une colonne calculée visible, comportant une expression simple d’égalité avec la clé primaire comme dans l’exemple suivant :If the column does have meaning, then introduce a calculated column that is visible, and that has a simple expression of being equal to the primary key, as in the following example:

        ProductKey_PK   (Destination of a relationship, hidden)
        ProductKey (= [ProductKey_PK],   visible)
        ProductName
        ...
    
  • Examinez l’ensemble des utilisations de colonnes calculées et modifications de type de données.Examine all uses of calculated columns and data type changes. L’utilisation de ces fonctionnalités n’est pas toujours néfaste.Use of these capabilities aren't necessarily harmful. Elle entraîne l’envoi à la source sous-jacente de requêtes contenant des expressions plutôt que de simples références à des colonnes.They do result in the queries sent to the underlying source containing expressions rather than simple references to columns. Ceci peut également empêcher l’utilisation d’index.That again might result in indexes not being used.

  • Évitez d’utiliser le filtrage croisé bidirectionnel sur des relations.Avoid use of the bi-directional cross filtering on relationships. L’utilisation du filtrage croisé bidirectionnel peut aboutir à des instructions de requête qui ne fonctionnent pas correctement.Use of bi-directional cross filtering can lead to query statements that don't perform well.

  • Expérimentez le paramètre d’Intégrité référentielle supposée.Experiment with setting Assume referential integrity. Le paramètre Intégrité référentielle supposée appliqué à des relations permet l’utilisation d’instructions INNER JOIN par les requêtes (plutôt que des instructions OUTER JOIN).The Assume Referential Integrity setting on relationships enables queries to use INNER JOIN statements rather than OUTER JOIN. Cette recommandation permet généralement d’améliorer les performances des requêtes, même si celles-ci dépendent des spécificités de la source de données.This guidance generally improves query performance, though it does depend on the specifics of the data source.

  • N’utilisez pas de filtrage de date relative dans l’Éditeur de requête.Don't use the relative data filtering in Query Editor. L’Éditeur de requête permet de définir un filtrage de date relative.It's possible to define relative date filtering in Query Editor. Par exemple, pour filtrer les lignes où la date se situe dans les 14 derniers jours.For example, to filter to the rows where the date is in the last 14 days.

    Filtrage des lignes sur les 14 derniers jours

    Toutefois, ce filtre est converti en un filtre basé sur la date fixe comme au moment de la création de la requête.However, this filter is translated into a filter based on the fixed date, as at the time the query was authored. Ce résultat peut être observé dans la vue de la requête native.This result can be seen from viewing the native query.

    Filtrage des lignes dans une requête SQL native

    Ce résultat n’est probablement pas celui que vous souhaitiez.This result is probably not what you wanted. Pour vous assurer que le filtre est appliqué en fonction de la date d’exécution du rapport, appliquez plutôt le filtre dans le rapport en tant que Filtre de rapport.To ensure the filter is applied based on the date at the time the report runs, instead apply the filter in the report as a Report Filter. Actuellement, cette approche consiste à créer une colonne calculée calculant le nombre de jours passés (en utilisant la fonction DAX DATE()), puis en utilisant cette colonne calculée dans un filtre.Currently, this approach would be done by creating a calculated column calculating the number of days ago, using the DAX DATE() function, and then using that calculated column in a filter.

Aide à la conception d’un rapportReport Design Guidance

Quand vous créez un rapport à l’aide d’une connexion DirectQuery, suivez les recommandations ci-après :When creating a report using a DirectQuery connection, follow this guidance:

  • Envisagez d’utiliser les options de réduction de la requête : Power BI propose des options de rapport permettant d’envoyer moins de requêtes et de désactiver certaines interactions qui aboutiraient à une mauvaise expérience dans le cas où les requêtes résultantes mettent longtemps à s’exécuter.Consider use of Query Reduction options: Power BI provides options in the report to send fewer queries, and to disable certain interactions that would result in a poor experience if the resulting queries take a long time to run. Pour accéder à ces options dans Power BI Desktop, cliquez sur Fichier > Options et paramètres > Options et sélectionnez Réduction des requêtes.To access these options in Power BI Desktop, go to File > Options and settings > Options and select Query reduction.

    Options de réduction des requêtes

    Cochez la case Réduction des requêtes pour désactiver la mise en surbrillance croisée sur l’ensemble du rapport.Checking box selections on the Query reduction let you disable cross-highlighting throughout your entire report. Vous pouvez également afficher un bouton Appliquer sur les segments ou sur les sélections de filtres.You can also show an Apply button to slicers or filter selections. Cette approche vous permet d’en sélectionner un grand nombre avant de les appliquer.This approach lets you then make many slicer and filter selections before applying them. Aucune requête n’est envoyée tant que vous n’avez pas sélectionné le bouton Appliquer sur le segment.No queries are sent until you select the Apply button on the slicer. Vos sélections peuvent ensuite être utilisées pour filtrer les données.Your selections can then be used to filter the data.

    Ces options s’appliquent à votre rapport quand vous interagissez avec dans Power BI Desktop.These options apply to your report while you interact with it in Power BI Desktop. Elles s’appliquent également quand les utilisateurs consomment le rapport dans le service Power BI.These options also apply when your users consume the report in the Power BI service.

  • Appliquer d’abord des filtres : appliquez toujours les filtres applicables au début de la création d’un visuel.Apply filters first: Always apply any applicable filters at the start of building a visual. Par exemple, au lieu de faire glisser vers TotalSalesAmount et ProductName, puis de filtrer sur une année en particulier, appliquez le filtre à Année dès le début.For example, rather than drag in TotalSalesAmount and ProductName, then filter to a particular year, apply the filter on Year at the very start. Chaque étape de création d’un visuel entraîne l’envoi d’une requête.Each step of building a visual sends a query. Même s’il est possible d’apporter une autre modification avant l’accomplissement de la première requête, cette approche laisse toujours peser une charge inutile sur la source sous-jacente.Although it's possible to then make another change before the first query has completed, this approach still leaves unnecessary load on the underlying source. L’application précoce de filtres rend généralement ces requêtes intermédiaires moins coûteuses.By applying filters early, it generally makes those intermediate queries less costly. Par ailleurs, la non-application précoce de filtres peut amener à atteindre la limite de 1 million de lignes.Also, failing to apply filters early can result in hitting the 1 million row limit.

  • Limitez le nombre de visuels sur une page : quand vous ouvrez une page ou modifiez un filtre ou un segment au niveau page, tous les visuels sur la page sont actualisés.Limit the number of visuals on a page: When you open a page or change a page level slicer or filter, all of the visuals on a page are refreshed. Il existe également une limite au nombre de requêtes envoyées en parallèle.There's also a limit on the number of queries that are sent in parallel. À mesure que le nombre de visuels augmente, certains d’entre eux sont actualisés en série, ce qui augmente le temps nécessaire à l’actualisation de la page entière.As the number of visuals increases, some of the visuals will be refreshed in a serial manner, increasing the time taken to refresh the entire page. C’est pourquoi il est recommandé de limiter le nombre de visuels sur une même page et d’avoir plutôt un nombre plus important de pages plus simples.For this reason, we recommend that you limit the number of visuals on a single page, and instead have more, simpler pages.

  • Envisagez de désactiver l’interaction entre les visuels : Par défaut, vous pouvez utiliser les visualisations d’une page de rapport pour filtrer et mettre en évidence les autres visualisations de la page. On parle alors de « filtrage croisé » et de « mise en évidence croisée ».Consider switching off interaction between visuals: By default, visualizations on a report page can be used to cross-filter and cross-highlight the other visualizations on the page. Par exemple, quand vous sélectionnez 1999 sur le graphique en secteurs, l’histogramme est sélectionné de façon croisée pour afficher les ventes par catégorie pour l’année 1999.For example, having selected 1999 on the pie chart, the column chart is cross highlighted to show the sales by category for 1999.

    Plusieurs visuels avec filtrage croisé et sélection croisée

    Le filtrage croisé et la sélection croisée dans DirectQuery nécessitent l’envoi des requêtes à la source sous-jacente.Cross-filtering and cross-highlighting in DirectQuery require queries to be submitted to the underlying source. L’interaction doit être désactivée si le temps nécessaire pour répondre aux sélections des utilisateurs est trop long.The interaction should be switched off if the time taken to respond to users' selections would be unreasonably long. Vous pouvez désactiver cette interactionYou can switch off this interaction. dans l’intégralité du rapport (comme décrit plus haut dans la section consacrée aux options de réduction des requêtes) ou au cas par cas.Switch off the interaction for either the entire report, as described earlier for query reduction options, or on a case-by-case basis. Pour plus d’informations, consultez Comment les visuels s’entrefiltrent dans un rapport Power BI.For more information, see How visuals cross-filter each other in a Power BI report.

Au-delà des suggestions ci-dessus, sachez que chacune des fonctions de création de rapports suivantes peut entraîner des problèmes de performances :In addition to the previous suggestions, each of the following reporting capabilities can cause performance issues:

  • Filtres de mesures : les visuels comprenant des mesures ou des agrégats de colonnes peuvent contenir des filtres dans ces mesures.Measure filters: Visuals containing measures, or aggregates of columns, can contain filters in those measures. Par exemple, le graphique ci-dessous présente la valeur SalesAmount par catégorie, mais inclut uniquement les catégories avec plus de 20 millions de ventes (20M).For example, the following graphic shows SalesAmount by Category, but only including those categories with more than 20M of sales.

    Visuel indiquant les mesures qui contiennent des filtres

    Cette approche entraîne l’envoi de deux requêtes à la source sous-jacente :This approach results in two queries being sent to the underlying source:

    • La première requête récupère les catégories correspondant à la condition (valeur SalesAmount supérieures à 20 millions).The first query retrieves the Categories meeting the condition, SalesAmount greater than 20 million.
    • La deuxième requête récupère ensuite les données nécessaires au visuel, notamment les catégories qui respectent la condition dans la clause WHERE.The second query then retrieves the necessary data for the visual, including the categories that met the condition in the WHERE clause.

    Cette approche est généralement efficace s’il existe des centaines, voire des milliers de catégories comme dans cet exemple.This approach generally works well if there are hundreds or thousands of categories, as in this example. Les performances peuvent se dégrader si le nombre de catégories est beaucoup plus élevé.Performance can degrade if the number of categories is much larger. La requête échoue s’il y a plus d’un million de catégories respectant la condition.The query fails for more than a million categories meeting the condition. La limite d’un million de lignes a été évoquée plus haut.The 1 million row limit was discussed earlier.

  • Filtres TopN : vous pouvez définir des filtres avancés pour filtrer uniquement les N premières (ou dernières) valeurs classées par une mesure.TopN filters: Advanced filters can be defined to filter on only the top or bottom N values ranked by some measure. Par exemple, vous pouvez définir des filtres incluant les 10 premières catégories du visuel précédent.For example, filters can include the top 10 categories in the previous visual. Encore une fois, cette approche entraîne l’envoi de deux requêtes à la source sous-jacente.This approach again results in two queries being sent to the underlying source. Toutefois, la première requête retourne toutes les catégories de la source sous-jacente, puis les catégories TopN sont déterminées sur la base des résultats retournés.However, the first query will return all categories from the underlying source, and then the TopN are determined based on the returned results. Selon la cardinalité de la colonne impliquée, cette approche peut entraîner des problèmes de performances ou des échecs de requête en raison de la limite de 1 million de lignes.Depending on the cardinality of the column involved, this approach can lead to performance issues or query failures because of the 1 million row limit.

  • Médiane : en règle générale, toute agrégation (comme Sum ou Count Distinct) est envoyée (push) à la source sous-jacente.Median: Generally, any aggregation, such as Sum or Count Distinct, is pushed to the underlying source. Toutefois, cela n’est pas vrai pour la valeur médiane, car cet agrégat n’est généralement pas pris en charge par la source sous-jacente.However, this fact isn't true for median, which this aggregate is generally not supported by the underlying source. Dans ce cas, les données détaillées sont extraites de la source sous-jacente, et la valeur médiane calculée à partir des résultats retournés.In such cases, the detail data is retrieved from the underlying source, and the median calculated from the returned results. Cette approche est raisonnable quand la valeur médiane doit être calculée sur un nombre relativement restreint de résultats.This approach is reasonable when the median is to be calculated over a relatively small number of results. Cependant, des problèmes de performances ou des échecs de requêtes (en raison de la limite de 1 million de lignes) se produisent si la cardinalité est importante.Performance issues or query failures because of the 1 million row limit occur if the cardinality is large. Par exemple, une valeur médiane de population d’un pays pourrait être raisonnable, tandis qu’une valeur médiane de prix de vente pourrait ne pas l’être.For example, Median Country Population might be reasonable, but Median Sales Price might not be.

  • Filtres de texte avancés (contient et autres) : Lors d’un filtrage sur une colonne de texte, un filtrage avancé permet d’utiliser des filtres tels que contient, commence par, etc.Advanced text filters (contains and similar): When filtering on a text column, the advanced filtering allows filters like contains and begins with and so on. Ces filtres peuvent certainement entraîner une dégradation des performances pour certaines sources de données.These filters can certainly result in degraded performance for some data sources. En particulier, le filtre par défaut contient ne doit pas être utilisé en cas de recherche d’une correspondance exacte.In particular, the default contains filter shouldn't be used if what is required is an exact match. Si les résultats peuvent être identiques, en fonction des données réelles, les performances peuvent être considérablement différentes en raison de l’utilisation d’index.Although the results might be the same, depending on the actual data, the performance might be drastically different because of indexes.

  • Multisélection de segments : par défaut, les segments n’autorisent qu’une seule sélection.Multi select slicers: By default, slicers only allow a single selection to be made. L’autorisation d’une multisélection dans les filtres peut entraîner des problèmes de performances, car l’utilisateur sélectionne un ensemble d’éléments dans le segment.Allowing multi-selection in filters can cause some performance issues, because the user selects a set of items in the slicer. Par exemple, si l’utilisateur sélectionne les 10 produits qui l’intéressent, chaque nouvelle sélection entraîne l’envoi de requêtes à la source.For example, if the user selects the 10 products of interest, each new selection results in queries being sent to the source. Même si l’utilisateur peut sélectionner l’élément suivant avant la fin de requête, cette approche entraîne une charge supplémentaire sur la source sous-jacente.Although the user can select the next item before the query completes, this approach results in extra load on the underlying source.

  • Envisagez de désactiver les totaux sur les visuels : par défaut, les tables et les matrices affichent les totaux et les sous-totaux.Consider switching off totals on visuals: By default, tables and matrices display totals and subtotals. Dans de nombreux cas, il faut envoyer des requêtes distinctes à la source sous-jacente pour obtenir les valeurs de ces totaux.In many cases, separate queries must be sent to the underlying source to obtain the values for such totals. Cela s’applique à chaque fois que l’agrégation DistinctCount est utilisée et dans tous les cas si vous utilisez DirectQuery sur SAP BW ou SAP HANA.This fact applies whenever using DistinctCount aggregation, or in all cases when using DirectQuery over SAP BW or SAP HANA. Ces totaux doivent être désactivés à l’aide du volet Format.Such totals should be switched off by using the Format pane.

Option Nombre maximal de connexions pour DirectQueryMaximum number of connections option for DirectQuery

Vous pouvez définir le nombre maximal de connexions que DirectQuery ouvre pour chaque source de données sous-jacente et ainsi contrôler le nombre de requêtes envoyées simultanément à chaque source de données.You can set the maximum number of connections DirectQuery opens for each underlying data source, which controls the number of queries concurrently sent to each data source.

Par défaut, DirectQuery ouvre au maximum 10 connexions simultanées.DirectQuery opens a default maximum number of 10 concurrent connections. Vous pouvez modifier ce nombre maximal pour le fichier actif dans Power BI Desktop.You can change the maximum number for the current file in Power BI Desktop. Sélectionnez Fichier > Options et paramètres > Options.Go to File > Options and Settings > Options. Dans la section Fichier actif du volet gauche, sélectionnez DirectQuery.In the Current File section in the left pane, select DirectQuery.

Définition du nombre maximal de connexions DirectQuery

Le paramètre est uniquement activé quand il existe au moins une source DirectQuery dans le rapport actuel.The setting is only enabled when there's at least one DirectQuery source in the current report. La valeur s’applique à toutes les sources DirectQuery et à toutes les nouvelles sources DirectQuery ajoutées au même rapport.The value applies to all DirectQuery sources, and to any new DirectQuery sources added to the same report.

L’augmentation de la valeur Nombre maximal de connexions par source de données permet l’envoi d’un nombre plus élevé de requêtes (jusqu’au nombre maximal spécifié) à la source de données sous-jacente.Increasing Maximum connections per data source ensures more queries, up to the maximum number specified, can be sent to the underlying data source. Cette approche s’avère utile quand de nombreux visuels figurent sur une seule page ou quand de nombreux utilisateurs accèdent à un rapport en même temps.This approach is useful when many visuals are on a single page, or many users access a report at the same time. Une fois le nombre maximal de connexions atteint, les requêtes sont mises en file d’attente jusqu’à ce qu’une connexion soit disponible.Once the maximum number of connections is reached, further queries are queued until a connection becomes available. L’augmentation de cette limite entraîne celle de la charge sur la source sous-jacente, si bien que le paramètre ne garantit pas une amélioration des performances globales.Increasing this limit does result in more load on the underlying source, so the setting isn't guaranteed to improve overall performance.

Une fois qu’un rapport est publié, le nombre maximal de requêtes simultanées envoyées à la source de données sous-jacente dépend également des limites fixées.Once a report is published, the maximum number of concurrent queries sent to the underlying data source also depend upon fixed limits. Ces limites dépendent de l’environnement cible dans lequel le rapport est publié.The limits depend on the target environment to which the report is published. Chaque environnement (par exemple Power BI, Power BI Premium ou Power BI Report Server) peut imposer des limites différentes.Different environments, such as Power BI, Power BI Premium, or Power BI Report Server, can impose different limits.

Diagnostic des problèmes de performancesDiagnosing performance issues

Cette section décrit comment diagnostiquer des problèmes de performances ou obtenir des informations plus détaillées pour permettre l’optimisation des rapports.This section describes how to diagnose performance issues, or how to get more detailed information to allow the reports to be optimized.

Il est recommandé de débuter un diagnostic de problèmes de performances dans Power BI Desktop plutôt que dans le service Power BI.We recommended that you start diagnosis of performance issues in Power BI Desktop, rather than in the Power BI service. Les problèmes de performances sont souvent liés aux performances de la source sous-jacente.Performance issues are often based on the performance of the underlying source. Vous pouvez identifier et diagnostiquer les problèmes plus facilement dans l’environnement plus isolé de Power BI Desktop.You can more easily identify and diagnose issues in the more isolated environment of Power BI Desktop. Cette approche élimine d’emblée certains composants tels que la passerelle Power BI.This approach initially eliminates certain components, such as the Power BI gateway. Si Power BI Desktop ne permet pas d’identifier les problèmes de performances, examinez les spécificités du rapport dans le service Power BI.If the performance issues are absent from Power BI Desktop, investigate the specifics of the report in the Power BI service. L’analyseur de performances est un outil utile pour identifier les problèmes tout au long de ce processus.The performance analyzer is a useful tool for identifying issues throughout this process.

De même, il est recommandé de commencer par tenter d’isoler les problèmes d’un visuel spécifique, plutôt que d’examiner un grand nombre de visuels figurant sur une page.Similarly, we recommend to first try to isolate any issues to an individual visual, rather than many visuals on a page.

Supposons que les étapes des paragraphes précédents de cette section ont été effectuées.Let's say the steps in the previous paragraphs in this section have been taken. Nous disposons à présent d’un seul visuel sur une page dans Power BI Desktop, qui reste lent.We now have a single visual on a page in Power BI Desktop that is still sluggish. Utilisez l’analyseur de performances pour déterminer les requêtes qui sont envoyées à la source sous-jacente par Power BI Desktop.Use the performance analyzer to determine the queries that Power BI Desktop sends to the underlying source. Il est également possible de voir les traces et les informations de diagnostic qui peuvent être émises par la source de données sous-jacente.It's also possible to view traces and diagnostic information that might be emitted by the underlying data source. Les traces peuvent également contenir des informations utiles sur la façon dont la requête a été exécutée et la manière de l’améliorer.Traces might also contain useful details of how the query was executed, and how it can be improved.

De plus, même en l’absence de telles traces de la source, il est possible de voir les requêtes envoyées par Power BI ainsi que leurs durées d’exécution comme décrit dans la section suivante.Further, even in the absence of such traces from the source, it's possible to view the queries sent by Power BI, along with their execution times, as described in the next section.

Détermination des requêtes émises par Power BI DesktopDetermining the queries sent by Power BI Desktop

Par défaut, Power BI Desktop journalise les événements survenant au cours d’une session donnée dans un fichier de trace nommé FlightRecorderCurrent.trc.By default, Power BI Desktop logs events during a given session to a trace file called FlightRecorderCurrent.trc.

Pour certaines sources DirectQuery, ce journal comprend toutes les requêtes envoyées à la source de données sous-jacente.For some DirectQuery sources, this log includes all queries sent to the underlying data source. Les autres sources DirectQuery seront incluses ultérieurement.The remaining DirectQuery sources will be included in the future. Les sources suivantes envoient des requêtes au journal :The following sources send queries to the log:

  • SQL ServerSQL Server
  • Azure SQL DatabaseAzure SQL Database
  • Azure SQL Data WarehouseAzure SQL Data warehouse
  • OracleOracle
  • TeradataTeradata
  • SAP HANASAP HANA

Le fichier de trace figure dans le dossier AppData de l’utilisateur actuel :The trace file can be found in the AppData folder for the current user:

<Utilisateur>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces<User>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces

Pour accéder à ce dossier, dans Power BI Desktop, sélectionnez Fichier > Options et paramètres > Options, puis Diagnostics.To get to this folder, in Power BI Desktop, select File > Options and settings > Options, and then select Diagnostics. La boîte de dialogue suivante s’affiche :The following dialog appears:

Lien pour ouvrir le dossier des traces

Quand vous sélectionnez Ouvrir le dossier des traces/vidages sur incident sous Options de diagnostic, le dossier suivant s’ouvre : <Utilisateur>\AppData\Local\Microsoft\Power BI Desktop\Traces.When you select Open crash dump/traces folder, under Diagnostic Options, the following folder opens: <User>\AppData\Local\Microsoft\Power BI Desktop\Traces.

En accédant au dossier parent de ce dossier, vous pouvez voir le dossier contenant AnalysisServicesWorkspaces, qui inclut un dossier d’espace de travail pour chaque instance ouverte de Power BI Desktop.Navigating to that folder's parent folder displays the folder containing AnalysisServicesWorkspaces, which will contain one workspace folder for every open instance of Power BI Desktop. Les noms de ces dossiers ont un nombre entier en suffixe, par exemple AnalysisServicesWorkspace2058279583.These folders are named with an integer suffix, such as AnalysisServicesWorkspace2058279583.

Ce dossier comprend un sous-dossier \Data,Inside that folder is a \Data folder. qui contient le fichier de trace FlightRecorderCurrent.trc pour la session Power BI active.It contains the trace file FlightRecorderCurrent.trc for the current Power BI session. Le dossier d’espace de travail correspondant est supprimé à l’issue de la session Power BI Desktop associée.The corresponding workspace folder is deleted when the associated Power BI Desktop session ends.

Vous pouvez lire les fichiers de trace à l’aide de l’outil SQL Server Profiler,The trace files can be read using the SQL Server Profiler tool. disponible en téléchargement gratuit avec SQL Server Management Studio.Get it as part of the free download SQL Server Management Studio.

Une fois que vous avez téléchargé et installé SQL Server Management Studio, exécutez SQL Server Profiler.Once you download and install SQL Server Management Studio, run SQL Server Profiler.

SQL Server Profiler

Pour ouvrir le fichier de trace, procédez comme suit :To open the trace file, take the following steps:

  1. Dans SQL Server Profiler, sélectionnez Fichier > Ouvrir > Fichier de trace.In SQL Server Profiler, select File > Open > Trace file.

  2. Entrez le chemin d’accès du fichier de trace pour la session Power BI actuellement ouverte, par exemple : C:\Utilisateurs<utilisateur>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces\AnalysisServicesWorkspace2058279583\Data.Enter the path to the trace file for the currently open Power BI session, such as: C:\Users<user>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces\AnalysisServicesWorkspace2058279583\Data.

  3. Ouvrez FlightRecorderCurrent.trc.Open FlightRecorderCurrent.trc.

Tous les événements de la session en cours sont affichés.All events from the current session are displayed. Un exemple annoté est présenté ici. Il met en évidence les groupes d’événements.An annotated example is shown here, which highlights groups of events. Chaque groupe inclut les événements suivants :Each group has the following events:

  • Des événements Query Begin et Query End qui représentent le début et la fin d’une requête DAX générée par l’interface utilisateur, par exemple à partir d’un visuel ou du remplissage d’une liste de valeurs dans l’interface utilisateur de filtre.A Query Begin and Query End event, which represent the start and end of a DAX query generated by the UI, for example, from a visual, or from populating a list of values in the filter UI.
  • Une ou plusieurs paires d’événements DirectQuery Begin et DirectQuery End, qui représentent une requête envoyée à la source de données sous-jacente dans le cadre de l’évaluation de la requête DAX.One or more pairs of DirectQuery Begin and DirectQuery End events, which represent a query sent to the underlying data source, as part of evaluating the DAX query.

Dans la mesure où plusieurs requêtes DAX peuvent être exécutées en parallèle, les événements de différents groupes peuvent être entrelacés.Multiple DAX queries can run in parallel, so events from different groups can be interleaved. La valeur ActivityID permet de déterminer les événements qui appartiennent à un même groupe.The value of the ActivityID can be used to determine which events belong to the same group.

SQL Server Profiler avec les événements Début de la requête et Fin de la requête

Les autres colonnes dignes d’intérêt sont les suivantes :Other columns of interest are as follows:

  • TextData : détail textuel de l’événement.TextData: The textual detail of the event. Pour les événements Query Begin/End, il s’agit de la requête DAX.For Query Begin/End events, the detail is the DAX query. Pour les événements DirectQuery Begin/End, il s’agit de la requête SQL envoyée à la source sous-jacente.For DirectQuery Begin/End events, the detail is the SQL query sent to the underlying source. Les données TextData pour l’événement sélectionné s’affichent également dans la zone inférieure.The TextData for the currently selected event is also displayed in the region at the bottom.
  • EndTime : heure de fin de l’événement.EndTime: The time when the event completed.
  • Duration : durée d’exécution de la requête DAX ou SQL, exprimée en millisecondes.Duration: The duration, in milliseconds, taken to execute the DAX or SQL query.
  • Error : Indique si une erreur s’est produite, auquel cas l’événement s’affiche également en rouge.Error: Indicates if an error occurred, in which case the event is also displayed in red.

Dans l’image ci-dessus, certaines colonnes moins intéressantes ont été rétrécies pour faciliter la visualisation des autres colonnes.In the image above, some of the less interesting columns have been narrowed, to allow other columns to be seen more easily.

L’approche recommandée pour la capture d’une trace afin de diagnostiquer un problème de performances potentiel est la suivante :We recommend the following approach to capturing a trace to help diagnose a potential performance issue:

  • Ouvrez une session Power BI Desktop pour éviter les confusions possibles entre plusieurs dossiers de l’espace de travail.Open a single Power BI Desktop session, to avoid the confusion of multiple workspace folders.
  • Effectuez l’ensemble des actions qui vous intéressent dans Power BI Desktop.Do the set of actions of interest in Power BI Desktop. Incluez ensuite quelques actions supplémentaires pour vous assurer que les événements intéressants sont vidés dans le fichier de trace.Include a few additional actions, to ensure that the events of interest are flushed into the trace file.
  • Ouvrez SQL Server Profiler, puis examinez la trace comme décrit précédemment.Open SQL Server Profiler and examine the trace, as described previously. N’oubliez pas que le fichier de trace est supprimé à la fermeture de Power BI Desktop.Remember that closing Power BI Desktop deletes the trace file. Par ailleurs, les actions supplémentaires effectuées dans Power BI Desktop n’apparaissent pas immédiatement.Also, further actions in Power BI Desktop don't immediately appear. Vous devez fermer puis rouvrir le fichier de trace pour voir les nouveaux événements.The trace file should be closed and reopened to see the new events.
  • Conservez des sessions individuelles relativement petites (10 secondes d’actions éventuellement, mais pas des centaines).Keep individual sessions reasonably small, perhaps 10 seconds of actions, not hundreds. Cette approche simplifie l’interprétation du fichier de trace.This approach makes it easier to interpret the trace file. Par ailleurs, la taille du fichier de trace est limitée.There's also a limit on the size of the trace file. Pour les sessions longues il se peut que des événements du début soient supprimés.For long sessions, there's a chance of early events being dropped.

Compréhension de la forme d’une requête envoyée par Power BI DesktopUnderstanding the form of query sent by Power BI Desktop

Le format général des requêtes créées et envoyées par Power BI Desktop utilise des sous-sélections pour chacune des tables référencées.The general format of queries created and sent by Power BI Desktop use subselects for each of the tables referenced. La sous-sélection est définie par la requête de l’Éditeur de requête.The Query Editor query defines the subselect. Par exemple, imaginez les tables TPC-DS suivantes dans SQL Server :For example, assume the following TPC-DS tables in SQL Server:

Tables TPC-DS dans SQL Server

Considérez la requête suivante :Consider the following query:

Exemple de requête

Cette requête renvoie le visuel suivant :That query results in the following visual:

Visuel retourné par une requête

L’actualisation de ce visuel génère la requête SQL présentée ici.Refreshing that visual will result in the SQL query shown here. Comme vous pouvez le voir, il y a trois sous-sélections (Web Sales, Item et Date_dim) qui retournent chacune toutes les colonnes de la table correspondante, même si le visuel ne fait réellement référence qu’à quatre colonnes.As you can tell, there are three subselects for Web Sales, Item, and Date_dim, that each return all the columns on the respective table, even though only four columns are actually referenced by the visual. Ces requêtes dans les sous-sélections grisées sont le résultat précis des requêtes définies dans l’Éditeur de requête.These queries in the subselects that are shaded are exactly the result of the queries defined in Query Editor. L’utilisation de sous-sélections de cette manière semble ne pas impacter les performances en ce qui concerne les sources de données prises en charge jusqu’à présent pour DirectQuery.Use of subselects in this manner hasn't been found to impact performance for the data sources so far supported for DirectQuery. Des sources de données telles que SQL Server optimisent les références aux autres colonnes.Data sources like SQL Server optimize away the references to the other columns.

Power BI utilise ce modèle, car la requête SQL utilisée peut être fournie directement par l’analyste.Power BI employs this pattern because the SQL query used can be provided directly by the analyst. Elle est utilisée « en l’état », sans tentative de réécriture.It's used "as provided", without an attempt to rewrite it.

Requête SQL utilisée en l’état

Étapes suivantesNext steps

Cet article décrit les aspects de DirectQuery communs à toutes les sources de données.This article describes aspects of DirectQuery that are common across all data sources. Certains détails sont propres à des sources spécifiques.There are certain details that are specific to individual sources. Consultez les articles suivants sur des sources spécifiques :See the following articles covering specific sources:

Pour plus d’informations sur DirectQuery, consultez la ressource suivante :For more information about DirectQuery, see the following resource: