Usando o DirectQuery no Power BIUsing DirectQuery in Power BI

Você pode se conectar a todos os tipos de fontes de dados diferentes ao usar o Power BI Desktop ou o serviço do Power BI e fazer essas conexões de dados de maneiras diferentes.You can connect to all sorts of different data sources when using Power BI Desktop or the Power BI service, and make those data connections in different ways. Importe dados para o Power BI, que é a maneira mais comum de obter dados, ou conecte-se diretamente aos dados em seu repositório de origem original, que é conhecido como DirectQuery.You can import data to Power BI, which is the most common way to get data, or connect directly to data in its original source repository, which is known as DirectQuery. Este artigo descreve o DirectQuery e suas funcionalidades:This article describes DirectQuery and its capabilities:

  • Diferentes opções de conectividade para o DirectQueryDifferent connectivity options for DirectQuery
  • Orientação para quando você deve considerar o uso do DirectQuery em vez da importaçãoGuidance for when you should consider using DirectQuery rather than import
  • Desvantagens do uso do DirectQueryDrawbacks of using DirectQuery
  • Melhor prática para o uso do DirectQueryBest practice for using DirectQuery

Em resumo, a melhor prática para o uso da importação em vez do DirectQuery é a seguinte:In short, the best practice for using import versus DirectQuery is the following:

  • Você deve importar dados ao Power BI sempre que possível.You should import data to Power BI wherever possible. A importação aproveita o mecanismo de consulta de alto desempenho do Power BI e proporciona uma experiência completa e altamente interativa com os dados.Import takes advantage of the high-performance query engine of Power BI, and provides a highly interactive and fully featured experience over your data.
  • Se suas metas não puderem ser atendidas com a importação de dados, considere o uso do DirectQuery.If your goals can't be met by importing data, then consider using DirectQuery. Por exemplo, se os dados estão frequentemente em alteração e os relatórios devem refletir os dados mais recentes, o DirectQuery pode ser a melhor opção.For example, if the data is changing frequently and reports must reflect the latest data, DirectQuery may be best. No entanto, o uso do DirectQuery só será possível quando a fonte de dados subjacente puder fornecer consultas interativas (menos de 5 segundos) para a consulta típica de agregação e for capaz de lidar com a carga de consultas que será gerada.However, using DirectQuery is only feasible when the underlying data source can provide interactive queries (less than 5 seconds) for the typical aggregate query, and is able to handle the query load that will be generated. Além disso, a lista de limitações que acompanha o uso do DirectQuery deve ser considerada cuidadosamente.Additionally, the list of limitations that accompany use of DirectQuery should be considered carefully.

O conjunto de recursos oferecidos pelo Power BI para ambos os modos de conectividade – importação e DirectQuery – evoluirá ao longo do tempo.The set of capabilities offered by Power BI for both connectivity modes – import and DirectQuery - will evolve over time. Isso incluirá o fornecimento de mais flexibilidade ao usar dados importados, de maneira que a importação possa ser usada em mais casos, bem como a eliminação de algumas das desvantagens do uso do 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. Independentemente das melhorias, ao usar o DirectQuery o desempenho da fonte de dados subjacente sempre será uma consideração importante.Regardless of improvements, when using DirectQuery the performance of the underlying data source will always remain a major consideration. Se essa fonte de dados subjacente estiver lenta, o uso do DirectQuery para essa fonte ficará impraticável.If that underlying data source is slow, then using DirectQuery for that source will remain unfeasible.

Este artigo aborda o DirectQuery com o Power BI, e não o SQL Server Analysis Services.This article covers DirectQuery with Power BI, and not SQL Server Analysis Services. O DirectQuery também é um recurso do SQL Server Analysis Services e muitos dos detalhes descritos abaixo se aplicam ao seu uso, embora também existam diferenças importantes.DirectQuery is also a feature of SQL Server Analysis Services, and many of the details described below apply to its use, though there are also important differences. Para obter informações sobre o uso do DirectQuery com o SQL Server Analysis Services, consulte o white paper que fornece detalhes sobre o DirectQuery no 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.

Este artigo concentra-se no fluxo de trabalho recomendado para o DirectQuery, em que o relatório é criado no Power BI Desktop, mas também abrange a conexão diretamente no serviço do 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.

Modos de conectividade do Power BIPower BI connectivity modes

O Power BI se conecta a um grande número de fontes de dados variadas, que abrangem:Power BI connects to a large number of varied data sources, encompassing:

  • Serviços online (Salesforce, Dynamics 365 e outros)Online services (Salesforce, Dynamics 365, others)
  • Bancos de dados (SQL Server, Access, Amazon Redshift e outros)Databases (SQL Server, Access, Amazon Redshift, others)
  • Arquivos simples (Excel, JSON e outros)Simple files (Excel, JSON, others)
  • Outras fontes de dados (Spark, sites, Microsoft Exchange e outros)Other data sources (Spark, Web sites, Microsoft Exchange, others)

Para essas fontes, é possível importar os dados no Power BI.For these sources, it's possible to import the data to Power BI. Para algumas delas, também é possível conectar-se usando o DirectQuery.For some, it is also possible to connect using DirectQuery. O conjunto exato de fontes que dá suporte ao DirectQuery está descrito no artigo Fontes de dados com suporte pelo DirectQuery.The exact set of sources that support DirectQuery is described in the Data Sources supported by DirectQuery article. Mais fontes serão habilitadas para o DirectQuery no futuro, concentrando-se principalmente em fontes que possam proporcionar um bom desempenho de consulta interativa.More sources will be DirectQuery enabled in the future, focusing primarily on sources that can be expected to deliver good interactive query performance.

O SQL Server Analysis Services é um caso especial.SQL Server Analysis Services is a special case. Ao se conectar ao SQL Server Analysis Services, você poderá optar por importar os dados ou usar uma conexão dinâmica.When connecting to SQL Server Analysis Services, you can choose to import the data, or use a live connection. O uso de uma conexão dinâmica é semelhante ao DirectQuery, em que nenhum dado é importado e a fonte de dados subjacente é sempre consultada para atualizar um visual, mas uma conexão dinâmica é diferente em muitos outros aspectos, portanto, um termo diferente (dinâmica versus DirectQuery) é usado.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.

Essas três opções para conectar-se aos dados – importação, DirectQuery e conexão dinâmica – serão explicadas em detalhes nas seções a seguir.These three options for connecting to data – import, DirectQuery, and live connection – are explained in detail in the following sections.

Conexões de importaçãoImport connections

Ao usar Obter Dados no Power BI Desktop para se conectar a uma fonte de dados como o SQL Server e você escolher Importação, o comportamento dessa conexão será da seguinte maneira: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:

  • Durante a experiência Obter Dados inicial, cada conjunto de tabelas selecionadas definirá uma consulta que retornará um conjunto de dados (essas consultas podem ser editadas antes de carregar os dados, por exemplo, para aplicar filtros, agregar os dados ou unir tabelas diferentes).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).
  • Após o carregamento, todos os dados definidos por essas consultas serão importados para o cache do Power BI.Upon load, all of the data defined by those queries will be imported into the Power BI cache.
  • Com a criação de um visual no Power BI Desktop, os dados importados serão consultados.Upon building a visual within Power BI Desktop, the imported data will be queried. O repositório do Power BI garante que a consulta será rápida e, portanto, todas as alterações no visual serão refletidas imediatamente.The Power BI store ensures the query will be fast, hence all changes to the visual will be reflected immediately.
  • As alterações nos dados subjacentes não serão refletidas em nenhum visual.Any changes to the underlying data will not be reflected in any visuals. É necessário Atualizar, momento em que os dados serão importados novamente.It is necessary to Refresh, whereupon the data will be reimported.
  • Após a publicação do relatório (o arquivo .pbix) no serviço do Power BI, um conjunto de dados é criado e carregado no serviço do 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. Os dados importados são incluídos no conjunto de dados.The imported data is included with that dataset. Em seguida, é possível configurar a atualização agendada desses dados, por exemplo, para importar os dados novamente todos os dias.It is then possible to set up scheduled refresh of that data, for example, to reimport the data every day. Dependendo da localização da fonte de dados original, poderá ser necessário configurar um gateway de dados local.Depending upon the location of the original data source, it might be necessary to configure an On-premises data gateway.
  • Ao abrir um relatório existente no serviço do Power BI ou criar um novo relatório, os dados importados serão consultados novamente, garantindo a interatividade.When opening an existing report in the Power BI service, or authoring a new report, the imported data is queried again, ensuring interactivity.
  • Páginas inteiras de relatório ou visuais podem ser fixadas como blocos de dashboard.Visuals, or entire report pages, can be pinned as dashboard tiles. Os blocos serão atualizados automaticamente sempre que o conjunto de dados subjacente for atualizado.The tiles will be automatically refreshed whenever the underlying dataset is refreshed.

Conexões do DirectQueryDirectQuery connections

Ao usar Obter Dados no Power BI Desktop para se conectar a uma fonte de dados e você escolher DirectQuery, o comportamento dessa conexão será da seguinte maneira: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:

  • Durante a experiência Obter Dados inicial, a fonte é selecionada.During the initial Get Data experience, the source is selected. Para fontes relacionais, isso significa que um conjunto de tabelas é selecionado e cada uma ainda define uma consulta que retorna um conjunto de dados de forma lógica.For relational sources, this means a set of tables are selected and each still define a query that logically returns a set of data. Para fontes multidimensionais como SAP BW, somente a fonte é selecionada.For multidimensional sources, like SAP BW, only the source is selected.
  • No entanto, após o carregamento, os dados não serão realmente importados no repositório do Power BI.However, upon load, no data will actually be imported into the Power BI store. Em vez disso, após a criação de um visual no Power BI Desktop, as consultas serão enviadas à fonte de dados subjacente para recuperar os dados necessários.Instead, upon building a visual within Power BI Desktop, queries will be sent to the underlying data source to retrieve the necessary data. Dessa forma, o tempo levado para atualizar o visual dependerá do desempenho da fonte de dados subjacente.The time then taken to refresh the visual will depend on the performance of the underlying data source.
  • As alterações nos dados subjacentes não serão imediatamente refletidas em nenhum visual existente.Any changes to the underlying data will not be immediately reflected in any existing visuals. Ainda será preciso Atualizar, momento em que as consultas necessárias serão reenviadas para cada visual e o visual será atualizado conforme a necessidade.It is still necessary to Refresh, whereupon the necessary queries will be resent for each visual, and the visual updated as necessary.
  • Com a publicação do relatório no serviço do Power BI, isso resultará novamente em um Conjunto de Dados no serviço do Power BI, o mesmo que para importação.Upon publishing the report to the Power BI service, it will again result in a Dataset in the Power BI service, the same as for import. No entanto, nenhum dado será incluído nesse conjunto de dados.However, no data is included with that dataset.
  • Ao abrir um relatório existente no serviço do Power BI ou criar um novo relatório, a fonte de dados subjacente será novamente consultada para recuperar os dados necessários.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. Dependendo da localização da fonte de dados original, poderá ser necessário configurar um gateway de dados local, assim como será necessário para o modo de Importação se os dados forem atualizados.Depending upon the location of the original data source, it might be necessary to configure an On-premises data gateway, as is needed for Import mode if the data is refreshed.
  • Páginas inteiras de relatório ou visuais podem ser fixadas como blocos de Dashboard.Visuals, or entire report pages, can be pinned as Dashboard tiles. Para garantir que a abertura de um dashboard seja rápida, os blocos são atualizados automaticamente em um agendamento (por exemplo, a cada hora).To ensure that opening a dashboard will be fast, the tiles are automatically refreshed on a schedule (for example, every hour). A frequência dessa atualização pode ser controlada, a fim de refletir a frequência com que os dados são alterados e o grau de importância de ver os dados mais recentes.The frequency of this refresh can be controlled, to reflect how frequently the data is changing, and how important it is to see the latest data. Assim, ao abrir um dashboard, os blocos refletirão os dados de acordo com o momento da última atualização, e não necessariamente as alterações mais recentes feitas à fonte subjacente.Thus, when opening a dashboard, the tiles will reflect the data as of the time of the last refresh, and not necessarily the latest changes made to the underlying source. Um dashboard aberto sempre poderá ser atualizado para garantir que os dados mais recentes sejam exibidos.An open dashboard can always be Refreshed to ensure it is up-to-date.

Conexões dinâmicasLive connections

Ao se conectar ao SSAS (SQL Server Analysis Services), há uma opção para importar dados ou conectar-se dinamicamente ao modelo de dados selecionado.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. Se você selecionar importação, isso definirá uma consulta em relação a essa fonte externa do SSAS e os dados serão importados normalmente.If you select import, then you define a query against that external SSAS source, and the data is imported as normal. Se você optar por conectar-se dinamicamente, não haverá nenhuma consulta definida e todo o modelo externo será mostrado na lista de campos.If you select to connect live, then there is no query defined, and the entire external model is shown in the field list.

A situação descrita no parágrafo anterior aplica-se à conexão com as seguintes fontes, exceto que não há nenhuma opção para importar os dados: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:

  • Conjuntos de dados do Power BI (por exemplo, ao se conectar a um conjunto de dados do Power BI que foi criado anteriormente e publicado no serviço, com a finalidade de criar um novo relatório com base nele)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 ServicesCommon Data Services

O comportamento de relatórios com base em SSAS, após a publicação no serviço do Power BI, é semelhante aos relatórios do DirectQuery das seguintes maneiras:The behavior of reports over SSAS, upon publishing to the Power BI service, is similar to DirectQuery reports in the following ways:

  • Ao abrir um relatório existente no serviço do Power BI ou criar um novo relatório, a fonte de dados subjacente do SSAS será consultada (possivelmente exigindo um gateway de dados local)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)
  • Os blocos de dashboard serão atualizados automaticamente de acordo com um agendamento (como a cada hora ou qualquer frequência que seja definida)Dashboard tiles are automatically refreshed on a schedule (such as every hour, or whatever frequency is defined)

No entanto, também há diferenças importantes, incluindo que, para conexões dinâmicas, a identidade do usuário que abre o relatório sempre será passada para a fonte de dados subjacente do SSAS.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.

Deixando essas comparações de lado, vamos nos concentrar apenas no DirectQuery no restante deste artigo.With these comparisons out of the way, let's focus solely on DirectQuery for the rest of this article.

Quando o DirectQuery é útil?When is DirectQuery useful?

A tabela a seguir descreve cenários nos quais se conectar com o DirectQuery poderia ser especialmente útil, inclusive casos em que manter os dados na fonte original seria considerado benéfico.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. A descrição inclui uma discussão sobre a disponibilidade do cenário especificado no Power BI.The description includes a discussion about whether the specified scenario is available in Power BI.

LimitaçãoLimitation DescriçãoDescription
Dados com alterações frequentes e a necessidade de relatórios quase que "em tempo real"Data is changing frequently, and near ‘real-time’ reporting is needed Os modelos com os dados importados podem ser atualizados, no máximo, uma vez a cada hora.Models with Imported data can be refreshed at most once per hour. Portanto, se os dados estiverem continuamente em alteração e for necessário que os relatórios mostrem os dados mais recentes, o uso da Importação com a atualização agendada talvez não atenda a essas necessidades.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 not meet those needs. Observe também que é possível transmitir os dados diretamente para o Power BI, apesar da existência de limites para os volumes de dados compatíveis nesse caso.Note also that it is also possible to stream data directly into Power BI, though there are limits on the data volumes supported for this case.

Com o uso do DirectQuery, por outro lado, abrir ou atualizar um relatório ou dashboard sempre mostrará os dados mais recentes da fonte.Using DirectQuery, by contrast, means that opening or refreshing a report or dashboard will always show the latest data in the source. Além disso, os blocos de dashboard podem ser atualizados com mais frequência (tão frequentemente quanto a cada 15 minutos).Additionally, the dashboard tiles can be updated more frequently (as often as every 15 mins).
Os dados são muito grandesData is very large Se os dados forem muito grandes, certamente não será possível importá-los em sua totalidade.If the data is very large, then it certainly would not be feasible to import it all. O DirectQuery, por outro lado, não exige grande transferência de dados, pois ele é consultado no local.DirectQuery, by contrast, requires no large transfer of data, as it is queried in place.

No entanto, dados grandes poderiam indicar também que o desempenho das consultas nessa fonte subjacente é muito lento (como discutido na seção Implicações do uso do DirectQuery mais adiante neste artigo).However, large data might also imply that the performance of the queries against that underlying source is too slow (as discussed in Implications of using DirectQuery section, later in this article). Além disso, é claro que nem sempre é necessário importar a todos os dados detalhados.And it is not always necessary to import the full detailed data. Em vez disso, os dados podem ser agregados previamente durante a importação (e o Editor de Consultas serve justamente para facilitar esse processo).Instead the data can be pre-aggregated during import (and Query Editor makes it easy to do exactly this). Em última análise, é possível importar exatamente os dados de agregação necessários para cada visual.In the extreme, it would be possible to import exactly the aggregate data needed for each visual. Assim, embora o DirectQuery seja a abordagem mais simples para dados grandes, você deve sempre ter em mente que a importação de dados agregados poderá oferecer uma solução, caso a fonte subjacente esteja muito lenta.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.
Regras de segurança são definidas na fonte subjacenteSecurity rules are defined in the underlying source Para a importação dos dados, o Power BI se conectará à fonte de dados usando as credenciais atuais do usuário (no Power BI Desktop) ou as credenciais definidas como parte da configuração da atualização agendada (no serviço do Power BI).When the data is imported, Power BI will connect to the data source using the current user's credentials (from Power BI Desktop), or the credentials defined as part of configuring scheduled refresh (from the Power BI service). Assim, na publicação e compartilhamento desse relatório, deverá haver cuidado para que o compartilhamento seja feito somente com usuários com permissão para ver os mesmos dados ou para definir a Segurança em Nível de Linha como parte desse conjunto de dados.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.

Idealmente, como o DirectQuery sempre consulta a fonte subjacente, isso permitiria que qualquer segurança nessa fonte subjacente fosse aplicada.Ideally, because DirectQuery always queries the underlying source, this would allow any security in that underlying source to be applied. No entanto, atualmente o Power BI sempre se conectará com a fonte subjacente usando as mesmas credenciais que seriam usadas para a importação.However, today Power BI will always connect to the underlying source using the same credentials as would be used for Import.

Assim, até que o Power BI permita que a identidade do consumidor do relatório seja transmitida para a fonte subjacente, o DirectQuery não oferece nenhuma vantagem em relação a segurança da fonte de dados.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.
Houver aplicação de restrições de soberania de dadosData sovereignty restrictions apply Algumas organizações têm políticas de soberania de dados, resultando na impossibilidade de que os dados deixem o local da organização.Some organizations have policies around data sovereignty, meaning that data cannot leave the organization premises. Uma solução baseada na importação claramente apresentaria problemas.A solution based on import would clearly present issues. Por outro lado, com o DirectQuery os dados permanecem na fonte subjacente.By contrast, with DirectQuery that data remains in the underlying source.

No entanto, deve-se observar que, mesmo com o DirectQuery, alguns caches de dados no nível do visual são mantidos no serviço do Power BI (devido a atualização agendada dos blocos).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).
A fonte de dados subjacente é uma fonte OLAP contendo medidasUnderlying data source is an OLAP source, containing measures Se a fonte de dados contiver medidas (como SAP HANA ou SAP Business Warehouse), a importação dos dados ocasionará outros problemas.If the underlying data source contains measures (such as SAP HANA or SAP Business Warehouse), then importing the data brings other issues. Isso significa que os dados importados estão em um determinado nível de agregação, conforme definido pela consulta.It means that the data imported is at a particular level of aggregation, as defined by the query. Por exemplo, tomemos a medida TotalSales por Classe, Ano e Cidade.For example, measures TotalSales by Class, Year, and City. Nesse caso, se um visual for criado com solicitação de dados em um nível mais alto de agregação (como TotalSales por Ano), haverá uma agregação adicional do valor agregado.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. Isso é tranquilo no caso de medidas aditivas (como Sum, Min), mas é um problema para medidas não aditivas (como Average, DistinctCount).This is fine for additive measures (such as Sum, Min), but it's an issue for non-additive measures (such as Average, DistinctCount).

Para facilitar a obtenção dos dados de agregação corretos diretamente da fonte (conforme a necessidade de um visual específico), seria necessário enviar consultas por visual, como no 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.

Ao conectar-se com o SAP BW (Business Warehouse), a escolha do DirectQuery permite esse tratamento das medidas.When connecting to SAP Business Warehouse (BW), choosing DirectQuery allows for this treatment of measures. O suporte ao SAP BW é abordado mais detalhadamente em DirectQuery e SAP BW.Support for SAP BW is covered further in DirectQuery and SAP BW.

No entanto, atualmente o DirectQuery trata o SAP HANA como uma fonte relacional e, portanto, fornecerá um comportamento semelhante à importação.However, currently DirectQuery over SAP HANA treats it the same as a relational source, and hence provides similar behavior to import. Isso é abordado mais detalhadamente em DirectQuery e SAP HANA.This is covered further in DirectQuery and SAP HANA.

Portanto, em resumo, considerando os recursos atuais do DirectQuery no Power BI, os cenários em que ele oferece benefícios são os seguintes:So in summary, given the current capabilities of DirectQuery in Power BI, the scenarios where it offers benefits are the following:

  • Dados com alterações frequentes e a necessidade de relatórios quase que "em tempo real"Data is changing frequently, and near ‘real-time’ reporting is needed
  • Manipulação de dados muito grandes, sem a necessidade de agregação préviaHandling very large data, without the need to pre-aggregate
  • Houver aplicação de restrições de soberania de dadosData sovereignty restrictions apply
  • A fonte é uma fonte multidimensional que contém medidas (como o SAP BW)The source is a multidimensional source containing measures (such as SAP BW)

Os detalhes da lista anterior relacionam-se ao uso do Power BI isoladamente.The details in the previous list relate to the use of Power BI alone. Em vez disso, sempre há a opção de usar um modelo externo do SQL Server Analysis Services (ou do Azure Analysis Services) para importar dados e, em seguida, usar o Power BI para se conectar a esse modelo.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. Embora essa abordagem exija habilidades adicionais, ela oferece maior flexibilidade.While that approach would require additional skills, it does provide greater flexibility. Por exemplo, volumes muito maiores de dados podem ser importados e não há nenhuma restrição na frequência com que os dados podem ser atualizados.For example, much larger volumes of data can be imported, and there is no restriction on how frequently the data can be refreshed.

Implicações do uso do DirectQueryImplications of using DirectQuery

O uso do DirectQuery tem implicações potencialmente negativas, conforme detalhado nesta seção.Use of DirectQuery does have potentially negative implications, as detailed in this section. Algumas dessas limitações são ligeiramente diferentes de acordo com a fonte exata que está sendo usada.Some of those limitations are slightly different depending upon the exact source that is being used. Isso será indicado sempre que aplicável e artigos separados abordarão as fontes que são significativamente diferentes.This will be called out where applicable, and separate articles cover those sources that are substantially different.

Desempenho e carregamento na fonte subjacentePerformance and load on the underlying source

Ao usar o DirectQuery, a experiência geral dependerá muito do desempenho da fonte de dados subjacente.When using DirectQuery, the overall experience depends very much on the performance of the underlying data source. Se a atualização de cada visual (por exemplo, após a alteração de um valor de segmentação) levar alguns segundos (<5s), a experiência será razoável, podendo ainda ser lenta comparado à resposta imediata com a qual estamos acostumados ao importar os dados para o Power BI.If refreshing each visual (for example, after changing a slicer value) takes a few seconds (<5 s) 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. Se, em vez disso, a lentidão da fonte significar que os elementos visuais individuais demorarão mais do que isso (dezenas de segundos), a experiência se tornará muito ruim, possivelmente até ao ponto de as consultas atingirem o tempo limite.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.

Juntamente com o desempenho da fonte subjacente, é preciso avaliar cuidadosamente a carga que será imposta sobre ela (o que muitas vezes afetará o desempenho).Along with the performance of the underlying source, careful consideration should be paid to the load that will be placed upon it (that often impacts the performance). Como discutido mais detalhadamente abaixo, cada usuário que abre um relatório compartilhado e cada bloco de dashboard que é atualizado periodicamente, enviarão, pelo menos, uma consulta por visual à fonte subjacente.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. Esse fato exige que a fonte seja capaz de lidar com esse carregamento de consulta, mantendo, ao mesmo tempo, um desempenho razoável.This fact requires that the source be able to handle such a query load, while still maintaining reasonable performance.

Implicações de segurança ao combinar fontes de dadosSecurity implications when combining data sources

É possível usar várias fontes de dados em um modelo do DirectQuery, assim como ao importar dados, usando o recurso Modelos compostos.It's possible to use multiple data sources in a DirectQuery model, just as when you import data, by using the Composite models feature. Ao fazer isso, é importante entender como os dados são movidos entre as fontes de dados subjacentes e as implicações de segurança que isso gera.When you do this, it's important to understand how data is moved back and forth between the underlying data sources, and the security implications it brings.

Transformações de dados limitadasLimited data transformations

Da mesma forma, há limitações nas transformações de dados que podem ser aplicadas no Editor de Consultas.Similarly, there are limitations in the data transformations that can be applied within Query Editor. Com os dados importados, é possível aplicar facilmente um conjunto sofisticado de transformações para limpar e remodelar os dados antes de usá-los para criar visuais (como a análise de documentos JSON ou girar os dados de uma coluna para um formato orientado por linha).With imported data, a sophisticated set of transformations can easily be applied to clean and reshape the data before using it to create visuals (such as parsing JSON documents, or pivoting data from a column to a row orientated form). Essas transformações são mais limitadas no DirectQuery.Those transformations are more limited in DirectQuery. Primeiro, ao se conectar a uma fonte OLAP, como o SAP Business Warehouse, nenhuma transformação poderá ser definida e todo o "modelo" externo será obtido da fonte.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. Para fontes relacionais como o SQL Server, ainda é possível definir um conjunto de transformações por consulta, mas essas transformações são limitadas por questões de desempenho.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. Quaisquer dessas transformações precisarão ser aplicadas a cada consulta à fonte subjacente, ao invés de uma vez a cada atualização dos dados, portanto são limitadas àquelas transformações que possam ser convertidas razoavelmente em uma única consulta nativa.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. Se você usa uma transformação que é muito complexa, você receberá um erro que terá que ser excluído ou o modelo terá que ser mudado para o modo de Importação.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.

Além disso, a consulta resultante da caixa de diálogo Obter Dados ou do Editor de Consultas será usada em uma subseleção dentro de consultas geradas e enviada para recuperar os dados necessários a um visual.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. Portanto, a consulta definida no Editor de Consultas deverá ser válida nesse contexto.Thus the query defined in Query Editor must be valid within this context. Em particular, isso significa não será possível usar uma consulta com Expressões de Tabela Comum, nem uma que invoque Procedimentos armazenados.In particular, this means it is not possible to use a query using Common Table Expressions, nor one that invokes Stored Procedures.

Limitações de modelagemModeling limitations

O termo modelagem, nesse contexto, significa o ato de refinar e enriquecer os dados brutos, como parte da criação de um relatório que os utiliza.The term modeling in this context means the act of refining and enriching the raw data, as part of authoring a report using it. Os exemplos incluem:Examples include:

  • Definir relações entre tabelasDefining relationships between tables
  • Adicionar novos cálculos (colunas calculadas e medidas)Adding new calculations (calculated columns and measures)
  • Renomear e ocultar colunas e medidasRenaming and hiding columns and measures
  • Definir hierarquiasDefining hierarchies
  • Definir a formatação, a ordem de classificação e o resumo padrão de uma colunaDefining the formatting, default summarization and sort order for a column
  • Agrupar ou realizar clustering de valoresGrouping or clustering values

Ao usar o DirectQuery, muitos desses aprimoramentos de modelo ainda poderão ser realizados e certamente ainda haverá o princípio de que os dados brutos estarão sendo aprimorados para melhorar o consumo posterior.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. No entanto, há alguns recursos de modelagem que não estão disponíveis ou são limitados ao usar o DirectQuery.However, there are some modeling capabilities that are not available, or are limited, when using DirectQuery. Geralmente, as limitações são aplicadas para evitar problemas de desempenho.The limitations are generally applied to avoid performance issues. O conjunto de limitações que são comuns a todas as fontes de DirectQuery estão na lista com marcadores abaixo.The set of limitations that are common to all DirectQuery sources are listed in the following bulleted list. Limitações adicionais podem ser aplicadas a fontes individuais, conforme descrito em Detalhes específicos da fonte de dados, que encontra-se próximo ao final deste artigo.Additional limitations might apply to individual sources, as described in Data source specific details found near the end of this article.

  • Nenhuma hierarquia de datas interna: ao importar dados, por padrão, cada coluna de date/datetime também terá uma hierarquia de data interna disponível por padrão.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. Por exemplo, ao importar uma tabela de pedidos de vendas, que inclui uma coluna OrderDate e utilizar essa coluna em um visual, será possível escolher o nível apropriado (ano, mês, dia) a ser usado.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. Essa hierarquia interna de data não está disponível ao usar o modo DirectQuery.This built-in date hierarchy is not available when using DirectQuery mode. No entanto, observe que, se a tabela Date estiver disponível na fonte subjacente (como é comum em muitos data warehouses), as funções de Inteligência de Dados Temporais do DAX poderão ser usadas normalmente.Note however that if there is a Date table available in the underlying source (as is common in many data warehouses) then the DAX Time Intelligence functions can be used as normal.

  • Suporte para data/hora com precisar apenas até os segundos: ao usar colunas de hora em seu conjunto de dados, o Power BI emite apenas consultas para a origem subjacente até o nível de detalhe dos segundos.Date/time support only to second accuracy: When using time columns in your dataset, Power BI only issues queries to the underlying source to a level of detail of seconds. Não são enviadas consultas à origem do DirectQuery para obter informações de milissegundos, portanto, você precisará remover essa parte das horas das colunas de origem.Queries are not sent to the DirectQuery source for milliseconds, so you will need to remove this part of the times from your source columns.

  • Limitações em colunas calculadas: as colunas calculadas são limitadas a serem intra-linha e, sendo assim, só podem fazer referência a valores de outras colunas da mesma tabela, sem o uso de quaisquer funções de agregação.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. Além disso, as funções escalares do DAX (como LEFT()) que são permitidas serão limitadas àquelas que simplesmente podem ser enviadas por push à fonte subjacente e, portanto, variarão de acordo com os recursos exatos da fonte.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. As funções para as quais não há suporte não serão listadas no preenchimento automático durante a criação do DAX para uma coluna calculada e resultarão em um erro se forem usadas.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.

  • Não há suporte para as funções DAX pai-filho: no modelo DirectQuery não é possível usar a família de funções DAX PATH(), que geralmente manipulam estruturas Pai-Filho (como plano de contas ou hierarquias de funcionários).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).

  • Não há suporte para tabelas calculadas: a capacidade de definir uma tabela calculada usando uma expressão DAX não tem suporte no modo DirectQuery.Calculated tables are not supported: The ability to define a calculated table using a DAX expression is not supported in DirectQuery mode.

  • Filtragem de relacionamentos: O uso da filtragem bidirecional é descrito neste white paper detalhado (o white paper apresenta exemplos no contexto do SQL Server Analysis Services, mas os pontos fundamentais se aplicam igualmente ao Power BI).Relationship filtering: Use of 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).

  • Sem Clustering: ao usar o DirectQuery, não é possível usar o recurso Clustering para localizar grupos automaticamenteNo Clustering: When using DirectQuery, it is not possible to use the Clustering capability, to automatically find groups

Limitações de relatóriosReporting limitations

Quase todos os recursos de relatórios têm suporte para modelos do DirectQuery.Almost all reporting capabilities are supported for DirectQuery models. Sendo assim, desde que a fonte subjacente ofereça um nível adequado de desempenho, o mesmo conjunto de visualizações poderá ser usado.As such, so long as the underlying source offers a suitable level of performance, the same set of visualizations can be used. No entanto, há algumas limitações importantes em alguns dos recursos oferecidos no serviço do Power BI depois que um relatório é publicado, conforme descrito nos seguintes marcadores: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:

  • Não há suporte para Insights Rápidos: Os Insights Rápidos do Power BI pesquisam diferentes subconjuntos do conjunto de dados durante a aplicação de um conjunto de algoritmos sofisticados para descobrir insights que possam ser interessantes.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. Dada a necessidade de consultas de desempenho muito alto, essa funcionalidade não está disponível em conjuntos de dados que usam o DirectQuery.Given the need for very high-performance queries, this capability is not available on datasets using DirectQuery.
  • Não há suporte para P e R: as P e R do Power BI permitem explorar dados usando recursos intuitivos em idioma natural e receber as respostas na forma de quadros e gráficos.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. No entanto, atualmente não há suporte em conjuntos de dados que usam o DirectQuery.However, it is currently not supported on datasets using DirectQuery.
  • O uso de Explorar no Excel provavelmente resultará em desempenho insatisfatório: é possível explorar os dados usando o recurso "Explorar no Excel" em um conjunto de dados.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. Isso permitirá que Tabelas dinâmicas e Gráficos dinâmicos sejam criados no Excel.This will allow Pivot Tables and Pivot Charts to be created in Excel. Embora haja suporte para essa funcionalidade em conjuntos de dados que usam o DirectQuery, o desempenho será geralmente mais lento do que na criação de visuais no Power BI e, portanto, se o uso do Excel for importante para os seus cenários, isso deverá ser considerado em sua decisão de usar o 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.

SegurançaSecurity

Conforme discutido anteriormente neste artigo, um relatório que utiliza o DirectQuery sempre usará as mesmas credenciais fixas para se conectar à fonte de dados subjacente, após publicar no serviço do 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. Novamente, observe que isso refere-se especificamente ao DirectQuery e não às conexões dinâmicas ao SQL Server Analysis Services, que são diferentes nesse sentido.Again, note this refers specifically to DirectQuery, not to live connections to SQL Server Analysis Services, which is different in this respect. Portanto, imediatamente após a publicação de um relatório do DirectQuery, será necessário configurar as credenciais do usuário que serão usadas.Hence immediately after publish of a DirectQuery report, it is necessary to configure the credentials of the user that will be used. Até que isso seja feito, a abertura do relatório no serviço do Power BI poderá resultar em um erro.Until this is done, opening the report on the Power BI service would result in an error.

Depois que as credenciais do usuário forem fornecidas, elas serão usadas, independentemente do usuário que abre o relatório.Once the user credentials are provided, then those credentials will be used, irrespective of the user who opens the report. Nesse sentido, isso é exatamente como os dados importados, em que cada usuário verá os mesmos dados, a menos que a Segurança em Nível de Linha tenha sido definida como parte do relatório.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. Portanto, deverá haver a mesma atenção no compartilhamento do relatório, caso haja regras de segurança definidas na fonte subjacente.Hence the same attention must be paid to sharing the report, if there are any security rules defined in the underlying source.

Comportamento no serviço do Power BIBehavior in the Power BI service

Esta seção descreve o comportamento de um relatório do DirectQuery no serviço do Power BI, principalmente para podermos entender o grau de carregamento que será colocado na fonte de dados de back-end, dado o número de usuários com os quais o relatório e o dashboard serão compartilhados, a complexidade do relatório e se a Segurança em Nível de Linha foi definida no relatório.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.

Relatórios – abrir, interagir, editarReports – opening, interacting with, editing

Quando um relatório é aberto, todos os visuais na página atualmente visível são atualizados.When a report is opened, then all the visuals on the currently visible page will refresh. Cada visual geralmente exigirá pelo menos uma consulta à fonte de dados subjacente.Each visual will generally require at least one query to the underlying data source. Alguns visuais podem exigir mais de uma consulta (por exemplo, se mostra valores de agregação de duas tabelas de fatos diferentes ou se contém uma medida mais complexa ou se contém totais de uma medida não aditiva, como 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). Mover para uma nova página causará a atualização desse visuais, resultando em um novo conjunto de consultas à fonte subjacente.Moving to a new page will result in those visuals being refreshed, resulting in a new set of queries to the underlying source.

Cada interação do usuário no relatório pode resultar na atualização de visuais.Every user interaction on the report might result in visuals being refreshed. Por exemplo, a seleção de um valor diferente em uma segmentação exigirá o envio de um novo conjunto de consultas para atualizar todos os visuais afetados.For example, selecting a different value on a slicer will require sending a new set of queries to refresh all of the affected visuals. O mesmo é verdadeiro ao clicar em um visual para realizar destaques cruzados de outros visuais ou alterar um filtro.The same is true for clicking on a visual to cross-highlight other visuals, or changing a filter.

Da mesma forma, a edição de um novo relatório exigirá o envio de consultas para cada etapa no caminho para se produzir o visual final desejado.Similarly, editing a new report will require queries to be sent for each step on the path to produce the final desired visual.

Há o cache de alguns resultados, de modo que a atualização de um visual seja instantânea, caso os mesmos resultados tenham sido recentemente obtidos.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. Esses caches não são compartilhados entre usuários, caso haja qualquer Segurança em Nível de Linha definida como parte do relatório.Such caches are not shared across users, if there is any Row Level Security defined as part of the report.

Atualização do dashboardDashboard Refresh

Visuais individuais ou páginas inteiras podem ser fixados como blocos no dashboard.Individual visuals, or entire pages, can be pinned to dashboard as tiles. Assim, os blocos com base em conjuntos de dados do DirectQuery são atualizados automaticamente de acordo com um agendamento, resultando no envio de consultas à fonte de dados de back-end.Tiles based on DirectQuery datasets are then refreshed automatically according to a schedule, resulting in queries being sent to the backend data source. Por padrão, isso ocorre a cada hora, mas pode ser configurado como parte das configurações do conjunto de dados para ocorrer entre semanalmente e a cada 15 minutos.By default, this occurs every hour, but can be configured as part of Dataset settings to be between weekly, and every 15 minutes.

Se nenhuma Segurança em Nível de Linha for definida no modelo, isso significará que cada bloco deverá ser atualizado uma vez e os resultados compartilhados entre todos os usuários.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. Se a Segurança em Nível de Linha for definida, poderá ocorrer um grande efeito multiplicador – cada bloco exige que consultas separadas por usuário sejam enviadas à fonte subjacente.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.

Assim, um dashboard com dez blocos, compartilhado com 100 usuários, criado em um conjunto de dados usando o DirectQuery com a Segurança em Nível de Linha e configurado para ser atualizado a cada 15 minutos, poderá resultar em, pelo menos, 1.000 consultas enviadas a cada 15 minutos à fonte de back-end.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.

Portanto, deverá ser dada uma consideração especial em relação ao uso da Segurança em Nível de Linha e da configuração do agendamento de atualização.Hence careful consideration must be paid to the use of Row Level Security, and the configuring of the refresh schedule.

Tempo limiteTimeouts

Um tempo limite de quatro minutos é aplicado às consultas individuais no serviço do Power BI e consultas que levem mais tempo falharão.A timeout of four minutes is applied to individual queries in the Power BI service, and queries taking longer than that will fail. Como enfatizado anteriormente, é recomendável que o DirectQuery seja usado para fontes que forneçam desempenho próximo ao da consulta interativa, portanto, esse limite se destina a impedir problemas de tempos de execução excessivamente longos.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.

Outras implicaçõesOther implications

Outras implicações gerais do uso de DirectQuery são:Some other general implications of using DirectQuery are as follows:

  • Se os dados mudam constantemente, é necessário Atualizar para garantir que os dados mais recentes sejam mostrados: dado o uso dos caches, não há garantias de que o visual sempre mostre os dados mais recentes.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. Por exemplo, um visual pode mostrar as transações do dia anterior.For example, a visual might show the transactions in the last day. Então, devido a uma alteração de segmentação de dados, ele poderá ser atualizado para mostrar as transações dos últimos dois dias, incluindo algumas transações recentes que acabaram de chegar.Then due to a slicer being changed, it might refresh to show the transactions for the last two days, including some recent, newly arrived transactions. Ao retornar a segmentação de dados ao seu valor original, os valores previamente obtidos armazenados em cache seriam exibidos novamente e isso não incluiria a transação recentemente chegada que foi vista antes.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.

    Selecionar Atualizar limpará todos os caches e atualizará todos os visuais na página para exibir os dados mais recentes.Selecting Refresh will clear any caches, and refresh all the visuals on the page to show the latest data.

  • Se os dados mudam constantemente, não há garantias de consistência entre os visuais: visuais diferentes, na mesma página ou em páginas diferentes, podem ser atualizados em diferentes momentos.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. Portanto, se os dados na fonte subjacente estiverem sendo alterados, não haverá nenhuma garantia de que cada visual estará mostrando os dados no mesmo ponto do tempo.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. Na verdade, considerando que, às vezes, mais de uma consulta é necessária para um único visual (por exemplo, para obter os detalhes e os totais), não há garantia de consistência, mesmo em um único visual.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. Essa garantia exigiria a sobrecarga da atualização de todos os visuais sempre que qualquer visual fosse atualizado, junto com o uso de recursos caros como o Isolamento do Instantâneo na fonte de dados subjacente.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.

    Esse problema poderá ser reduzido em grande parte ao selecionar novamente Atualizar, o que atualizará todos os visuais da página.This issue can be mitigated to a large extent by again selecting Refresh, to refresh all of the visuals on the page. E observe que, mesmo com o uso do modo de Importação, há um problema semelhante para garantir consistência, caso seja feita a importação de dados de mais de uma tabela.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.

  • A atualização no Power BI Desktop é necessária para refletir as mudanças nos metadados: depois que um relatório for publicado, o recurso Atualizar atualizará os visuais no relatório.Refresh in Power BI Desktop is needed to reflect any metadata changes: After a report is published, Refresh will refresh the visuals in the report. Se o esquema da fonte subjacente for alterado, essas alterações não serão aplicadas automaticamente para alterar os campos disponíveis na lista de campos.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. Portanto, se tabelas ou colunas foram removidas da fonte subjacente, isso poderá resultar em falha de consulta após a atualização.Thus if tables or columns have been removed from the underlying source, it might result in query failure upon refresh. Abrir o relatório no Power BI Desktop e escolher Atualizar vai causar a atualização dos campos no modelo para que as alterações sejam refletidas.Opening the report in Power BI Desktop, and choosing Refresh, will update the fields in the model to reflect the changes.

  • Limite de um milhão de linhas retornadas em qualquer consulta: há um limite fixo de um milhão de linhas colocado no número de linhas que podem ser retornadas em qualquer consulta única à fonte subjacente.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. Isso geralmente não tem nenhuma implicação prática e os visuais em si não vão exibir essa quantidade de pontos.This generally has no practical implications, and visuals themselves aren’t going to display that many points. No entanto, o limite poderá ocorrer nos casos em que Power BI não estiver otimizando totalmente as consultas enviadas e houver algum resultado intermediário que esteja sendo solicitado que exceda o 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. Isso também poderá ocorrer durante a criação de um visual, no caminho para um estado final mais razoável.It can also occur whilst building a visual, on the path to a more reasonable final state. Por exemplo, a inclusão de Customer e TotalSalesQuantity alcançaria esse limite se houvesse mais de 1 milhão de clientes até que algum filtro fosse aplicado.For example, including Customer and TotalSalesQuantity would hit this limit if there were more than 1 million customers, until some filter were applied.

    O erro retornado seria "O conjunto de resultados de uma consulta a uma fonte de dados externa excedeu o tamanho máximo permitido de '1000000' linhas".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.”

  • Não é possível alterar do modo de importação para o DirectQuery: Embora seja possível alternar um modelo do modo DirectQuery para usar o modo de importação, isso significa que todos os dados necessários precisam ser importados.Cannot change from import to DirectQuery mode: While it's possible to switch a model from DirectQuery mode to use import mode, this means all the necessary data must be imported. Também não é possível mudar de volta (principalmente devido ao conjunto de recursos sem suporte no modo DirectQuery).It is also not possible to switch back (primarily due to the set of features not supported in DirectQuery mode). Os modelos do DirectQuery em fontes multidimensionais, como SAP BW, também não podem ser alternados de DirectQuery para importação devido ao tratamento diferente das medidas externas.DirectQuery models over multidimensional sources like SAP BW, also cannot be switched from DirectQuery to import, due to the different treatment of external measures.

DirectQuery no serviço do Power BIDirectQuery in the Power BI service

Todas as fontes têm suporte no Power BI Desktop.All sources are supported from Power BI Desktop. Algumas fontes também estão disponíveis diretamente de dentro do serviço do Power BI.Some sources are also available directly from within the Power BI service. Por exemplo, é possível que um usuário empresarial use o Power BI para conectar seus dados no Salesforce e obtenha imediatamente um dashboard, sem usar o 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.

Apenas duas das fontes habilitadas do DirectQuery estão disponíveis diretamente no serviço:Only two of the DirectQuery enabled-sources are available directly in the service:

  • SparkSpark
  • SQL Data Warehouse do AzureAzure SQL Data Warehouse

No entanto, é recomendável que qualquer uso do DirectQuery nessas duas fontes seja iniciado no Power BI Desktop.However, it is recommended that any use of DirectQuery over those two sources start within Power BI Desktop. A razão é que, quando a conexão é estabelecida inicialmente no serviço do Power BI, muitas limitações importantes serão aplicadas, o que significa que, enquanto que o início tenha sido fácil (começando no serviço do Power BI), haverá limitações em qualquer aperfeiçoamento adicional do relatório resultante (por exemplo, não será possível criar cálculos ou usar muitos recursos analíticos ou até mesmo atualizar os metadados para refletirem as alterações ao esquema subjacente).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).

Diretrizes para usar o DirectQuery com êxitoGuidance for using DirectQuery successfully

Se você pretende usar o DirectQuery, esta seção fornece algumas diretrizes de alto nível de como garantir o sucesso.If you're going to use DirectQuery, then this section provides you with some high-level guidance on how to ensure success. As diretrizes desta seção são derivadas das implicações do uso do DirectQuery descritas neste artigo.The guidance in this section is derived from the implications of using DirectQuery that have been described in this article.

Desempenho de fonte de dados de back-endBackend data source performance

Você deve validar se os visuais simples poderão ser atualizados em tempo razoável, o que deve ser dentro de 5 segundos, para proporcionar uma experiência interativa razoável.You should validate that simple visuals will be able to refresh in a reasonable time, which should be within 5 seconds to have a reasonable interactive experience. Certamente, se os visuais estiverem demorando mais de 30 segundos, será muito provável que outros problemas ocorrerão após a publicação do relatório, tornando a solução impraticável.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.

Se as consultas estiverem lentas, o primeiro ponto de investigação será o exame das consultas que estão sendo enviadas à fonte subjacente e o motivo do desempenho de consulta observado.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. Este artigo não aborda a grande variedade de melhores práticas de otimização de banco de dados em todo o conjunto de possíveis fontes subjacentes, mas aplica-se às práticas padrão de banco de dados aplicáveis à maioria das situações:This article 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:

  • Os relacionamentos com base em colunas de inteiros geralmente têm melhor desempenho que uniões em colunas de outros tipos de dadosRelationships based on integer columns generally perform better than joins on columns of other data types
  • Os índices apropriados devem ser criados, o que geralmente exige a utilização de índices de repositório de coluna nas fontes que dão suporte a eles (por exemplo, o 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).
  • Todas as estatísticas necessárias na fonte devem ser atualizadasAny necessary statistics in the source should be updated

Diretrizes de design de modeloModel Design Guidance

Ao definir o modelo, considere o seguinte:When defining the model, consider doing the following:

  • Evite consultas complexas no Editor de Consultas.Avoid complex queries in Query Editor. A consulta definida no Editor de Consultas será convertida em uma única consulta SQL, que será então incluída na subseleção de todas as consultas enviadas a essa tabela.The query that's defined in the Query Editor will be translated into a single SQL query, which will then be included in the subselect of every query sent to that table. Se essa consulta for complexa, poderá resultar em problemas de desempenho em todas as consultas enviadas.If that query is complex, it might result in performance issues on every query sent. A consulta SQL real de um conjunto de etapas pode ser obtida através da seleção da última etapa no Editor de Consultas e a escolha de Exibir Consulta Nativa no menu de contexto.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.

  • Mantenha as medidas simples.Keep measures simple. Pelo menos inicialmente, é recomendável limitar as medidas a agregações simples.At least initially, it is recommended to limit measures to simple aggregates. Em seguida, se as medidas tiverem um desempenho satisfatório, medidas mais complexas poderão ser definidas, atentando-se, porém, ao desempenho de cada uma delas.Then if the measures perform in a satisfactory manner, more complex measures can be defined, but paying attention to the performance for each.

  • Evite relações em colunas calculadas.Avoid relationships on calculated columns. Isso é relevante para bancos de dados nos quais é necessário realizar junções de várias colunas.This is relevant to databases where it is necessary to perform multi-column joins. Atualmente o Power BI não permite que uma relação seja baseada em várias colunas, como a FK/PK.Power BI today does not allow a relationship to be based on multiple columns as the FK/PK. A solução comum é concatenar as colunas usando uma coluna calculada e basear a união nessa coluna.The common workaround is to concatenate the columns together using a calculated column, and base the join on that. Embora essa solução seja razoável para os dados importados, no caso do DirectQuery ela resultará em uma junção em uma expressão que geralmente impede o uso de quaisquer índices, levando a um desempenho insatisfatório.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. A única solução alternativa é realmente materializar as várias colunas em uma única coluna no banco de dados subjacente.The only workaround is to actually materialize the multiple columns into a single column in the underlying database.

  • Evite relações em colunas uniqueidentifier.Avoid relationships on uniqueidentifier columns. O Power BI não dá suporte nativo ao tipo de dados uniqueidentifier.Power BI does not natively support a datatype of uniqueidentifier. Portanto, a definição de uma relação entre colunas do tipo uniqueidentifier resultará em uma consulta com uma união envolvendo uma Cast.Hence defining a relationship between columns of type uniqueidentifier column will result in a query with a join involving a Cast. Novamente, isso geralmente levará ao desempenho insatisfatório.Again, this commonly leads to poor performance. Até que esse caso seja especificamente otimizado, a única solução alternativa seria materializar colunas de um tipo alternativo no banco de dados subjacente.Until this case is specifically optimized, the only workaround is to materialize columns of an alternative type in the underlying database.

  • Ocultar a coluna to em relações.Hide the to column on relationships. A coluna to nas relações (geralmente a chave primária na tabela to) deve ser ocultada, para que não apareça na lista de campos e, portanto, não possa ser usada em visuais.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. Geralmente, as colunas em que as relações se baseiam são, na verdade, colunas do sistema (por exemplo, chaves alternativas em um data warehouse) e ocultar essas colunas é sempre uma boa prática.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. Caso a coluna tenha significado, introduza uma coluna calculada que seja visível e que tenha uma expressão simples de ser igual à chave primária.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. Por exemplo:For example:

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

    A razão para isso é para simplesmente evitar um problema de desempenho que possa ocorrer, caso um visual inclua a coluna de chave primária.The reason for doing this is simply to avoid a performance issue that can occur otherwise if a visual includes the primary key column.

  • Examine todos os usos de colunas calculadas e alterações de tipo de dados.Examine all uses of calculated columns and data type changes. O uso desses recursos não é necessariamente prejudicial, pois eles resultam em consultas enviadas à fonte subjacente contendo expressões em vez de referências simples a colunas que, novamente, podem resultar em índices não utilizados.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.

  • Evite usar filtragem cruzada bidirecional em relacionamentos.Avoid use of the bi-directional cross filtering on relationships. O uso de filtragem cruzada bidirecional pode levar a instruções de consulta que não têm um bom desempenho.Use of bi-directional cross filtering can lead to query statements that don't perform well.

  • Experimente com a configuração Pressupor integridade referencial.Experiment with setting Assume referential integrity. A configuração Pressupor integridade referencial em relações permite que as consultas usem instruções INNER JOIN em vez de OUTER JOIN.The Assume Referential Integrity setting on relationships enables queries to use INNER JOIN statements rather than OUTER JOIN. Isso geralmente melhora o desempenho de consulta, embora dependa de especificidades da fonte de dados.This generally improves query performance, though it does depend on the specifics of the data source.

  • Não use a filtragem de dados relativos no Editor de Consultas.Do not use the relative data filtering in Query Editor. É possível definir a filtragem de data relativa no Editor de Consultas.It's possible to define relative date filtering in Query Editor. Por exemplo, para filtrar as linhas em que a data esteja nos últimos 14 dias.For example, to filter to the rows where the date is in the last 14 days.

    No entanto, isso será convertido em um filtro com base na data fixada, como no momento em que a consulta foi criada.However, this will be translated into a filter based on the fixed date, as at the time the query was authored. Isso pode ser observado através da visualização da consulta nativa.This can be seen from viewing the native query.

    Certamente esse não era o resultado que se esperava.This is almost certainly not what was wanted. Em vez disso, para garantir que o filtro seja aplicado com base na data do momento em que o relatório é executado, aplique o filtro no relatório como um Filtro de Relatório.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. Atualmente, isso seria realizado por meio da criação de uma coluna calculada, calculando o número de dias atrás (usando a função DAX DATE()) e, em seguida, usando essa coluna calculada em um filtro.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.

Diretrizes de design de relatórioReport Design Guidance

Ao criar um relatório usando uma conexão do DirectQuery, observe as seguintes diretrizes:When creating a report using a DirectQuery connection, adhere to the following guidance:

  • Considere o uso das opções de Redução de consulta: o Power BI proporciona opções no relatório para enviar menos consultas e desabilitar determinadas interações que podem resultar em uma experiência prejudicada, caso as consultas resultantes levem muito tempo para serem executadas.Consider use of Query Reduction options: Power BI provides options in the report to send fewer queries, and to disable certain interactions that would result in a poor experience if the resulting queries take a long time to execute. Para acessar essas opções na Power BI Desktop, vá para Arquivo > Opções e configurações > Opções e selecione Redução de consulta.To access these options in Power BI Desktop, go to File > Options and settings > Options and select Query reduction.

    Marcar seleções da caixa em Redução de consulta permite desativar o realce cruzado em todo o relatório.Checking box selections on the Query reduction let you disable cross-highlighting throughout your entire report. Você também pode mostrar um botão Aplicar para segmentações de dados e/ou seleções de filtro, o que permite que você crie muitas segmentações de dados e seleções de filtro antes de aplicá-las, o que impede que as consultas sejam enviadas até que você selecione o botão Aplicar na segmentação de dados.You can also show an Apply button to slicers and/or filter selections, which lets you then make many slicer and filter selections before applying them, which results in no queries being sent until you select the Apply button on the slicer. As seleções em seguida podem ser usadas para filtrar os dados.Your selections can then be used to filter the data.

    Essas opções serão aplicadas ao relatório enquanto você interage com ele no Power BI Desktop, além de quando os usuários consomem o relatório no serviço do Power BI.These options will apply to your report while you interact with it in Power BI Desktop, as well as when your users consume the report in the Power BI service.

  • Aplique filtros primeiro: aplique todos os filtros adequados sempre no início da criação de um visual.Apply filters first: Always apply any applicable filters at the start of building a visual. Por exemplo, em vez de arrastar na TotalSalesAmount e ProductName e, em seguida, filtrar para um determinado ano, aplique o filtro em Year no início.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. Isso porque cada etapa da criação de um visual enviará uma consulta e, embora seja possível fazer uma alteração antes que a primeira consulta seja concluída, isso ainda manterá o carregamento desnecessário na fonte subjacente.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. Ao aplicar os filtros no início, as consultas intermediárias serão geralmente menos dispendiosas.By applying filters early, it generally makes those intermediate queries less costly. Além disso, não aplicar os filtros no início poderá levar ao limite de 1 milhão de linhas mencionado acima ser atingido.Also, failing to apply filters early can result in hitting the 1-m row limit above.

  • Limite o número de visuais em uma página: ao abrir uma página (ou alterar uma segmentação de dados ou um filtro no nível da página), todos os visuais em uma página são atualizados.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. Também há um limite no número de consultas que são enviadas em paralelo, assim, conforme o número de visuais aumenta, alguns desses visuais serão atualizados em série, aumentando o tempo necessário para atualizar a página inteira.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. Assim, recomendamos limitar o número de visuais em uma única página e, em vez disso, ter mais páginas mais simples.For this reason, it's recommended to limit the number of visuals on a single page, and instead have more, simpler pages.

  • Considere desativar a interação entre visuais: Por padrão, as visualizações em uma página de relatório podem ser usadas para filtro cruzado e realce cruzado de outras visualizações na página.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. Por exemplo, ao selecionar "1999" no gráfico de pizza, é realizado o destaque cruzado do gráfico de colunas para mostrar as vendas por categoria para "1999".For example, having selected “1999” on the pie chart, the column chart is cross highlighted to show the sales by category for “1999”.

    No DirectQuery, essas filtragens cruzadas e destaques cruzados exigem o envio de consultas à fonte subjacente, portanto a interação deverá ser desligada, se o tempo necessário para responder às seleções do usuário for exageradamente longo.In DirectQuery such cross-filtering and cross-highlighting require queries to be submitted to the underlying source, so the interaction should be switched off if the time taken to respond to users' selections would be unreasonably long. No entanto, essa interação pode ser desligada para todo o relatório (conforme descrito acima para Opções de redução de consulta) ou caso a caso conforme descrito neste artigo.However, this interaction can be switched off, either for the entire report (as described above for Query reduction options), or on a case-by-case basis as described in this article.

Além da lista de sugestões acima, observe que cada uma das seguintes funcionalidades de relatório poderá causar problemas de desempenho:In addition to the above list of suggestions, note that each of the following reporting capabilities can cause performance issues:

  • Filtros de medida: os visuais que contêm medidas (ou agregações de colunas) podem conter filtros nessas medidas.Measure filters: Visuals containing measures (or aggregates of columns) can contain filters in those measures. Por exemplo, o visual abaixo mostra SalesAmount por Categoria, incluindo somente as categorias com mais de 20 milhões em vendas.For example, the visual below shows SalesAmount by Category, but only including those Categories with more than 20M of sales.

    Isso resultará no envio de duas consultas à fonte subjacente:This will result in two queries being sent to the underlying source:

    • A primeira consulta recuperará as Categorias que atendem à condição (vendas > 20 milhões)The first query will retrieve the Categories meeting the condition (Sales > 20M)
    • Em seguida, a segunda consulta recuperará os dados necessários para o visual, incluindo as Categorias que atendem à condição na cláusula WHERE.The second query will then retrieve the necessary data for the visual, including the Categories that met the condition in the WHERE clause.

    Isso geralmente terá um bom desempenho se houver centenas ou milhares de categorias, como neste exemplo.This generally performs fine if there are hundreds or thousands of categories, as in this example. O desempenho poderá ser prejudicado se o número de categorias for muito maior (e, de fato, a consulta falhará se houver mais de 1 milhão categorias que atendem à condição devido ao limite de 1 milhão de linhas já discutido).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).

  • Filtros TopN: é possível definir filtros avançados para filtrar somente os N valores mais importantes (ou menos importantes) classificados por alguma medida, por exemplo, para incluir somente as 10 categorias mais importantes no visual acima.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. Novamente, isso resultará no envio de duas consultas à fonte subjacente.This will again result in two queries being sent to the underlying source. No entanto, a primeira consulta retornará todas as categorias da fonte subjacente e, em seguida, os TopN serão determinados com base nos resultados retornados.However, the first query will return all categories from the underlying source, and then the TopN are determined based on the returned results. Dependendo da cardinalidade da coluna envolvida, isso poderá causar problemas de desempenho (ou falhas de consulta devido ao limite de 1 milhão de linhas).Depending on the cardinality of the column involved, this can lead to performance issues (or query failures due to the 1-m row limit).

  • Valor mediano: geralmente, qualquer agregação (Soma, Contagem Distinta, etc.) é enviada por push à fonte subjacente.Median: Generally, any aggregation (Sum, Count Distinct, so on) is pushed to the underlying source. No entanto, isso não é verdade para a Mediana, pois geralmente não há suporte para essa agregação na fonte de subjacente.However, this is not true for Median, as this aggregate is generally not supported by the underlying source. Nesses casos, os dados de detalhes são recuperados da fonte subjacente e a Mediana é calculada com base nos resultados retornados.In such cases, the detail data is retrieved from the underlying source, and the Median calculated from the returned results. Isso é razoável quando a mediana deve ser calculada em um número relativamente pequeno de resultados, mas ocorrerão problemas de desempenho (ou falhas de consulta devido ao limite de 1 milhão de linhas) se a cardinalidade for grande.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 1-m row limit) will occur if the cardinality is large. Por exemplo, População do País Mediana seria razoável, mas Preço de Vendas Mediana ce não.For example, Median Country Population might be reasonable, but Median Sales Price might not be.

  • Filtros de texto avançados ("contém" e similares): ao filtrar uma coluna de texto, a filtragem avançada permite o uso de filtros como "contém" e "começa com", por exemplo.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. Esses filtros certamente poderão causar degradação no desempenho para algumas fontes de dados.These filters can certainly result in degraded performance for some data sources. Especificamente, o filtro "contém" padrão não deverá ser usado se houver necessidade de uma correspondência exata ("é" ou "não é").In particular, the default ‘contains’ filter should not be used if what is required is an exact match (‘is’ or ‘is not’). Embora os resultados possam ser os mesmos, dependendo dos dados reais, o desempenho poderá ser drasticamente diferente devido ao uso de índices.Although the results might be the same, depending on the actual data, the performance might be drastically different due to the use of indexes.

  • Segmentações de dados de seleção múltipla: por padrão, as segmentações de dados permitem que seja realizada apenas uma única seleção.Multi select slicers: By default, slicers only allow a single selection to be made. A permissão de seleção múltipla em filtros poderá causar alguns problemas de desempenho, porque quando usuário seleciona um conjunto de itens na segmentação (por exemplo, os dez produtos nos quais ele está interessado), cada nova seleção resultará no envio de consultas à fonte de back-end.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. Embora o usuário possa selecionar o próximo item antes da conclusão da consulta, isso resultará em carregamento extra na fonte subjacente.Whilst the user can select the next item prior to the query completing, this does result in extra load on the underlying source.

  • Considere desativar os totais nos visuais: por padrão, tabelas e matrizes exibem totais e subtotais.Consider switching off totals on visuals: By default, tables and matrices display totals and subtotals. Em muitos casos, as consultas separadas devem ser enviadas para a fonte de dados subjacente para obter os valores para esses totais.In many cases, separate queries must be sent to the underlying source to obtain the values for such totals. Isso se aplica sempre que usar a agregação DistinctCount ou em todos os casos, ao usar o DirectQuery no SAP BW ou SAP HANA.This applies whenever using DistinctCount aggregation, or in all cases when using DirectQuery over SAP BW or SAP HANA. Esses totais devem ser desligados (usando o painel Formato) se não forem necessários.Such totals should be switched off (by using the Format pane) if not required.

Opção de número máximo de conexões do DirectQueryMaximum number of connections option for DirectQuery

Você pode definir o número máximo de conexões abertas pelo DirectQuery para cada fonte de dados subjacente e, desse modo, controlar o número de consultas enviadas simultaneamente para cada fonte de dados.You can set the maximum number of connections DirectQuery opens for each underlying data source, and thereby control the number of queries concurrently sent to each data source.

O número de máximo padrão de conexões simultâneas que o DirectQuery abre é 10.The default maximum number of concurrent connections DirectQuery opens is ten. Altere isso para o arquivo atual no Power BI Desktop acessando Arquivo > Opções e Configurações > Opções e, em seguida, na seção Arquivo Atual no painel esquerdo, selecione DirectQuery.You can change this for the current file in Power BI Desktop by going to File > Options and Settings > Options, then in the Current File section in the left pane, select DirectQuery.

Habilitando o número máximo de conexões do DirectQuery

A configuração só é habilitada quando há, pelo menos, uma fonte do DirectQuery no relatório atual.The setting is only enabled when there's at least one DirectQuery source in the current report. O valor se aplica a todas as fontes do DirectQuery e às novas fontes do DirectQuery adicionadas ao mesmo relatório.The value applies to all DirectQuery sources, and to any new DirectQuery sources added to the same report.

O aumento do valor máximo de conexões garante que mais consultas (até o número máximo especificado) possam ser enviadas à fonte de dados subjacente, o que é útil quando vários visuais estão em uma única página ou quando vários usuários acessam um relatório ao mesmo tempo.Increasing the maximum connections value ensures more queries (up to the maximum number specified) can be sent to the underlying data source, which is useful when numerous visuals are on a single page, or many users access a report at the same time. Depois que o número máximo de conexões é atingido, as consultas seguintes são colocadas na fila até que uma conexão fique disponível.Once the maximum number of connections is reached, further queries are queued until a connection becomes available. O aumento desse limite resulta em mais carga na fonte subjacente e, portanto, a configuração não garante a melhoria do desempenho geral.Increasing this limit does result in more load on the underlying source, so the setting isn't guaranteed to improve overall performance.

Depois que um relatório é publicado, o número máximo de consultas simultâneas enviadas à fonte de dados subjacente também depende de limites fixos, que dependem do ambiente de destino no qual o relatório é publicado.Once a report is published, the maximum number of concurrent queries sent to the underlying data source also depend upon fixed limits, which depend on the target environment to which the report is published. Diferentes ambientes (como o Power BI, o Power BI Premium ou o Servidor de Relatórios do Power BI) podem impor limites distintos.Different environments (such as Power BI, Power BI Premium, or Power BI Report Server) each can impose different limits.

Diagnosticar problemas de desempenhoDiagnosing performance issues

Esta seção descreve como diagnosticar problemas de desempenho ou obter informações mais detalhadas para permitir que os relatórios sejam otimizados.This section describes how to diagnose performance issues, or how to get more detailed information to allow the reports to be optimized.

É altamente recomendável que qualquer diagnóstico de problemas de desempenho comece no Power BI Desktop, em vez de no serviço do Power BI.It's strongly recommended that any diagnosis of performance issues starts in Power BI Desktop, rather than in the Power BI service. Isso porque é comum que os problemas de desempenho sejam simplesmente baseados no nível de desempenho da fonte subjacente e esses problemas são mais facilmente identificados e diagnosticados no ambiente bem mais isolado do Power BI Desktop, eliminando inicialmente alguns componentes (como o gateway do Power BI).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). Somente se for identificado que os problemas de desempenho não estão presentes com o Power BI Desktop, o foco de investigação deverá ser nas particularidades do relatório no serviço do 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. O Performance Analyzer é uma ferramenta útil para identificar problemas ao longo desse processo.The performance analyzer is a useful tool for identifying issues throughout this process.

Da mesma forma, recomenda-se primeiro tentar isolar os problemas a um visual individual, em vez de muitos visuais em uma página.Similarly, it is recommended to first try to isolate any issues to an individual visual, rather than many visuals on a page.

Digamos que essas etapas (nos parágrafos anteriores desta seção) foram realizadas – agora temos um único visual em uma página no Power BI Desktop que ainda está lento.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. Para determinar as consultas que são enviadas para a fonte subjacente pelo Power BI Desktop, você pode usar o Performance Analyzer.To determine the queries that are sent to the underlying source by Power BI Desktop, you can use the performance analyzer. Também é possível exibir informações de rastreamento/diagnóstico que podem ser emitidas pela fonte de dados subjacente.It's also possible to view traces/diagnostic information that might be emitted by the underlying data source. Esses rastreamentos também podem conter informações úteis sobre os detalhes de como a consulta foi executada e como ela pode ser melhorada.Such traces might also contain useful information about the details of how the query was executed, and how it can be improved.

Além disso, mesmo na ausência desses rastreamentos da fonte, é possível exibir as consultas enviadas pelo Power BI, juntamente com seus tempos de execução, conforme descrito a seguir.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.

Determinando as consultas enviadas pelo Power BI DesktopDetermining the queries sent by Power BI Desktop

Por padrão, o Power BI Desktop registra eventos durante uma determinada sessão em um arquivo de rastreamento chamado FlightRecorderCurrent.trc.By default, Power BI Desktop logs events during a given session to a trace file called FlightRecorderCurrent.trc.

Para algumas fontes do DirectQuery, esse log inclui todas as consultas enviadas à fonte de dados subjacente (as fontes de DirectQuery restantes serão incluídas no futuro).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). As fontes que enviam consultas ao log são as seguintes:The sources that send queries to the log are the following:

  • SQL ServerSQL Server
  • Banco de dados SQL do AzureAzure SQL Database
  • SQL Data Warehouse do AzureAzure SQL Data warehouse
  • OracleOracle
  • TeradataTeradata
  • SAP HANASAP HANA

O arquivo de rastreamento pode ser encontrado na pasta AppData do usuário atual:The trace file can be found in the AppData folder for the current user:

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

Veja como acessar facilmente essa pasta: No Power BI Desktop, selecione Arquivo > Opções e configurações > Opções e, em seguida, selecione Diagnóstico.Here's an easy way to get to this folder: In Power BI Desktop select File > Options and settings > Options, and then select Diagnostics. A janela de diálogo a seguir será exibida:The following dialog window appears:

Ao selecionar o link Abrir pastas de rastreamento em Opções de Diagnóstico, a pasta a seguir é aberta:When you select the Open traces folder link, under Diagnostic Options, the following folder opens:

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

Ao navegar até a pasta pai, o conteúdo da pasta pai exibirá a pasta contendo AnalysisServicesWorkspaces, com uma subpasta do workspace para cada instância aberta do 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. Essas subpastas são nomeadas com um sufixo de inteiro, como AnalysisServicesWorkspace2058279583.These subfolders are named with an integer suffix, such as AnalysisServicesWorkspace2058279583.

Dentro dessa pasta há uma subpasta \Data que contém o arquivo de rastreamento FlightRecorderCurrent.trc da sessão atual do Power BI.Inside that folder is a \Data subfolder that contains the trace file FlightRecorderCurrent.trc for the current Power BI session. A pasta de workspace correspondente é excluída quando a sessão associada do Power BI Desktop é encerrada.The corresponding workspace folder is deleted when the associated Power BI Desktop session ends.

Os arquivos de rastreamento podem ser lidos usando a ferramenta SQL Server Profiler, que está disponível como um download gratuito como parte do 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. Você pode obtê-la neste local.You can get that from this location.

Depois de baixar e instalar o SQL Server Management Studio, execute o SQL Server Profiler.Once you download and install SQL Server Management Studio, run SQL Server Profiler.

Para abrir o arquivo de rastreamento, execute as seguintes etapas:To open the trace file, take the following steps:

  1. No SQL Server Profiler selecione Arquivo > Abrir > Arquivo de rastreamentoIn SQL Server Profiler, select File > Open > Trace file

  2. Insira o caminho até o arquivo de rastreamento da sessão atualmente aberta do Power BI, como abaixo: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. Abra FlightRecorderCurrent.trcOpen FlightRecorderCurrent.trc

Todos os eventos da sessão atual são exibidos.All events from the current session are displayed. Um exemplo anotado está mostrado abaixo, destacando os grupos de eventos.An annotated example is shown below, which highlights groups of events. Cada grupo tem o seguinte:Each group has the following:

  • Um evento Início da Consulta e um Término da Consulta, que representam o início e término de uma consulta DAX gerada pela interface do usuário (por exemplo, de um visual ou do preenchimento de uma lista de valores no filtro de interface do usuário)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)
  • Um ou mais pares de eventos Início do DirectQuery e Término do DirectQuery, que representam uma consulta enviada à fonte de dados subjacente, como parte da avaliação da consulta 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.

Observe que várias consultas DAX podem ser executadas em paralelo, portanto os eventos de grupos diferentes podem ser intercalados.Note that multiple DAX queries can be executed in parallel, so events from different groups can be interleaved. O valor da ActivityID pode ser usado para determinar quais eventos pertencem ao mesmo grupo.The value of the ActivityID can be used to determine which events belong to the same group.

Outras colunas de interesse são as seguintes:Other columns of interest are as follows:

  • TextData: os detalhes textuais do evento.TextData: The textual detail of the event. Para eventos de "Início/Término da Consulta"eles serão a consulta DAX.For “Query Begin/End” events this will be the DAX query. Para eventos de "Início/Término de DirectQuery", serão a consulta SQL enviada à fonte subjacente.For “DirectQuery Begin/End” events, this will be the SQL query sent to the underlying source. O TextData do evento atualmente selecionado também será exibido na região da parte inferior.The TextData for the currently selected event is also displayed in the region at the bottom.
  • EndTime: quando o evento foi concluído.EndTime: When the event completed.
  • Duration: o tempo, em milissegundos, necessário para executar a consulta DAX ou SQL.Duration: The duration, in milliseconds, taken to execute the DAX or SQL query.
  • Error: indica se ocorreu um erro (caso em que o evento também será exibido em vermelho).Error: Indicates if an error occurred (in which case the event is also displayed in red).

Na imagem acima, algumas das colunas menos interessantes foram reduzidas para permitir que as colunas interessantes sejam vistas com mais facilidade.In the image above, some of the less interesting columns have been narrowed, to allow the interesting columns to be seen more easily.

A abordagem recomendada para capturar um rastreamento para ajudar a diagnosticar um problema de desempenho potencial é a seguinte:The recommended approach to capturing a trace to help diagnose a potential performance issue is the following:

  • Abra uma única sessão do Power BI Desktop (para evitar confusão de várias pastas de workspace)Open a single Power BI Desktop session (to avoid the confusion of multiple workspace folders)
  • Realize o conjunto de ações desejadas no Power BI Desktop.Perform the set of actions of interest in Power BI Desktop. Inclua algumas ações adicionais, para garantir que os eventos desejados sejam liberados no arquivo de rastreamento.Include a few additional actions beyond that, to ensure that the events of interest are flushed into the trace file.
  • Abra o SQL Server Profiler e examine o rastreamento, conforme descrito anteriormente.Open SQL Server Profiler and examine the trace, as described earlier. Lembre-se de que o arquivo de rastreamento será excluído com o fechamento do Power BI Desktop.Remember that the trace file will be deleted upon closing Power BI Desktop. Além disso, as ações adicionais no Power BI Desktop não aparecerão imediatamente – o arquivo de rastreamento deve ser fechado e reaberto para que os novos eventos sejam vistos.Also, further actions in Power BI Desktop will not immediately appear – the trace file should be closed and reopened to see the new events.
  • Mantenha sessões individuais razoavelmente pequenas (10 segundos de ações, não centenas) para facilitar a interpretação do arquivo de rastreamento (como há um limite no tamanho do arquivo de rastreamento, para sessões longas, há uma possibilidade de que os eventos antecipados sejam removidos).Keep individual sessions reasonably small (10 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 long sessions there is a chance of early events being dropped).

Noções básicas sobre a forma da consulta enviada pelo Power BI DesktopUnderstanding the form of query sent by Power BI Desktop

O formato geral das consultas criadas e enviadas pelo Power BI Desktop utiliza subseleções para cada uma das tabelas referenciadas, em que a subseleção é de acordo com a definição da consulta no Editor de Consultas.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. Por exemplo, suponha as seguintes tabelas TPC-DS no SQL Server:For example, assume the following TPC-DS tables in SQL Server:

Considere a consulta a seguir:Consider the following query:

Essa consulta tem como resultado o seguinte visual:That query results in the following visual:

A atualização desse visual resultará na consulta SQL mostrada após o parágrafo abaixo.Refreshing that visual will result in the SQL query shown below the next paragraph. Como você pode ver, há três subseleções para Web Sales, Item e Date_dim, e cada uma delas retorna todas as colunas na respectiva tabela, embora, na realidade, apenas quatro colunas sejam referenciadas pelo visual.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. Essas consultas nas subseleções (elas estão sombreadas) são exatamente o resultado das consultas definidas no Editor de Consultas.These queries in the subselects (they're shaded) are exactly the result of the queries defined in Query editor. O uso de subseleções dessa maneira não afetou o desempenho das fontes de dados com suporte pelo DirectQuery até o momento.Use of subselects in this manner has not been found to impact performance, for the data sources so far supported for DirectQuery. Fontes de dados como o SQL Server simplesmente otimizam as referências para as outras colunas.Data sources like SQL Server optimize away the references to the other columns.

Um motivo de o Power BI empregar esse padrão é porque a consulta SQL usada pode ser fornecida diretamente pelo analista, sendo usada "como fornecida", sem uma tentativa de reescrevê-la.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.

Próximas etapasNext steps

Este artigo descreve aspectos do DirectQuery que são comuns entre todas as fontes de dados.This article describes aspects of DirectQuery that are common across all data sources. Há determinados detalhes que são específicos a fontes individuais.There are certain details that are specific to individual sources. Confira os seguintes artigos que abordam fontes específicas:See the following articles covering specific sources:

Para obter mais informações sobre o DirectQuery, confira os seguintes recursos:For more information about DirectQuery, check out the following resources: