Utilisation de DirectQuery dans Power BIUsing 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 you can make those data connections in different ways. Vous pouvez soit importer des données dans Power BI, ce qui est la méthode la plus courante pour obtenir des données, soit vous connecter directement aux données dans leur dépôt source d’origine, ce qu’on appelle une requête DirectQuery.You can either import data to Power BI, which is the most common way to get data, or you can connect directly to data in its original source repository, which is known as DirectQuery. Cet article décrit la requête DirectQuery et ses fonctionnalités, et comprend les rubriques suivantes :This article describes DirectQuery and its capabilities, including the following topics:

  • 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
  • Meilleure pratique pour l’utilisation de DirectQueryBest practice for using DirectQuery

En bref, la meilleure pratique pour l’utilisation d’une importation plutôt que de DirectQuery est la suivante :In short, the best practice for using import versus DirectQuery is the following:

  • 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 de vos données.This takes advantage of the high performance query engine of Power BI, and provides a highly interactive and fully featured experience over your data.
  • 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, then 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. Toutefois, l’utilisation de DirectQuery n’est généralement possible que lorsque la source de données sous-jacente est capable de traiter des requêtes interactives (en moins de 5 secondes) pour une requête d’agrégation standard, et de gérer la charge de requête que cela génère.However, using DirectQuery is generally only be feasible when the underlying data source can provide interactive queries (less than 5 seconds) for the typical aggregate query, and is able to handle the query load that will be generated. En outre, vous devez examiner avec soin la liste des limitations associées à l’utilisation de DirectQuery pour vous assurer que vos objectifs sont accessibles.Additionally, the list of limitations that accompany use of DirectQuery should be considered carefully, to ensure your goals can still be met.

L’ensemble des fonctionnalités offertes par Power BI pour les deux modes de connectivité (importation et DirectQuery) évoluera au fil du temps.The set of capabilities offered by Power BI for both connectivity modes – import and DirectQuery - will evolve over time. Il inclura une plus grande flexibilité lors de l’utilisation de données importées, de sorte que l’importation pourra être utilisée dans davantage de cas, tout en éliminant certains des inconvénients liés à l’utilisation de DirectQuery.This will include providing more flexibility when using imported data, such that import can be used in more cases, as well as 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 resteront toujours une considération majeure.Regardless of improvements, when using DirectQuery the performance of the underlying data source will always remain a major consideration. Si cette source de données sous-jacente est lente, l’utilisation de DirectQuery restera irréalisable.If that underlying data source is slow, then using DirectQuery for that source it will remain unfeasible.

Cette rubrique a trait à DirectQuery avec Power BI, non à SQL Server Analysis Services.This topic covers DirectQuery with Power BI, and not SQL Server Analysis Services. DirectQuery est également une fonctionnalité de SQL Server Analysis Services, et bon nombre des détails décrits ci-dessous s’appliquent à son utilisation, mais il existe également des différences importantes.DirectQuery is also a feature of SQL Server Analysis Services, and many of the details described below apply to its use, there are also important differences. Pour plus d’informations sur l’utilisation de DirectQuery avec SQL Server Analysis Services, consultez le livre blanc détaillant l’utilisation de DirectQuery dans SQL Server Analysis Services 2016.For information about using DirectQuery with SQL Server Analysis Services, see the whitepaper that details DirectQuery in SQL Server Analysis Services 2016.

Si cet article se concentre sur le flux de travail 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 very 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 généralement possible d’importer les données dans Power BI.For these sources, it's usually possible to import the data to Power BI. Pour certaines, il est également possible de se connecter à l’aide de DirectQuery.For some it is also possible to connect using DirectQuery. Le jeu exact des sources qui prennent en charge DirectQuery est décrit dans l’article Sources de données prises en charge par DirectQuery.The exact set of sources that support DirectQuery is described in the Data Sources supported by DirectQuery article. 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, car aucune donnée n’est importée, et la source de données sous-jacente est toujours interrogée pour actualiser un visuel. Toutefois, elle s’en distingue également à maints égards, ce qui justifie l’utilisation de termes distincts (active et DirectQuery).Using a live connection is similar to DirectQuery, in that no data is imported, and the underlying data source is always queried to refresh a visual, but a live connection is different in many other regards, so a different term (live versus DirectQuery) is used.

Les trois options pour la connexion aux données (Importation, DirectQuery et Connexion active) sont décrites en détail dans les sections suivantes.These three options for connecting to data – import, DirectQuery, and live connection – are explained in detail in the following sections.

Connexions d’importationImport connections

Lorsque vous utilisez la commande Obtenir des données dans Power BI Desktop pour vous connecter à une source de données telle que SQL Server, puis choisissez Importer, le comportement de cette connexion est le suivant :When using Get Data in Power BI Desktop to connect to a data source like SQL Server, and you choose Import, the behavior of that connection is as follows:

  • Lors 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 (ces requêtes peuvent être modifiées avant le chargement des données, par exemple, pour appliquer des filtres, agréger les données ou joindre des tables différentes).During the initial Get Data experience, the set of tables selected each define a query that will return a set of data (those queries can be edited prior to 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 garantissant que la requête sera très rapide, toutes les modifications apportées au visuel sont immédiatement reflétées.The Power BI store ensures the query will be very fast, hence all changes to the visual will be reflected immediately.
  • Les modifications apportées aux données sous-jacentes n’apparaissent dans aucun visuel.Any changes to the underlying data will not be reflected in any visuals. Il est nécessaire d’actualiser, après quoi les données sont réimportées.It is necessary to Refresh, whereupon the data will be re-imported.
  • Lors de la publication du rapport (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 (the .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 possible de configurer une actualisation planifiée des données, par exemple pour les réimporter quotidiennement.It is then possible to set up scheduled refresh of that data, for example, to re-import 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 ré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 will be automatically refreshed whenever the underlying dataset is refreshed.

Connexions DirectQueryDirectQuery connections

Lorsque vous utilisez la commande Obtenir des données dans Power BI Desktop pour vous connecter à une source de données, puis choisissez DirectQuery, le comportement de cette connexion est le suivant :When using Get Data in Power BI Desktop to connect to a data source, and you choose DirectQuery, 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, cela signifie qu’un ensemble de tables sont sélectionnées, chacune définissant une requête qui retourne un jeu de données de façon logique.For relational sources, this means 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, lors du chargement, aucune donnée n’est réellement importée dans le magasin Power BI.However, upon load, no data will actually be 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 will be 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 then taken to refresh the visual will depend on the performance of the underlying data source.
  • Les modifications apportées aux données sous-jacentes sont immédiatement répercutées dans tous les visuels existants.Any changes to the underlying data will not be immediately reflected in any existing visuals. Il est toujours nécessaire d’actualiser, après quoi les requêtes nécessaires sont renvoyées pour chaque visuel et le visuel mis à jour si nécessaire.It is still necessary to Refresh, whereupon the necessary queries will be resent for each visual, and the visual 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, just 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, just 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 will be fast, the tiles are automatically refreshed on a schedule (for example, every hour). La fréquence de cette actualisation peut être contrôlée afin de 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 is to see the very latest data. Par conséquent, lors de 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 toutes dernières modifications apportées à la source de données sous-jacente.Thus, when opening a dashboard, the tiles will reflect the data as of the time of the last refresh, and not necessarily the very latest changes made to the underlying source. Il est toujours possible d’actualiser un tableau de bord ouvert pour s’assurer que celui-ci est à jour.An open dashboard can always be Refreshed to ensure it is up-to-date.

Connexions activesLive connections

Lorsque vous vous connectez à SQL Server Analysis Services (SSAS), 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 (SSAS), there is an option to either import data from, or connect live to, the selected data model. Si vous choisissez d’importer, vous définissez une requête sur cette source SSAS externe et les données sont importées normalement.If you select import, then you define a query against that external SSAS source, and the data is imported as normal. Si vous optez pour 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 select to connect live then there is no query defined, and the entire external model is shown in the field list. Si vous sélectionnez DirectQuery, à mesure que les visuels sont générés, des requêtes sont envoyées à la source SSAS externe.If you select DirectQuery, as visuals are built, queries are sent to the external SSAS source. Toutefois, à la différence de DirectQuery, il n’y a pas lieu de créer un modèle. En d’autres termes, il n’est pas possible de définir de nouvelles colonnes calculées, hiérarchies, relations et autres.However, unlike DirectQuery, there is no sense in which a new model is being created; in other words, it's not possible to define new calculated columns, hierarchies, relationships, and so on. Au lieu de cela, vous vous connectez directement au modèle SSAS externe.Instead you are simply connecting directly to the external SSAS model.

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 is no option to import the data:

  • jeux de données Power BI (par exemple, lorsque vous vous connectez à un jeu de données Power BI précédemment créé et publié sur le service afin de générer un nouveau rapport) ;Power 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 Services.Common Data Services

Le comportement des rapports sur SSAS lors de la publication sur le service Power BI présente les similitudes suivantes avec les rapports DirectQuery :The behavior of reports over SSAS, 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 SSAS 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 SSAS 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, ou selon toute autre fréquence définie).Dashboard tiles are automatically refreshed on a schedule (such as every hour, or whatever frequency is defined)

En revanche, il existe également des différences importantes, dont le fait que, pour les connexions actives, l’identité de l’utilisateur ouvrant le rapport est toujours transmise à la source SSAS sous-jacente.However, there are also important differences, including that for live connections the identity of the user opening the report will always be passed to the underlying SSAS 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, y compris les cas où le fait de laisser les données dans la source d’origine est considéré comme bénéfique.The following table describes scenarios where connecting with DirectQuery could be especially useful, including 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. Par conséquent, si les données évoluent en permanence et s’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 pourrait tout simplement ne pas répondre à ces besoins.Hence, if the data is continually changing, and it is necessary for reports to show the latest data, then using Import with scheduled refresh might simply not meet those needs. Notez également qu’il est possible d’envoyer les données en streaming directement à Power BI, même s’il existe des limites aux volumes de données pris en charge dans ce cas.Note also that it is also possible to stream data directly into Power BI, though there a 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 will always show 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 mins).
Les données sont très volumineusesData is very large Si les données sont très volumineuses, il est certainement impossible de les importer toutes.If the data is very large, then it certainly would not be feasible to import it all. À l’opposé, DirectQuery ne requiert aucun transfert important de données, car celles-ci sont interrogées sur place.DirectQuery, by contrast, requires no large transfer of data, as it is 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, plus loin dans cet article).However, large data might also imply that the performance of the queries against that underlying source are too slow (as discussed in Implications of using DirectQuery section, later in this article). Et bien sûr, il n’est pas toujours nécessaire d’importer l’absolue totalité des données.And of course it is not always necessary to import the full detailed data. Au lieu de cela, les données peuvent être pré-agrégées lors de l’importation (l’Éditeur de requête facilite précisément cette opération).Instead the data can be pre-aggregated during import (and Query Editor makes it easy to do exactly this). À 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. Ainsi, si DirectQuery constitue l’approche la plus simple pour des données volumineuses, vous devez toujours garder à l’esprit que l’importation de données agrégées peut offrir une solution si la source de données sous-jacente est trop lente.So while DirectQuery is the simplest approach to large data, you should always keep in mind that 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 Lorsque les données sont importées, Power BI se connecte à la source de données en utilisant les informations d’identification actuelles des utilisateurs (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 will connect to the data source using the current users credentials (from Power BI Desktop), or the credentials defined as part of configuring scheduled refresh (from the Power BI service). Par conséquent, en cas de publication et de partage d’un tel rapport, il convient de veiller à partager uniquement avec des utilisateurs autorisés à consulter les données concernées, ou de définir une sécurité au niveau des lignes associée au jeu de données.Thus, in publishing and sharing such a report, care must be taken 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, cela permettrait d’appliquer toute sécurité intégrée dans cette source sous-jacente.Ideally, because DirectQuery always queries the underlying source, this 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, today Power BI will always connect to the underlying source using the same credentials as would be used for Import.

Par conséquent, tant que Power BI ne permet pas que l’identité de l’utilisateur du rapport soit transmise directement à la source sous-jacente, DirectQuery n’offre aucun avantage en matière de sécurité de la source de données.Thus, until Power BI allows for the identity of the report consumer to pass through to the underlying source, DirectQuery offers no advantages with regard to data source security.
Des restrictions de souveraineté des données s’appliquentData sovereignty restrictions apply Certaines organisations adoptent des stratégies en matière de 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 cannot 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, il convient de noter que, 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, it should be noted that even with DirectQuery, some caches of data at the visual level are retained in the Power BI service (due to 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 par Class, Year et City.For example, measure 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 par 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 is further aggregating the aggregate value. Cela convient pour des mesures additives (par exemple, Somme, Min), mais constitue un problème pour des mesures non additives (par exemple, Moyenne, DistinctCount).This is fine for additive measures (such as Sum, Min) but it's an issue for non-additive (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. La prise en charge pour SAP BW est décrite de façon plus approfondie dans DirectQuery et SAP BW.Support for SAP BW is covered further in DirectQuery and SAP BW.

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

En résumé, compte tenu des capacités actuelles de DirectQuery dans Power BI, les scénarios avantageux sont les suivants :So in summary, given the current capabilities of DirectQuery in Power BI, the scenarios where it offers benefits are the following:

  • 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
  • Gestion de données très volumineuses ne nécessitant pas d’agrégation préalableHandling very large data, without the need to pre-aggregate
  • Des restrictions de souveraineté des données s’appliquentData sovereignty restrictions apply
  • La source est multidimensionnelle et contient des mesures (par exemple, SAP BW)The source is a multi dimensional source containing measures (such as SAP BW)

Notez que les détails de la liste précédente ont trait à l’utilisation de Power BI seul.Note that the details in the previous list relate to the use of Power BI alone. Il existe toujours la possibilité d’utiliser un modèle SQL Server Analysis Services (ou Azure Analysis Services) externe pour importer des données, puis d’utiliser Power BI pour se connecter à ce modèle.There is always the option of instead using an external SQL Server Analysis Services (or Azure Analysis Services) model to import data, and then using Power BI to connect to that model. Si cette approche nécessite des compétences supplémentaires, elle offre davantage de flexibilité.While that approach would require additional skills, it does provide greater flexibility. Par exemple, elle permet l’importation de volumes de données beaucoup plus importants et n’impose aucune restriction à la fréquence d’actualisation des données.For example, much larger volumes of data can be imported, and there is 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. Cela est signalé, le cas échéant, et des rubriques distinctes traitent des sources sensiblement différentes.This will be called out where applicable, and separate topics 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 modification d’une valeur de segment) prend quelques secondes (< 5 s), l’expérience peut être raisonnable, mais sembler lente par rapport à la réponse immédiate à laquelle nous sommes habitués lors de l’importation de données dans Power BI.If refreshing each visual (for example, after changing a slicer value) takes a few seconds (<5s) then the experience would be reasonable, yet might still feel sluggish compared to the immediate response we are used to when importing the data to Power BI. Si, au lieu de cela, la lenteur de la source a pour effet que l’actualisation des visuels prend plus de temps (quelques dizaines de secondes), l’expérience devient médiocre, jusqu’au point même où les délais de requête expirent.If instead the slowness of the source means that individual visuals take longer than that (tens of seconds), then the experience becomes extremely poor, possibly even to the point of queries timing out.

Outre les performances de la source sous-jacente, il convient d’accorder une attention particulière à la charge qui est placée sur celle-ci (qui a bien sûr également une incidence sur les performances).Along with the performance of the underlying source, careful consideration should be paid to the load that will be placed upon it (that of course then often impacts the performance). Comme évoqué plus haut, chaque ouverture de rapport partagé par un utilisateur, et chaque actualisation périodique de vignette de tableau de bord, ont pour effet d’envoyer au moins une requête par visuel à la source sous-jacente.As discussed further below, each user that opens a shared report, and each dashboard tile that is periodically refreshed, will be sending at least one query per visual to the underlying source. Cela exige que la source puisse gérer une telle charge de requête, tout en continuant à offrir des performances raisonnables.This fact requires that the source be able to handle such a query load, while still maintaining reasonable performance.

Limitation à une source uniqueLimited to a single source

Lors de l’importation de données, il est possible de combiner des données de plusieurs sources dans un seul modèle, par exemple pour joindre facilement des données d’une base de données SQL Server d’entreprise avec des données locales conservées dans un fichier Excel.When importing data, it is possible to combine data from multiple sources into a single model, for example, to easily join some data from a corporate SQL Server database with some local data maintained in an Excel file. Cela n’est pas possible avec DirectQuery.This is not possible when using DirectQuery. Lorsque vous sélectionnez DirectQuery pour une source, vous ne pouvez utiliser que les données de cette source (par exemple, une base de données SQL Server).When selecting DirectQuery for a source, it will then only be possible to use data from that single source (such as a single SQL Server database).

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 afin de nettoyer les données et d’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 re-shape the data before using it to create visuals (such as parsing JSON documents, or pivoting data from a column to a row orientated form). Ces transformations sont plus limitées dans DirectQuery.Those transformations are more limited in DirectQuery. Tout d’abord, lorsque 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 telles que 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 is 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 are 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, then you will receive an error that either it must be deleted, or the model switched to Import mode.

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 afin d’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. Par conséquent, la requête définie dans l’Éditeur de requête doit être valide dans ce contexte.Thus 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 utilisant des expressions de table communes ou qui appelle des procédures stockées.In particular this means it is not possible to use a query using Common Table Expressions, nor that invokes Stored Procedures.

Limitations de la modélisationModelling limitations

Le terme modélisation dans ce contexte signifie le fait d’affiner et d’enrichir les données brutes dans le cadre de la création d’un rapport qui les utilise.The term modelling 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

Lorsque 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 afin d’améliorer leur utilisation ultérieure.When using DirectQuery, many of these model enrichments can still be made, and certainly there is still the principle that the raw data is being enriched, so as to improve later consumption. Toutefois, lors de l’utilisation de DirectQuery, certaines fonctionnalités de modélisation ne sont pas disponibles ou sont limitées.However, there some modeling capabilities are not 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 répertoriées dans la liste à puces ci-dessous.The set of limitations that are common to all DirectQuery sources are listed in the following bulleted list. Des limitations supplémentaires peuvent s’appliquer à certaines sources, comme décrit dans la section Détails spécifiques de source de données vers la fin de cet article.Additional limitations might apply to individual sources, as described in Data source specific details found near the end of this article.

  • Aucune hiérarchie de date intégrée : lors de l’importation de données, par défaut, 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, then by default 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 en cas d’utilisation du mode DirectQuery.This built-in date hierarchy is not available when using DirectQuery mode. Notez toutefois que, si une table de dates 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.Note however that if there is 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.
  • 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. En outre, les fonctions scalaires DAX (telles que LEFT()) autorisées sont limitées à celles qui peuvent simplement être envoyées à la source sous-jacente, de sorte qu’elles varient selon les capacités de la source.Additionally, the DAX scalar functions (such as LEFT()) that are allowed will be limited to those which can simply be pushed to the underlying source, hence will 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 are not supported will not be listed in autocomplete when authoring the DAX for a calculated column, and would result in an error if used.
  • Aucune prise en charge des fonctions DAX parent-enfant : le modèle 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 model, it is not possible to use the family of DAX PATH() functions, that generally handle Parent-Child structures (such as chart of accounts, or employee hierarchies).
  • Limitations (par défaut) pour les mesures : par défaut, les fonctions et expressions DAX qui peuvent être utilisées dans les mesures sont limitées.Limitations (by default) for measures: By default, the DAX functions and expressions that can be used in measures is restricted. Là encore, la saisie semi-automatique limite les fonctions affichées, et une erreur se produit en cas d’utilisation d’une fonction ou d’une expression non valide.Again, autocomplete will restrict the functions listed, and an error will occur if an invalid function or expression is used. La raison à cela est simplement de s’assurer que, par défaut, les mesures sont limitées à des mesures simples peu susceptibles d’occasionner des problèmes de performances.The reason is simply to ensure that, by default, measures are restricted to simple measures that are unlikely by themselves cause any performance issues. Les utilisateurs avancés peuvent choisir de contourner cette limitation en sélectionnant Fichier > Options, puis Paramètres > Options > DirectQuery, puis l’option Autoriser des mesures sans restriction en mode DirectQuery.Advanced users can choose to bypass this limitation by selecting File > Options and then Settings > Options > DirectQuery, then selecting the option Allow unrestricted measures in DirectQuery mode. Quand cette option est sélectionnée, toute expression DAX valide pour une mesure est utilisable.When that option is selected, any DAX expression that is valid for a measure can be used. Toutefois, les utilisateurs doivent savoir que certaines expressions qui fonctionnent bien lors de l’importation de données peuvent ralentir considérablement les requêtes adressées à la source principale en mode DirectQuery.Users must be aware, however, that some expressions that perform well when the data is imported may result in very slow queries to the backend source when in DirectQuery mode.

    • Par exemple, par défaut :For example, by default:

      • Il serait possible de créer une mesure qui additionne simplement le montant des ventes :It would be possible to author a measure that simply summed the sales amount:

        SalesAmount = SUMX(Web_Sales, [ws_sales_price]* [ws_quantity])
        
      • Il ne serait pas possible de créer une mesure qui calculerait ensuite une moyenne de cette valeur SalesAmount sur tous les articles, par exemple :It would not be possible to author a measure that then averaged that SalesAmount over all of the Items:

        AverageItemSalesAmount = AVERAGEX('Item', [SalesAmount])
        

      La raison à cela est qu’une telle mesure risquerait d’entraîner une dégradation des performances s’il y avait un très grand nombre d’éléments.The reason is that such a measure could result in poor performance if there were a very large number of items.

  • 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 are not supported: The ability to define a calculated table using a DAX expression is not supported in DirectQuery mode.
  • Le filtrage des relations est limité à une seule direction : en cas d’utilisation de DirectQuery, il n’est pas possible de définir la direction du filtrage d’une relation sur « Les deux ».Relationship filtering is limited to a single direction: When using DirectQuery, it is not possible to set the Cross Filter direction on a relationship to “Both”. Par exemple, avec les trois tables ci-dessous, il ne serait pas possible de générer un visuel affichant le genre de chaque client (Customer[Gender]) et la catégorie de produits (Product[Category]) achetée par chaque genre.For example, with the three tables below, it would not be possible to build a visual showing each Customer[Gender], and the number of Product[Category] bought by each. L’utilisation d’un tel filtrage bidirectionnel est décrite dans ce livre blanc détaillé (le document présente des exemples dans le contexte de SQL Server Analysis Services, mais les points principaux s’appliquent également à Power BI).Use of such bi-directional filtering is described in this detailed whitepaper (the paper presents examples in the context of SQL Server Analysis Services, but the fundamental points apply equally to Power BI).

    Une fois encore, la limitation est imposée en raison de l’impact possible sur les performances.Again, the limitation is imposed due to the performance implications. Une application particulièrement importante de ce principe est que, lors de la définition d’une sécurité au niveau des lignes associée au rapport, étant donné qu’un schéma courant est d’avoir une relation plusieurs à plusieurs entre les utilisateurs et les entités auxquelles ils sont autorisés à accéder, et qu’un filtrage bidirectionnel est nécessaire pour appliquer cela.One particularly important application of this is when defining Row Level Security as part of the report, as a common pattern is to have a many-many relationship between the users and the entities they are allowed access to, and use of bi-directional filtering is necessary to enforce this. Toutefois, un filtrage bidirectionnel pour des modèles DirectQuery doit être utilisé judicieusement, en accordant une attention particulière à tout impact négatif sur les performances.However, use of bi-directional filtering for DirectQuery models should be used judiciously, with careful attention paid to any detrimental impact on performance.

  • Absence de clustering : DirectQuery ne permet pas d’utiliser la fonctionnalité de clustering pour rechercher automatiquement les groupesNo Clustering: When using DirectQuery, it is 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. Toutefois, il existe des limitations importantes de certaines des autres fonctionnalités offertes dans le service Power BI après la publication d’un rapport, comme décrit dans la liste à puces suivante :However, there are some important limitations in some of the other capabilities offered in the Power BI service after a report is published, as described in the following bullets:

  • Fonctionnalité Informations rapides non prise en charge : cette fonction de Power BI 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 is not 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 is not available on datasets using DirectQuery.
  • Fonctionnalité Questions et réponses non prise 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 is not 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 is 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: It is possible to explore your data by using the “Explore in Excel” capability on a dataset. Cela permet la création de tableaux croisés dynamiques et de graphiques croisés dynamiques dans Excel.This will allow Pivot Tables and Pivot Charts to be created in Excel. Lorsque 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. Par conséquent, 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 should be accounted for in your decision to use DirectQuery.

SécuritéSecurity

Comme indiqué plus haut dans cet article, un rapport utilisant DirectQuery utilise toujours les mêmes informations d’identification fixes pour se connecter à la source de données sous-jacente, après publication de celles-ci sur le service Power BI.As discussed earlier in this article, a report using DirectQuery will always use the same fixed credentials to connect to the underlying data source, after publish to the Power BI service. Notez, une fois encore, que ceci a trait spécifiquement à DirectQuery, et non aux connexions actives à SQL Server Analysis Services qui diffèrent à cet égard.Again, note this refers specifically to DirectQuery, not to live connections to SQL Server Analysis Services, which is different in this respect. Par conséquent, 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.Hence immediately after publish of a DirectQuery report, it is 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 this is done, 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, irrespective of the user who opens the report. À cet égard, cela se passe exactement comme pour les données importées, en ce que chaque utilisateur voit les mêmes données, sauf si une sécurité au niveau des lignes a été définie et intégrée au rapport.In this regard it is exactly like imported data, in that every user will see the same data, unless Row Level Security has been defined as part of the report. Par conséquent, 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.Hence 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, principalement pour pouvoir comprendre l’importance de la charge appliquée à la source de données principale, 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 ou non été définie dans le rapport.This section describes the behavior of a DirectQuery report in the Power BI service, primarily so as to be able to understand 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

Lors de l’ouverture d’un rapport, tous les visuels sur la page visible sont actualisés.When a report is opened, then all the visuals on the currently visible page will refresh. Chaque visuel requiert généralement au moins une requête à la source de données sous-jacente.Each visual will generally require at least one query to the underlying data source. Certains visuels peuvent nécessiter plus d’une requête (par exemple, si le visuel affiche des valeurs agrégées de deux tables de faits différentes, ou contient une mesure plus complexe ou des totaux d’une mesure non additive telle que Count Distinct).Some visuals might require more than one query (for example, if it showed aggregate values from two different fact tables, or contained a more complex measure, or contained totals of a non-additive measure like Count Distinct). Le déplacement vers une nouvelle page a pour effet d’actualiser ces visuels, entraînant l’envoi d’un nouvel ensemble de requêtes à la source sous-jacente.Moving to a new page will result in those visuals being refreshed, resulting in 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 will require sending a new set of queries to refresh all of the effected 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, bien entendu, la modification d’un nouveau rapport requiert l’envoi de requêtes à chaque étape de la production du visuel final souhaité.Similarly of course, editing a new report with require queries to be sent for each step on the path to produce the final desired visual.

Étant donné que des résultats sont mis en cache, l’actualisation d’un visuel est instantanée si des résultats rigoureusement identiques ont été récemment obtenus.There is some caching of results, so that the refresh of a visual will be instantaneous if the exact same results have recently been obtained. De tels caches ne sont pas partagés entre les utilisateurs si une sécurité au niveau des lignes est associée au rapport.Such caches are not shared across users, if there is any Row Level Security defined as part of the report.

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 ensuite actualisées automatiquement selon une planification, ce qui a pour effet que des requêtes sont envoyées à la source de données principale.Tiles based on DirectQuery datasets are then refreshed automatically according to a schedule, resulting in queries being sent to the backend data source. Par défaut, cela se produit toutes les heures, mais cet intervalle peut être défini dans le cadre du paramétrage du jeu de données entre une fois par semaine et toutes les 15 minutes.By default, this occurs 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 n’est actualisée qu’une seule fois, et les résultats sont partagés entre tous les utilisateurs.If no Row Level Security is defined in the model, this means that each tile would be refreshed once, and the results shared across all users. Si une sécurité au niveau des lignes est définie, cela peut avoir un effet multiplicateur important, chaque vignette nécessitant que l’utilisateur envoie des requêtes distinctes à la source sous-jacente.If Row Level Security is defined, then there can be a large multiplier effect – each tile requires separate queries per user to be sent to the underlying source.

Par conséquent, un tableau de bord comportant dix 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 principale.Hence a dashboard with ten 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.

Il convient donc d’être particulièrement attentif à l’utilisation de la sécurité au niveau des lignes ainsi qu’à la configuration de la planification de l’actualisation.Hence careful consideration must be paid to the use of Row Level Security, and the configuring of the refresh schedule.

Délais d’expirationTimeouts

Un délai d’expiration de quatre minutes est appliqué aux requêtes individuelles dans le service Power BI et les requêtes qui prennent plus de temps échouent.A timeout of four minutes is applied to individual queries in the Power BI service, and queries taking longer than that will simply fail. Comme souligné précédemment, il est recommandé d’utiliser DirectQuery pour les sources qui offrent des performances de requêtes pratiquement interactives. Cette limite vise donc à éviter les problèmes résultant de temps d’exécution trop longs.As stressed earlier, it is recommended that DirectQuery be used for sources that provide near interactive query performance, so 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 the following:

  • 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 is necessary to Refresh to ensure the latest data is shown: Given the use of caches, there is 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. Ensuite, la modification d’un segment peut entraîner une actualisation afin d’afficher les transactions des deux derniers jours, dont certaines toutes récentes.Then due to a slicer being changed, it might refresh to show the transactions for the last two days, including some very 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, ce qui n’inclut pas la nouvelle transaction vue précédemment.Returning the slicer to its original value would result in it again showing the cached value previously obtained, that would not include the newly arrived transaction seen before.

    La sélection de l’option Actualiser a pour effet d’effacer tous les caches et d’actualiser tous les visuels sur la page afin d’afficher les données les plus récentes.Selecting Refresh will clear any caches, and refresh 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 is no guarantee of consistency between visuals: Different visuals, whether on the same page or on different pages, might be refreshed at different times. Par conséquent, 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.Thus if the data in the underlying source is changing, there is no guarantee that each visual will be showing the data at the exact same point of time. En effet, étant donné que plusieurs requêtes sont parfois requises 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 is not guaranteed. Garantir cela nécessiterait l’actualisation de tous les visuels chaque fois qu’un visuel est actualisé, ainsi que 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 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 will refresh all of the visuals on the page. Et il faut noter que, 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.And it should be noted that even if using Import mode, there is a similar problem of guaranteeing consistency if 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, l’actualisation a simplement 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 simply 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 are not automatically applied to change the available fields in the field list. Par conséquent, 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.Thus 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, will update 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 one million rows returned on any query: There is a fixed limit of one million rows placed on the number of rows that can be returned in any single query to the underlying source. Cela n’a généralement pas de conséquences pratiques, et il est improbable que les visuels affichent autant de points.This 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 is not fully optimizing the queries sent, and there is 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 whilst 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 1m 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 « 1000000 » 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 passer du mode Importation au mode DirectQuery : notez que, s’il est généralement 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.Cannot change from import to DirectQuery mode: Note that while it's generally possible to switch a model from DirectQuery mode to use import mode, this means 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 is also not possible to switch back (primarily due to 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 totalement différent des mesures externes.DirectQuery models over multidimensional sources like SAP BW also cannot be switched from DirectQuery to import, due to the completely 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 is 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, il est vivement recommandé que toute utilisation de DirectQuery sur ces deux sources commence dans Power BI Desktop.However, it is strongly recommended that any use of DirectQuery over those two sources start within Power BI Desktop. La raison à cela est que, lors de l’établissement initial de la connexion dans le service Power BI, de nombreuses limitations clés s’appliquent. Cela signifie que, si le point de départ est facile (à partir du service Power BI), il existe des limitations à l’amélioration du rapport obtenu (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).The reason is that when the connection is initially made in the Power BI service, many key limitations will apply, meaning that while the start point was easy (starting in the Power BI service), there are limitations on enhancing the resulting report any further (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 une aide de haut niveau sur la façon de réussir.If you're going to use DirectQuery, then 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 principaleBackend data source performance

Il est fortement recommandé de vérifier que les visuels simples peuvent s’actualiser dans un délai raisonnable.It is strongly recommended to validate that simple visuals will be able to refresh in a reasonable time. Pour bénéficier d’une expérience interactive raisonnable, ce délai ne doit pas dépasser 5 secondes.This should be within 5 seconds to have a reasonable interactive experience. Il est évident que, 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, ce qui rend la solution impraticable.Certainly if visuals are taking longer than 30 seconds, then it's highly likely that further issues will occur following publication of the report, which will make the solution unworkable.

Si les requêtes sont lentes, la première chose à faire consiste à examiner les requêtes envoyées à la source sous-jacente et la cause des problèmes de performances des requêtes observées.If queries are slow, then the first point of investigation is to examine the queries being sent to the underlying source, and the reason for the query performance being observed. Cette rubrique ne couvre pas toute la gamme des meilleures pratiques d’optimisation de base de données sur l’ensemble complet des sources sous-jacentes potentielles, mais s’applique aux pratiques standard en matière de bases de données, qui s’appliquent à la plupart des situations :This topic doesn't cover the wide range of database optimization best practices across the full set of potential underlying sources, but it does apply to 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èrentRelationships based on integer columns generally perform better than joins on columns of other data types
  • Les index appropriés doivent être créés. Cela implique généralement d’utiliser des index de stockage en colonne dans les sources qui les prennent en charge (par exemple, SQL Server).The appropriate indexes should be created, which 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 à jourAny necessary statistics in the source should be updated

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

Lorsque vous définissez le modèle, considérez ce qui suit :When defining the model, consider doing the following:

  • Évitez les requêtes complexes dans l’Éditeur de requête.Avoid complex queries in Query Editor. La requête définie dans l’Éditeur de requête est convertie en une requête SQL unique, qui est ensuite incluse dans la sous-sélection de chaque requête envoyée à cette table.The query that's defined in the Query Editor will be translated into a single SQL query, that will then be included 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 sur chaque requête envoyée.If that query is complex, it might result in performance issues on ever 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, il est recommandé de limiter les mesures à des agrégats simples.At least initially, it is recommended to limit 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 those perform 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. Cela s’applique en particulier aux bases de données où il est nécessaire d’effectuer des jointures de plusieurs colonnes.This is particularly relevant to databases where it is necessary to perform 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 does not 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 cela.The common workaround is to concatenate the columns together using a calculated column, and base the join on that. 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, qui, le plus souvent, empêche d’utiliser des index et entraîne une dégradation des performances.While this workaround is reasonable for imported data, in the case of DirectQuery it results in a join on an expression, that 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 en mode natif un type de données uniqueidentifier.Power BI does not natively support a datatype of uniqueidentifier. Par conséquent, la définition d’une relation entre des colonnes de type uniqueidentifier entraîne une requête avec une jointure impliquant un Cast.Hence defining a relationship between columns of type uniqueidentifier column will result in a query with a join involving a Cast. Là encore, cela aboutit généralement à une dégradation des performances.Again, this 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 les relations.Hide the to column on relationships. La colonne à sur des relations (généralement la clé primaire sur la table à) doit être masquée, de façon à ce qu’elle n’apparaisse pas dans la liste de champs et ne puisse pas être utilisée dans des visuels.The to column on relationships (commonly the primary key on the to table) should be hidden, so that it does not appear in the field list, and therefore cannot 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) et le masquage de colonnes de ce type est conseillé en toute occurrence.Often the columns on which relationships are based are in fact system columns (for example, surrogate keys in a data warehouse) and hiding such columns is good practice anyway. Si la colonne a du sens, introduisez une colonne calculée visible, comportant une expression simple d’égalité avec la clé primaire.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. Par exemple :For example:

    ProductKey_PK   (Destination of a relationship, hidden)
    ProductKey (= [ProductKey_PK],   visible)
    ProductName
    ...
    

    La raison de procéder de la sorte est simplement d’éviter qu’un problème se produise si un visuel inclut la colonne de clé primaire.The reason for doing this is simply to avoid a performance issue that can occur otherwise if a visual includes the primary key column.

  • 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 nécessairement nuisible. 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, qui pourraient à leur tour aboutir à une non-utilisation des index.Use of these capabilities are not necessarily harmful, they result in the queries sent to the underlying source containing expressions rather than simple references to columns, that again might result in indexes not being used.
  • Évitez d’utiliser le filtrage croisé bidirectionnel (en préversion) sur des relations.Avoid use of the (preview) bi-directional cross filtering on relationships.
  • Expérimentez le paramètre d’Intégrité référentielle supposée.Experiment with setting Assume referential integrity. Le paramètre d’Intégrité référentielle supposée appliqué à des relations permet que des requêtes utilisent des instructions de jointure interne plutôt que de jointure externe.The Assume Referential Integrity setting on relationships enables queries to use INNER JOIN statements rather than OUTER JOIN. Il améliore généralement les performances de requête, bien qu’il dépende des spécificités de la source de données.This 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.Do not 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.

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

    Ce n’est très probablement pas le résultat souhaité.This is almost certainly not what was 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 upon the date as at the time the report is executed then instead apply the filter in the report as a Report Filter. Cela se fait actuellement en créant 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 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

Lorsque vous créez un rapport à l’aide d’une connexion DirectQuery, suivez les instructions suivantes :When creating a report using a DirectQuery connection, adhere to the following guidance:

  • 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 the TotalSalesAmount, and ProductName, then filter to a particular year, apply the filter on Year at the very start. Cela est dû au fait que chaque étape de création d’un visuel entraîne l’envoi d’une requête et bien qu’il soit possible d’apporter une autre modification avant l’accomplissement de la première requête, cela laisse toujours peser une charge inutile sur la source sous-jacente.This is because each step of building a visual will send a query, and whilst it is possible to then make another change before the first query has completed, this 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. En revanche, la non-application précoce de filtres peut amener à atteindre la limite de 1 million de lignes évoquée ci-dessus.Also, failing to apply filters early can result in hitting the 1m row limit above.
  • Limitez le nombre de visuels sur une page : lors de l’ouverture d’une page (ou bien d’un segment ou filtre modifié au niveau page), tous les visuels sur la page sont actualisés.Limit the number of visuals on a page: When a page is opened (or some page level slicer or filter changed) then all of the visuals on a page are refreshed. Il existe également une limite au nombre de requêtes qui sont envoyées en parallèle. Par conséquent, à mesure que le nombre de visuels augmente, certains d’entre eux sont actualisés de façon séquentielle, ce qui augmente le temps nécessaire pour l’actualisation de la page entière.There is also a limit on the number of queries that are sent in parallel, hence 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 it's recommended to 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 effectuer un filtrage croisé et une sélection croisée des autres visualisations figurant sur la page.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, après que vous avez sélectionné « 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”.

    En revanche, cette interaction peut être contrôlée de la manière décrite dans cet article.However, this interaction can be controlled as described in this article. Dans DirectQuery, de tels filtrages et sélection croisés nécessitent l’envoi de requêtes à la source sous-jacente, de sorte que l’interaction devrait être désactivée si le temps nécessaire pour répondre aux sélections des utilisateurs devenait excessivement long.In DirectQuery such cross-filtering and cross-highlighting requires queries to be sent to the underlying source, so the interaction should be switched off if the time taken to respond to users' selections would be unreasonably long.

  • Envisagez de partager le rapport uniquement : il existe différentes manières de partager du contenu après publication de celui-ci sur le service Power BI.Consider sharing the report only: There are different ways of sharing content after publishing to the Power BI service. Dans le cas de DirectQuery, il est conseillé de se contenter de partager le rapport terminé, au lieu d’autoriser d’autres utilisateurs à créer des rapports (au risque de rencontrer des problèmes de performances pour les visuels qu’ils créent).In the case of DirectQuery, it's advisable to only considering sharing the finished report, rather than allow other users to author new reports (and potentially encounter performance issues for the particular visuals that they build).

En plus de la liste de suggestions ci-dessus, notez que chacune des fonctions de création de rapports suivantes peut entraîner des problèmes de performances :In addition to the above list of suggestions, note that 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 également contenir des filtres dans ces mesures.Measure filters: Visuals containing measures (or aggregates of columns) can contain filters in those measures. Par exemple, le visuel ci-dessous affiche SalesAmount by Category, mais inclut uniquement les catégories avec plus de 20 millions de ventes.For example, the visual below shows SalesAmount by Category, but only including those Categories with more than 20M of sales.

    Il en résulte l’envoi de deux requêtes à la source sous-jacente :This will result in two queries being sent to the underlying source:

    • La première requête récupère les catégories correspondant à la condition de nombre de ventes supérieur à 20 millions.The first query will retrieve the Categories meeting the condition (Sales > 20M)
    • La deuxième requête récupère ensuite les données nécessaires pour le visuel, dont les catégories remplissant la condition dans la clause WHERE.The second query will then retrieve the necessary data for the visual, including the Categories that met the condition in the WHJERE clause.

    Cela fonctionne généralement bien s’il existe des centaines, voire des milliers de catégories, comme dans cet exemple.This generally performs just fine 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é (en effet, la requête échoue s’il y a plus d’un million de catégories remplissant la condition, en raison de la limite d’un million de lignes évoquée précédemment).Performance can degrade if the number of categories is much larger (and indeed, the query will fail if there were more than a million categories meeting the condition, due to the one million row limit discussed earlier).

  • Filtres TopN : des filtres avancés peuvent être définis pour filtrer les N valeurs supérieures (ou inférieures) classées selon une mesure, par exemple pour inclure uniquement les 10 premières catégories du visuel ci-dessus.TopN filters: Advanced filters can be defined to filter on only the Top (or Bottom) N values ranked by some measure, for example, to only include the Top 10 Categories in the visual above. Cela entraîne une nouvelle fois l’envoi de deux requêtes à la source sous-jacente.This will again result 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, cela 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 can lead to performance issues (or query failures due to the 1m row limit).
  • Médiane : en règle générale, toute agrégation (Somme, Count Distinct, etc.) est envoyée à la source sous-jacente.Median: Generally, any aggregation (Sum, Count Distinct, so on) 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 is not true for Median, as 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. Cela est raisonnable lorsque la valeur Médiane doit être calculée sur la base d’un nombre relativement restreint de résultats, mais 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.This is reasonable when the median is to be calculated over a relatively small number of results, but performance issues (or query failures due to the 1m row limit) will 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 (« est » ou « n’est pas »).In particular, the default ‘contains’ filter should not be used if what is really required is an exact match (‘is’ or ‘is not’). 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 due to the use 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, lorsque l’utilisateur sélectionne un ensemble d’éléments dans le segment (par exemple, les dix produits qui l’intéressent), chaque nouvelle sélection entraîne l’envoi de requêtes à la source principale.Allowing multi selection in filters can cause some performance issues, because as the user selects a set of items in the slicer (for example, the ten products they are interested in), then each new selection will result in queries being sent to the backend source. Bien que l’utilisateur puisse sélectionner l’élément suivant avant la fin de requête, cela entraîne une charge supplémentaire sur la source sous-jacente.Whilst the user can select the next item prior to the query completing, this does result in extra load on the underlying source.

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 vivement recommandé de débuter un diagnostic de problèmes de performances dans Power BI Desktop, plutôt que dans le service Power BI.It's strongly recommended that any diagnosis of performance issues starts in Power BI Desktop, rather than in the Power BI service. Les problèmes de performances résultent souvent simplement du niveau de performances de la source sous-jacente. Il est plus facile de les identifier et diagnostiquer au sein de l’environnement sensiblement plus isolé de Power BI Desktop. Par ailleurs, cela élimine d’emblée certains composants (par exemple, Power BI Gateway).It's commonly the case that performance issues are simply based on the level of performance of the underlying source, and these are more easily identified and diagnosed in the much more isolated environment of Power BI Desktop, and initially eliminates certain components (such as the Power BI gateway). Si Power BI Desktop ne permet pas d’identifier les problèmes de performances, l’investigation doit se concentrer sur les caractéristiques du rapport dans le service Power BI.Only if the performance issues are found to not be present with Power BI Desktop should investigation focus on the specifics of the report in the Power BI service.

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, it is recommended to first try to isolate any issues to an individual visual, rather than many visuals on a page.

Imaginons que ces étapes (décrites dans les paragraphes précédents de cette section) ont été effectuées : nous avons isolé un visuel sur une page dans Power BI Desktop qui reste lent.So, let's say those steps (in the previous paragraphs in this section) have been taken - we now have a single visual on a page in Power BI Desktop that is still sluggish. Pour déterminer les requêtes que Power BI Desktop envoie à la source sous-jacente, il est possible d’afficher des informations de trace/diagnostic susceptibles d’être émises par cette source.To determine the queries that are sent to the underlying source by Power BI Desktop, it's possible to view traces/diagnostic information that might be emitted by that source. Ces traces peuvent également contenir des informations utiles contenant des détails sur la façon dont la requête a été exécutée, et la manière d’améliorer celle-ci.Such traces might also contain useful information about the 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 d’afficher les requêtes émises par Power BI, ainsi que leurs durées d’exécution, comme décrit ci-après.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 next.

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 fichier journal contient toutes les requêtes envoyées à la source de données sous-jacente (les autres sources DirectQuery seront incluses dans le futur).For some DirectQuery sources, this log includes all queries sent to the underlying data source (the remaining DirectQuery sources will be included in the future). Les sources qui envoient des requêtes au journal sont les suivantes :The sources that send queries to the log are the following:

  • 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:

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

Voici comment accéder facilement à ce dossier : dans Power BI Desktop sélectionnez Fichier > Options et paramètres > Options, puis Diagnostics.Here's an easy way 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 window appears:

Lorsque vous sélectionnez le lien Ouvrir le dossier des traces sous Options de diagnostic, le dossier suivant s’ouvre :When you select the Open traces folder link, 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 contient un sous-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 subfolder for every open instance of Power BI Desktop. Les noms de ces sous-dossiers ont un nombre entier en suffixe, par exemple AnalysisServicesWorkspace2058279583.These subfolders are named with an integer suffix, such as AnalysisServicesWorkspace2058279583.

Ce dossier comprend un sous-dossier \Data contenant le fichier de trace FlightRecorderCurrent.trc pour la session Power BI active.Inside that folder is a \Data subfolder that 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, disponible en téléchargement gratuit avec SQL Server Management Studio.The trace files can be read using the SQL Server Profiler tool, which is available as a free download as part of SQL Server Management Studio. Vous pouvez y accéder ici.You can get that from this location.

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.

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 :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. Open FilghtRecorderCurrent.trcOpen FilghtRecorderCurrent.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é ci-dessous, qui met en évidence les groupes d’événements.An annotated example is shown below, which highlights groups of events. Chaque groupe comporte les éléments suivants :Each group has the following:

  • Des événements Query Begin (Début de la requête) et Query End (Fin de la requête) 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 (Début de DirectQuery) et DirectQuery End (Fin de DirectQuery), 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.

Notez que plusieurs requêtes DAX pouvant être exécutées en parallèle, les événements de différents groupes peuvent être entrelacés.Note that multiple DAX queries can be executed in parallel, so events from different groups can be interleaved. La valeur d’ID d’activité 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.

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

  • TextData : détail textuel de l’événement.TextData: The textual detail of the event. Pour les événements « Query Begin/Query End », il s’agit de la requête DAX.For “Query Begin/End” events this will be the DAX query. Pour les événements « DirectQuery Begin/DirectQuery End », il s’agit de la requête SQL envoyée à la source sous-jacente.For “DirectQuery Begin/End” events this will be 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: 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).

Notez que, dans l’image ci-dessus, certaines colonnes moins intéressantes sont rétrécies afin de faciliter la visualisation des colonnes intéressantes.Note that in the image above, some of the less interesting columns have narrowed, to allow the interesting 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 :The recommended approach to capturing a trace to help diagnose a potential performance issue is the following:

  • Ouvrez une seule session Power BI Desktop (pour éviter la confusion de plusieurs dossiers d’espace de travail).Open a single Power BI Desktop session (to avoid the confusion of multiple workspace folders)
  • Effectuez l’ensemble des actions intéressantes dans Power BI Desktop.Perform 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 beyond that, 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 earlier. Souvenez-vous que le fichier de trace est supprimé à la fermeture de Power BI Desktop.Remember that the trace file will be deleted upon closing Power BI Desktop. Par ailleurs, les actions supplémentaires effectuées dans Power BI Desktop n’apparaissent pas immédiatement : le fichier de trace doit être fermé et rouvert pour voir les nouveaux événements.Also, further actions in Power BI Desktop will not immediately appear – the trace file should be closed and re-opened to see the new events.
  • Conservez des sessions individuelles relativement peu volumineuses (dix secondes d’actions, pas des centaines) pour faciliter l’interprétation du fichier de trace (et la taille du fichier de trace étant limitée, pour les sessions très longues il se peut que des événements du début soient supprimés).Keep individual sessions reasonably small (ten seconds of actions, not hundreds) to make it easier to interpret the trace file (and because there is a limit on the size of the trace file, thus for very long sessions there is 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, où la sous-sélection est définie par la requête définie dans l’Éditeur de requête.The general format of queries created and sent by Power BI Desktop use subselects for each of the tables referenced, where the subselect is as defined by the query defined in Query Editor. Par exemple, imaginez les tables TPC-DS suivantes dans SQL Server :For example, assume the following TPC-DS tables in SQL Server:

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

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

L’actualisation de ce visuel génère la requête SQL présentée sous le paragraphe suivant.Refreshing that visual will result in the SQL query shown below the next paragraph. 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 (they're 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 avoir d’incidence sur 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 has not been found to impact performance, for the data sources so far supported for DirectQuery. Des sources de données telles que SQL Server optimisent simplement les références aux autres colonnes.Data sources like SQL Server simply optimize away the references to the other columns.

L’une des raisons pour lesquelles Power BI utilise ce modèle est que la requête SQL utilisée peut être fournie directement par l’analyste, et exécutée telle quelle, sans nécessité de la réécrire.One reason Power BI employs this pattern is because the SQL query used can be provided directly by the analyst, so it's used "as provided", without an attempt to rewrite it.

É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 rubriques suivantes concernant les sources spécifiques :See the following topics covering specific sources:

Pour plus d’informations sur DirectQuery, consultez les ressources suivantes :For more information about DirectQuery, check out the following resources: