Acerca del uso de DirectQuery en Power BIAbout using DirectQuery in Power BI

Puede conectarse a todo tipo de orígenes de datos distintos cuando usa Power BI Desktop o el servicio Power BI, y establecer esas conexiones de datos de otras formas.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. Puede importar datos a Power BI, que es la forma más común de obtener datos, o bien conectarse directamente a los datos en el repositorio de origen original, lo que se conoce como DirectQuery.You can import data to Power BI, which is the most common way to get data, or connect directly to data in the original source repository, which is known as DirectQuery. En este artículo se describe DirectQuery y sus funcionalidades:This article describes DirectQuery capabilities:

  • Distintas opciones de conectividad para DirectQueryDifferent connectivity options for DirectQuery
  • Guía para cuando se deba considerar usar DirectQuery en lugar de la importaciónGuidance for when you should consider using DirectQuery rather than import
  • Desventajas del uso de DirectQueryDrawbacks of using DirectQuery
  • Procedimientos recomendados para usar DirectQueryBest practices for using DirectQuery

Siga los procedimientos recomendados sobre el uso de la importación frente a DirectQuery:Follow best practices for using import versus DirectQuery:

  • Debe importar datos a Power BI siempre que sea posible.You should import data to Power BI wherever possible. La importación aprovecha el motor de consultas de alto rendimiento de Power BI y ofrece una experiencia completa y altamente interactiva.Importing takes advantage of the high performance query engine of Power BI, and provides a highly interactive and fully featured experience.
  • Si no puede cumplir sus objetivos importando datos, considere la posibilidad de usar DirectQuery.If your goals can't be met by importing data, consider using DirectQuery. Por ejemplo, si los datos cambian con frecuencia y los informe deben reflejar los datos más recientes, es posible que la mejor opción sea DirectQuery.For example, if the data is changing frequently and reports must reflect the latest data, DirectQuery may be best. Aunque el uso de DirectQuery solo es viable cuando el origen de datos subyacente puede proporcionar consultas interactivas (en menos de cinco segundos) para la típica consulta de funciones agregadas y puede controlar la carga de consultas que se va a generar.However, using DirectQuery is only feasible when the underlying data source can provide interactive queries, less than 5 seconds for the typical aggregate query, and can handle the query load that will be generated. Además, es necesario estudiar cuidadosamente la lista de limitaciones inherentes al uso de DirectQuery.Additionally, the list of limitations for the use of DirectQuery should be considered carefully.

El conjunto de funcionalidades que ofrece Power BI para la importación y DirectQuery evolucionará con el tiempo.The set of capabilities offered by Power BI for import and DirectQuery evolve over time. Los cambios incluyen proporcionar más flexibilidad cuando se usen datos importados, de manera que la importación se pueda utilizar en más casos, y eliminar algunas de las desventajas que presenta el uso de DirectQuery.Changes will include providing more flexibility when using imported data, such that import can be used in more cases and eliminating some of the drawbacks of using DirectQuery. Independientemente de las mejoras, cuando use DirectQuery, preste siempre mucha atención al rendimiento del origen de datos subyacente.Regardless of improvements, when using DirectQuery, the performance of the underlying data source always remains a major consideration. Si el origen de datos subyacente en cuestión es lento, seguirá siendo inviable usar DirectQuery para ese origen.If that underlying data source is slow, using DirectQuery for that source will remain unfeasible.

En este artículo se describe DirectQuery con Power BI y no SQL Server Analysis Services.This article covers DirectQuery with Power BI, and not SQL Server Analysis Services. DirectQuery también es una característica de SQL Server Analysis Services.DirectQuery is also a feature of SQL Server Analysis Services. Muchos de los detalles que se describen en este artículo se aplican a esa característica.Many of the details described in this article apply to that feature. También hay diferencias importantes.There are also important differences. Para obtener información sobre cómo usar DirectQuery con SQL Server Analysis Services, vea DirectQuery en SQL Server 2016 Analysis Services.For information about using DirectQuery with SQL Server Analysis Services, see DirectQuery in SQL Server 2016 Analysis Services.

Este artículo se centra en el flujo de trabajo recomendado para DirectQuery, donde el informe se crea en Power BI Desktop pero, además, trata sobre cómo conectarse directamente en el servicio 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 conectividad de Power BIPower BI connectivity modes

Power BI se conecta a una gran cantidad de orígenes de datos distintos, entre los que se encuentran los siguientes:Power BI connects to a large number of varied data sources, encompassing:

  • Servicios en línea (Salesforce, Dynamics 365, etc.)Online services (Salesforce, Dynamics 365, others)
  • Bases de datos (SQL Server, Access, Amazon Redshift, etc.)Databases (SQL Server, Access, Amazon Redshift, others)
  • Archivos simples (Excel, JSON, etc.)Simple files (Excel, JSON, others)
  • Otros orígenes de datos (Spark, Websites, Microsoft Exchange, etc.)Other data sources (Spark, Web sites, Microsoft Exchange, others)

Para estos orígenes, es posible importar los datos a Power BI.For these sources, it's possible to import the data to Power BI. Para algunos, también es posible conectarse mediante DirectQuery.For some, it's also possible to connect using DirectQuery. Para obtener un resumen de los orígenes que admiten DirectQuery, vea Orígenes de datos compatibles con DirectQuery.For a summary of the sources that support DirectQuery, see Data Sources supported by DirectQuery. La mayoría de los orígenes será compatible con DirectQuery en el futuro, centrándose principalmente en los orígenes que se puede esperar que tengan un buen rendimiento de consultas interactivas.More sources will be DirectQuery enabled in the future, focusing primarily on sources that can be expected to deliver good interactive query performance.

SQL Server Analysis Services es un caso especial.SQL Server Analysis Services is a special case. Cuando se conecta a SQL Server Analysis Services, puede elegir importar los datos o usar una conexión dinámica.When connecting to SQL Server Analysis Services, you can choose to import the data or use a live connection. El uso de una conexión dinámica es similar a DirectQuery.Using a live connection is similar to DirectQuery. No se importa ningún dato y el origen de datos subyacente se consulta siempre para actualizar un objeto visual.No data is imported and the underlying data source is always queried to refresh a visual. Una conexión dinámica es diferente en muchos aspectos, por lo que se usa otro término, conexión dinámica frente a DirectQuery.A live connection is different in many other regards, so a different term, live connection versus DirectQuery, is used.

En las siguientes secciones se explican detalladamente estas tres opciones de conexión a los datos: importación, DirectQuery y conexión dinámica.These three options for connecting to data: import, DirectQuery, and live connection.

Importación de conexionesImport connections

En cuanto a la importación, cuando se usa Obtener datos en Power BI Desktop para conectarse a un origen de datos como SQL Server y se elige Importar, el comportamiento de dicha conexión es el siguiente:For import, when using Get Data in Power BI Desktop to connect to a data source like SQL Server, the behavior of that connection is as follows:

  • Durante la experiencia inicial de Obtener datos, cada conjunto de tablas seleccionado define una consulta que devolverá un conjunto de datos.During the initial Get Data experience, the set of tables selected each define a query that will return a set of data. Esas consultas pueden editarse antes de cargar los datos para, por ejemplo, aplicar filtros, agregar los datos o combinar distintas tablas.Those queries can be edited before loading the data, for example, to apply filters, or aggregate the data, or join different tables.
  • Después de la carga, todos los datos definidos por esas consultas se importarán a la caché de Power BI.Upon load, all of the data defined by those queries will be imported into the Power BI cache.
  • Después de crear un objeto visual dentro de Power BI Desktop, se consultarán los datos importados.Upon building a visual within Power BI Desktop, the imported data will be queried. El almacén de Power BI garantiza que la consulta será rápida.The Power BI store ensures the query will be fast. Todos los cambios realizados en los objetos visuales se reflejan inmediatamente.All changes to the visual are reflected immediately.
  • Los cambios que se hagan en los datos subyacentes no se reflejarán en ningún objeto visual.Any changes to the underlying data aren't reflected in any visuals. Es necesario actualizar para volver a importar los datos.It's necessary to Refresh to reimport data.
  • Después de publicar el informe como archivo .pbix en el servicio Power BI, se crea un conjunto de datos y se carga en el servicio Power BI.Upon publishing the report as a .pbix file to the Power BI service, a dataset is created and uploaded to the Power BI service. Los datos importados se incluyen en ese conjunto de datos.The imported data is included with that dataset. Entonces es posible configurar una actualización programada de esos datos para, por ejemplo, volver a importar los datos todos los días.It's then possible to schedule refresh of that data, for example, to reimport the data every day. En función de la ubicación del origen de datos original, podría ser necesario configurar una puerta de enlace de datos local.Depending upon the location of the original data source, it might be necessary to configure an on-premises data gateway.
  • Cuando se abre un informe existente en el servicio Power BI o se crea otro informe, los datos importados se consultan de nuevo, lo que garantiza la interactividad.When opening an existing report in the Power BI service, or authoring a new report, the imported data is queried again, ensuring interactivity.
  • Además, pueden anclarse objetos virtuales o páginas de informes completas como iconos de un panel.Visuals, or entire report pages, can be pinned as dashboard tiles. Los iconos se actualizarán automáticamente cada vez que se actualice el conjunto de datos subyacente.The tiles automatically refresh whenever the underlying dataset refreshes.

Conexiones de DirectQueryDirectQuery connections

En el caso de DirectQuery, cuando se usa Obtener datos en Power BI Desktop para conectarse a un origen de datos, el comportamiento de dicha conexión es el siguiente:For DirectQuery, when using Get Data in Power BI Desktop to connect to a data source, the behavior of that connection is as follows:

  • Durante la experiencia inicial de Obtener datos, se selecciona el origen.During the initial Get Data experience, the source is selected. En el caso de los orígenes relacionales, se selecciona un conjunto de tablas y cada una de ellas sigue definiendo una consulta que lógicamente devuelve un conjunto de datos.For relational sources, a set of tables are selected and each still define a query that logically returns a set of data. En el caso de los orígenes multidimensionales, como SAP BW, solo se selecciona el origen.For multidimensional sources, like SAP BW, only the source is selected.
  • Aunque, después de la carga, no se importará ningún dato al almacén de Power BI.However, upon load, no data is imported into the Power BI store. En cambio, después de crear un objeto visual dentro de Power BI Desktop, las consultas se enviarán al origen de datos subyacente para recuperar los datos necesarios.Instead, upon building a visual within Power BI Desktop, queries are sent to the underlying data source to retrieve the necessary data. El tiempo que se tarda en actualizar el objeto visual depende del rendimiento del origen de datos subyacente.The time taken to refresh the visual depends on the performance of the underlying data source.
  • Los cambios que se hagan en los datos subyacentes no se reflejan de inmediato en ningún objeto visual existente.Any changes to the underlying data aren't immediately reflected in any existing visuals. Todavía es necesario actualizar.It's still necessary to refresh. Las consultas necesarias se reenvían para cada uno de los objetos visuales y el objeto visual se actualiza según sea necesario.The necessary queries are resent for each visual, and the visual is updated as necessary.
  • Después de publicar el informe en el servicio Power BI, generará nuevamente un conjunto de datos en el servicio Power BI, como ocurre con la importación.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. Sin embargo, no se incluyen datos en ese conjunto de datos.However, no data is included with that dataset.
  • Cuando se abre un informe existente en el servicio Power BI o se crea otro informe, el origen de datos subyacente se consulta de nuevo para recuperar los datos necesarios.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. En función de la ubicación del origen de datos original, es posible que sea necesario configurar una puerta de enlace de datos local, tal y como se necesita para el modo de importación si se actualizan los datos.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.
  • Además, pueden anclarse objetos virtuales o páginas de informes completas como iconos de un panel.Visuals, or entire report pages, can be pinned as Dashboard tiles. Para garantizar que la apertura de un panel sea rápida, los iconos se actualizan automáticamente de acuerdo con una programación (por ejemplo, cada hora).To ensure that opening a dashboard is fast, the tiles are automatically refreshed on a schedule, for example, every hour. La frecuencia de esta actualización se puede controlar para que refleje la frecuencia con que cambian los datos y la importancia que tiene poder ver los datos más recientes.The frequency of this refresh can be controlled, to reflect how frequently the data is changing, and how important it's to see the latest data. Cuando se abra un panel, los iconos reflejarán los datos en el momento de la última actualización y no necesariamente los cambios más recientes efectuados en el origen subyacente.When opening a dashboard, the tiles reflect the data at the time of the last refresh, and not necessarily the latest changes made to the underlying source. Puede actualizar un panel abierto para asegurarse de que está actualizado.You can refresh an open dashboard to ensure it's current.

Conexiones dinámicasLive connections

Cuando se conecta a SQL Server Analysis Services, tiene la opción de importar datos desde el modelo de datos seleccionado o conectarse a él de manera dinámica.When connecting to SQL Server Analysis Services, there's an option to either import data from or connect live to, the selected data model. Si utiliza la importación, se define una consulta en ese origen SQL Server Analysis Services externo y los datos se importarán de forma normal.If you use import, you define a query against that external SQL Server Analysis Services source, and the data is imported as normal. Si usa la conexión dinámica, no se define ninguna consulta y se muestra el modelo externo completo en la lista de campos.If you use connect live, there's no query defined, and the entire external model is shown in the field list.

La situación descrita en el párrafo anterior también se aplica a las conexiones con los siguientes orígenes, salvo que no hay ninguna opción para importar los datos:The situation described in the previous paragraph applies to connecting to the following sources as well, except that there's no option to import the data:

  • Conjuntos de datos de Power BI, por ejemplo, cuando se conecta a un conjunto de datos de Power BI creado anteriormente y que se publicó en el servicio, para crear un nuevo informe sobre él.Power BI datasets, for example, when connecting to a Power BI dataset that has previously been created and published to the service, to author a new report over it.
  • Common Data Services.Common Data Services.

El comportamiento de los informes en SQL Server Analysis Services, después de la publicación en el servicio Power BI, es similar a los informes de DirectQuery de las siguientes maneras:The behavior of reports over SQL Server Analysis Services, upon publishing to the Power BI service, is similar to DirectQuery reports in the following ways:

  • Cuando se abre un informe existente en el servicio Power BI o se crea otro informe, se consulta el origen SQL Server Analysis Services subyacente, lo que posiblemente requiera una puerta de enlace de datos local.When opening an existing report in the Power BI service or authoring a new report, the underlying SQL Server Analysis Services source is queried, possibly requiring an on-premises data gateway.
  • Los iconos de panel se actualizan automáticamente según una programación, por ejemplo cada hora.Dashboard tiles are automatically refreshed on a schedule, such as every hour.

También hay diferencias importantes.There are also important differences. Por ejemplo, en el caso de las conexiones dinámicas, la identidad del usuario que abre el informe siempre se pasa al origen SQL Server Analysis Services subyacente.For instance, for live connections, the identity of the user opening the report is always passed to the underlying SQL Server Analysis Services source.

Una vez mencionadas estas comparaciones, el resto de este artículo se centrará únicamente en DirectQuery.With these comparisons out of the way, let's focus solely on DirectQuery for the rest of this article.

¿Cuándo es útil usar DirectQuery?When is DirectQuery useful?

En la tabla siguiente se describen los escenarios en los que la conexión con DirectQuery podría ser especialmente útil.The following table describes scenarios where connecting with DirectQuery could be especially useful. Incluye casos en los que dejar los datos en el origen original se consideraría beneficioso.It includes cases where leaving the data in the original source would be considered beneficial. La descripción incluye un análisis sobre si el escenario especificado está disponible en Power BI.The description includes a discussion about whether the specified scenario is available in Power BI.

LimitaciónLimitation DescripciónDescription
Los datos cambian con frecuencia y se requiere generar informes casi en tiempo realData is changing frequently, and near real-time reporting is needed Los modelos con datos importados se pueden actualizar como máximo una vez por hora (con más frecuencia en suscripciones de Power BI Pro o Power BI Premium).Models with imported data can be refreshed at most once per hour (more frequently with Power BI Pro or Power BI Premium subscriptions). Si los datos cambian constantemente y es necesario que en los informes se muestren los datos más recientes, es posible que usar la importación con actualización programada no satisfaga esas necesidades.Tf the data is continually changing, and it's necessary for reports to show the latest data, using import with scheduled refresh might not meet those needs. Puede transmitir datos en secuencias directamente a Power BI, aunque existen límites en los volúmenes de datos que se admiten en este caso.You can stream data directly into Power BI, though there are limits on the data volumes supported for this case.

Por el contrario, el uso de DirectQuery significa que cuando se abre o actualiza un informe o panel siempre se muestran los datos más recientes en el origen.Using DirectQuery, by contrast, means that opening or refreshing a report or dashboard always shows the latest data in the source. Además, los iconos de panel se pueden actualizar con más frecuencia (incluso cada 15 minutos).Additionally, the dashboard tiles can be updated more frequently, as often as every 15 minutes.
El volumen de datos es muy grandeData is very large Si el volumen de datos es muy grande, sin duda no sería posible importarlos todos.If the data is very large, it wouldn't be feasible to import it all. Por el contrario, DirectQuery no requiere una transferencia de datos de gran volumen, puesto que la consulta se realiza en contexto.DirectQuery, by contrast, requires no large transfer of data, because it's queried in place.

Pero los datos de gran tamaño también podrían implicar que el rendimiento de las consultas sobre ese origen subyacente es demasiado lento, tal y como se describe en Implicaciones del uso de DirectQuery.However, large data might also imply that the performance of the queries against that underlying source is too slow, as discussed in Implications of using DirectQuery. No siempre tiene que importar los datos detallados completos.You don't always have to import the full detailed data. En cambio, los datos se pueden agregar previamente durante la importación.Instead, the data can be pre-aggregated during import. El Editor de consultas facilita la agregación previa durante la importación.The Query Editor makes it easy to pre-aggregate during import. En último caso, sería posible importar exactamente los datos agregados que se necesitan para cada objeto visual.In the extreme, it would be possible to import exactly the aggregate data needed for each visual. Si bien DirectQuery es el enfoque más simple cuando se trata de datos de gran tamaño, la importación de datos agregados podría ser una buena solución si el origen subyacente es demasiado lento.While DirectQuery is the simplest approach to large data, importing aggregate data might offer a solution if the underlying source is too slow.
Las reglas de seguridad están definidas en el origen subyacenteSecurity rules are defined in the underlying source Cuando se importan los datos, Power BI se conectará al origen de datos con las credenciales del usuario actual en Power BI Desktop o con las credenciales definidas como parte de la configuración de la actualización programada en el servicio Power BI.When the data is imported, Power BI connects to the data source using the current user's credentials from Power BI Desktop, or the credentials defined as part of configuring scheduled refresh from the Power BI service. Al publicar y compartir dicho informe, tenga cuidado de compartirlo solo con usuarios que tienen permitido ver los mismos datos o definir seguridad de nivel de fila como parte del conjunto de datos.In publishing and sharing such a report, be careful to only share with users allowed to see the same data, or to define row-level security as part of the dataset.

Idealmente, como DirectQuery siempre consulta el origen subyacente, esta configuración permitiría aplicar cualquier medida de seguridad en ese origen subyacente.Ideally, because DirectQuery always queries the underlying source, this configuration would allow any security in that underlying source to be applied. Sin embargo, actualmente Power BI siempre se conecta al origen subyacente con las mismas credenciales que se usarían para la importación.However, currently Power BI always connects to the underlying source using the same credentials as would be used for import.

Hasta que Power BI permita que la entidad del consumidor del informe pase al origen subyacente, DirectQuery no ofrece ninguna ventaja en cuanto a la seguridad del origen de datos.Until Power BI allows for the identity of the report consumer to pass through to the underlying source, DirectQuery offers no advantages for data source security.
Se aplican restricciones de soberanía de datosData sovereignty restrictions apply Algunas organizaciones tienen directivas en torno a la soberanía de datos, lo que significa que los datos no pueden salir de las instalaciones de la organización.Some organizations have policies around data sovereignty, meaning that data can't leave the organization premises. Claramente, una solución basada en la importación presentaría problemas.A solution based on import would clearly present issues. Por el contrario, con DirectQuery los datos quedan en el origen subyacente.By contrast, with DirectQuery that data remains in the underlying source.

Sin embargo, incluso con DirectQuery, algunas cachés de datos en el nivel de objeto visual se mantienen en el servicio Power BI debido a la actualización programada de los iconos.However, even with DirectQuery, some caches of data at the visual level are kept in the Power BI service because of scheduled refresh of tiles.
El origen de datos subyacente es un origen OLAP que contiene medidasUnderlying data source is an OLAP source, containing measures Si el origen de datos subyacente contiene medidas tales como SAP HANA o SAP Business Warehouse, la importación de los datos genera otros problemas.If the underlying data source contains measures, such as SAP HANA or SAP Business Warehouse, then importing the data brings other issues. Esto significa que los datos que se importan están en un nivel determinado de agregación, según lo definido por la consulta.It means that the data imported is at a particular level of aggregation, as defined by the query. Por ejemplo, medidas TotalSales por Class, Year y City.For example, measures TotalSales by Class, Year, and City. Después, si se crea un objeto visual que solicita datos a un agregado de nivel superior, como TotalSales por Year, se agrega adicionalmente al valor agregado.Then if a visual is built asking for data at a higher-level aggregate, such as TotalSales by Year, it's further aggregating the aggregate value. Esta agregación resulta adecuada con medidas de adición (como Sum o Min), pero supone un problema para las que no son de adición (como Average o DistinctCount).This aggregation is fine for additive measures, such as Sum and Min, but it's an issue for non-additive measures, such as Average, DistinctCount.

Para facilitar la obtención de los datos agregados correctos, según sea necesario para el objeto visual determinado, directamente desde el origen, se necesitaría enviar consultas por objeto visual, como en 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.

Cuando se conecte a SAP Business Warehouse (BW), si elige DirectQuery permite este tratamiento de las medidas.When connecting to SAP Business Warehouse (BW), choosing DirectQuery allows for this treatment of measures. Para obtener información sobre SAP BW, vea DirectQuery y SAP BW.For information about SAP BW, see DirectQuery and SAP BW.

Sin embargo, actualmente DirectQuery sobre SAP HANA lo trata del mismo modo que un origen relacional y presenta un comportamiento similar en la importación.However, currently DirectQuery over SAP HANA treats it the same as a relational source, and provides similar behavior to import. Este enfoque se analiza con más detalles en DirectQuery y SAP HANA.This approach is covered further in DirectQuery and SAP HANA.

En resumen, dadas las funcionalidades actuales de DirectQuery en Power BI, ofrece las ventajas en los escenarios siguientes:In summary, given the current capabilities of DirectQuery in Power BI, it offers the benefits in the following scenarios:

  • Los datos cambian con frecuencia y se requiere generar informes casi en tiempo real.Data is changing frequently, and near real-time reporting is needed.
  • Control de datos muy grandes, sin necesidad de agregarlos previamente.Handling very large data, without the need to pre-aggregate.
  • Se aplican restricciones de soberanía de datos.Data sovereignty restrictions apply.
  • El origen de datos es un origen multidimensional que contiene medidas (como SAP BW).The source is a multidimensional source containing measures, such as SAP BW.

Los detalles de la lista anterior solo están relacionados con el uso de Power BI.The details in the previous list relate to the use of Power BI alone. En su lugar, podría usar un modelo de SQL Server Analysis Services o Azure Analysis Services externo para importar los datos.Instead, you could use an external SQL Server Analysis Services or Azure Analysis Services model to import data. Luego, use Power BI para conectarse a ese modelo.Then use Power BI to connect to that model. Si bien ese enfoque podría requerir configuración adicional, proporciona una mayor flexibilidad.While that approach would require additional configuration, it does provide greater flexibility. Se pueden importar volúmenes de datos mucho más grandes.Much larger volumes of data can be imported. No hay ninguna restricción sobre la frecuencia con que se pueden actualizar los datos.There's no restriction on how frequently the data can be refreshed.

Implicaciones de usar DirectQueryImplications of using DirectQuery

El uso de DirectQuery tiene algunas posibles implicaciones negativas, tal como se detalla en esta sección.Use of DirectQuery does have potentially negative implications, as detailed in this section. Algunas de esas limitaciones son ligeramente distintas en función del origen exacto que se usa.Some of those limitations are slightly different depending upon the exact source that is being used. Abordamos las limitaciones cuando corresponda y esos orígenes, sustancialmente distintos, se describen en artículos independientes.We address limitations where applicable, and separate articles cover those sources that are substantially different.

Rendimiento y carga en el origen subyacentePerformance and load on the underlying source

Cuando se usa DirectQuery, la experiencia general depende en gran medida del rendimiento del origen de datos subyacente.When using DirectQuery, the overall experience depends very much on the performance of the underlying data source. Si la actualización de cada uno de los objetos visuales, por ejemplo, después de cambiar un valor de segmentación, tarda unos segundos, normalmente menos de 5 segundos, la experiencia sería razonable.If refreshing each visual, for example, after changing a slicer value, takes a few seconds, usually less than 5 seconds, the experience would be reasonable. La experiencia podría percibirse como lenta en comparación con la respuesta inmediata al importar los datos en Power BI.The experience might feel sluggish compared to the immediate response when importing the data to Power BI. Si la lentitud del origen hace que los objetos visuales individuales tarden más de diez segundos, la experiencia es muy deficiente.If the slowness of the source causes individual visuals to take longer than tens of seconds, the experience becomes extremely poor. Las consultas pueden incluso agotar el tiempo de espera.Queries may even time out.

Junto con el rendimiento del origen subyacente, preste atención a la carga que se encuentra en el origen.Along with the performance of the underlying source, pay attention to the load placed upon the source. La carga afecta al rendimiento.Load impacts performance. Cada usuario que abre un informe compartido y cada icono del panel que se actualiza, envía al menos una consulta por objeto visual al origen subyacente.Each user who opens a shared report, and each dashboard tile that refreshes, sends at least one query per visual to the underlying source. Este hecho requiere que el origen pueda controlar dicho tipo de carga de consulta, mientras se conserva un rendimiento razonable.This fact requires that the source can handle such a query load, while still maintaining reasonable performance.

Implicaciones de seguridad al combinar orígenes de datosSecurity implications when combining data sources

Es posible usar varios orígenes de datos en un modelo DirectQuery, dela misma manera que al importar datos, mediante la característica Modelos compuestos.It's possible to use multiple data sources in a DirectQuery model, just as when you import data, by using the Composite models feature. Al hacerlo, es importante comprender cómo se mueven los datos entre los orígenes de datos subyacentes y las implicaciones de seguridad que ello acarrea.When you use multiple data sources, it's important to understand how data is moved back and forth between the underlying data sources, and the security implications it brings.

Transformaciones limitadas de datosLimited data transformations

De manera similar, existen limitaciones en las transformaciones de datos que se pueden aplicar dentro del Editor de consultas.Similarly, there are limitations in the data transformations that can be applied within Query Editor. Con los datos importados, se puede aplicar fácilmente un conjunto sofisticado de transformaciones para limpiar los datos y volver a darles forma antes de usarlos para crear objetos visuales, tales como analizar documentos JSON o dinamizar datos de una columna con un formulario de filas.With imported data, a sophisticated set of transformations can easily be applied to clean and reshape the data before using it to create visuals, such as parsing JSON documents, or pivoting data from a column to a row form. Esas transformaciones están más limitadas en DirectQuery.Those transformations are more limited in DirectQuery.

En primer lugar, cuando se conecta a un origen OLAP como SAP Business Warehouse, no se puede definir ninguna transformación y todo el modelo externo se toma del origen.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. En el caso de los orígenes relacionales, como SQL Server, sigue siendo posible definir un conjunto de transformaciones por consulta, pero esas transformaciones se ven limitadas por motivos de rendimiento.For relational sources, like SQL Server, it's still possible to define a set of transformations per query, but those transformations are limited for performance reasons.

Cualquier transformación de ese tipo se deberá aplicar en cada consulta que se haga al origen subyacente, en lugar de hacerlo una vez cada actualización de datos, por lo que se limitan a esas transformaciones que se pueden convertir razonablemente en una consulta nativa única.Any such transformation will need to be applied on every query to the underlying source, rather than once on data refresh, so they're limited to those transformations that can reasonably be translated into a single native query. Si usa una transformación demasiado compleja, recibe un error que indica que se debe eliminar o que el modelo se debe cambiar al modo de importación.If you use a transformation that is too complex, you receive an error that either it must be deleted or the model switched to import.

Además, la consulta resultante del cuadro de diálogo Obtener datos o del Editor de consultas se usará en una subselección dentro de las consultas generadas y enviadas para recuperar los datos necesarios para un objeto 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. La consulta definida en el Editor de consultas debe ser válida dentro de este contexto.The query defined in Query Editor must be valid within this context. En concreto, no se pueden usar consultas mediante expresiones de tabla comunes ni consultas que invoquen procedimientos almacenados.In particular, it's not possible to use a query using Common Table Expressions, nor one that invokes Stored Procedures.

Limitaciones del modeladoModeling limitations

En este contexto, el término modelado se refiere a la acción de refinar y enriquecer los datos sin procesar, como parte de la creación de un informe con ellos.The term modeling in this context means the act of refining and enriching the raw data, as part of authoring a report using it. Los ejemplos incluyen:Examples include:

  • Definir relaciones entre tablasDefining relationships between tables
  • Agregar cálculos nuevos (columnas calculadas y medidas)Adding new calculations (calculated columns and measures)
  • Cambiar nombre y ocultar columnas y medidasRenaming and hiding columns and measures
  • Definir jerarquíasDefining hierarchies
  • Definir el formato, el resumen predeterminado y el criterio de ordenación de una columnaDefining the formatting, default summarization and sort order for a column
  • Agrupar valores o agruparlos en clústeresGrouping or clustering values

Cuando se usa DirectQuery, de todos modos se pueden aplicar muchos de estos enriquecimientos de modelos y ciertamente todavía existe el principio de que se enriquecen los datos sin procesar para mejorar así el consumo posterior.When using DirectQuery, many of these model enrichments can still be made, and certainly there's still the principle that the raw data is being enriched, so as to improve later consumption. Pero hay algunas funcionalidades de modelado que no están disponibles, o que se ven limitadas, cuando se usa DirectQuery.However, there are some modeling capabilities that aren't available, or are limited, when using DirectQuery. Las limitaciones generalmente se aplican para evitar problemas de rendimiento.The limitations are generally applied to avoid performance issues. El conjunto de limitaciones comunes a todos los orígenes de DirectQuery se muestran aquí.The set of limitations that are common to all DirectQuery sources are listed here. Se pueden aplicar limitaciones adicionales a orígenes individuales, tal y como se describe en Pasos siguientes.Additional limitations might apply to individual sources, as described in Next steps.

  • Sin jerarquía de fechas integrada: cuando se importen datos, cada columna de fecha o fecha y hora también tendrá una jerarquía de fechas integrada disponible de manera predeterminada.No built-in date hierarchy: When importing data, every date/datetime column will also have a built-in date hierarchy available by default. Por ejemplo, si se importa una tabla de pedidos de venta que incluye una columna OrderDate, después de usar OrderDate en un objeto visual será posible elegir el nivel adecuado (año, mes, día) que se va a usar.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. Esta jerarquía de fechas integrada no está disponible cuando se usa DirectQuery.This built-in date hierarchy isn't available when using DirectQuery. Si hay una tabla Date disponible en el origen subyacente (como es habitual en muchos almacenes de datos), se pueden usar las funciones de inteligencia de tiempo de DAX como de costumbre.If there's a Date table available in the underlying source, as is common in many data warehouses, then the DAX Time Intelligence functions can be used as normal.
  • Compatibilidad de fecha y hora únicamente con precisión en segundos: Al utilizar las columnas de hora del conjunto de datos, Power BI solo genera consultas al origen subyacente a un nivel de detalle de 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. Las consultas no se envían al origen de DirectQuery durante milisegundos.Queries aren't sent to the DirectQuery source for milliseconds. Quite esta parte de las horas de las columnas de origen.Remove this part of the times from your source columns.
  • Limitaciones en columnas calculadas: las columnas calculadas están limitadas a ser intrafila, es decir, solo pueden hacer referencia a los valores de otras columnas de la misma tabla, sin usar ninguna función de agregado.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. Además, las funciones escalares de DAX, como LEFT(), que están permitidas, se limitan a aquellas funciones que se pueden insertar en el origen subyacente.Additionally, the DAX scalar functions, such as LEFT(), that are allowed, are limited to those functions that can be pushed to the underlying source. Las funciones varían en función de las capacidades exactas del origen.The functions vary depending upon the exact capabilities of the source. Las funciones no compatibles no aparecen en Autocompletar cuando se crea la expresión DAX de una columna calculada y darían lugar a un error si se usan.Functions that aren't supported aren't listed in autocomplete when authoring the DAX for a calculated column, and would result in an error if used.
  • Sin compatibilidad con funciones DAX de elementos primarios y secundarios: en el modo DirectQuery, no es posible usar la familia de funciones DAX PATH(), que generalmente controlan las estructuras de elementos primarios y secundarios (como planes contables o jerarquías de empleados).No support for parent-child DAX functions: When in DirectQuery mode, it's not possible to use the family of DAX PATH() functions that generally handle Parent-Child structures, such as chart of accounts, or employee hierarchies.
  • No se admiten las tablas calculadas: la capacidad de definir una tabla calculada con una expresión DAX no es compatible con el modo DirectQuery.Calculated tables aren't supported: The ability to define a calculated table using a DAX expression isn't supported in DirectQuery mode.
  • Filtrado de relaciones: Para obtener información sobre el filtrado bidireccional, vea Filtrado cruzado bidireccional.Relationship filtering: For information about bi-directional filtering, see Bidirectional cross-filtering. En estas notas del producto se presentan ejemplos en el contexto de SQL Server Analysis Services.This whitepaper presents examples in the context of SQL Server Analysis Services. Los puntos fundamentales se aplican igualmente a Power BI.The fundamental points apply equally to Power BI.
  • Sin agrupación en clústeres: cuando se usa DirectQuery, no se puede usar la funcionalidad de agrupación en clústeres para encontrar grupos de forma automática.No Clustering: When using DirectQuery, it's not possible to use the Clustering capability, to automatically find groups.

Limitaciones de informesReporting limitations

Los modelos DirectQuery admiten casi todas las funcionalidades de informes.Almost all reporting capabilities are supported for DirectQuery models. Por lo tanto, y siempre que el origen subyacente ofrezca un nivel de rendimiento adecuado, se puede usar el mismo conjunto de visualizaciones.As such, so long as the underlying source offers a suitable level of performance, the same set of visualizations can be used. Hay algunas limitaciones importantes en algunas de las demás funcionalidades que ofrece el servicio Power BI una vez que se publica un informe:There are some important limitations in some of the other capabilities offered in the Power BI service after a report is published:

  • No se admite Conclusiones rápidas: Conclusiones rápidas de Power BI busca rápidamente en distintos subconjuntos del conjunto de datos al tiempo que aplica un conjunto de algoritmos sofisticados para detectar información de posible interés.Quick Insights isn't supported: Power BI Quick Insights searches different subsets of your dataset while applying a set of sophisticated algorithms to discover potentially interesting insights. Dada la necesidad de consultas de muy alto rendimiento, esta funcionalidad no está disponible en conjuntos de datos que usan DirectQuery.Given the need for very high performance queries, this capability isn't available on datasets using DirectQuery.
  • No se admite Preguntas y respuestas: Preguntas y respuestas de Power BI le permite explorar los datos a través de las funcionalidades de lenguaje natural e intuitivo y reciba respuestas en forma de gráficos.Q&A isn't supported: Power BI Q&A enables you to explore your data using intuitive, natural language capabilities and receive answers in the form of charts and graphs. Pero actualmente no se admite en los conjuntos de datos que usan DirectQuery.However, it's currently not supported on datasets using DirectQuery.
  • El uso de Explorar en Excel probablemente genere un rendimiento más deficiente: es posible explorar datos si usa la funcionalidad Explorar en Excel en un conjunto de datos.Using Explore in Excel will likely result in poorer performance: You can explore your data by using the Explore in Excel capability on a dataset. Este enfoque permite crear tablas dinámicas y gráficos dinámicos en Excel.This approach allows Pivot Tables and Pivot Charts to be created in Excel. Si bien esta funcionalidad se admite en conjuntos de datos que usan DirectQuery, generalmente el rendimiento es más lento que al crear objetos visuales en Power BI y, por lo tanto, si el uso de Excel es importante en sus escenarios, debe tener en cuenta este hecho en su decisión de usar DirectQuery.While this capability is supported on datasets using DirectQuery, the performance is generally slower than creating visuals in Power BI, and therefore if the use of Excel is important for your scenarios, this fact should be accounted for in your decision to use DirectQuery.
  • Longitud máxima de las columnas de texto: la longitud máxima de los datos de una columna de texto para los conjuntos de datos que usan DirectQuery es de 32 764 caracteres.Maximum length for text columns: The maximum length of the data in a text column for datasets using DirectQuery is 32,764 characters. Los informes del texto que tenga más caracteres producirán un error.Reporting on longer texts than that will result in an error.

SeguridadSecurity

Como ya se analizó en este artículo, un informe con DirectQuery siempre usará las mismas credenciales fijas para conectarse al origen de datos subyacente después de la publicación en el servicio Power BI.As discussed earlier in this article, a report in DirectQuery always uses the same fixed credentials to connect to the underlying data source, after it's published to the Power BI service. Este comportamiento se aplica a DirectQuery y no a las conexiones dinámicas con SQL Server Analysis Services, que es diferente en este sentido.This behavior applies to DirectQuery, not to live connections to SQL Server Analysis Services, which is different in this respect. Inmediatamente después de publicar un informe de DirectQuery, es necesario configurar las credenciales de usuario que se usarán.Immediately after publish of a DirectQuery report, it's necessary to configure the credentials of the user that will be used. Hasta que configure las credenciales, la apertura del informe en el servicio Power BI generará un error.Until you configure the credentials, opening the report on the Power BI service would result in an error.

Las credenciales de usuario se usarán una vez que se proporcionen, independientemente del usuario que abra el informe.Once the user credentials are provided, then those credentials will be used whichever user who opens the report. De esta manera, es exactamente igual que los datos importados.In this way, it's exactly like imported data. Todos los usuarios ven los mismos datos, a menos que se haya definido seguridad de nivel de fila como parte del informe.Every user sees the same data, unless row-level security has been defined as part of the report. Debe prestar la misma atención al uso compartido del informe por si hay alguna regla de seguridad definida en el origen subyacente.The same attention must be paid to sharing the report, if there are any security rules defined in the underlying source.

Comportamiento en el servicio Power BIBehavior in the Power BI service

En esta sección se describe el comportamiento de un informe de DirectQuery en el servicio Power BI, para explicar el grado de carga que se colocará en el origen de datos de back-end, dada la cantidad de usuarios con los que se compartirá el informe y el panel, la complejidad del informe y si se ha definido seguridad de nivel de fila en el informe.This section describes the behavior of a DirectQuery report in the Power BI service, to explain the degree of load that will be placed on the back-end data source, given the number of users that the report and dashboard will be shared with, the complexity of the report, and whether row-level security has been defined in the report.

Informes: apertura, interacción y ediciónReports – opening, interacting with, editing

Cuando se abre un informe, se actualizarán todos los objetos visuales en la página actualmente visible.When a report is opened, all the visuals on the currently visible page refresh. Generalmente, cada objeto visual requerirá al menos una consulta al origen de datos subyacente.Each visual generally requires at least one query to the underlying data source. Puede que algunos objetos visuales requieran más de una consulta.Some visuals might require more than one query. Por ejemplo, un objeto visual podría mostrar valores agregados de dos tablas de hechos distintas, contener una medida más compleja o contener totales de una medida no de adición, como Count Distinct.For example, a visual might show aggregate values from two different fact tables, or contain a more complex measure, or contain totals of a non-additive measure like Count Distinct. Al pasar a una nueva página se actualizan esos objetos visuales.Moving to a new page refreshes those visuals. La actualización envía un nuevo conjunto de consultas al origen subyacente.Refreshing sends a new set of queries to the underlying source.

Cada interacción del usuario en el informe podría hacer que se actualicen los objetos visuales.Every user interaction on the report might result in visuals being refreshed. Por ejemplo, la selección de otro valor en una segmentación requiere enviar un nuevo conjunto de consultas para actualizar todos los objetos visuales afectados.For example, selecting a different value on a slicer requires sending a new set of queries to refresh all of the affected visuals. Lo mismo sucede cuando se hace clic en un objeto visual para el resaltado cruzado de otros objetos visuales o para cambiar un filtro.The same is true for clicking on a visual to cross-highlight other visuals, or changing a filter.

De manera similar, la edición de un nuevo informe requiere enviar consultas para cada paso de la ruta de acceso para generar el objeto visual final.Similarly, editing a new report requires queries to be sent for each step on the path to produce the final visual.

Hay algún tipo de almacenamiento en caché de los resultados en caché.There's some caching of results. La actualización de un objeto visual es instantánea es instantánea si se han obtenido exactamente los mismos resultados recientemente.The refresh of a visual is instantaneous if the exact same results have recently been obtained. Si se define seguridad de nivel de fila, estas cachés no se comparten entre los usuarios.If row-level security is defined, such caches aren't shared across users.

Actualización de panelesDashboard Refresh

Objetos visuales individuales o páginas completas se pueden anclar como iconos al panel.Individual visuals, or entire pages, can be pinned to dashboard as tiles. Los iconos basados en conjuntos de valores de DirectQuery se actualizan automáticamente según una programación.Tiles based on DirectQuery datasets refresh automatically according to a schedule. Los iconos envían consultas al origen de datos de back-end.Tiles send queries to the back-end data source. De manera predeterminada, los conjuntos de datos se actualizan cada hora, pero pueden configurarse como parte de las opciones de conjunto de datos para que sean entre semanales y cada 15 minutos.By default, datasets refresh every hour, but can be configured as part of dataset settings to be between weekly and every 15 minutes.

Si no se define ninguna seguridad de nivel de fila en el modelo, cada icono se actualiza una sola vez y los resultados se comparten entre todos los usuarios.If no row-level security is defined in the model, each tile is refreshed once, and the results shared across all users. De lo contrario,puede haber un gran efecto multiplicador.Otherwise, there can be a large multiplier effect. Cada icono requiere que se envíen consultas independientes por usuario al origen subyacente.Each tile requires separate queries per user to be sent to the underlying source.

Un panel con 10 iconos, compartido con 100 usuarios, creado en un conjunto de datos con DirectQuery con seguridad de nivel de fila y configurado para actualizarse cada 15 minutos, haría que se envíen al menos 1000 consultas cada 15 minutos al origen de back-end.A dashboard with 10 tiles, shared with 100 users, created on a dataset using DirectQuery with row-level security, and configured to refresh every 15 minutes, would result in at least 1000 queries being sent every 15 minutes to the back-end source.

Preste mucha atención al uso de seguridad de nivel de fila y a la configuración de la programación de la actualización.Pay careful consideration to the use of row-level security, and the configuring of the refresh schedule.

Tiempos de esperaTime-outs

Un tiempo de espera de cuatro minutos se aplica a las consultas individuales en el servicio Power BI.A time-out of four minutes is applied to individual queries in the Power BI service. Las consultas que tarden más, generarán errores.Queries taking longer than that will fail. Como se subrayó anteriormente, se recomienda usar DirectQuery con orígenes que ofrezcan un rendimiento de consulta casi interactivo.As stressed earlier, we recommend that you use DirectQuery for sources that provide near interactive query performance. Este límite tiene por objeto evitar problemas de tiempos de ejecución demasiado largos.This limit is intended to prevent issues from overly long execution times.

Otras implicacionesOther implications

Otras implicaciones generales del uso de DirectQuery son las siguientes:Some other general implications of using DirectQuery are as follows:

  • Si los datos cambian, es necesario actualizar para asegurarse de que se muestran los datos más recientes: como se usan memorias caché, no hay ninguna garantía de que el objeto visual siempre muestre los datos más recientes.If data is changing, it's necessary to refresh to ensure the latest data is shown: Given the use of caches, there's no guarantee that the visual is always showing the latest data. Por ejemplo, un objeto visual puede mostrar las transacciones realizadas el último día.For example, a visual might show the transactions in the last day. Dado que se cambia una segmentación, podría actualizarse para mostrar las transacciones de los dos últimos días.Because of a slicer being changed, it might refresh to show the transactions for the last two days. Las transacciones podrían incluir transacciones recientes recién llegadas.The transactions could include recent, newly arrived transactions. Devolver la segmentación a su valor original hará que nuevamente muestre el valor en caché que se obtuvo anteriormente.Returning the slicer to its original value would result in it again showing the cached value previously obtained.

    Si selecciona Actualizar se borran las cachés y se actualizan todos los objetos visuales de la página para mostrar los datos más recientes.Selecting Refresh clears any caches and refreshes all the visuals on the page to show the latest data.

  • Si los datos cambian, no hay ninguna garantía de coherencia entre los objetos visuales: los distintos objetos visuales distintos, ya estén en la misma página o en distintas páginas, se pueden actualizar en momentos distintos.If data is changing, there's no guarantee of consistency between visuals: Different visuals, whether on the same page or on different pages, might be refreshed at different times. Por tanto, si los datos del origen subyacente cambian, no hay garantía de que cada objeto visual muestre los datos en el mismo momento exacto.If the data in the underlying source is changing, there's no guarantee that each visual shows the data at the exact same point of time. De hecho, y dado que a veces se requiere más de una consulta para un solo objeto visual (por ejemplo, para obtener los detalles y los totales), tampoco se garantiza la coherencia ni siquiera dentro de un solo objeto 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 isn't guaranteed. Para garantizar esta coherencia, se requeriría la sobrecarga de actualizar todos los objetos visuales cada vez que se actualice algún objeto visual, en tándem con el uso de costosas características como el aislamiento de instantánea en el origen de datos subyacente.To guarantee this consistency would require the overhead of refreshing all visuals whenever any visual refreshed, in tandem with the use of costly features like Snapshot Isolation in the underlying data source.

    Este problema se puede mitigar en gran medida si se vuelve a seleccionar Actualizar para actualizar todos los objetos visuales de la página.This issue can be mitigated to a large extent by again selecting Refresh to refresh all of the visuals on the page. Aunque se use el modo de importación, existe un problema similar para garantizar la coherencia si se importan datos de más de una tabla.Even if using import mode, there's a similar problem of guaranteeing consistency while importing data from more than one table.

  • Se necesita una actualización en Power BI Desktop para reflejar cualquier cambio en los metadatos: una vez que se publica un informe, la opción Actualizar actualizará los objetos visuales del informe.Refresh in Power BI Desktop is needed to reflect any metadata changes: After a report is published, Refresh will refresh the visuals in the report. Si el esquema del origen subyacente cambió, esos cambios no se aplican automáticamente para cambiar los campos disponibles en la lista de campos.If the schema of the underlying source has changed, then those changes aren't automatically applied to change the available fields in the field list. Si se quitaron tablas o columnas del origen subyacente, podrían producirse errores de consulta después de la actualización.If tables or columns have been removed from the underlying source, it might result in query failure upon refresh. Abrir el informe en Power BI Desktop y elegir la opción Actualizar actualizará los campos del modelo para reflejar los cambios.Opening the report in Power BI Desktop, and choosing Refresh updates the fields in the model to reflect the changes.

  • Se devuelve un límite de un millón de filas en cualquier consulta: existe un límite fijo de un millón de filas en el número de filas que se pueden devolver en cualquier consulta única del origen subyacente.Limit of 1 million rows returned on any query: There's a fixed limit of 1 million rows placed on the number of rows that can be returned in any single query to the underlying source. Este límite no suele tener implicaciones prácticas y los propios objetos visuales no mostrarán esa cantidad de puntos.This limit generally has no practical implications, and visuals themselves aren't going to display that many points. Sin embargo, el límite puede producirse en los casos en que Power BI no optimice completamente las consultas enviadas y se solicite algún resultado intermedio que excede ese límite.However, the limit can occur in cases where Power BI isn't fully optimizing the queries sent, and there's some intermediate result being requested that exceeds the limit. También puede producirse mientras se crea un objeto virtual en la ruta a un estado final más razonable.It can also occur while building a visual, on the path to a more reasonable final state. Por ejemplo, si se incluye Customer y TotalSalesQuantity se alcanzaría este límite si hubiese más de un millón de clientes, hasta que se aplique algún filtro.For example, including Customer and TotalSalesQuantity would hit this limit if there were more than 1 million customers, until some filter were applied.

    El error que se devolvería sería: "El conjunto de resultados de una consulta a un origen de datos externos superó el tamaño máximo permitido de '1 000 000' de filas."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."

  • No se puede cambiar del modo de importación al modo DirectQuery: Aunque es posible cambiar un modelo del modo DirectQuery para usar el modo de importación, deben importarse todos los datos necesarios.Can't change from import to DirectQuery mode: While it's possible to switch a model from DirectQuery mode to use import mode, all the necessary data must be imported. Tampoco es posible revertir el cambio (principalmente debido a que el conjunto de características no se admite en el modo DirectQuery).It's also not possible to switch back, primarily because of the set of features not supported in DirectQuery mode. Los modelos DirectQuery en orígenes multidimensionales, como SAP BW, tampoco se pueden cambiar de DirectQuery a la importación, debido al tratamiento distinto de las medidas externas.DirectQuery models over multidimensional sources, like SAP BW, also can't be switched from DirectQuery to import, because of the different treatment of external measures.

DirectQuery en el servicio Power BIDirectQuery in the Power BI service

Todos los orígenes se admiten en Power BI Desktop.All sources are supported from Power BI Desktop. Algunos orígenes también están disponibles directamente en el servicio Power BI.Some sources are also available directly from within the Power BI service. Por ejemplo, es posible que un usuario profesional use Power BI para conectarse a sus datos en Salesforce y obtener inmediatamente un panel, sin usar Power BI Desktop.For example, it's possible for a business user to use Power BI to connect to their data in Salesforce, and immediately get a dashboard, without use of Power BI Desktop.

Solo dos de los orígenes compatibles con DirectQuery están disponibles directamente en el servicio:Only two of the DirectQuery enabled-sources are available directly in the service:

  • SparkSpark
  • Azure SQL Data WarehouseAzure SQL Data Warehouse

Aunque se recomienda que cualquier uso de DirectQuery sobre esos dos orígenes comience dentro de Power BI Desktop.However, we recommend that any use of DirectQuery over those two sources start within Power BI Desktop. La razón es que, cuando la conexión se realiza inicialmente en el servicio Power BI, se aplican muchas limitaciones clave.The reason is that when the connection is initially made in the Power BI service, many key limitations will apply. Si bien el punto de partida fue fácil, a partir del servicio de Power BI, hay limitaciones para mejorar aún más el informe resultante.While the start point was easy, starting in the Power BI service, there are limitations on enhancing the resulting report any further. Por ejemplo, no es posible crear ningún cálculo o usar muchas características analíticas o incluso actualizar los metadatos para reflejar cualquier cambio en el esquema subyacente.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.

Instrucciones para usar correctamente DirectQueryGuidance for using DirectQuery successfully

Si va a usar DirectQuery, en esta sección se ofrecen instrucciones generales sobre cómo garantizar una correcta ejecución.If you're going to use DirectQuery, this section provides you with some high-level guidance on how to ensure success. Las instrucciones que aparecen en esta sección derivan de las implicaciones de usar DirectQuery que se describen en este artículo.The guidance in this section is derived from the implications of using DirectQuery that have been described in this article.

Rendimiento del origen de datos de back-endBack-end data source performance

Valide que los objetos visuales simples se actualicen en un tiempo razonable.Validate that simple visuals refresh in a reasonable time. Un tiempo de actualización debe ser inferior a cinco segundos para tener una experiencia interactiva razonable.A refresh time should be within 5 seconds to have a reasonable interactive experience. Si los objetos visuales tardan más de 30 segundos, es altamente probable que se produzcan más errores después de la publicación del informe.If visuals are taking longer than 30 seconds, it's highly likely that further issues will occur following publication of the report. Estos problemas pueden hacer que la solución sea inviable.These issues can make the solution unworkable.

Si las consultas son lentas, examine las consultas que se envían al origen subyacente y el motivo del rendimiento de consulta.If queries are slow, examine the queries being sent to the underlying source, and the reason for the query performance. En este artículo no se analiza el amplio rango de procedimientos recomendados de optimización de base de datos en el conjunto completo de los orígenes subyacentes potenciales.This article doesn't cover the wide range of database optimization best practices across the full set of potential underlying sources. En este artículo se abordan las prácticas estándar de bases de datos que se aplican a la mayoría de las situaciones:This article does cover the standard database practices that apply to most situations:

  • Las relaciones basadas en columnas de enteros generalmente tienen un mejor rendimiento que las combinaciones en columnas de otros tipos de datos.Relationships based on integer columns generally perform better than joins on columns of other data types.
  • Se deben crear los índices correspondientes.The appropriate indexes should be created. La creación de índices generalmente implica el uso de índices de almacén de columnas en esos orígenes que los admiten (por ejemplo, SQL Server).Index creation generally means the use of column store indexes in those sources that support them, for example, SQL Server.
  • Se debe actualizar toda estadística necesaria en el origen.Any necessary statistics in the source should be updated.

Instrucciones para el diseño de modelosModel Design Guidance

Al definir el modelo, considere la posibilidad de seguir estas instrucciones:When defining the model, consider following this guidance:

  • Evite consultas complejas en el Editor de consultas.Avoid complex queries in Query Editor. El editor de consultas traduce una consulta compleja en una única consulta SQL.Query Editor translates a complex query into a single SQL query. La consulta única aparece en la subselección de todas las consultas enviadas a esa tabla.The single query appears in the subselect of every query sent to that table. Si esa consulta es compleja, podría generar problemas de rendimiento en cada consulta enviada.If that query is complex, it might result in performance issues on every query sent. La consulta SQL real para un conjunto de pasos se puede obtener si selecciona el último paso en el Editor de consultas y elige Ver consulta nativa en el menú contextual.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.

  • Simplifique las medidas.Keep measures simple. Al menos inicialmente, se recomienda limitar las medidas a agregados simples.At least initially, we recommend limiting measures to simple aggregates. Después, si las medidas tienen un funcionamiento satisfactorio, se pueden definir otras más complejas, pero siempre prestando atención al rendimiento de cada una de ellas.Then if the measures operate in a satisfactory manner, more complex measures can be defined, but paying attention to the performance for each.

  • Evite relaciones en las columnas calculadas.Avoid relationships on calculated columns. Esta instrucción es pertinente para las bases de datos en las que es necesario realizar combinaciones de varias columnas.This guidance is relevant to databases where you need to do multi-column joins. Actualmente, Power BI no permite que una relación se base en varias columnas, como CE/CP.Power BI today doesn't allow a relationship to be based on multiple columns as the FK/PK. La solución común es concatenar las columnas entre sí con una columna calculada y basar la combinación en esa columna.The common workaround is to concatenate the columns together using a calculated column, and base the join on that column. Aunque esta solución es razonable para los datos importados, en el caso de DirectQuery, genera una combinación en una expresión.While this workaround is reasonable for imported data, for DirectQuery, it results in a join on an expression. Dicho resultado suele impedir el uso de cualquier índice y genera un rendimiento deficiente.That result commonly prevents use of any indexes, and leads to poor performance. La única solución es realmente materializar varias columnas en una sola columna en la base de datos subyacente.The only workaround is to actually materialize the multiple columns into a single column in the underlying database.

  • Evite relaciones en columnas de tipo uniqueidentifier.Avoid relationships on uniqueidentifier columns. Power BI no admite de forma nativa un tipo de datos de uniqueidentifier.Power BI doesn't natively support a datatype of uniqueidentifier. Por tanto, definir una relación entre columnas de tipo uniqueidentifier generará una consulta con una combinación que implica una conversión.Defining a relationship between columns of type uniqueidentifier column results in a query with a join involving a cast. Al igual que en el caso anterior, esto normalmente genera un rendimiento deficiente.Again, this approach commonly leads to poor performance. Hasta que este caso se optimice de forma específica, la única solución es materializar las columnas de un tipo alternativo en la base de datos subyacente.Until this case is specifically optimized, the only workaround is to materialize columns of an alternative type in the underlying database.

  • Oculte la columna "to" en las relaciones.Hide the to column on relationships. La columna to en las relaciones suele ser la clave principal de la tabla to.The to column on relationships is commonly the primary key on the to table. Esa columna debe estar oculta.That column should be hidden. Si se oculta, no aparece en la lista de campos y no se puede usar en objetos visuales.If hidden, it doesn't appear in the field list and can't be used in visuals. A menudo, las columnas en las que se basan las relaciones son, de hecho, columnas de sistema (por ejemplo, claves suplentes en un almacenamiento de datos).Often the columns on which relationships are based are in fact system columns, for example, surrogate keys in a data warehouse. De todos modos, se recomienda ocultar estas columnas.It's good practice to hide such columns anyway. Si la columna tiene significado, introduzca una columna calculada que sea visible y tenga una expresión simple que sea igual a la clave principal:If the column does have meaning, then introduce a calculated column that is visible, and that has a simple expression of being equal to the primary key, as in the following example:

        ProductKey_PK   (Destination of a relationship, hidden)
        ProductKey (= [ProductKey_PK],   visible)
        ProductName
        ...
    
  • Examine todos los usos de las columnas calculadas y los cambios de tipo de datos.Examine all uses of calculated columns and data type changes. El uso de estas funcionalidades no es necesariamente perjudicial.Use of these capabilities aren't necessarily harmful. En efecto, las consultas enviadas al origen subyacente contienen expresiones en lugar de simples referencias a columnas.They do result in the queries sent to the underlying source containing expressions rather than simple references to columns. Esto, de nuevo, podría dar lugar a que no se utilicen los índices.That again might result in indexes not being used.

  • Evite el uso del filtrado cruzado bidireccional en las relaciones.Avoid use of the bi-directional cross filtering on relationships. El uso del filtrado cruzado bidireccional puede generar instrucciones de consulta que no funcionan bien.Use of bi-directional cross filtering can lead to query statements that don't perform well.

  • Experimente con la configuración Asumir integridad referencial.Experiment with setting Assume referential integrity. La configuración Asumir integridad referencial en las relaciones permite que las consultas usen instrucciones INNER JOIN en lugar de OUTER JOIN.The Assume Referential Integrity setting on relationships enables queries to use INNER JOIN statements rather than OUTER JOIN. Esta instrucción generalmente mejora el rendimiento de la consulta, aunque depende de los elementos específicos del origen de datos.This guidance generally improves query performance, though it does depend on the specifics of the data source.

  • No use el filtrado de fechas relativas en el Editor de consultas.Don't use the relative data filtering in Query Editor. Es posible definir el filtrado de fechas relativas en el Editor de consultas.It's possible to define relative date filtering in Query Editor. Por ejemplo, para filtrar las filas en que la fecha se encuentra en los últimos 14 días.For example, to filter to the rows where the date is in the last 14 days.

    Filtro de filas de los últimos 14 días

    Sin embargo, este filtro se transformará en un filtro según la fecha fija, como en el momento en que se creó la consulta.However, this filter is translated into a filter based on the fixed date, as at the time the query was authored. Este resultado se puede ver desde la visualización de la consulta nativa.This result can be seen from viewing the native query.

    Filtro de filas en consulta SQL nativa

    Este resultado probablemente no sea lo que buscaba.This result is probably not what you wanted. Para asegurarse de que el filtro se aplica según la fecha en el momento que se ejecuta el informe, aplique el filtro en el informe como Filtro de informe.To ensure the filter is applied based on the date at the time the report runs, instead apply the filter in the report as a Report Filter. Actualmente, este enfoque se haría creando una columna calculada que calcule el número de días transcurridos (con la función DAX DATE()) y luego use esa columna calculada en un filtro.Currently, this approach would be done by creating a calculated column calculating the number of days ago, using the DAX DATE() function, and then using that calculated column in a filter.

Instrucciones para el diseño de informesReport Design Guidance

Cuando cree un informe con una conexión DirectQuery, siga las instrucciones siguientes:When creating a report using a DirectQuery connection, follow this guidance:

  • Considere la posibilidad de utilizar las opciones de reducción de consulta: Power BI proporciona opciones en el informe para enviar menos consultas, y para deshabilitar ciertas interacciones que darían como resultado una experiencia deficiente si las consultas resultantes tardaran mucho tiempo en ejecutarse.Consider use of Query Reduction options: Power BI provides options in the report to send fewer queries, and to disable certain interactions that would result in a poor experience if the resulting queries take a long time to run. Para acceder a estas opciones en Power BI Desktop, vaya a Archivo > Opciones y configuración > Opciones, y seleccione Reducción de consulta. .To access these options in Power BI Desktop, go to File > Options and settings > Options and select Query reduction.

    Opciones de reducción de consulta

    Al activar las casillas de la Reducción de consulta podrá deshabilitar el resaltado cruzado en todo el informe.Checking box selections on the Query reduction let you disable cross-highlighting throughout your entire report. También puede mostrar un botón Aplicar en segmentaciones o selecciones de filtro.You can also show an Apply button to slicers or filter selections. Este enfoque le permite realizar luego muchas selecciones de filtro y de segmentación antes de aplicarlas.This approach lets you then make many slicer and filter selections before applying them. No se envía ninguna consulta hasta que se selecciona el botón Aplicar en la segmentación.No queries are sent until you select the Apply button on the slicer. Luego se podrán usar sus selecciones para filtrar los datos.Your selections can then be used to filter the data.

    Estas opciones se aplican al informe mientras se interactúa con él en Power BI Desktop.These options apply to your report while you interact with it in Power BI Desktop. Estas opciones también se aplican cuando los usuarios consumen el informe en el servicio Power BI.These options also apply when your users consume the report in the Power BI service.

  • Aplique primero los filtros: siempre aplique los filtros correspondientes al comienzo de la creación de un objeto visual.Apply filters first: Always apply any applicable filters at the start of building a visual. Por ejemplo, en lugar de arrastrar a TotalSalesAmount y ProductName y luego filtrar por un año determinado, aplique el filtro en Year desde el principio.For example, rather than drag in TotalSalesAmount and ProductName, then filter to a particular year, apply the filter on Year at the very start. Cada paso de la creación de un objeto visual envía una consulta.Each step of building a visual sends a query. Aunque es posible hacer luego otro cambio antes de que se complete la primera consulta, este enfoque todavía deja una carga innecesaria en el origen subyacente.Although it's possible to then make another change before the first query has completed, this approach still leaves unnecessary load on the underlying source. Si aplica los filtros al comienzo, generalmente esas consultas intermedias serán menos costosas.By applying filters early, it generally makes those intermediate queries less costly. Además, si los filtros no se aplican al comienzo, se podría alcanzar el límite de un millón de filas.Also, failing to apply filters early can result in hitting the 1 million row limit.

  • Limite la cantidad de objetos visuales de una página: cuando abre una página o cambia un filtro o una segmentación a nivel de página, se actualizan todos los objetos visuales de una página.Limit the number of visuals on a page: When you open a page or change a page level slicer or filter, all of the visuals on a page are refreshed. También hay un límite en el número de consultas que se envían en paralelo.There's also a limit on the number of queries that are sent in parallel. A medida que aumenta la cantidad de objetos visuales, algunos de estos se actualizarán en serie, lo que aumenta el tiempo que se tarda en actualizar la página completa.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. Por este motivo se recomienda limitar la cantidad de objetos visuales de una sola página y, en su lugar, tener más páginas más sencillas.For this reason, we recommend that you limit the number of visuals on a single page, and instead have more, simpler pages.

  • Considere la posibilidad de desactivar la interacción entre objetos visuales: De forma predeterminada, las visualizaciones en una página de informe pueden usarse para el filtro cruzado y el resaltado cruzado de las otras visualizaciones en la 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 ejemplo, si selecciona 1999 en el gráfico circular, el gráfico de columnas se resalta de forma cruzada para mostrar las ventas por categoría 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.

    Varios objetos visuales con filtrado cruzado y resaltado cruzado

    El filtrado cruzado y el resaltado cruzado de DirectQuery requieren el envío de consultas al origen subyacente.Cross-filtering and cross-highlighting in DirectQuery require queries to be submitted to the underlying source. Las interacciones deben desactivarse si el tiempo que se tarda en responder a las selecciones de los usuarios es demasiado largo.The interaction should be switched off if the time taken to respond to users' selections would be unreasonably long. Puede desactivar esta interacción.You can switch off this interaction. Desactive las interacciones para todo el informe, como se ha descrito antes para las opciones de reducción de consulta, o bien caso por caso.Switch off the interaction for either the entire report, as described earlier for query reduction options, or on a case-by-case basis. Para más información, vea Aplicación de un filtro cruzado entre objetos visuales de un informe de Power BI.For more information, see How visuals cross-filter each other in a Power BI report.

Además de las sugerencias anteriores, cada una de las funcionalidades de creación de informes puede generar problemas de rendimiento:In addition to the previous suggestions, each of the following reporting capabilities can cause performance issues:

  • Filtros de medidas: los objetos visuales que contienen medidas o agregados de columnas pueden incluir filtros en esas medidas.Measure filters: Visuals containing measures, or aggregates of columns, can contain filters in those measures. Por ejemplo, el siguiente gráfico muestra SalesAmount por Category, pero solo incluye las categorías con más de 20 millones de ventas.For example, the following graphic shows SalesAmount by Category, but only including those categories with more than 20M of sales.

    Objeto visual con medidas que contienen filtros

    Este enfoque puede dar lugar a que se envíen dos consultas al origen subyacente:This approach results in two queries being sent to the underlying source:

    • La primera consulta recupera las categorías que cumplen la condición, SalesAmount superior a 20 millones de dolares.The first query retrieves the Categories meeting the condition, SalesAmount greater than 20 million.
    • La segunda consulta recupera los datos necesarios para el objeto visual, incluidas las categorías que cumplían la condición de la cláusula WHERE.The second query then retrieves the necessary data for the visual, including the categories that met the condition in the WHERE clause.

    Este enfoque tiene por lo general un buen rendimiento si existen cientos o miles de categorías, como en este ejemplo.This approach generally works well if there are hundreds or thousands of categories, as in this example. El rendimiento puede disminuir si el número de categorías es mucho mayor.Performance can degrade if the number of categories is much larger. Se produce un error en la consulta cuando hay más de un millón de categorías que cumplen la condición.The query fails for more than a million categories meeting the condition. El límite de un millón de filas se analizó anteriormente.The 1 million row limit was discussed earlier.

  • Filtros TopN: se pueden definir filtros avanzados para filtrar solo los N valores superiores o inferiores clasificados por alguna medida.TopN filters: Advanced filters can be defined to filter on only the top or bottom N values ranked by some measure. Por ejemplo, los filtros pueden incluir las 10 categorías principales del objeto visual anterior.For example, filters can include the top 10 categories in the previous visual. De nuevo, este enfoque puede dar lugar a que se envíen dos consultas al origen subyacente.This approach again results in two queries being sent to the underlying source. Sin embargo, la primera consulta devolverá todas las categorías del origen subyacente y, luego, se determinan los valores TopN según los resultados devueltos.However, the first query will return all categories from the underlying source, and then the TopN are determined based on the returned results. En función de la cardinalidad de la columna en cuestión, este enfoque puede generar problemas de rendimiento o errores de consulta debido al límite de un millón de filas.Depending on the cardinality of the column involved, this approach can lead to performance issues or query failures because of the 1 million row limit.

  • Mediana: Por lo general, cualquier agregación (como Sum o Count Distinct) se envía al origen subyacente.Median: Generally, any aggregation, such as Sum or Count Distinct, is pushed to the underlying source. Aunque este hecho no se cumple en el caso de la mediana, ya que este agregado no suele ser compatible con el origen subyacente.However, this fact isn't true for median, which this aggregate is generally not supported by the underlying source. En dichos casos, se recuperan los datos detallados del origen subyacente y la mediana se calcula a partir de los resultados devueltos.In such cases, the detail data is retrieved from the underlying source, and the median calculated from the returned results. Este enfoque resulta razonable cuando la mediana se calcula sobre un número relativamente pequeño de resultados.This approach is reasonable when the median is to be calculated over a relatively small number of results. Problemas de rendimiento o errores de consulta debido al límite de un millón de filas si la cardinalidad es grande.Performance issues or query failures because of the 1 million row limit occur if the cardinality is large. Por ejemplo, la mediana de la población de un país podría ser razonable, pero la mediana del precio de ventas podría no serlo.For example, Median Country Population might be reasonable, but Median Sales Price might not be.

  • Filtros de texto avanzados (contains y similares): cuando se filtra según una columna de texto, el filtrado avanzado permite filtros como contains y begins with, etc.Advanced text filters (contains and similar): When filtering on a text column, the advanced filtering allows filters like contains and begins with and so on. Por supuesto, estos filtros pueden producir un rendimiento deteriorado para algunos orígenes de datos.These filters can certainly result in degraded performance for some data sources. En concreto, el filtro contains predeterminado no se debería usar si lo que se requiere es una coincidencia exacta.In particular, the default contains filter shouldn't be used if what is required is an exact match. Si bien los resultados podrían ser iguales, según los datos reales, el rendimiento podría ser completamente distinto a causa del uso de índices.Although the results might be the same, depending on the actual data, the performance might be drastically different because of indexes.

  • Segmentaciones de selección múltiple: de manera predeterminada, las segmentaciones solo permiten que se haga una selección.Multi select slicers: By default, slicers only allow a single selection to be made. Permitir la selección múltiple en los filtros puede causar algunos problemas de rendimiento, ya que el usuario selecciona un conjunto de elementos en la segmentación.Allowing multi-selection in filters can cause some performance issues, because the user selects a set of items in the slicer. Por ejemplo, si el usuario selecciona los 10 productos de interés, cada nueva selección hace que las consultas se envíen al origen.For example, if the user selects the 10 products of interest, each new selection results in queries being sent to the source. Aunque el usuario puede seleccionar el elemento siguiente antes de que se complete la consulta, este enfoque se traduce en una carga adicional en el origen subyacente.Although the user can select the next item before the query completes, this approach results in extra load on the underlying source.

  • Considere la posibilidad de desactivar los totales en objetos visuales: de forma predeterminada, las tablas y matrices muestran los totales y subtotales.Consider switching off totals on visuals: By default, tables and matrices display totals and subtotals. En muchos casos, hay que enviar consultas independientes al origen subyacente a fin de obtener los valores para estos totales.In many cases, separate queries must be sent to the underlying source to obtain the values for such totals. Este hecho se aplica siempre que se usa la agregación DistinctCount o en todos los casos en que se usa DirectQuery en SAP BW o SAP HANA.This fact applies whenever using DistinctCount aggregation, or in all cases when using DirectQuery over SAP BW or SAP HANA. Estos totales deben desactivarse mediante el panel Formato.Such totals should be switched off by using the Format pane.

Opción Número máximo de conexiones para DirectQueryMaximum number of connections option for DirectQuery

Puede establecer el número máximo de conexiones que abre DirectQuery para cada origen de datos subyacente, lo que controla el número de consultas enviadas al mismo tiempo a cada origen de datos.You can set the maximum number of connections DirectQuery opens for each underlying data source, which controls the number of queries concurrently sent to each data source.

DirectQuery abre un número máximo predeterminado de 10 conexiones simultáneas.DirectQuery opens a default maximum number of 10 concurrent connections. Puede cambiar el número máximo del archivo actual en Power BI Desktop.You can change the maximum number for the current file in Power BI Desktop. Vaya a Archivo > Opciones y configuración > Opciones.Go to File > Options and Settings > Options. En la sección Archivo actual del panel izquierdo, seleccione DirectQuery.In the Current File section in the left pane, select DirectQuery.

Establecimiento del número máximo de conexiones de DirectQuery

Esta opción solo se habilita cuando hay al menos un origen de DirectQuery en el informe actual.The setting is only enabled when there's at least one DirectQuery source in the current report. El valor se aplica a todos los orígenes de DirectQuery y a los nuevos orígenes de DirectQuery que se agreguen al mismo informe.The value applies to all DirectQuery sources, and to any new DirectQuery sources added to the same report.

Aumentar el valor de Número máximo de conexiones por origen de datos garantiza que se puedan enviar más consultas, hasta el número máximo especificado, al origen de datos subyacente.Increasing Maximum connections per data source ensures more queries, up to the maximum number specified, can be sent to the underlying data source. Este enfoque resulta útil cuando muchos objetos visuales están en una sola página o muchos usuarios tienen acceso a un informe al mismo tiempo.This approach is useful when many visuals are on a single page, or many users access a report at the same time. Una vez alcanzado el número máximo de conexiones, las consultas siguientes se ponen en cola hasta que haya disponible una conexión.Once the maximum number of connections is reached, further queries are queued until a connection becomes available. Aumentar este límite tiene como resultado más carga en el origen subyacente, por lo que no se garantiza que la opción mejore el rendimiento general.Increasing this limit does result in more load on the underlying source, so the setting isn't guaranteed to improve overall performance.

Una vez que se publica un informe, el número máximo de consultas simultáneas enviadas al origen de datos subyacente también depende de límites fijos.Once a report is published, the maximum number of concurrent queries sent to the underlying data source also depend upon fixed limits. Los límites dependen del entorno de destino en el que se publica el informe.The limits depend on the target environment to which the report is published. Los distintos entornos, tales como Power BI, Power BI Premium o Power BI Report Server, pueden imponer distintos límites.Different environments, such as Power BI, Power BI Premium, or Power BI Report Server, can impose different limits.

Diagnóstico de problemas de rendimientoDiagnosing performance issues

En esta sección se describe cómo diagnosticar problemas de rendimiento o cómo obtener información más detallada para permitir que se optimicen los informes.This section describes how to diagnose performance issues, or how to get more detailed information to allow the reports to be optimized.

Se recomienda encarecidamente que todo diagnóstico de problemas de rendimiento comience en Power BI Desktop, en lugar de hacerlo en el servicio Power BI.We recommended that you start diagnosis of performance issues in Power BI Desktop, rather than in the Power BI service. Los problemas de rendimiento suelen basarse en el rendimiento del origen subyacente.Performance issues are often based on the performance of the underlying source. Puede identificar y diagnosticar problemas más fácilmente en el entorno más aislado de Power BI Desktop.You can more easily identify and diagnose issues in the more isolated environment of Power BI Desktop. Este enfoque elimina inicialmente determinados componentes, como la puerta de enlace de Power BI.This approach initially eliminates certain components, such as the Power BI gateway. Si los problemas de rendimiento no se encuentran en Power BI Desktop, investigue los elementos específicos del informe en el servicio Power BI.If the performance issues are absent from Power BI Desktop, investigate the specifics of the report in the Power BI service. El analizador de rendimiento es una herramienta útil para identificar problemas a lo largo de este proceso.The performance analyzer is a useful tool for identifying issues throughout this process.

De manera similar, se recomienda intentar aislar primero cualquier problema en un objeto visual individual, y no en varios objetos visuales en una página.Similarly, we recommend to first try to isolate any issues to an individual visual, rather than many visuals on a page.

Digamos que se han seguido los pasos descritos en los párrafos anteriores de esta sección.Let's say the steps in the previous paragraphs in this section have been taken. Ahora tenemos un solo visual en una página en Power BI Desktop que todavía es lento.We now have a single visual on a page in Power BI Desktop that is still sluggish. Puede usar el analizador de rendimiento para determinar las consultas que Power BI Desktop envía al origen subyacente.Use the performance analyzer to determine the queries that Power BI Desktop sends to the underlying source. También es posible ver los seguimientos y la información de diagnóstico que podría emitir el origen de datos subyacente.It's also possible to view traces and diagnostic information that might be emitted by the underlying data source. Los seguimientos también podrían contener detalles útiles sobre cómo se ejecutó la consulta y cómo se podría mejorar.Traces might also contain useful details of how the query was executed, and how it can be improved.

Además, incluso en ausencia de dichos seguimientos del origen, es posible ver las consultas que envía Power BI, además de sus tiempos de ejecución, tal y como se describe en la siguiente sección.Further, even in the absence of such traces from the source, it's possible to view the queries sent by Power BI, along with their execution times, as described in the next section.

Determinación de las consultas que envía Power BI DesktopDetermining the queries sent by Power BI Desktop

De manera predeterminada, Power BI Desktop registra los eventos que se producen durante una sesión determinada en un archivo de seguimiento llamado FlightRecorderCurrent.trc.By default, Power BI Desktop logs events during a given session to a trace file called FlightRecorderCurrent.trc.

En algunos orígenes de DirectQuery, este registro incluye todas las consultas enviadas al origen de datos subyacente.For some DirectQuery sources, this log includes all queries sent to the underlying data source. Los orígenes de DirectQuery restantes se incluirán en el futuro.The remaining DirectQuery sources will be included in the future. Los orígenes siguientes envían consultas al registro:The following sources send queries to the log:

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

El archivo de seguimiento lo puede encontrar en la carpeta AppData del usuario actual:The trace file can be found in the AppData folder for the current user:

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

Para llegar a esta carpeta, en Power BI Desktop, seleccione Archivo > Opciones y configuración > Opciones, y luego elija Diagnóstico.To get to this folder, in Power BI Desktop, select File > Options and settings > Options, and then select Diagnostics. Aparecerá el siguiente cuadro de diálogo:The following dialog appears:

Vínculo para abrir la carpeta de seguimientos

Cuando selecciona Permite abrir la carpeta de volcado de memoria y seguimiento, en Opciones de diagnóstico, se abre esta carpeta: <User>\AppData\Local\Microsoft\Power BI Desktop\Traces.When you select Open crash dump/traces folder, under Diagnostic Options, the following folder opens: <User>\AppData\Local\Microsoft\Power BI Desktop\Traces.

Vaya a la carpeta principal de esta carpeta donde se muestra la carpeta que contiene AnalysisServicesWorkspaces, que contendrá una carpeta de área de trabajo para cada instancia abierta de Power BI Desktop.Navigating to that folder's parent folder displays the folder containing AnalysisServicesWorkspaces, which will contain one workspace folder for every open instance of Power BI Desktop. El nombre de estas carpetas incluye un sufijo de entero, como AnalysisServicesWorkspace2058279583.These folders are named with an integer suffix, such as AnalysisServicesWorkspace2058279583.

Dentro de esa carpeta hay una carpeta \Data.Inside that folder is a \Data folder. Contiene el archivo de seguimiento FlightRecorderCurrent.trc de la sesión actual de Power BI.It contains the trace file FlightRecorderCurrent.trc for the current Power BI session. La carpeta de área de trabajo correspondiente se elimina cuando finaliza la sesión de Power BI Desktop asociada.The corresponding workspace folder is deleted when the associated Power BI Desktop session ends.

Los archivos de seguimiento se pueden leer con la herramienta SQL Server Profiler.The trace files can be read using the SQL Server Profiler tool. Se obtiene como parte de la descarga gratuita de SQL Server Management Studio.Get it as part of the free download SQL Server Management Studio.

Una vez que descargue e instale SQL Server Management Studio, ejecute SQL Server Profiler.Once you download and install SQL Server Management Studio, run SQL Server Profiler.

SQL Server Profiler

Siga estos pasos para abrir el archivo de seguimiento:To open the trace file, take the following steps:

  1. En SQL Server Profiler, seleccione Archivo > Abrir > Archivo de seguimiento.In SQL Server Profiler, select File > Open > Trace file.

  2. Escriba la ruta de acceso al archivo de seguimiento de la sesión de Power BI actualmente abierta, como: C:\Usuarios<user>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces\AnalysisServicesWorkspace2058279583\Data.Enter the path to the trace file for the currently open Power BI session, such as: C:\Users<user>\AppData\Local\Microsoft\Power BI Desktop\AnalysisServicesWorkspaces\AnalysisServicesWorkspace2058279583\Data.

  3. Abra FlightRecorderCurrent.trc.Open FlightRecorderCurrent.trc.

Se muestran todos los eventos de la sesión actual.All events from the current session are displayed. Aquí se muestra un ejemplo con anotaciones en el que se resaltan los grupos de eventos.An annotated example is shown here, which highlights groups of events. Cada grupo tiene los siguientes eventos:Each group has the following events:

  • Los eventos Query Begin y Query End, que representan el inicio y el final de una consulta DAX generada por la interfaz de usuario (por ejemplo, desde un objeto visual o al rellenar una lista de valores en la interfaz de usuario del filtro).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.
  • Uno o más pares de eventos DirectQuery Begin y DirectQuery End, que representan una consulta enviada al origen de datos subyacente como parte de la evaluación de la 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.

Se pueden ejecutar varias consultas DAX en paralelo, por lo que se pueden intercalar eventos de distintos grupos.Multiple DAX queries can run in parallel, so events from different groups can be interleaved. Se puede usar el valor de ActivityID para determinar los eventos que pertenecen al mismo grupo.The value of the ActivityID can be used to determine which events belong to the same group.

SQL Server Profiler con eventos Query Begin y Query End

Otras columnas de interés son las siguientes:Other columns of interest are as follows:

  • TextData: el detalle textual del evento.TextData: The textual detail of the event. En el caso de los eventos Query Begin/End, el detalle es la consulta DAX.For Query Begin/End events, the detail is the DAX query. En el caso de los eventos DirectQuery Begin/End, el detalle es la consulta SQL que se envía al origen subyacente.For DirectQuery Begin/End events, the detail is the SQL query sent to the underlying source. El valor TextData del evento actualmente seleccionado también se muestra en la región, en la parte inferior.The TextData for the currently selected event is also displayed in the region at the bottom.
  • EndTime: cuándo se completó el evento.EndTime: The time when the event completed.
  • Duración: duración, en milisegundos, que tardó la ejecución de la consulta DAX o SQL.Duration: The duration, in milliseconds, taken to execute the DAX or SQL query.
  • Error: indica si se produjo un error, en cuyo caso, el evento también se muestra en rojo.Error: Indicates if an error occurred, in which case the event is also displayed in red.

En la imagen anterior, se han estrechado algunas de las columnas menos interesantes, para que sea más fácil ver otras columnas.In the image above, some of the less interesting columns have been narrowed, to allow other columns to be seen more easily.

Se recomienda el siguiente enfoque para capturar un seguimiento que ayude a diagnosticar un problema de rendimiento potencial:We recommend the following approach to capturing a trace to help diagnose a potential performance issue:

  • Abra una sesión única de Power BI Desktop, para evitar la confusión de tener varias carpetas de área de trabajo.Open a single Power BI Desktop session, to avoid the confusion of multiple workspace folders.
  • Realice el conjunto de acciones de interés en Power BI Desktop.Do the set of actions of interest in Power BI Desktop. Incluya algunas acciones adicionales para asegurarse de que los eventos de interés se inserten en el archivo de seguimiento.Include a few additional actions, to ensure that the events of interest are flushed into the trace file.
  • Abra SQL Server Profiler y examine el seguimiento, tal y como se indicó anteriormente.Open SQL Server Profiler and examine the trace, as described previously. Recuerde que al cerrar Power BI Desktop, se elimina el archivo de seguimiento.Remember that closing Power BI Desktop deletes the trace file. Además, las acciones adicionales en Power BI Desktop no aparecen inmediatamente.Also, further actions in Power BI Desktop don't immediately appear. El archivo de seguimiento se debe cerrar y volver a abrir para ver los nuevos eventos.The trace file should be closed and reopened to see the new events.
  • Mantenga sesiones individuales razonablemente pequeñas, quizás 10 segundos de acciones, no cientos.Keep individual sessions reasonably small, perhaps 10 seconds of actions, not hundreds. Este enfoque facilita la interpretación del archivo de seguimiento.This approach makes it easier to interpret the trace file. También hay un límite en el tamaño del archivo de seguimiento.There's also a limit on the size of the trace file. En el caso de las sesiones largas, existe la posibilidad de descartar los eventos iniciales.For long sessions, there's a chance of early events being dropped.

Descripción del formato de la consulta enviada por Power BI DesktopUnderstanding the form of query sent by Power BI Desktop

El formato general de las consultas que Power BI Desktop crea y envía usa subselecciones para cada una de las tablas a las que se hace referencia.The general format of queries created and sent by Power BI Desktop use subselects for each of the tables referenced. La consulta del Editor de consultas define la subselección.The Query Editor query defines the subselect. Por ejemplo, supongamos que tenemos las siguientes tablas TPC-DS en SQL Server:For example, assume the following TPC-DS tables in SQL Server:

Tablas TPC-DS en SQL Server

Considere la consulta siguiente:Consider the following query:

Consulta de ejemplo

Esa consulta genera el siguiente objeto visual:That query results in the following visual:

Objeto visual resultante de una consulta

La actualización de ese objeto visual generará la consulta SQL que se muestra aquí.Refreshing that visual will result in the SQL query shown here. Como puede imaginar, hay tres subselecciones para Web Sales, ItemDate_dim, y cada una de ellas devuelve todas las columnas de la tabla respectiva, aunque en realidad el objeto visual haga referencia a solo cuatro columnas.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. Estas consultas en las subselecciones que aparecen sombreadas son exactamente el resultado de las consultas definidas en el Editor de consultas.These queries in the subselects that are shaded are exactly the result of the queries defined in Query Editor. No se ha encontrado que usar de esta manera las subselecciones tenga impacto alguno en el rendimiento de los orígenes de datos compatibles hasta el momento con DirectQuery.Use of subselects in this manner hasn't been found to impact performance for the data sources so far supported for DirectQuery. Los orígenes de datos como SQL Server optimizan las referencias a las otras columnas.Data sources like SQL Server optimize away the references to the other columns.

Power BI emplea este patrón porque el analista puede proporcionar directamente la consulta SQL utilizada.Power BI employs this pattern because the SQL query used can be provided directly by the analyst. Se utiliza "tal cual", sin intentar volver a escribirla.It's used "as provided", without an attempt to rewrite it.

Consulta SQL usada "tal cual"

Pasos siguientesNext steps

En este artículo se describen aspectos de DirectQuery que son comunes entre todos los orígenes de datos.This article describes aspects of DirectQuery that are common across all data sources. Hay ciertos detalles específicos para los orígenes de individuales.There are certain details that are specific to individual sources. Vea los temas siguientes en los que se describen orígenes específicos:See the following articles covering specific sources:

Para obtener más información sobre DirectQuery, consulte los siguientes recursos:For more information about DirectQuery, see the following resource: