Uso de DirectQuery en Power BIUsing 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 puede establecer esas conexiones de datos de distintas formas.You can connect to all sorts of different data sources when using Power BI Desktop or the Power BI service, and you can make those data connections in different ways. Puede importar datos a Power BI, que es la forma más común de obtener datos, o bien puede conectarse directamente a los datos en su repositorio de origen original, que se conoce como DirectQuery.You can either import data to Power BI, which is the most common way to get data, or you can connect directly to data in its original source repository, which is known as DirectQuery. En este artículo se describe DirectQuery y sus funcionalidades, incluidos los temas siguientes:This article describes DirectQuery and its capabilities, including the following topics:

  • 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
  • Procedimiento recomendado para usar DirectQueryBest practice for using DirectQuery

En pocas palabras, el procedimiento recomendado para usar la importación en lugar de DirectQuery es el siguiente:In short, the best practice for using import versus DirectQuery is the following:

  • Debe importar datos a Power BI cada vez que sea posible.You should import data to Power BI wherever possible. Con esto se aprovecha el motor de consultas de alto rendimiento de Power BI y se proporciona una experiencia completa y altamente interactiva sobre los datos.This takes advantage of the high performance query engine of Power BI, and provides a highly interactive and fully featured experience over your data.
  • Si no puede cumplir sus objetivos importando datos, considere el uso de DirectQuery.If your goals can't be met by importing data, then 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. Sin embargo, generalmente solo es viable usar DirectQuery 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 generará.However, using DirectQuery is generally only be feasible when the underlying data source can provide interactive queries (less than 5 seconds) for the typical aggregate query, and is able to handle the query load that will be generated. Además, es necesario considerar cuidadosamente la lista de las limitaciones propias del uso de DirectQuery para asegurarse de que de todos modos se pueden cumplir los objetivos.Additionally, the list of limitations that accompany use of DirectQuery should be considered carefully, to ensure your goals can still be met.

El conjunto de funcionalidades que ofrece Power BI para ambos modos de conectividad, es decir, importación y DirectQuery, evolucionará con el tiempo.The set of capabilities offered by Power BI for both connectivity modes – import and DirectQuery - will evolve over time. Esto incluirá proporcionar más flexibilidad cuando se usen datos importados, como el hecho de que la importación se pueda usar en más casos, así como eliminar algunas de las desventajas que presenta el uso de DirectQuery.This will include providing more flexibility when using imported data, such that import can be used in more cases, as well as eliminating some of the drawbacks of using DirectQuery. Independientemente de las mejoras, cuando use DirectQuery, siempre deberá prestar mucha atención al rendimiento del origen de datos subyacente.Regardless of improvements, when using DirectQuery the performance of the underlying data source will always remain 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, then using DirectQuery for that source it will remain unfeasible.

En este tema se habla de DirectQuery con Power BI y no SQL Server Analysis Services.This topic covers DirectQuery with Power BI, and not SQL Server Analysis Services. DirectQuery es también una característica de SQL Server Analysis Services y muchos de los detalles que se describen a continuación se aplican a su uso, aunque también existen diferencias importantes.DirectQuery is also a feature of SQL Server Analysis Services, and many of the details described below apply to its use, there are also important differences. Para información sobre cómo usar DirectQuery con SQL Server Analysis Services, consulte las notas del producto que brindan detalles sobre DirectQuery en SQL Server Analysis Services 2016.For information about using DirectQuery with SQL Server Analysis Services, see the whitepaper that details DirectQuery in SQL Server Analysis Services 2016.

Este 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 very 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)

En el caso de estos orígenes, habitualmente es posible importar los datos a Power BI.For these sources, it's usually possible to import the data to Power BI. Para algunos, también es posible conectarse a través de DirectQuery.For some it is also possible to connect using DirectQuery. El conjunto exacto de orígenes que admiten DirectQuery se describe en el artículo sobre los orígenes de datos compatibles con DirectQuery.The exact set of sources that support DirectQuery is described in the Data Sources supported by DirectQuery article. 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. Usar una conexión dinámica es similar a DirectQuery en el sentido de que no se importan datos y el origen de datos subyacente siempre se consulta para actualizar un objeto visual; sin embargo, una conexión dinámica es distinta en muchos otros aspectos, por lo que se usa un término diferente (dinámica en lugar de DirectQuery).Using a live connection is similar to DirectQuery, in that no data is imported, and the underlying data source is always queried to refresh a visual, but a live connection is different in many other regards, so a different term (live versus DirectQuery) is used.

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 – are explained in detail in the following sections.

Importación de conexionesImport connections

Cuando usa Obtener datos en Power BI Desktop para conectarse a un origen de datos como SQL Server y elige Importar, el comportamiento de dicha conexión es el siguiente:When using Get Data in Power BI Desktop to connect to a data source like SQL Server, and you choose Import, the behavior of that connection is as follows:

  • Durante la experiencia inicial de Obtener datos, cada una de las tablas del conjunto de tablas seleccionado define una consulta que devolverá un conjunto de datos (esas consultas se pueden editar antes de cargar los datos, por ejemplo, para aplicar filtros, agregar los datos o combinar distintas tablas).During the initial Get Data experience, the set of tables selected each define a query that will return a set of data (those queries can be edited prior to loading the data, for example to apply filters, or aggregate the data, or join different tables).
  • 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 asegura que la consulta será muy rápida, por lo que todos los cambios que se hagan en el objeto visual se reflejarán de inmediato.The Power BI store ensures the query will be very fast, hence all changes to the visual will be 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 will not be reflected in any visuals. Es necesario actualizar, con lo que se volverán a importar los datos.It is necessary to Refresh, whereupon the data will be re-imported.
  • Después de publicar el informe (el 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 (the .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. Luego es posible configurar una actualización programada de esos datos, por ejemplo, para volver a importar los datos todos los días.It is then possible to set up scheduled refresh of that data, for example, to re-import 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 un informe nuevo, 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 will be automatically refreshed whenever the underlying dataset is refreshed.

Conexiones de DirectQueryDirectQuery connections

Cuando usa Obtener datos en Power BI Desktop para conectarse a un origen de datos y elige DirectQuery, el comportamiento de dicha conexión es el siguiente:When using Get Data in Power BI Desktop to connect to a data source, and you choose DirectQuery, the behavior of that connection is as follows:

  • Durante 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, esto significa que se selecciona un conjunto de tablas y cada una de ellas define una consulta que devuelve un conjunto de datos de forma lógica.For relational sources, this means a set of tables are selected and each still define a query that logically returns a set of data. En el caso de orígenes multidimensionales como SAP BW, solo se selecciona el origen.For multidimensional sources like SAP BW, only the source is selected.
  • Sin embargo, después de la carga, no se importará ningún dato al almacén de Power BI.However, upon load, no data will actually be imported into the Power BI store. En lugar de eso, 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 will be sent to the underlying data source to retrieve the necessary data. El tiempo que se dedica entonces a actualizar el objeto visual dependerá del rendimiento del origen de datos subyacente.The time then taken to refresh the visual will depend on the performance of the underlying data source.
  • Los cambios que se hagan en los datos subyacentes no se reflejarán de inmediato en ningún objeto visual existente.Any changes to the underlying data will not be immediately reflected in any existing visuals. Sigue siendo necesario actualizar, con lo que se volverán a enviar las consultas necesarias para cada objeto visual y este se actualizará según corresponda.It is still necessary to Refresh, whereupon the necessary queries will be resent for each visual, and the visual updated as necessary.
  • Después de publicar el informe en el servicio Power BI, nuevamente generará un conjunto de datos en el servicio Power BI, tal 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, just 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 un informe nuevo, 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, podría ser necesario configurar una puerta de enlace de datos local, tal como se necesita hacer 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, just 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 asegurarse de que la apertura de un panel será rápida, los iconos se actualizan automáticamente de acuerdo con una programación (por ejemplo, cada hora).To ensure that opening a dashboard will be 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 is to see the very latest data. Por lo tanto, cuando se abre un panel, los iconos reflejarán los datos en el momento de la última actualización y no necesariamente los cambios más recientes en el origen subyacente.Thus, when opening a dashboard, the tiles will reflect the data as of the time of the last refresh, and not necessarily the very latest changes made to the underlying source. Siempre es posible actualizar un panel abierto para asegurarse de que está actualizado.An open dashboard can always be Refreshed to ensure it is up-to-date.

Conexiones dinámicasLive connections

Cuando se conecta a SQL Server Analysis Services (SSAS), tiene la opción de importar datos desde el modelo de datos seleccionado o conectarse de manera dinámica a él.When connecting to SQL Server Analysis Services (SSAS), there is an option to either import data from, or connect live to, the selected data model. Si selecciona la importación, se define una consulta contra el origen de SSAS externo y los datos se importan como normales.If you select import, then you define a query against that external SSAS source, and the data is imported as normal. Si selecciona la conexión dinámica, no hay ninguna consulta definida y se muestra el modelo externo completo en la lista de campos.If you select to connect live then there is no query defined, and the entire external model is shown in the field list. Si selecciona DirectQuery, cuando se crean los objetos visuales, las consultas se envían al origen de SSAS externo.If you select DirectQuery, as visuals are built, queries are sent to the external SSAS source. Sin embargo, a diferencia de DirectQuery, no tiene sentido crear un nuevo modelo; en otras palabras, no es posible definir nuevas columnas calculadas, jerarquías, relaciones, etc.However, unlike DirectQuery, there is no sense in which a new model is being created; in other words, it's not possible to define new calculated columns, hierarchies, relationships, and so on. En lugar de eso, simplemente se conecta de forma directa al modelo SSAS externo.Instead you are simply connecting directly to the external SSAS model.

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 is 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 ServicesCommon Data Services

El comportamiento de los informes sobre SSAS, 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 SSAS, 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 un informe nuevo, se consulta el origen SSAS subyacente (que posiblemente necesite una puerta de enlace de datos local)When opening an existing report in the Power BI service or authoring a new report, the underlying SSAS source is queried (possibly requiring an on-premises data gateway)
  • Los iconos de panel se actualizan automáticamente según una programación (como cada hora o según la frecuencia definida)Dashboard tiles are automatically refreshed on a schedule (such as every hour, or whatever frequency is defined)

Sin embargo, también hay diferencias importantes, entre las que se incluyen que, para las conexiones dinámicas, la identidad del usuario que abre el informe siempre se pasará al origen SSAS subyacente.However, there are also important differences, including that for live connections the identity of the user opening the report will always be passed to the underlying SSAS source.

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 escenarios en los que conectarse con DirectQuery podría ser especialmente útil, incluidos casos donde dejar los datos en el origen se consideraría beneficioso.The following table describes scenarios where connecting with DirectQuery could be especially useful, including cases where leaving the data in the original source would be considered beneficial. La 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 real"Data 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.Models with Imported data can be refreshed at most once per hour. Por lo tanto, si los datos cambian constantemente y es necesario que los informes muestren los datos más recientes, usar la importación con actualización programada sencillamente no cumple con esas necesidades.Hence, if the data is continually changing, and it is necessary for reports to show the latest data, then using Import with scheduled refresh might simply not meet those needs. Además, tenga en cuenta que también es posible transmitir datos en frecuencia directamente a Power BI, aunque existen límites en los volúmenes de datos que se admiten en este caso.Note also that it is also possible to stream data directly into Power BI, though there a limits on the data volumes supported for this case.

Por el contrario, usar DirectQuery significa que cuando se abre o actualiza un informe o panel siempre se mostrará los datos más recientes en el origen.Using DirectQuery, by contrast, means that opening or refreshing a report or dashboard will always show 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 mins).
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, then it certainly would not 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, as it is queried in place.

Sin embargo, los datos de gran tamaño también implican que el rendimiento de las consultas en el origen subyacente será demasiado lento (tal como se analiza en la sección Implicaciones de usar DirectQuery, más adelante en este artículo).However, large data might also imply that the performance of the queries against that underlying source are too slow (as discussed in Implications of using DirectQuery section, later in this article). Y, por supuesto, no siempre es necesario importar todos los datos detallados.And of course it is not always necessary to import the full detailed data. En lugar de eso, los datos se pueden agregar previamente durante la importación (y el Editor de consultas permite hacer esto mismo fácilmente).Instead the data can be pre-aggregated during import (and Query Editor makes it easy to do exactly this). 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. Por lo tanto, si bien DirectQuery es el enfoque más simple cuando se trata de datos de gran tamaño, siempre debe tener en cuenta que importar datos agregados podría ser una buena solución si el origen subyacente es demasiado lento.So while DirectQuery is the simplest approach to large data, you should always keep in mind that importing aggregate data might offer a solution if the underlying source is too slow.
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 de usuarios actuales (de Power BI Desktop) o con las credenciales definidas como parte de la configuración de la actualización programada (desde el servicio Power BI).When the data is imported, Power BI will connect to the data source using the current users credentials (from Power BI Desktop), or the credentials defined as part of configuring scheduled refresh (from the Power BI service). Por lo tanto, cuando dicho informe se publique y comparta, se debe tener cuidado de compartirlo solo con los usuarios que tienen permitido ver los mismos datos o definir Seguridad de nivel de fila como parte del conjunto de datos.Thus, in publishing and sharing such a report, care must be taken to only share with users allowed to see the same data, or to define Row Level Security as part of the dataset.

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

Por lo tanto, hasta que Power BI permita que la entidad del consumidor del informe pase al origen subyacente, DirectQuery no ofrece ninguna ventaja con respecto a la seguridad del origen de datos.Thus, until Power BI allows for the identity of the report consumer to pass through to the underlying source, DirectQuery offers no advantages with regard to data source security.
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 cannot 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, se debe tener en cuenta que incluso con DirectQuery, algunas cachés de datos a nivel de objeto visual se mantienen en el servicio Power BI (debido a la actualización programada de los iconos).However, it should be noted that even with DirectQuery, some caches of data at the visual level are retained in the Power BI service (due to scheduled refresh of tiles).
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 (como SAP HANA o SAP Business Warehouse), importar 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, medir TotalSales por Class, Year y City.For example, measure TotalSales by Class, Year, and City. Luego, si se crea un objeto visual que solicita los 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 is further aggregating the aggregate value. Esto es correcto para las medidas de adición (como Sum, Min), pero es un problema para las que no son de adición (como Average, DistinctCount).This is fine for additive measures (such as Sum, Min) but it's an issue for non-additive (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. La compatibilidad con SAP BW se analiza con más detalles en DirectQuery y SAP BW.Support for SAP BW is covered further in DirectQuery and SAP BW.

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

Por tanto, en resumen y dadas las funcionalidades actuales de DirectQuery en Power BI, los escenarios en que ofrece beneficios son los siguientes:So in summary, given the current capabilities of DirectQuery in Power BI, the scenarios where it offers benefits are the following:

  • 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 la necesidad de agregar previamenteHandling very large data, without the need to pre-aggregate
  • Se aplican restricciones de soberanía de datosData sovereignty restrictions apply
  • El origen es un origen multidimensional que contiene medidas (como SAP BW)The source is a multi dimensional source containing measures (such as SAP BW)

Tenga en cuenta los detalles de la lista anterior relacionados con el uso de Power BI por sí solo.Note that the details in the previous list relate to the use of Power BI alone. Siempre existe la opción de usar en su lugar un modelo de SQL Server Analysis Services (o Azure Analysis Services) externo para importar los datos y, luego, usar Power BI para conectarse a ese modelo.There is always the option of instead using an external SQL Server Analysis Services (or Azure Analysis Services) model to import data, and then using Power BI to connect to that model. Si bien ese enfoque podría requerir tener conocimientos adicionales, proporciona una mayor flexibilidad.While that approach would require additional skills, it does provide greater flexibility. Por ejemplo, se pueden importar volúmenes de datos mucho más grandes y no hay restricción en la frecuencia de actualización de los datos.For example, much larger volumes of data can be imported, and there is no restriction on how frequently the data can be refreshed.

Implicaciones de usar DirectQueryImplications of using DirectQuery

Usar 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. Esta información se indicará donde corresponda y esos orígenes, sustancialmente distintos, se analizan en temas independientes.This will be called out where applicable, and separate topics 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 actualizar cada objeto visual (por ejemplo, después de cambiar el valor de una segmentación) tarda unos segundos (menos de cinco), la experiencia sería razonable, aunque de todos modos se podría considerar como lenta en comparación con la respuesta inmediata que se acostumbra cuando los datos se importan a Power BI.If refreshing each visual (for example, after changing a slicer value) takes a few seconds (<5s) then the experience would be reasonable, yet might still feel sluggish compared to the immediate response we are used to when importing the data to Power BI. Si, por el contrario, la lentitud del origen significa que los objetos visuales individuales tardan más que eso (es decir, decenas de segundos), la experiencia pasa a ser muy deficiente, posiblemente incluso al punto de que se agote el tiempo de espera de las consultas.If instead the slowness of the source means that individual visuals take longer than that (tens of seconds), then the experience becomes extremely poor, possibly even to the point of queries timing out.

Junto con el rendimiento del origen subyacente, se debe prestar especial atención a la carga que se colocará en él (que, por supuesto, a menudo afecta el rendimiento).Along with the performance of the underlying source, careful consideration should be paid to the load that will be placed upon it (that of course then often impacts the performance). Como se analiza a continuación con más detalle, cada usuario que abre un informe compartido y cada icono de panel que se actualiza periódicamente enviarán al menos una consulta por objeto visual al origen subyacente.As discussed further below, each user that opens a shared report, and each dashboard tile that is periodically refreshed, will be sending at least one query per visual to the underlying source. 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 be able to handle such a query load, while still maintaining reasonable performance.

Limitado a un origen únicoLimited to a single source

Cuando se importan datos, es posible combinarlos de varios orígenes en un modelo único, por ejemplo, para combinar fácilmente algunos datos de una base de datos SQL Server corporativa con algunos datos locales mantenidos en un archivo Excel.When importing data, it is possible to combine data from multiple sources into a single model, for example, to easily join some data from a corporate SQL Server database with some local data maintained in an Excel file. Esto no se puede hacer cuando se usa DirectQuery.This is not possible when using DirectQuery. Cuando se selecciona DirectQuery para un origen, solo será posible entonces usar datos desde ese origen único (como una base de datos SQL Server única).When selecting DirectQuery for a source, it will then only be possible to use data from that single source (such as a single SQL Server database).

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 (como analizar documentos JSON o dinamizar datos desde una columna a un formulario orientado por filas).With imported data, a sophisticated set of transformations can easily be applied to clean and re-shape the data before using it to create visuals (such as parsing JSON documents, or pivoting data from a column to a row orientated form). 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 orígenes relacionales, como SQL Server, sigue siendo posible definir un conjunto de transformaciones por consulta, pero esas transformaciones son limitadas por motivos de rendimiento.For relational sources like SQL Server, it is still possible to define a set of transformations per query, but those transformations are limited, for performance reasons. 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 are limited to those transformations that can reasonably be translated into a single native query. Si usa una transformación demasiado compleja, recibirá 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, then you will receive an error that either it must be deleted, or the model switched to Import mode.

Además, la consulta que se genera del cuadro de diálogo Obtener datos o el 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. De este modo, la consulta definida en el Editor de consultas debe ser válida dentro de este contexto.Thus the query defined in Query Editor must be valid within this context. En concreto, esto significa que no es posible usar una consulta mediante expresiones de tabla comunes ni que invoquen procedimientos almacenados.In particular this means it is not possible to use a query using Common Table Expressions, nor that invokes Stored Procedures.

Limitaciones de modeladoModelling 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 modelling 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 is still the principle that the raw data is being enriched, so as to improve later consumption. Sin embargo, hay algunas funcionalidades de modelado que no están disponibles, o que se ven limitadas, cuando se usa DirectQuery.However, there some modeling capabilities are not 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 aparece en la lista con viñetas siguiente.The set of limitations that are common to all DirectQuery sources are listed in the following bulleted list. Pueden aplicarse limitaciones adicionales a orígenes individuales, tal como se describe en Detalles específicos de orígenes de datos que se encuentra casi al final de este artículo.Additional limitations might apply to individual sources, as described in Data source specific details found near the end of this article.

  • 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, then by default 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 el modo DirectQuery.This built-in date hierarchy is not available when using DirectQuery mode. Sin embargo, tenga en cuenta que si hay una tabla Fecha disponible en el origen subyacente (como es habitual en muchos almacenes de datos), las funciones de inteligencia de tiempo de DAX se pueden usar como siempre.Note however that if there is Date table available in the underlying source (as is common in many data warehouses) then the DAX Time Intelligence functions can be used as normal.
  • 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 se permiten estarán limitadas a las que simplemente se pueden insertar en el origen subyacente y, por tanto, variarán según las funcionalidades exactas del origen.Additionally, the DAX scalar functions (such as LEFT()) that are allowed will be limited to those which can simply be pushed to the underlying source, hence will vary depending upon the exact capabilities of the source. Las funciones no compatibles no aparecerán en la lista para autocompletar cuando se crea el DAX de una columna calculada y se generaría un error si se usan.Functions that are not supported will not be listed in autocomplete when authoring the DAX for a calculated column, and would result in an error if used.
  • Sin compatibilidad con funciones DAX de elementos primarios y secundarios: en el modelo DirectQuery, no es posible usar la familia de funciones PATH() de DAX, 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 model, it is not possible to use the family of DAX PATH() functions, that generally handle Parent-Child structures (such as chart of accounts, or employee hierarchies).
  • Limitaciones para las medidas (de manera predeterminada): las funciones y expresiones de DAX que se pueden usar en las medidas están restringidas de forma predeterminada.Limitations (by default) for measures: By default, the DAX functions and expressions that can be used in measures is restricted. Nuevamente, la función de autocompletar restringirá las funciones que aparecen y se producirá un error si se usa una función o una expresión no válida.Again, autocomplete will restrict the functions listed, and an error will occur if an invalid function or expression is used. Simplemente, el motivo es garantizar que, de manera predeterminada, las medidas están restringidas a medidas simples con pocas probabilidades de generar algún problema de rendimiento.The reason is simply to ensure that, by default, measures are restricted to simple measures that are unlikely by themselves cause any performance issues. Los usuarios avanzados pueden optar por omitir esta limitación. Para ello, deben seleccionar Archivo > Opciones, Configuración > Opciones > DirectQuery y, a continuación, la opción Permitir medidas sin restricciones en el modo DirectQuery.Advanced users can choose to bypass this limitation by selecting File > Options and then Settings > Options > DirectQuery, then selecting the option Allow unrestricted measures in DirectQuery mode. Si se selecciona esta opción, se puede usar cualquier expresión DAX que sea válida para una medida.When that option is selected, any DAX expression that is valid for a measure can be used. Los usuarios deben tener en cuenta, sin embargo, que algunas expresiones que funcionan bien al importar datos pueden derivar en consultas muy lentas para el origen de back-end en el modo DirectQuery.Users must be aware, however, that some expressions that perform well when the data is imported may result in very slow queries to the backend source when in DirectQuery mode.

    • Por ejemplo, de manera predeterminada:For example, by default:

      • Sería posible crear una medida que simplemente sume el importe de ventas:It would be possible to author a measure that simply summed the sales amount:

        SalesAmount = SUMX(Web_Sales, [ws_sales_price]* [ws_quantity])
        
      • No sería posible crear una medida que promedie ese valor de SalesAmount en todos los elementos:It would not be possible to author a measure that then averaged that SalesAmount over all of the Items:

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

      El motivo es que dicha medida podría generar un rendimiento deficiente si hubiese una gran cantidad de elementos.The reason is that such a measure could result in poor performance if there were a very large number of items.

  • 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 are not supported: The ability to define a calculated table using a DAX expression is not supported in DirectQuery mode.
  • El filtrado de relaciones se limita a un solo sentido: cuando se usa DirectQuery, no es posible establecer la dirección del filtro cruzado de una relación en "Ambas".Relationship filtering is limited to a single direction: When using DirectQuery, it is not possible to set the Cross Filter direction on a relationship to “Both”. Por ejemplo, con las tres tablas que aparecen a continuación, no sería posible crear un objeto visual que muestre cada Customer[Gender] y la cantidad de Product[Category] que compra cada uno.For example, with the three tables below, it would not be possible to build a visual showing each Customer[Gender], and the number of Product[Category] bought by each. El uso de ese filtrado bidireccional se describe en estas notas detalladas del producto (el documento muestra ejemplos dentro del contexto de SQL Server Analysis Services, pero los puntos fundamentales se aplican de igual forma a Power BI).Use of such bi-directional filtering is described in this detailed whitepaper (the paper presents examples in the context of SQL Server Analysis Services, but the fundamental points apply equally to Power BI).

    Nuevamente, la limitación se impone debido a las implicaciones de rendimiento.Again, the limitation is imposed due to the performance implications. Una aplicación especialmente importante de esto es cuando se define la Seguridad de nivel de fila como parte del informe, debido a que un patrón común es tener una relación de varios a varios entre los usuarios y las entidades a las que tienen acceso, y el uso del filtrado bidireccional es necesario para aplicarlo.One particularly important application of this is when defining Row Level Security as part of the report, as a common pattern is to have a many-many relationship between the users and the entities they are allowed access to, and use of bi-directional filtering is necessary to enforce this. Sin embargo, el uso del filtrado bidireccional para los modelos DirectQuery se debe usar con precaución y se debe prestar mucha atención a cualquier impacto negativo en el rendimiento.However, use of bi-directional filtering for DirectQuery models should be used judiciously, with careful attention paid to any detrimental impact on performance.

  • 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 is 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. Sin embargo, hay algunas limitaciones importantes en algunas de las otras funcionalidades que ofrece el servicio Power BI una vez que se publica un informe, tal como se describe en las siguientes viñetas:However, there are some important limitations in some of the other capabilities offered in the Power BI service after a report is published, as described in the following bullets:

  • No se admite Información rápida: Información rápida de Power BI busca 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 is not supported: Power BI Quick Insights searches different subsets of your dataset while applying a set of sophisticated algorithms to discover potentially-interesting insights. Dada 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 is not 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 is not supported: Power BI Q&A enables you to explore your data using intuitive, natural language capabilities and receive answers in the form of charts and graphs. Pero actualmente no se admite en los conjuntos de datos que usan DirectQuery.However, it is 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: It is possible to explore your data by using the “Explore in Excel” capability on a dataset. Esto permitirá crear tablas dinámicas y gráficos dinámicos en Excel.This will allow 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 crear objetos visuales en Power BI y, por lo tanto, si el uso de Excel es importante en sus escenarios, debe tomar en cuenta esto 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 should be accounted for in your decision to use DirectQuery.

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 using DirectQuery will always use the same fixed credentials to connect to the underlying data source, after publish to the Power BI service. Nuevamente debe tener en cuenta que esto se refiere específicamente a DirectQuery y no a las conexiones dinámicas con SQL Server Analysis Services, que es diferente en este sentido.Again, note this refers specifically to DirectQuery, not to live connections to SQL Server Analysis Services, which is different in this respect. Por lo tanto, inmediatamente después de publicar un informe de DirectQuery, es necesario configurar las credenciales del usuario que lo usará.Hence immediately after publish of a DirectQuery report, it is necessary to configure the credentials of the user that will be used. Hasta que esto se haga, abrir el informe en el servicio Power BI generará un error.Until this is done, 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, irrespective of the user who opens the report. En este sentido, es exactamente igual que los datos importados, en los que cada usuario verá los mismos datos, a menos que Seguridad de nivel de fila esté definida como parte del informe.In this regard it is exactly like imported data, in that every user will see the same data, unless Row Level Security has been defined as part of the report. Por lo tanto, debe prestar la misma atención al uso compartido del informe por si hay definida alguna regla de seguridad en el origen subyacente.Hence 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, principalmente en lo que se refiere a poder comprender 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án el informe y el panel, la complejidad del informe y si en el informe se definió Seguridad de nivel de fila.This section describes the behavior of a DirectQuery report in the Power BI service, primarily so as to be able to understand the degree of load that will be placed on the back end data source, given the number of users that the report and dashboard will be shared with, the complexity of the report, and whether Row Level Security has been defined in the report.

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, then all the visuals on the currently visible page will refresh. Generalmente, cada objeto visual requerirá al menos una consulta al origen de datos subyacente.Each visual will generally require at least one query to the underlying data source. Algunos objetos visuales pueden requerir más de una consulta (por ejemplo, si mostró valores agregados de dos tablas de hechos distintas, contenía una medida más compleja o contenía totales de una medida no de adición, como Count Distinct).Some visuals might require more than one query (for example, if it showed aggregate values from two different fact tables, or contained a more complex measure, or contained totals of a non-additive measure like Count Distinct). Moverse a una página nueva hará que se actualicen esos objetos visuales, lo que generará un conjunto nuevo de consultas al origen subyacente.Moving to a new page will result in those visuals being refreshed, resulting in 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, seleccionar un valor distinto en una segmentación requerirá enviar un nuevo conjunto de consultas para actualizar todos los objetos visuales afectados.For example, selecting a different value on a slicer will require sending a new set of queries to refresh all of the effected 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, por supuesto, editar un informe nuevo requerirá enviar consultas para cada paso de la ruta para generar el objeto visual final deseado.Similarly of course, editing a new report with require queries to be sent for each step on the path to produce the final desired visual.

Hay cierto tipo de almacenamiento de los resultados en caché, por lo que la actualización de un objeto visual será instantánea si se han obtenido recientemente los mismos resultados.There is some caching of results, so that the refresh of a visual will be instantaneous if the exact same results have recently been obtained. Dichas cachés no se comparten entre los usuarios si hay alguna Seguridad de nivel de fila definida como parte del informe.Such caches are not shared across users, if there is any Row Level Security defined as part of the report.

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 que se basan en los conjuntos de datos de DirectQuery se actualizan automáticamente según una programación, lo que hace que se envíen consultas al origen de datos de back-end.Tiles based on DirectQuery datasets are then refreshed automatically according to a schedule, resulting in queries being sent to the backend data source. De manera predetermina, esto sucede cada hora, pero se puede establecer como parte de la configuración del conjunto de datos para que entre cada 15 minutos y semanalmente.By default, this occurs 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, significa que cada icono se actualizará una vez y que los resultados se compartirán entre todos los usuarios.If no Row Level Security is defined in the model, this means that each tile would be refreshed once, and the results shared across all users. Si está definida la Seguridad de nivel de fila, puede hacer un efecto multiplicador de gran tamaño: cada icono requiere que se envíen consultas independientes por usuario al origen subyacente.If Row Level Security is defined, then there can be a large multiplier effect – each tile requires separate queries per user to be sent to the underlying source.

Por lo tanto, un panel con diez 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.Hence a dashboard with ten tiles, shared with 100 users, created on a dataset using DirectQuery with Row Level Security, and configured to refresh every 15 minutes, would result in at least 1000 queries being sent every 15 minutes to the back end source.

Por lo tanto, se debe prestar mucha atención al uso de Seguridad de nivel de fila y a la configuración de la programación de la actualización.Hence careful consideration must be paid to the use of Row Level Security, and the configuring of the refresh schedule.

Tiempos de esperaTimeouts

Se aplica un tiempo de espera de cuatro minutos a las consultas individuales en el servicio Power BI y en las consultas que tardan más simplemente se producirá un error.A timeout of four minutes is applied to individual queries in the Power BI service, and queries taking longer than that will simply fail. Como ya se enfatizó anteriormente, se recomienda usar DirectQuery para orígenes que proporcionen un rendimiento de consulta casi interactivo, por lo que este límite está diseñado para evitar que surjan problemas debido a tiempos de ejecución demasiado largos.As stressed earlier, it is recommended that DirectQuery be used for sources that provide near interactive query performance, so this limit is intended to prevent issues from overly long execution times.

Otras implicacionesOther implications

Las siguientes son algunas de las otras implicaciones generales que tiene el uso de DirectQuery:Some other general implications of using DirectQuery are the following:

  • Si los datos cambian, es necesario actualizar para asegurarse de que se muestren los datos más recientes: dado el uso de cachés, no hay garantía de que el objeto visual siempre muestre los datos más recientes.If data is changing, it is necessary to Refresh to ensure the latest data is shown: Given the use of caches, there is no guarantee that the visual is always showing the latest data. Por 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. Luego, y debido a que cambia una segmentación, podría actualizarse para mostrar las transacciones correspondientes a los últimos dos días, incluidas algunas transacciones muy recientes y recién llegadas.Then due to a slicer being changed, it might refresh to show the transactions for the last two days, including some very recent, newly arrived transactions. Devolver la segmentación a su valor original hará que nuevamente muestre el valor en caché que se obtuvo anteriormente, el que no incluiría la transacción recién llegaba que se vio antes.Returning the slicer to its original value would result in it again showing the cached value previously obtained, that would not include the newly arrived transaction seen before.

    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 will clear any caches, and refresh all the visuals on the page to show the latest data.

  • Si los datos cambian, no se garantiza la coherencia entre los objetos visuales: es posible que los objetos visuales distintos, ya sea que estén en la misma página o en páginas distintas, se actualicen en momentos distintos.If data is changing, there is no guarantee of consistency between visuals: Different visuals, whether on the same page or on different pages, might be refreshed at different times. Por tanto, si los datos del origen subyacente cambian, no hay garantía de que cada objeto visual muestre los datos en el mismo punto en el tiempo.Thus if the data in the underlying source is changing, there is no guarantee that each visual will be showing the data at the exact same point of time. 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 is not guaranteed. Para garantizar esto, se requeriría la sobrecarga de actualizar todos los objetos visuales cada vez que se actualice algún objeto visual, en conjunto con el uso de costosas características como el aislamiento de instantánea en el origen de datos subyacente.To guarantee this would require the overhead of refreshing all visuals whenever any visual refreshed, in tandem with the use of costly features like Snapshot Isolation in the underlying data source.

    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 will refresh all of the visuals on the page. Y se debe tener en cuenta que, incluso si se usa el modo de importación, existe un problema similar para garantizar la coherencia si se importan datos de más de una tabla.And it should be noted that even if using Import mode, there is a similar problem of guaranteeing consistency if importing data from more than one table.

  • 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 simplemente 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 simply 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 are not automatically applied to change the available fields in the field list. Por tanto, si se quitaron tablas o columnas del origen subyacente, podrían producirse errores de consulta después de la actualización.Thus 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, will update 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 one million rows returned on any query: There is a fixed limit of one million rows placed on the number of rows that can be returned in any single query to the underlying source. Esto no suele tener implicaciones prácticas y los objetos visuales mismos no mostrarán esa cantidad de puntos.This 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 is not fully optimizing the queries sent, and there is 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 whilst building a visual, on the path to a more reasonable final state. Por ejemplo, incluir los valores Customer y TotalSalesQuantity podría alcanzar 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 1m 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 '1000000' 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: tenga en cuenta que, a pesar de que generalmente es posible cambiar un modelo del modo DirectQuery para usar el modo de importación, esto significa que se deben importar todos los datos necesarios.Cannot change from import to DirectQuery mode: Note that while it's generally possible to switch a model from DirectQuery mode to use import mode, this means all the necessary data must be imported. Tampoco es posible revertir el cambio (principalmente debido al conjunto de características que no se admite en el modo DirectQuery).It is also not possible to switch back (primarily due to 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 completamente distinto de las medidas externas.DirectQuery models over multidimensional sources like SAP BW also cannot be switched from DirectQuery to import, due to the completely different treatment of external measures.

DirectQuery en el servicio Power BIDirectQuery in the Power BI service

Todos los orígenes son compatibles desde Power BI Desktop.All sources are supported from Power BI Desktop. Algunos recursos también están disponibles directamente desde 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 is possible for a business user to use Power BI to connect to their data in Salesforce, and immediately get a dashboard, without use of Power BI Desktop.

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

Sin embargo, se recomienda encarecidamente que cualquier uso de DirectQuery sobre esos dos orígenes comience dentro de Power BI Desktop.However, it is strongly recommended that any use of DirectQuery over those two sources start within Power BI Desktop. El motivo de esto es que cuando la conexión se establece inicialmente en el servicio Power BI, se aplicarán muchas limitaciones clave, lo que significa que, si bien el punto de inicio fue simple (el inicio en el servicio Power BI), hay limitaciones sobre cómo mejorar aún más el informe resultante (por ejemplo, no es posible entonces crear ningún cálculo ni usar muchas características de análisis, o bien incluso actualizar los metadatos para que reflejen cualquier cambio en el esquema subyacente).The reason is that when the connection is initially made in the Power BI service, many key limitations will apply, meaning that while the start point was easy (starting in the Power BI service), there are limitations on enhancing the resulting report any further (for example, it's not possible then to create any calculations, or use many analytical features, or even refresh the metadata to reflect any changes to the underlying schema).

Instrucciones para usar correctamente DirectQueryGuidance for using DirectQuery successfully

Si va a usar DirectQuery, en esta sección puede encontrar algunas instrucciones de alto nivel sobre cómo garantizar una correcta ejecución.If you're going to use DirectQuery, then 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-endBackend data source performance

Se recomienda encarecidamente validar que los objetos visuales simples podrán actualizarse en un tiempo razonable.It is strongly recommended to validate that simple visuals will be able to refresh in a reasonable time. Esto debe ser en menos de cinco segundos para tener una experiencia interactiva razonable.This should be within 5 seconds to have a reasonable interactive experience. Por supuesto, 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, lo que haría inviable la solución.Certainly if visuals are taking longer than 30 seconds, then it's highly likely that further issues will occur following publication of the report, which will make the solution unworkable.

Si las consultas son lentas, el primer punto de investigación es examinar las consultas que se envían al origen subyacente y el motivo del rendimiento de consulta que se observa.If queries are slow, then the first point of investigation is to examine the queries being sent to the underlying source, and the reason for the query performance being observed. En este tema no se analiza el amplio rango de procedimientos recomendaciones de optimización de base de datos en el conjunto completo de los orígenes subyacentes potenciales, pero sí se aplica a las prácticas de bases de datos estándar que se aplican a la mayoría de las situaciones:This topic doesn't cover the wide range of database optimization best practices across the full set of potential underlying sources, but it does apply to the standard database practices that apply to most situations:

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

Instrucciones para el diseño de modelosModel Design Guidance

Cuando defina el modelo, considere hacer lo siguiente:When defining the model, consider doing the following:

  • Evite consultas complejas en el Editor de consultas.Avoid complex queries in Query Editor. La consulta definida en el Editor de consultas se transformará en una consulta SQL única que, luego, se incluirá en la subselección de cada consulta enviada a esa tabla.The query that's defined in the Query Editor will be translated into a single SQL query, that will then be included in the subselect of every query sent to that table. Si 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 ever 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 simples agregados.At least initially, it is recommended to limit measures to simple aggregates. Luego, si tienen un rendimiento satisfactorio, se pueden definir medidas más complejas, pero siempre prestando atención al rendimiento de cada una de ellas.Then if those perform 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. Esto resulta especialmente relevante para las bases de datos donde es necesario realizar combinaciones de varias columnas.This is particularly relevant to databases where it is necessary to perform multi-column joins. Actualmente, Power BI no permite que una relación se base en varias columnas, como la CE/CP.Power BI today does not allow a relationship to be based on multiple columns as the FK/PK. La solución común es concatenar las columnas juntas usando una columna calculada y basar la combinación en eso.The common workaround is to concatenate the columns together using a calculated column, and base the join on that. Si bien esta solución es razonable en el caso de los datos importados, para DirectQuery resulta en una combinación en una expresión que comúnmente impide el uso de cualquier índice y genera un rendimiento deficiente.While this workaround is reasonable for imported data, in the case of DirectQuery it results in a join on an expression, that commonly prevents use of any indexes, and leads to poor performance. La ú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 does not 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.Hence defining a relationship between columns of type uniqueidentifier column will result in a query with a join involving a Cast. Al igual que en el caso anterior, esto normalmente genera un rendimiento deficiente.Again, this 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 (normalmente la clave principal de la tabla to) debe estar oculta, para que así no aparezca en la lista de campos y, por lo tanto, no se pueda usar en los objetos visuales.The to column on relationships (commonly the primary key on the to table) should be hidden, so that it does not appear in the field list, and therefore cannot be used in visuals. 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) y de todos modos es un procedimiento recomendado ocultar dichas columnas.Often the columns on which relationships are based are in fact system columns (for example, surrogate keys in a data warehouse) and hiding such columns is good practice anyway. Si la columna tiene un significado, introduzca una columna calculada visible y que tenga una expresión simple 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. Por ejemplo:For example:

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

    El motivo de esto es simplemente evitar que se produzca un problema de rendimiento si un objeto visual incluye la columna de clave principal.The reason for doing this is simply to avoid a performance issue that can occur otherwise if a visual includes the primary key column.

  • Examine todos los usos de las columnas calculadas y los cambios de tipo de datos.Examine all uses of calculated columns and data type changes. Usar estas funcionalidades no necesariamente produce daños, sino que hacen que las consultas que se envían al origen subyacente contengan expresiones en lugar de simples referencias a las columnas lo que, nuevamente, podría hacer que no se usen los índices.Use of these capabilities are not necessarily harmful, they result in the queries sent to the underlying source containing expressions rather than simple references to columns, that again might result in indexes not being used.
  • Evite el uso del filtrado cruzado bidireccional (versión preliminar) en las relaciones.Avoid use of the (preview) bi-directional cross filtering on relationships.
  • 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 COMBINACIÓN INTERNA en lugar de COMBINACIÓN EXTERNA.The Assume Referential Integrity setting on relationships enables queries to use INNER JOIN statements rather than OUTER JOIN. Esto generalmente mejora el rendimiento de la consulta, aunque depende de los puntos específicos del origen de datos.This 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.Do not 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.

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

    Casi con toda seguridad, no es esto lo que se quería.This is almost certainly not what was 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 upon the date as at the time the report is executed then instead apply the filter in the report as a Report Filter. Actualmente esto se realiza con la creación de una columna calculada que calcula la cantidad de días atrás (como la función DATE() de DAX) y, luego, usa esa columna calculada en un filtro.Currently this would be done by creating a calculated column calculating the number of days ago (using the DAX DATE() function), and then using that calculated column in a filter.

Instrucciones para el diseño de informesReport Design Guidance

Cuando cree un informe usando una conexión de DirectQuery, siga las instrucciones siguientes:When creating a report using a DirectQuery connection, adhere to the following guidance:

  • 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 en el valor TotalSalesAmount y ProductName, y luego filtrar según un año determinado, aplique el filtro en Año en el primer momento.For example, rather than drag in the TotalSalesAmount, and ProductName, then filter to a particular year, apply the filter on Year at the very start. Esto se debe a que cada paso de la creación de un objeto visual enviará una consulta y, si bien es posible hacer entonces otro cambio antes de que se complete la primera consulta, sigue habiendo una carga innecesaria en el origen subyacente.This is because each step of building a visual will send a query, and whilst it is possible to then make another change before the first query has completed, this still leaves unnecessary load on the underlying source. 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, los filtros no se aplican al comienzo, el resultado podría alcanzar el límite mencionado de un millón de filas.Also, failing to apply filters early can result in hitting the 1m row limit above.
  • Limite la cantidad de objetos visuales de una página: cuando se 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 a page is opened (or some page level slicer or filter changed) then 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; por lo tanto, 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.There is also a limit on the number of queries that are sent in parallel, hence as the number of visuals increases, some of the visuals will be refreshed in a serial manner, increasing the time taken to refresh the entire page. 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 y más simples.For this reason it's recommended to limit the number of visuals on a single page, and instead have more, simpler pages.
  • Considere 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”.

    Sin embargo, es posible controlar esta interacción, tal como se describe en este artículo.However, this interaction can be controlled as described in this article. En DirectQuery, dicho filtrado cruzado y resaltado cruzado requiere que se envíen consultas al origen subyacente, por lo que se debe desactivar la interacción si el tiempo que se tarda en responder a las selecciones de los usuarios sería excesivamente largo.In DirectQuery such cross-filtering and cross-highlighting requires queries to be sent to the underlying source, so the interaction should be switched off if the time taken to respond to users' selections would be unreasonably long.

  • Considere compartir solo el informe: hay distintas formas de compartir contenido después de su publicación en el servicio Power BI.Consider sharing the report only: There are different ways of sharing content after publishing to the Power BI service. En el caso de DirectQuery, se recomienda considerar solo compartir el informe terminado en lugar de permitir que otros usuarios creen informes nuevos (y potencialmente encuentren problemas de rendimiento para los objetos virtuales determinados que generan).In the case of DirectQuery, it's advisable to only considering sharing the finished report, rather than allow other users to author new reports (and potentially encounter performance issues for the particular visuals that they build).

Además de la lista anterior de sugerencias, tenga en cuenta que cada una de las funcionalidades de creación de informes puede generar problemas de rendimiento:In addition to the above list of suggestions, note that each of the following reporting capabilities can cause performance issues:

  • Filtros de medidas: los objetos visuales que contienen medidas (o agregados de columnas) pueden contener filtros en esas medidas.Measure filters: Visuals containing measures (or aggregates of columns) can contain filters in those measures. Por ejemplo, el objeto visual que aparece a continuación muestra SalesAmount por Category, pero solo incluye las categorías que tienen más de 20 millones de ventas.For example, the visual below shows SalesAmount by Category, but only including those Categories with more than 20M of sales.

    Esto dará como resultado que se envíen dos consultas al origen subyacente:This will result in two queries being sent to the underlying source:

    • La primera consulta recuperará las categorías que cumplen con la condición (Ventas > 20 millones)The first query will retrieve the Categories meeting the condition (Sales > 20M)
    • La segunda consulta recuperará los datos necesarios para el objeto visual, incluidas las categorías que cumplían la condición en la cláusula WHERE.The second query will then retrieve the necessary data for the visual, including the Categories that met the condition in the WHJERE clause.

    Generalmente, esto tiene un buen rendimiento si existen cientos o miles de categorías, como en este ejemplo.This generally performs just fine if there are hundreds or thousands of categories, as in this example. El rendimiento se puede deteriorar si la cantidad de categorías es mucho más grande (y, de hecho, la consulta generará un error si hubiese más de un millón de categorías que cumplan con la condición, debido al límite de un millón de filas que ya analizamos).Performance can degrade if the number of categories is much larger (and indeed, the query will fail if there were more than a million categories meeting the condition, due to the one million row limit discussed earlier).

  • Filtros TopN: es posible definir los filtros avanzados para filtrar solo los valores N superior (o inferior) clasificados por alguna medida, por ejemplo, para incluir solo las 10 principales categorías en el objeto visual anterior.TopN filters: Advanced filters can be defined to filter on only the Top (or Bottom) N values ranked by some measure, for example, to only include the Top 10 Categories in the visual above. Nuevamente, esto dará como resultado que se envíen dos consultas al origen subyacente.This will again result 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, esto 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 can lead to performance issues (or query failures due to the 1m row limit).
  • Median: generalmente, cualquier agregación (Sum, Count Distinct, etc.) se inserta en el origen subyacente.Median: Generally, any aggregation (Sum, Count Distinct, so on) is pushed to the underlying source. Sin embargo, esto no sucede con Median, ya que habitualmente este agregado no es compatible con el origen subyacente.However, this is not true for Median, as this aggregate is generally not supported by the underlying source. En dichos casos, se recuperan los datos detallados del origen subyacente y el valor Median 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. Esto es razonable cuando la mediana se calcula sobre un número relativamente pequeño de resultados, pero los problemas de rendimiento (o errores de consulta debido al límite de un millón de filas) se producirán si la cardinalidad es grande.This is reasonable when the median is to be calculated over a relatively small number of results, but performance issues (or query failures due to the 1m row limit) will occur if the cardinality is large. Por ejemplo, el valor medio de la población de un país podría ser razonable, pero el valor medio 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 ("is" o "is not").In particular, the default ‘contains’ filter should not be used if what is really required is an exact match (‘is’ or ‘is not’). Si bien los resultados podrían ser iguales, según los datos reales, el rendimiento podría ser completamente distinto debido al uso de los índices.Although the results might be the same, depending on the actual data, the performance might be drastically different due to the use of indexes.
  • 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 provocar algunos problemas de rendimiento, porque el usuario selecciona un conjunto de elementos en la segmentación (por ejemplo, los 10 productos que les interesan) y luego cada selección nueva hará que se envíen consultas al origen de back-end.Allowing multi selection in filters can cause some performance issues, because as the user selects a set of items in the slicer (for example, the ten products they are interested in), then each new selection will result in queries being sent to the backend source. Si bien el usuario puede seleccionar el elemento siguiente antes de que se complete la consulta, esto genera una carga adicional en el origen subyacente.Whilst the user can select the next item prior to the query completing, this does result in extra load on the underlying source.

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.It's strongly recommended that any diagnosis of performance issues starts in Power BI Desktop, rather than in the Power BI service. Suele ocurrir que los problemas de rendimiento simplemente se basan en el nivel de rendimiento del origen subyacente y estos problemas se identifican y diagnostican con mayor facilidad en el entorno mucho más aislado de Power BI Desktop, lo que inicialmente elimina ciertos componentes (como la puerta de enlace de Power BI).It's commonly the case that performance issues are simply based on the level of performance of the underlying source, and these are more easily identified and diagnosed in the much more isolated environment of Power BI Desktop, and initially eliminates certain components (such as the Power BI gateway). Solo si no se encuentran problemas de rendimiento en Power BI Desktop, la investigación se centrará en los aspectos específicos del informe en el servicio Power BI.Only if the performance issues are found to not be present with Power BI Desktop should investigation focus on the specifics of the report in the Power BI service.

De manera similar, se recomienda que primero intente aislar cualquier problema a un objeto visual único en lugar de varios objetos visuales en una página.Similarly, it is recommended to first try to isolate any issues to an individual visual, rather than many visuals on a page.

Por tanto, imaginemos que ya se llevaron a cabo esos pasos (en los párrafos anteriores de esta sección): ahora tenemos un objeto visual único en una página de Power BI Desktop que sigue lenta.So, let's say those steps (in the previous paragraphs in this section) have been taken - we now have a single visual on a page in Power BI Desktop that is still sluggish. Para determinar las consultas que Power BI Desktop envía al origen subyacente, es posible ver información de diagnóstico y seguimientos que ese origen podría emitir.To determine the queries that are sent to the underlying source by Power BI Desktop, it's possible to view traces/diagnostic information that might be emitted by that source. Los seguimientos podrían contener también información útil sobre los detalles de cómo se ejecutó la consulta y sobre cómo se podría mejorar.Such traces might also contain useful information about the 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 como se describe a continuació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 next.

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 el caso de algunos orígenes de DirectQuery, este registro incluye todas las consultas enviadas al origen de datos subyacente (los orígenes restantes de DirectQuery se incluirán en el futuro).For some DirectQuery sources, this log includes all queries sent to the underlying data source (the remaining DirectQuery sources will be included in the future). Los orígenes que envían consultas al registro son los siguientes:The sources that send queries to the log are the following:

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

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

Este es un método fácil para llegar a esta carpeta: en Power BI Desktop, seleccione Archivo > Opciones y configuración > Opciones y, luego, seleccione Diagnóstico.Here's an easy way to get to this folder: In Power BI Desktop select File > Options and settings > Options, and then select Diagnostics. Aparecerá la siguiente ventana de diálogo:The following dialog window appears:

Cuando selecciona el vínculo Open traces folder (Abrir carpeta de seguimientos), en Diagnostic Options (Opciones de diagnóstico), se abre la carpeta siguiente:When you select the Open traces folder link, under Diagnostic Options, the following folder opens:

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

Vaya a la carpeta principal de la carpeta donde se muestra que la carpeta contiene AnalysisServicesWorkspaces, que contendrá una subcarpeta 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 subfolder for every open instance of Power BI Desktop. El nombre de estas subcarpetas tiene un sufijo de entero, como AnalysisServicesWorkspace2058279583.These subfolders are named with an integer suffix, such as AnalysisServicesWorkspace2058279583.

En la carpeta hay una subcarpeta \Data que contiene el archivo de seguimientos FlightRecorderCurrent.trc para la sesión de Power BI actual.Inside that folder is a \Data subfolder that 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, que está disponible como descarga gratis como parte de SQL Server Management Studio.The trace files can be read using the SQL Server Profiler tool, which is available as a free download as part of SQL Server Management Studio. Puede obtenerlo en esta ubicación.You can get that from this location.

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.

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 seguimientoIn 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: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 FilghtRecorderCurrent.trcOpen FilghtRecorderCurrent.trc

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

  • Un evento de inicio de consulta y de fin de consulta, los que representan el inicio y el final de una consulta de 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 de inicio de DirectQuery y de fin de DirectQuery, 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.

Tenga en cuenta que varias consultas DAX se pueden ejecutar en paralelo, por lo que se pueden intercalar eventos de distintos grupos.Note that multiple DAX queries can be executed in parallel, so events from different groups can be interleaved. El valor de ActivityID se puede usar 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.

Otras columnas de interés son las siguientes:Other columns of interest are the following:

  • TextData: el detalle textual del evento.TextData: The textual detail of the event. En el caso de los eventos de inicio y fin de consulta, será la consulta DAX.For “Query Begin/End” events this will be the DAX query. En el caso de los eventos de inicio y fin de DirectQuery, será la consulta SQL enviada al origen subyacente.For “DirectQuery Begin/End” events this will be 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: When the event completed.
  • Duration: 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).

Tenga en cuenta que en la imagen anterior, algunas de las columnas menos importantes se restringieron para que sea más fácil ver las columnas de interés.Note that in the image above, some of the less interesting columns have narrowed, to allow the interesting columns to be seen more easily.

El enfoque recomendado para capturar un seguimiento y diagnosticar un problema de rendimiento potencial es el siguiente:The recommended approach to capturing a trace to help diagnose a potential performance issue is the following:

  • 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.Perform 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 beyond that, to ensure that the events of interest are flushed into the trace file.
  • Abra SQL Server Profiler y examine el seguimiento, tal como se indicó anteriormente.Open SQL Server Profiler and examine the trace, as described earlier. Recuerde que el archivo de seguimiento se eliminará después de cerrar Power BI Desktop.Remember that the trace file will be deleted upon closing Power BI Desktop. Además, no aparecerán acciones adicionales en Power BI Desktop de inmediato: se debe cerrar el archivo de seguimiento y volver a abrirlo para ver los eventos nuevos.Also, further actions in Power BI Desktop will not immediately appear – the trace file should be closed and re-opened to see the new events.
  • Las sesiones individuales deben ser pequeñas (diez segundos de acciones en lugar de cientos de segundos) para facilitar la interpretación del archivo de seguimiento (y, como hay un límite en el tamaño del archivo de seguimiento, en el caso de las sesiones muy prolongadas existe la posibilidad de que se quiten los primeros eventos).Keep individual sessions reasonably small (ten seconds of actions, not hundreds) to make it easier to interpret the trace file (and because there is a limit on the size of the trace file, thus for very long sessions there is a chance of early events being dropped).

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, si la subselección se define tal como la define la consulta definida en el Editor de consultas.The general format of queries created and sent by Power BI Desktop use subselects for each of the tables referenced, where the subselect is as defined by the query defined in Query Editor. Por ejemplo, supongamos que tenemos las siguientes tablas TPC-DS en SQL Server:For example, assume the following TPC-DS tables in SQL Server:

Considere la consulta siguiente:Consider the following query:

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

Actualizar ese objeto visual generará la consulta SQL que se muestra a continuación del párrafo siguiente.Refreshing that visual will result in the SQL query shown below the next paragraph. Como puede imaginar, hay tres subselecciones para Web Sales, Item y Date_dim, y cada una de ellas devuelve todas las columnas de la tabla respectiva, incluso si el objetivo visual hace referencia en realidad 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 (aparecen sombreadas) son exactamente el resultado de las consultas definidas en el Editor de consultas.These queries in the subselects (they're 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 has not been found to impact performance, for the data sources so far supported for DirectQuery. Los orígenes de datos, como SQL Server, simplemente optimizan las referencias a las otras columnas.Data sources like SQL Server simply optimize away the references to the other columns.

Uno de los motivos por los que Power BI emplea este patrón es porque el analista puede proporcionar la consulta SQL usada, por lo que se usa "según se proporciona", sin intentar reescribirla.One reason Power BI employs this pattern is because the SQL query used can be provided directly by the analyst, so it's used "as provided", without an attempt to rewrite it.

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. Consulte los temas siguientes que describen orígenes específicos:See the following topics covering specific sources:

Para más información sobre DirectQuery, revise los siguientes recursos:For more information about DirectQuery, check out the following resources: