Uso di DirectQuery in Power BIUsing DirectQuery in Power BI

Quando si usa Power BI Desktop o il servizio Power BI è possibile connettersi a tutti i tipi di origini dati ed effettuare tali connessioni dati in modi diversi.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. È possibile importare dati in Power BI, operazione che rappresenta il modo più comune per ottenere i dati, oppure connettersi direttamente ai dati nel relativo repository di origine tramite 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. Questo articolo descrive DirectQuery e le relative funzionalità, inclusi gli argomenti seguenti:This article describes DirectQuery and its capabilities, including the following topics:

  • Diverse opzioni di connettività di DirectQueryDifferent connectivity options for DirectQuery
  • Indicazioni per i casi in cui è opportuno preferire DirectQuery all'importazioneGuidance for when you should consider using DirectQuery rather than import
  • Svantaggi dell'uso di DirectQueryDrawbacks of using DirectQuery
  • Procedure consigliate per l'uso di DirectQueryBest practice for using DirectQuery

In breve, le procedure consigliate per l'uso dell'importazione rispetto a DirectQuery sono le seguenti:In short, the best practice for using import versus DirectQuery is the following:

  • È opportuno importare i dati in Power BI laddove possibile.You should import data to Power BI wherever possible. Questo consente di sfruttare il motore di query ad alte prestazioni di Power BI e offre un'esperienza altamente interattiva e completa per i dati.This takes advantage of the high performance query engine of Power BI, and provides a highly interactive and fully featured experience over your data.
  • Se gli obiettivi non possono essere soddisfatti con l'importazione dei dati, prendere in considerazione l'uso di DirectQuery.If your goals can't be met by importing data, then consider using DirectQuery. Se ad esempio i dati cambiano di frequente e i report devono riflettere i dati più recenti, DirectQuery può essere l'opzione ottimale.For example, if the data is changing frequently and reports must reflect the latest data, DirectQuery may be best. L'uso di DirectQuery è tuttavia generalmente possibile solo quando l'origine dati sottostante può fornire query interattive (meno di 5 secondi) per la tipica query di aggregazione e gestire il carico di query che verrà generato.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. È anche necessario considerare attentamente le limitazioni che accompagnano l'uso di DirectQuery per garantire che gli obiettivi possano essere comunque soddisfatti.Additionally, the list of limitations that accompany use of DirectQuery should be considered carefully, to ensure your goals can still be met.

Il set di funzionalità offerte da Power BI per entrambe le modalità di connettività, importazione e DirectQuery, evolveranno nel tempo.The set of capabilities offered by Power BI for both connectivity modes – import and DirectQuery - will evolve over time. Sarà disponibile maggiore flessibilità nell'uso dei dati importati, in modo che l'importazione possa essere usata in un numero più elevato di casi ed eliminando alcuni degli svantaggi di 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. A prescindere dai miglioramenti, le prestazioni dell'origine dati sottostante saranno sempre una considerazione importante nell'uso di DirectQuery.Regardless of improvements, when using DirectQuery the performance of the underlying data source will always remain a major consideration. Se l'origine dati sottostante è lenta, l'uso di DirectQuery per tale origine continuerà a essere impossibile.If that underlying data source is slow, then using DirectQuery for that source it will remain unfeasible.

Questo argomento descrive DirectQuery con Power BI e non con SQL Server Analysis Services.This topic covers DirectQuery with Power BI, and not SQL Server Analysis Services. DirectQuery è anche una funzionalità di SQL Server Analysis Services e molti dettagli descritti di seguito si applicano all'uso di questa soluzione, ma sono anche presenti differenze importanti.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. Per informazioni sull'uso di DirectQuery con SQL Server Analysis Services, vedere il white paper che illustra in dettaglio DirectQuery in 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.

Questo articolo illustra il flusso di lavoro consigliato per DirectQuery, in cui il report viene creato in Power BI Desktop, ma descrive anche la connessione diretta nel servizio 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.

Modalità di connettività di Power BIPower BI connectivity modes

Power BI si connette a un numero molto elevato di origini dati diverse, tra cui:Power BI connects to a very large number of varied data sources, encompassing:

  • Servizi online (Salesforce, Dynamics 365 e altri)Online services (Salesforce, Dynamics 365, others)
  • Database (SQL Server, Access, Amazon Redshift e altri)Databases (SQL Server, Access, Amazon Redshift, others)
  • File semplici (Excel, JSON e altri)Simple files (Excel, JSON, others)
  • Altre origini dati (Spark, siti Web, Microsoft Exchange e altri)Other data sources (Spark, Web sites, Microsoft Exchange, others)

Per queste origini è in genere possibile importare i dati in Power BI.For these sources, it's usually possible to import the data to Power BI. Per alcune è anche possibile connettersi con DirectQuery.For some it is also possible to connect using DirectQuery. Il set di origini che supporta DirectQuery è descritto nell'articolo Data Sources supported by DirectQuery (Origini dati supportate da DirectQuery).The exact set of sources that support DirectQuery is described in the Data Sources supported by DirectQuery article. Altre origini supporteranno DirectQuery in futuro, principalmente quelle che si prevede possano fornire performance soddisfacenti per le query interattive.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 è un caso particolare.SQL Server Analysis Services is a special case. Quando ci si connette a SQL Server Analysis Services, è possibile scegliere di importare i dati o usare una connessione dinamica.When connecting to SQL Server Analysis Services, you can choose to import the data, or use a live connection. La connessione dinamica è simile a DirectQuery, perché nessun dato viene importato e viene sempre eseguita una query sull'origine dati sottostante per aggiornare un oggetto visivo. La connessione dinamica è tuttavia diversa sotto molti altri aspetti e viene quindi usato un termine diverso, ovvero dinamica al posto di 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.

Queste tre opzioni per la connessione ai dati, ovvero importazione, DirectQuery, e connessione dinamica, sono illustrate in dettaglio nelle sezioni seguenti.These three options for connecting to data – import, DirectQuery, and live connection – are explained in detail in the following sections.

Connessioni di importazioneImport connections

Quando si usa Recupera dati in Power BI Desktop per connettersi a un'origine dati come SQL Server e si sceglie Importa, il comportamento della connessione è il seguente: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 l'esperienza di recupero dati iniziale, ogni tabella del set selezionato definisce una query che restituisce un set di dati. Queste query possono essere modificate prima di caricare i dati, ad esempio per applicare filtri, aggregare i dati o unire tabelle diverse.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).
  • Durante il caricamento, tutti i dati definiti da tali query verranno importati nella cache di Power BI.Upon load, all of the data defined by those queries will be imported into the Power BI cache.
  • Durante la compilazione di un oggetto visivo in Power BI Desktop verrà eseguita una query sui dati importati.Upon building a visual within Power BI Desktop, the imported data will be queried. L'archivio di Power BI assicura che la query sarà molto veloce, quindi tutte le modifiche apportate all'oggetto visivo verranno propagate immediatamente.The Power BI store ensures the query will be very fast, hence all changes to the visual will be reflected immediately.
  • Eventuali modifiche ai dati sottostanti non verranno propagate agli oggetti visivi.Any changes to the underlying data will not be reflected in any visuals. È necessario aggiornare per importati nuovamente i dati.It is necessary to Refresh, whereupon the data will be re-imported.
  • Al momento della pubblicazione del report (file con estensione pbix) nel servizio Power BI, viene creato e caricato un set di dati nel servizio 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. I dati importati sono inclusi con tale set di dati.The imported data is included with that dataset. È quindi possibile configurare l'aggiornamento pianificato dei dati, ad esempio, per importare nuovamente i dati ogni giorno.It is then possible to set up scheduled refresh of that data, for example, to re-import the data every day. A seconda del percorso dell'origine dati potrebbe essere necessario configurare un gateway dati locale.Depending upon the location of the original data source, it might be necessary to configure an on-premises data gateway.
  • Quando si apre un report esistente nel servizio Power BI oppure si crea un nuovo report, viene di nuovo eseguita una query sui dati importati, garantendo l'interattività.When opening an existing report in the Power BI service, or authoring a new report, the imported data is queried again, ensuring interactivity.
  • È possibile aggiungere oggetti visivi o intere pagine del report come riquadri del dashboard.Visuals, or entire report pages, can be pinned as dashboard tiles. I riquadri verranno aggiornati automaticamente ogni volta che viene aggiornato il set di dati sottostante.The tiles will be automatically refreshed whenever the underlying dataset is refreshed.

Connessioni DirectQueryDirectQuery connections

Quando si usa Recupera dati in Power BI Desktop per connettersi a un'origine dati e si sceglie DirectQuery, il comportamento della connessione è il seguente: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 l'esperienza di recupero dati iniziale viene selezionata l'origine.During the initial Get Data experience, the source is selected. Per le origini relazionali, ciò significa che viene selezionato un set di tabelle, ognuna delle quali definisce una query che restituisce un set di dati in modo logico.For relational sources, this means a set of tables are selected and each still define a query that logically returns a set of data. Per le origini multidimensionali come SAP BW viene selezionata solo l'origine.For multidimensional sources like SAP BW, only the source is selected.
  • Durante il caricamento non vengono tuttavia importati effettivamente dati nell'archivio di Power BI.However, upon load, no data will actually be imported into the Power BI store. Durante la compilazione di un oggetto visivo in Power BI Desktop verranno invece inviate query all'origine dati sottostante per recuperare i dati necessari.Instead, upon building a visual within Power BI Desktop, queries will be sent to the underlying data source to retrieve the necessary data. Il tempo impiegato successivamente per aggiornare l'oggetto visivo dipenderanno dalle prestazioni dell'origine dati sottostante.The time then taken to refresh the visual will depend on the performance of the underlying data source.
  • Eventuali modifiche ai dati sottostanti non verranno propagate immediatamente agli oggetti visivi esistenti.Any changes to the underlying data will not be immediately reflected in any existing visuals. È comunque necessario eseguire l'aggiornamento per inviare nuovamente le query necessarie per ogni oggetto visivo e aggiornare l'oggetto stesso.It is still necessary to Refresh, whereupon the necessary queries will be resent for each visual, and the visual updated as necessary.
  • Al momento della pubblicazione del report nel servizio Power BI, viene anche in questo caso creato un set di dati nel servizio Power BI, come per l'importazione.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. Il set di dati non include tuttavia dati.However, no data is included with that dataset.
  • Quando si apre un report esistente nel servizio Power BI oppure si crea un nuovo report, viene di nuovo eseguita una query sull'origine dati sottostante per recuperare i dati necessari.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. A seconda del percorso dell'origine dati potrebbe essere necessario configurare un gateway dati locale, come nel caso della modalità di importazione se i dati vengono aggiornati.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.
  • È possibile aggiungere oggetti visivi o intere pagine del report come riquadri del dashboard.Visuals, or entire report pages, can be pinned as Dashboard tiles. Per garantire che l'apertura di un dashboard sia rapida, i riquadri vengono aggiornati automaticamente secondo una pianificazione, ad esempio ogni ora.To ensure that opening a dashboard will be fast, the tiles are automatically refreshed on a schedule (for example, every hour). È possibile gestire la frequenza di aggiornamento in modo da riflettere la frequenza di modifica dei dati e in che misura sia importante visualizzare i dati più recenti.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. Quando si apre un dashboard, i riquadri riflettono quindi i dati al momento dell'ultimo aggiornamento e non necessariamente le modifiche più recenti apportate all'origine sottostante.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. È sempre possibile aggiornare un dashboard aperto per assicurarsi che sia aggiornato.An open dashboard can always be Refreshed to ensure it is up-to-date.

Connessioni dinamicheLive connections

Quando ci si connette a SQL Server Analysis Services (SSAS), è disponibile un'opzione per importare dati dal modello di dati selezionato o connettersi dinamicamente al modello stesso.When connecting to SQL Server Analysis Services (SSAS), there is an option to either import data from, or connect live to, the selected data model. Se si seleziona Importa, si definisce una query su tale origine SSAS esterna e i dati vengono importati come di consueto.If you select import, then you define a query against that external SSAS source, and the data is imported as normal. Se si sceglie la connessione dinamica non verrà definita alcuna query e nell'elenco dei campi verrà visualizzato l'intero modello esterno.If you select to connect live then there is no query defined, and the entire external model is shown in the field list. Se si seleziona DirectQuery, durante la compilazione di oggetti visivi vengono inviate query all'origine SSAS esterna.If you select DirectQuery, as visuals are built, queries are sent to the external SSAS source. A differenza di DirectQuery, non viene creato un nuovo modello, ovvero non è possibile definire nuove colonne calcolate, gerarchie, relazioni e così via.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. Ci si connette invece direttamente al modello SSAS esterno.Instead you are simply connecting directly to the external SSAS model.

La situazione descritta nel paragrafo precedente si applica anche alla connessione alle origini seguenti, ad eccezione del fatto che non è possibile importare i dati: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:

  • Set di dati di Power BI, ad esempio quando ci si connette a un set di dati di Power BI creato in precedenza e pubblicato nel servizio, per creare un nuovo report correlatoPower 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 ServiceCommon Data Services

Il comportamento dei report su SSAS al momento della pubblicazione nel servizio Power BI è simile a quello dei report di DirectQuery sotto gli aspetti seguenti:The behavior of reports over SSAS, upon publishing to the Power BI service, is similar to DirectQuery reports in the following ways:

  • Quando si apre un report esistente nel servizio Power BI oppure si crea un nuovo report, viene eseguita una query sull'origine dati SSAS sottostante. L'operazione può richiedere un gateway dati locale.When opening an existing report in the Power BI service or authoring a new report, the underlying SSAS source is queried (possibly requiring an on-premises data gateway)
  • I riquadri del dashboard vengono aggiornati automaticamente in base a una pianificazione, ad esempio ogni ora o secondo qualsiasi frequenza definita.Dashboard tiles are automatically refreshed on a schedule (such as every hour, or whatever frequency is defined)

Esistono tuttavia differenze importanti. Per le connessioni dinamiche, ad esempio, l'identità dell'utente che apre il report verrà sempre passata all'origine SSAS sottostante.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.

Terminati questi confronti, ci si concentrerà ora esclusivamente su DirectQuery per il resto di questo articolo.With these comparisons out of the way, let's focus solely on DirectQuery for the rest of this article.

Situazioni in cui è utile DirectQueryWhen is DirectQuery useful?

La tabella seguente descrive gli scenari in cui la connessione con DirectQuery può essere particolarmente proficua, inclusi i casi in cui è considerato utile lasciare i dati nell'origine.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 descrizione indica anche se lo scenario specificato è disponibile in Power BI.The description includes a discussion about whether the specified scenario is available in Power BI.

LimitazioneLimitation DescrizioneDescription
I dati cambiano di frequente e sono necessari report quasi 'in tempo reale'Data is changing frequently, and near ‘real-time’ reporting is needed I modelli con dati importati possono essere aggiornati al massimo una volta l'ora.Models with Imported data can be refreshed at most once per hour. Se quindi i dati cambiano continuamente, è necessario che i report visualizzino i dati più recenti, quindi l'importazione con l'aggiornamento pianificato potrebbe non soddisfare questi requisiti.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. Si noti che è anche possibile trasmettere dati direttamente in Power BI, anche se esistono limiti ai volumi di dati supportati in questo 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.

Se si usa DirectQuery, al contrario, aprendo o aggiornando un report o un dashboard verranno sempre visualizzati i dati più recenti dell'origine.Using DirectQuery, by contrast, means that opening or refreshing a report or dashboard will always show the latest data in the source. I riquadri del dashboard possono essere aggiornati più frequentemente, anche ogni 15 minuti.Additionally, the dashboard tiles can be updated more frequently (as often as every 15 mins).
Dati di dimensioni molto grandiData is very large Se i dati hanno dimensioni molto grandi, non è certamente fattibile importarli tutti.If the data is very large, then it certainly would not be feasible to import it all. DirectQuery, al contrario, non richiede il trasferimento di molti dati perché le query vengono eseguite localmente.DirectQuery, by contrast, requires no large transfer of data, as it is queried in place.

I dati di grandi dimensioni possono tuttavia anche implicare che le query su tale origine sottostante siano troppo lente, come descritto in Implicazioni dell'uso di DirectQuery più avanti in questo articolo.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). Naturalmente, non è sempre necessario importare i dati dettagliati completi.And of course it is not always necessary to import the full detailed data. I dati possono essere invece preaggregati durante l'importazione e l'editor di query semplifica proprio questa operazione.Instead the data can be pre-aggregated during import (and Query Editor makes it easy to do exactly this). In casi estremi è possibile importare esattamente i dati di aggregazione necessari per ogni oggetto visivo.In the extreme it would be possible to import exactly the aggregate data needed for each visual. Anche se DirectQuery è l'approccio più semplice per i dati di grandi dimensioni, è quindi consigliabile tenere sempre presente che l'importazione di dati aggregati può rappresentare una soluzione se l'origine sottostante è troppo lenta.So while DirectQuery is the simplest approach to large data, you should always keep in mind that importing aggregate data might offer a solution if the underlying source is too slow.
Le regole di sicurezza vengono definite nell'origine sottostanteSecurity rules are defined in the underlying source Quando i dati vengono importati, Power BI si connette all'origine dati usando le credenziali dell'utente corrente (da Power BI Desktop) oppure le credenziali definite nell'ambito della configurazione dell'aggiornamento pianificato (dal servizio 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). Nella pubblicazione e condivisione di questo report è quindi necessario prestare attenzione a condividere il report solo con gli utenti autorizzati a visualizzare gli stessi dati oppure definire sicurezza di livello di riga nell'ambito del set di dati.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.

Dato che DirectQuery esegue sempre query sull'origine sottostante, ciò consente idealmente l'applicazione di qualunque criterio di sicurezza nell'origine stessa.Ideally, because DirectQuery always queries the underlying source, this would allow any security in that underlying source to be applied. Attualmente Power BI si connette tuttavia all'origine sottostante usando sempre le stesse credenziali usate per l'importazione.However, today Power BI will always connect to the underlying source using the same credentials as would be used for Import.

Fino a quando Power BI non consentirà all'identità del consumer del report di raggiungere l'origine sottostante, DirectQuery non offrirà vantaggi in termini di sicurezza dell'origine dati.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.
Limitazioni di sovranità dei datiData sovereignty restrictions apply Alcune organizzazioni hanno criteri di sovranità dei dati, ovvero i dati non possono uscire dall'organizzazione.Some organizations have policies around data sovereignty, meaning that data cannot leave the organization premises. Una soluzione basata sull'importazione potrebbe chiaramente presentare problemi.A solution based on import would clearly present issues. Con DirectQuery, al contrario, i dati rimangono nell'origine sottostante.By contrast, with DirectQuery that data remains in the underlying source.

Si noti tuttavia che anche con DirectQuery alcune cache di dati a livello di oggetto visivo vengono conservate nel servizio Power BI, a causa dell'aggiornamento pianificato dei riquadri.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).
L'origine dati sottostante è un'origine OLAP contenente misureUnderlying data source is an OLAP source, containing measures Se l'origine dati sottostante contiene *misure *(ad esempio SAP HANA o SAP Business Warehouse), l'importazione dei dati presenta altri problemi.If the underlying data source contains *measures *(such as SAP HANA or SAP Business Warehouse) then importing the data brings other issues. Ciò significa che i dati importati si trovano a un determinato livello di aggregazione come definito dalla query,It means that the data imported is at a particular level of aggregation, as defined by the query. ad esempio, la misurazione di TotalSales per classe, anno e città.For example, measure TotalSales by Class, Year, and City. Se quindi viene creato un oggetto visivo che richiede dati a un livello di aggregazione superiore (ad esempio TotalSales per anno), il valore di aggregazione verrà ulteriormente aggregato.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. L'operazione funziona per le misure additive (ad esempio Sum, Min), ma rappresenta un problema per le misure non additive, ad esempio Average e DistinctCount.This is fine for additive measures (such as Sum, Min) but it's an issue for non-additive (such as Average, DistinctCount).

Per ottenere facilmente i dati aggregati corretti (in base a quanto richiesto dall'oggetto visivo specifico) direttamente dall'origine, sarà necessario inviare query per ogni oggetto visivo, come in 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.

Quando ci si connette a SAP Business Warehouse (BW), la scelta di DirectQuery consente questo trattamento delle misure.When connecting to SAP Business Warehouse (BW), choosing DirectQuery allows for this treatment of measures. Il supporto per SAP BW viene illustrato nei dettagli in DirectQuery and SAP BW (DirectQuery e SAP BW).Support for SAP BW is covered further in DirectQuery and SAP BW.

Al momento, DirectQuery in SAP HANA tratta tuttavia le misure come un'origine relazionale e offre quindi un comportamento simile all'importazione.However, currently DirectQuery over SAP HANA treats it the same as a relational source, and hence provides similar behavior to import. Questi aspetti vengono illustrati nei dettagli in DirectQuery and SAP HANA (DirectQuery e SAP HANA).This is covered further in DirectQuery and SAP HANA.

Date quindi le attuali funzionalità di DirectQuery in Power BI, gli scenari in cui offre vantaggi sono i seguenti:So in summary, given the current capabilities of DirectQuery in Power BI, the scenarios where it offers benefits are the following:

  • I dati cambiano di frequente e sono necessari report quasi 'in tempo reale'Data is changing frequently, and near ‘real-time’ reporting is needed
  • Gestione di dati di dimensioni molto grandi, senza la necessità di preaggregareHandling very large data, without the need to pre-aggregate
  • Limitazioni di sovranità dei datiData sovereignty restrictions apply
  • L'origine è multidimensionale e contiene misure, ad esempio SAP BWThe source is a multi dimensional source containing measures (such as SAP BW)

Si noti che i dettagli nell'elenco precedente si riferiscono all'uso del solo Power BI.Note that the details in the previous list relate to the use of Power BI alone. È sempre possibile usare invece un modello esterno di SQL Server Analysis Services (o Azure Analysis Services) per importare i dati e quindi usare Power BI per connettersi a tale modello.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. Anche se questo approccio richiede competenze aggiuntive, offre maggiore flessibilità.While that approach would require additional skills, it does provide greater flexibility. È ad esempio possibile importare volumi di dati molto più elevati, senza limitazioni in termini di frequenza di aggiornamento dei dati.For example, much larger volumes of data can be imported, and there is no restriction on how frequently the data can be refreshed.

Implicazioni dell'uso di DirectQueryImplications of using DirectQuery

L'uso di DirectQuery ha implicazioni potenzialmente negative, come descritto in questa sezione.Use of DirectQuery does have potentially negative implications, as detailed in this section. Alcune di queste limitazioni differiscono leggermente a seconda dell'origine usata.Some of those limitations are slightly different depending upon the exact source that is being used. Queste differenze vengono evidenziate laddove applicabile e le origini sostanzialmente diverse vengono trattate in argomenti separati.This will be called out where applicable, and separate topics cover those sources that are substantially different.

Prestazioni e carico sull'origine sottostantePerformance and load on the underlying source

Quando si usa DirectQuery, l'esperienza complessiva dipende molto dalle prestazioni dell'origine dati sottostante.When using DirectQuery, the overall experience depends very much on the performance of the underlying data source. Se l'aggiornamento di ciascun oggetto visivo (ad esempio dopo la modifica di un valore di filtro dei dati) richiede pochi secondi (< 5 s), l'esperienza sarà ragionevole, ma potrà comunque apparire lenta rispetto alla risposta immediata cui si è abituati quando si importano i dati in 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. Se data la lentezza dell'origine i singoli oggetti visivi richiedono invece più tempo (decine di secondi), l'esperienza diventa estremamente insoddisfacente, eventualmente provocando anche il timeout delle query.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.

Oltre alle prestazioni dell'origine sottostante è necessario considerare attentamente il carico che verrà applicato all'origine, dato che anch'esso influisce spesso sulle prestazioni.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). Come illustrato anche di seguito, ogni utente che apre un report condiviso e ogni riquadro del dashboard che viene aggiornato periodicamente invia almeno una query per oggetto visivo all'origine sottostante.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. L'origine deve quindi poter gestire questo carico di query mantenendo prestazioni accettabili.This fact requires that the source be able to handle such a query load, while still maintaining reasonable performance.

Limitazione a una singola origineLimited to a single source

Quando si importano dati, è possibile combinare dati da più origini in un singolo modello, ad esempio per unire facilmente alcuni dati di un database SQL Server aziendale con alcuni dati locali gestiti in un file 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. Questa operazione non è possibile quando si usa DirectQuery.This is not possible when using DirectQuery. Quando si seleziona DirectQuery per un'origine, è possibile usare solo i dati di quella singola origine, ad esempio un singolo database SQL Server.When selecting DirectQuery for a source, it will then only be possible to use data from that single source (such as a single SQL Server database).

Trasformazione dei dati limitataLimited data transformations

Analogamente, sono presenti limitazioni nelle trasformazioni dei dati che possono essere applicate all'interno dell'editor di query.Similarly, there are limitations in the data transformations that can be applied within Query Editor. Con i dati importati è possibile applicare facilmente un set di trasformazioni sofisticato per pulire e modificare la forma dei dati prima di usarli per creare oggetti visivi, ad esempio per l'analisi di documenti JSON o la trasformazione tramite Pivot da un modulo orientato alle colonne a un modulo orientato alle righe.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). Queste trasformazioni sono più limitate in DirectQuery.Those transformations are more limited in DirectQuery. Quando ci si connette a un'origine OLAP come SAP Business Warehouse, non è possibile definire alcuna trasformazione e l'intero "modello" esterno proviene dall'origine.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. Per le origini relazionali come SQL Server è comunque possibile definire un set di trasformazioni per ogni query, ma queste trasformazioni sono limitate per motivi che riguardano le prestazioni.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. Qualsiasi trasformazione di questo tipo dovrà essere applicata a ogni query per l'origine sottostante, anziché una sola volta al momento dell'aggiornamento dati, quindi saranno possibili solo le trasformazioni che possono essere ragionevolmente convertite in una singola query nativa.Any such transformation will need to be applied on every query to the underlying source, rather than once on data refresh, so they are limited to those transformations that can reasonably be translated into a single native query. Se si usa una trasformazione troppo complessa, si riceverà un errore che indica che la trasformazione deve essere eliminata oppure che è necessario impostare la modalità di importazione per il modello.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.

La query ottenuta dalla finestra di dialogo Recupera dati o dall'editor di query verrà usata in una sub-SELECT delle query generate e inviata per recuperare i dati necessari per un oggetto visivo.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. In questo modo, la query definita nell'editor di query deve essere valida in questo contesto.Thus the query defined in Query Editor must be valid within this context. In particolare, ciò significa non è possibile usare una query con espressioni di tabella comuni o che richiami stored procedure.In particular this means it is not possible to use a query using Common Table Expressions, nor that invokes Stored Procedures.

Limitazioni di modellazioneModelling limitations

In questo contesto, il termine modellazione indica l'azione di modifica e arricchimento dei dati non elaborati, nell'ambito della creazione di un report che usa tali dati.The term modelling in this context means the act of refining and enriching the raw data, as part of authoring a report using it. Alcuni esempi:Examples include:

  • Definizione di relazioni tra tabelleDefining relationships between tables
  • Aggiunta di nuovi calcoli (colonne calcolate e misure)Adding new calculations (calculated columns and measures)
  • Ridenominazione e disattivazione della visualizzazione di colonne e misureRenaming and hiding columns and measures
  • Definizione di gerarchieDefining hierarchies
  • Definizione della formattazione, dell'esecuzione del riepilogo predefinita e dell'ordinamento di una colonnaDefining the formatting, default summarization and sort order for a column
  • Raggruppamento o clustering dei valoriGrouping or clustering values

Quando si usa DirectQuery è comunque possibile apportare molti di questi miglioramenti e vale comunque il principio di arricchire i dati non elaborati per migliorare l'uso in un momento successivo.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. Alcune funzionalità di modellazione non sono tuttavia disponibili o sono limitate quando si usa DirectQuery.However, there some modeling capabilities are not available, or are limited, when using DirectQuery. Le limitazioni vengono in genere applicate per evitare problemi di prestazioni.The limitations are generally applied to avoid performance issues. Le limitazioni comuni a tutte le origini DirectQuery sono elencate nell'elenco puntato seguente.The set of limitations that are common to all DirectQuery sources are listed in the following bulleted list. Possono essere applicabili limitazioni aggiuntive alle singole origini, come descritto in Dettagli specifici dell'origine dati verso la fine di questo articolo.Additional limitations might apply to individual sources, as described in Data source specific details found near the end of this article.

  • Nessuna gerarchia di data predefinita: quando si importano dati, per impostazione predefinita ogni colonna date/datetime ha anche una gerarchia di data predefinita.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. Se ad esempio si importa una tabella di ordini di vendita che include una colonna OrderDate, quando si usa OrderDate in un oggetto visivo sarà possibile scegliere il livello appropriato (anno, mese, giorno) da usare.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. Questa gerarchia di data predefinita non è disponibile quando si usa la modalità DirectQuery.This built-in date hierarchy is not available when using DirectQuery mode. Si noti tuttavia che se nell'origine sottostante è disponibile la tabella Date (come avviene spesso in molti data warehouse) è possibile usare le funzionalità DAX di Business Intelligence per le gerarchie temporali come di consueto.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.
  • Limitazioni nelle colonne calcolate: le colonne calcolate possono essere solo intrariga, ovvero possono fare riferimento solo ai valori delle altre colonne della stessa tabella, senza usare funzioni di aggregazione.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. Le funzioni scalari DAX, ad esempio LEFT(), consentite saranno limitate a quelle che possono essere semplicemente inserite nell'origine sottostante, quindi varieranno a seconda delle funzionalità dell'origine.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. Le funzioni non supportate non verranno elencate nel completamento automatico quando si crea la funzione DAX per una colonna calcolata e produrranno un errore se usate.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.
  • Nessun supporto per le funzioni DAX padre-figlio: nel modello DirectQuery non è possibile usare la famiglia di funzioni DAX PATH() che in genere gestiscono strutture padre-figlio, ad esempio piani dei conti o gerarchie dei dipendenti.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).
  • Limitazioni (per impostazione predefinita) per le misure: per impostazione predefinita, le funzioni ed espressioni DAX che possono essere usate nelle misure sono limitate.Limitations (by default) for measures: By default, the DAX functions and expressions that can be used in measures is restricted. Il completamento automatico limiterà anche in questo caso le funzioni elencate e si verificherà un errore se viene usata una funzione o un'espressione non valida.Again, autocomplete will restrict the functions listed, and an error will occur if an invalid function or expression is used. L'obiettivo è semplicemente garantire che, per impostazione predefinita, le misure siano limitate a misure semplici che hanno scarse probabilità di compromettere le prestazioni.The reason is simply to ensure that, by default, measures are restricted to simple measures that are unlikely by themselves cause any performance issues. Gli utenti avanzati possono scegliere di ignorare questa limitazione selezionando File > Opzioni e quindi Impostazioni > Opzioni > DirectQuery e quindi l'opzione Consenti misure senza limitazioni in modalità 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. Quando questa opzione è selezionata, è possibile usare un'espressione DAX valida per una misura.When that option is selected, any DAX expression that is valid for a measure can be used. Gli utenti, tuttavia, devono tenere presente che alcune espressioni, che hanno prestazioni molto elevate quando i dati vengono importati, possono restituire query molto lente nell'origine back-end quando sono in modalità 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.

    • Ad esempio, per impostazione predefinita:For example, by default:

      • È possibile creare una misura che sommi semplicemente l'importo delle vendite:It would be possible to author a measure that simply summed the sales amount:

        SalesAmount = SUMX(Web_Sales, [ws_sales_price]* [ws_quantity])
        
      • Non è possibile creare una misura che calcoli quindi la media di SalesAmount su tutti gli elementi:It would not be possible to author a measure that then averaged that SalesAmount over all of the Items:

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

      Il motivo è che tale misura può comportare una riduzione delle prestazioni in presenza di un numero molto elevato di elementi.The reason is that such a measure could result in poor performance if there were a very large number of items.

  • Le tabelle calcolate non sono supportate: la possibilità di definire una tabella calcolata usando un'espressione DAX non è supportata nella modalità DirectQuery.Calculated tables are not supported: The ability to define a calculated table using a DAX expression is not supported in DirectQuery mode.
  • Il filtro delle relazioni è limitato a una sola direzione: quando si usa DirectQuery, non è possibile impostare la direzione del filtro incrociato per una relazione su "Entrambi".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”. Con le tre tabelle sottostanti, ad esempio, non sarebbe possibile compilare un oggetto visivo che visualizzi ogni Customer[Gender] e il numero di Product[Category] acquistato da ognuno.For example, with the three tables below, it would not be possible to build a visual showing each Customer[Gender], and the number of Product[Category] bought by each. L'uso di questo filtro bidirezionale viene descritto in questo white paper dettagliato che contiene esempi relativi a SQL Server Analysis Services, ma i punti fondamentali sono ugualmente applicabili 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).

    Anche in questo caso, il limite viene imposto a causa delle implicazioni sulle prestazioni.Again, the limitation is imposed due to the performance implications. Un'applicazione particolarmente importante si ha quando si definisce la sicurezza a livello di riga nell'ambito del report, perché è comune adottare una relazione molti-a-molti tra gli utenti e le entità cui sono autorizzati ad accedere e l'uso del filtro bidirezionale è necessario a tale scopo.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. I filtri bidirezionali devono essere tuttavia usati con cautela per i modelli DirectQuery, con particolare attenzione a qualsiasi impatto negativo sulle prestazioni.However, use of bi-directional filtering for DirectQuery models should be used judiciously, with careful attention paid to any detrimental impact on performance.

  • Nessun clustering: con DirectQuery non è possibile usare la funzionalità di clustering per trovare automaticamente i gruppiNo Clustering: When using DirectQuery, it is not possible to use the Clustering capability, to automatically find groups

Limitazioni della creazione di reportReporting limitations

Quasi tutte le funzionalità di creazione di report sono supportate per i modelli DirectQuery.Almost all reporting capabilities are supported for DirectQuery models. È quindi possibile usare lo stesso set di visualizzazioni finché l'origine sottostante offre un livello di prestazioni adeguato.As such, so long as the underlying source offers a suitable level of performance, the same set of visualizations can be used. Esistono tuttavia importanti limitazioni in alcune delle funzionalità disponibili nel servizio Power BI dopo la pubblicazione di un report, come descritto nell'elenco riportato di seguito: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:

  • Informazioni rapide non è supportato: Informazioni rapide di Power BI esegue ricerche in diversi subset del set di dati applicando una serie di algoritmi complessi per individuare informazioni potenzialmente interessanti.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. Data la necessità di query con prestazioni molto elevate, questa funzionalità non è disponibile nei set di dati con DirectQuery.Given the need for very high performance queries, this capability is not available on datasets using DirectQuery.
  • Domande e risposte non è supportato: Domande e risposte di Power BI consente di esplorare i dati tramite funzionalità intuitive basate sul linguaggio naturale e di ricevere le risposte sotto forma di grafici.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. Non è tuttavia attualmente supportato nei set di dati con DirectQuery.However, it is currently not supported on datasets using DirectQuery.
  • L'uso di Esplora in Excel può compromettere le prestazioni: è possibile esplorare i dati usando la funzionalità "Esplora in Excel" per un set di dati.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. Ciò consente di creare tabelle e grafici pivot in Excel.This will allow Pivot Tables and Pivot Charts to be created in Excel. Anche se questa funzionalità è supportata nei set di dati con DirectQuery, le prestazioni sono in genere più lente rispetto alla creazione di oggetti visivi in Power BI ed è necessario tener conto di questo aspetto nella decisione di usare DirectQuery se l'uso di Excel è importante per i propri scenari.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.

SicurezzaSecurity

Come illustrato in precedenza in questo articolo, un report di DirectQuery userà sempre le stesse credenziali fisse per la connessione all'origine dati sottostante, dopo la pubblicazione nel servizio 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. Si noti che ciò si riferisce in modo specifico a DirectQuery, non alle connessioni dinamiche a SQL Server Analysis Services che sono diverse sotto questo aspetto.Again, note this refers specifically to DirectQuery, not to live connections to SQL Server Analysis Services, which is different in this respect. Subito dopo la pubblicazione di un report di DirectQuery è quindi necessario configurare le credenziali dell'utente che verranno usate.Hence immediately after publish of a DirectQuery report, it is necessary to configure the credentials of the user that will be used. Finché non viene eseguita questa operazione, l'apertura del report nel servizio Power BI provocherà un errore.Until this is done, opening the report on the Power BI service would result in an error.

Dopo aver specificato le credenziali dell'utente, queste verranno usate indipendentemente dall'utente che apre il report.Once the user credentials are provided, then those credentials will be used, irrespective of the user who opens the report. Sotto questo aspetto non esistono differenze con i dati importati: ogni utente vedrà gli stessi dati, a meno che non sia stata definita la sicurezza a livello di riga nell'ambito del report.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. È quindi necessario prestare la stessa attenzione alla condivisione del report, se sono presenti regole di sicurezza definite nell'origine sottostante.Hence the same attention must be paid to sharing the report, if there are any security rules defined in the underlying source.

Comportamento nel servizio Power BIBehavior in the Power BI service

Questa sezione descrive il comportamento di un report di DirectQuery nel servizio Power BI, soprattutto per comprendere l'entità del carico applicato all'origine dati back-end dato il numero di utenti con i quali verranno condivisi il report e il dashboard, la complessità del report e a seconda che sia stata definita la sicurezza a livello di riga nel report.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.

Report: apertura, interazione, modificaReports – opening, interacting with, editing

Quando si apre un report, tutti gli oggetti visivi presenti nella pagina visualizzata verranno aggiornati.When a report is opened, then all the visuals on the currently visible page will refresh. Ciascun oggetto visivo richiede in genere almeno una query sull'origine dati sottostante.Each visual will generally require at least one query to the underlying data source. Alcuni oggetti visivi potrebbero richiedere più di una query, ad esempio se visualizzano valori aggregati di due tabelle dei fatti diverse, contengono una misura più complessa oppure contengono totali di una misura non additiva come 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). Con il passaggio a una nuova pagina, gli oggetti visivi verranno aggiornati, creando così un nuovo set di query sull'origine sottostante.Moving to a new page will result in those visuals being refreshed, resulting in a new set of queries to the underlying source.

Ogni interazione dell'utente con il report può comportare l'aggiornamento degli oggetti visivi.Every user interaction on the report might result in visuals being refreshed. La selezione di un valore diverso in un filtro dei dati richiede ad esempio l'invio di un nuovo set di query per aggiornare tutti gli oggetti visivi interessati.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 stesso vale quando si fa clic su un oggetto visivo per l'evidenziazione incrociata di altri oggetti visivi oppure quando si modifica il filtro.The same is true for clicking on a visual to cross-highlight other visuals, or changing a filter.

In modo analogo, la modifica di un nuovo report richiederà naturalmente l'invio di query per ogni passaggio necessario per produrre l'oggetto visivo finale desiderato.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.

I risultati vengono memorizzati nella cache, in modo che l'aggiornamento di un oggetto visivo sia istantaneo se di recente sono stati ottenuti gli stessi identici risultati.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. Le cache non sono condivise tra gli utenti se è stata definita la sicurezza a livello di riga nell'ambito del report.Such caches are not shared across users, if there is any Row Level Security defined as part of the report.

Aggiornamento del dashboardDashboard Refresh

È possibile aggiungere singoli oggetti visivi o intere pagine come riquadri del dashboard.Individual visuals, or entire pages, can be pinned to dashboard as tiles. I riquadri basati sui set di dati di DirectQuery verranno quindi aggiornati automaticamente secondo una pianificazione, determinando l'invio di query all'origine dati 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. Questa operazione viene eseguita ogni ora per impostazione predefinita, ma è possibile definire l'esecuzione settimanale o ogni 15 minuti nelle impostazioni del set di dati.By default, this occurs every hour, but can be configured as part of Dataset settings to be between weekly, and every 15 minutes.

Se non è stata definita sicurezza a livello di riga nel modello, ogni riquadro verrà aggiornato una sola volta e i risultati verranno condivisi tra tutti gli utenti.If no Row Level Security is defined in the model, this means that each tile would be refreshed once, and the results shared across all users. Se è definita la sicurezza a livello di riga può verificarsi un effetto moltiplicatore rilevante: ogni riquadro richiede l'invio di query separate per ogni utente all'origine sottostante.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.

Un dashboard con dieci riquadri condivisi con 100 utenti e creato su un set di dati con DirectQuery, avente sicurezza a livello di riga e configurato per l'aggiornamento ogni 15 minuti, comporterà l'invio di almeno 1000 query ogni 15 minuti all'origine 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.

È quindi necessario valutare attentamente l'uso della sicurezza a livello di riga e la configurazione della frequenza di aggiornamento.Hence careful consideration must be paid to the use of Row Level Security, and the configuring of the refresh schedule.

TimeoutTimeouts

Nel servizio Power BI viene applicato un timeout di quattro minuti alle singole query. Quelle che richiedono più tempo avranno esito negativo.A timeout of four minutes is applied to individual queries in the Power BI service, and queries taking longer than that will simply fail. Come sottolineato in precedenza, è consigliabile usare DirectQuery per le origini che forniscono prestazioni per query quasi interattive, quindi questo limite ha lo scopo di evitare problemi dovuti a tempi di esecuzione eccessivamente lunghi.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.

Altre implicazioniOther implications

Alcune altre implicazioni generali dell'uso di DirectQuery sono le seguenti:Some other general implications of using DirectQuery are the following:

  • In caso di modifica dei dati è necessario aggiornare per assicurarsi che vengano visualizzati i dati più recenti: dato l'uso di cache, non è certo che l'oggetto visivo visualizzi sempre i dati più recenti.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. Un oggetto visivo può ad esempio visualizzare le transazioni dell'ultimo giorno.For example, a visual might show the transactions in the last day. A causa della modifica di un filtro dei dati, potrebbe essere successivamente aggiornato per visualizzare le transazioni degli ultimi due giorni, includendo alcune transazioni molto recenti, appena pervenute.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. Reimpostando il filtro dei dati sul valore originale, l'oggetto visualizzerà di nuovo il valore ottenuto in precedenza e memorizzato nella cache, senza includere le transazioni appena pervenute.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.

    Selezionando Aggiorna, le cache verranno cancellate e tutti gli oggetti visivi presenti nella pagina verranno aggiornati per visualizzare i dati più recenti.Selecting Refresh will clear any caches, and refresh all the visuals on the page to show the latest data.

  • In caso di modifica dei dati, la coerenza tra gli oggetti visivi non è garantita: oggetti visivi diversi, presenti nella stessa pagina o in pagine differenti, possono essere aggiornati in momenti diversi.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. Se i dati nell'origine sottostante cambiano, non è certo che ogni oggetto visivo visualizzi i dati dello stesso identico momento.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. Dato che in alcuni casi sono necessarie più query per un singolo oggetto visivo, ad esempio per ottenere i dettagli e i totali, la coerenza non è in realtà garantita neanche all'interno di un singolo oggetto visivo.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. Per garantire la coerenza sarebbe necessario aggiornare tutti gli oggetti visivi quando ne viene aggiornato uno qualsiasi, oltre all'uso di costose funzioni quali l'isolamento snapshot nell'origine dati sottostante.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.

    Questo problema può essere in gran parte risolto selezionando Aggiorna per aggiornare tutti gli oggetti visivi presenti nella pagina.This issue can be mitigated to a large extent by again selecting Refresh, to will refresh all of the visuals on the page. Si noti che anche la modalità di importazione comporta un problema di coerenza simile se si importano dati da più tabelle.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.

  • È necessario l'aggiornamento in Power BI Desktop per riflettere le modifiche dei metadati: dopo la pubblicazione di un report, con l'aggiornamento vengono semplicemente aggiornati gli oggetti visivi nel report.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. Se lo schema dell'origine sottostante è stato modificato, tali modifiche non vengono applicate automaticamente per modificare i campi disponibili nel relativo elenco.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. Se sono state rimosse tabelle o colonne dall'origine sottostante, la query potrebbe quindi restituire un errore durante l'aggiornamento.Thus if tables or columns have been removed from the underlying source, it might result in query failure upon refresh. Per aggiornare i campi nel modello e riflettere le modifiche è necessario aprire il report in Power BI Desktop e scegliere Aggiorna.Opening the report in Power BI Desktop, and choosing Refresh, will update the fields in the model to reflect the changes.
  • Limite di un milione di righe restituite in una query: è previsto un limite predefinito di un milione per il numero di righe che possono essere restituite in una singola query sull'origine sottostante.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. Questo limite non ha generalmente implicazioni pratiche e gli oggetti visivi in sé non visualizzano così tanti punti.This generally has no practical implications, and visuals themselves aren’t going to display that many points. Il limite può essere tuttavia violato nei casi in cui Power BI non ottimizzi completamente le query inviate e alcuni risultati intermedi richiesti superino il limite.However, the limit can occur in cases where Power BI is not fully optimizing the queries sent, and there is some intermediate result being requested that exceeds the limit. Il superamento del limite può anche verificarsi durante la creazione di un oggetto visivo, prima di ottenere uno stato finale più ragionevole.It can also occur whilst building a visual, on the path to a more reasonable final state. L'inclusione di Customer e TotalSalesQuantity violerebbe ad esempio questo limite se fossero presenti più di 1 milione di clienti, finché non viene applicato un filtro.For example, including Customer and TotalSalesQuantity would hit this limit if there were more than 1m customers, until some filter were applied.

    Verrebbe restituito l'errore "Il set di risultati di una query sull'origine dati esterna ha superato le dimensioni massime consentite di '1000000' righe".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.”

  • Non è possibile passare dalla modalità di importazione alla modalità DirectQuery: si noti che anche se è in genere possibile passare dalla modalità DirectQuery alla modalità di importazione per un modello, ciò significa che tutti i dati necessari dovranno essere importati.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. Non è neanche possibile tornare alla modalità precedente, principalmente a causa del set di funzionalità non supportate nella modalità DirectQuery.It is also not possible to switch back (primarily due to the set of features not supported in DirectQuery mode). Non è possibile passare dalla modalità DirectQuery alla modalità di importazione per i modelli DirectQuery su origini multidimensionali come SAP BW, a causa del trattamento completamente diverso delle misure esterne.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 nel servizio Power BIDirectQuery in the Power BI service

Tutte le origini sono supportate da Power BI Desktop.All sources are supported from Power BI Desktop. Alcune origini sono anche disponibili direttamente all'interno del servizio Power BI.Some sources are also available directly from within the Power BI service. Un utente aziendale può ad esempio usare Power BI per connettersi ai dati di Salesforce e ottenere immediatamente un dashboard senza usare 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.

Nel servizio sono direttamente disponibili solo due delle origini supportate da DirectQuery:Only two of the DirectQuery enabled-sources are available directly in the service:

  • SparkSpark
  • Azure SQL Data WarehouseAzure SQL Data Warehouse

È tuttavia consigliabile iniziare a usare DirectQuery su queste due origini dall'interno di Power BI Desktop,However, it is strongly recommended that any use of DirectQuery over those two sources start within Power BI Desktop. perché quando viene inizialmente stabilita la connessione nel servizio Power BI vengono applicate molte limitazioni chiave. Anche se il punto di partenza è semplice (l'avvio nel servizio Power BI), sono in altre parole presenti limitazioni al miglioramento del report ottenuto. Non è ad esempio possibile creare calcoli o usare molte funzioni di analisi o anche aggiornare i metadati per riflettere le modifiche apportate allo schema sottostante.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).

Indicazioni per un uso ottimale di DirectQueryGuidance for using DirectQuery successfully

Se intende usare DirectQuery, questa sezione offre alcune indicazioni di alto livello su come ottenere risultati ottimali.If you're going to use DirectQuery, then this section provides you with some high level guidance on how to ensure success. Le indicazioni fornite in questa sezione derivano dalle implicazioni dell'uso di DirectQuery descritte in questo articolo.The guidance in this section is derived from the implications of using DirectQuery that have been described in this article.

Prestazioni dell'origine dati back-endBackend data source performance

È consigliabile verificare che gli oggetti visivi semplici possano aggiornarsi in un tempo ragionevole,It is strongly recommended to validate that simple visuals will be able to refresh in a reasonable time. ovvero entro 5 secondi per un'esperienza interattiva soddisfacente.This should be within 5 seconds to have a reasonable interactive experience. Se gli oggetti visivi impiegano più di 30 secondi, è molto probabile che dopo la pubblicazione del report si verifichino altri problemi che renderanno la soluzione impraticabile.Certainly if visuals are taking longer than 30 seconds, then it's highly likely that further issues will occur following publication of the report, which will make the solution unworkable.

Se le query sono lente, il punto di partenza è esaminare le query inviate all'origine sottostante e il motivo delle loro prestazioni.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. Questo argomento non tratta l'ampia gamma di procedure consigliate per l'ottimizzazione dei database nel set completo di potenziali origini sottostanti, ma è applicabile alle procedure standard per i database che valgono per la maggior parte delle situazioni: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:

  • Le relazioni basate su colonne di tipo Integer hanno in genere prestazioni migliori rispetto ai join su colonne di altri tipi di datiRelationships based on integer columns generally perform better than joins on columns of other data types
  • È necessario creare gli indici appropriati e ciò implica generalmente l'uso di indici dell'archivio colonne nelle origini che li supportano, ad esempio 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).
  • Devono essere aggiornate tutte le statistiche necessarie nell'origineAny necessary statistics in the source should be updated

Indicazioni per la progettazione del modelloModel Design Guidance

Quando si definisce il modello è consigliabile eseguire queste operazioni:When defining the model, consider doing the following:

  • Evitare query complesse nell'editor di query.Avoid complex queries in Query Editor. La query definita nell'editor di query viene convertita in una singola query SQL che verrà quindi inclusa nella sub-SELECT di ogni query inviata a tale tabella.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. Se la query è complessa potrebbero verificarsi problemi di prestazioni per ogni query inviata.If that query is complex, it might result in performance issues on ever query sent. La query SQL effettiva per un set di passaggi può essere ottenuta selezionando l'ultimo passaggio nell'editor di query e scegliendo Visualizza query nativa dal menu di scelta rapida.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.
  • Mantenere le misure semplici.Keep measures simple. Almeno inizialmente è consigliabile limitare le misure ad aggregazioni semplici.At least initially, it is recommended to limit measures to simple aggregates. Se tali aggregazioni offrono prestazioni soddisfacenti è possibile definire misure più complesse, ma prestando attenzione alle prestazioni di ognuna.Then if those perform in a satisfactory manner, more complex measures can be defined, but paying attention to the performance for each.
  • Evitare relazioni sulle colonne calcolate.Avoid relationships on calculated columns. Ciò riguarda soprattutto i database in cui è necessario eseguire join multicolonna.This is particularly relevant to databases where it is necessary to perform multi-column joins. Power BI non consente attualmente relazioni basate su più colonne come chiavi di riferimento/chiavi primarie.Power BI today does not allow a relationship to be based on multiple columns as the FK/PK. La soluzione comune consiste nel concatenare le colonne usando una colonna calcolata e basare il join sulle colonne concatenate.The common workaround is to concatenate the columns together using a calculated column, and base the join on that. Questa soluzione è ragionevole per i dati importati, ma nel caso di DirectQuery comporta un join su un'espressione che in genere impedisce l'uso di indici e provoca la riduzione delle prestazioni.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. L'unica soluzione alternativa è materializzare effettivamente più colonne in una singola colonna nel database sottostante.The only workaround is to actually materialize the multiple columns into a single column in the underlying database.
  • Evitare relazioni sulle colonne uniqueidentifier.Avoid relationships on uniqueidentifier columns. Power BI non supporta dati di tipo uniqueidentifier in modo nativo.Power BI does not natively support a datatype of uniqueidentifier. La definizione di una relazione tra colonne di tipo uniqueidentifier comporterà quindi una query con un join che prevede un cast.Hence defining a relationship between columns of type uniqueidentifier column will result in a query with a join involving a Cast. Anche questo provoca generalmente una riduzione delle prestazioni.Again, this commonly leads to poor performance. Fino a quando questo caso d'uso non viene espressamente ottimizzato, l'unica soluzione consiste nel materializzare colonne di un tipo alternativo nel database sottostante.Until this case is specifically optimized, the only workaround is to materialize columns of an alternative type in the underlying database.
  • Nascondere la colonna to nelle relazioni.Hide the to column on relationships. La colonna to nelle relazioni (in genere la chiave primaria nella tabella to) deve essere nascosta in modo da non essere visualizzata nell'elenco dei campi e non essere quindi usata negli oggetti visivi.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. Le colonne su cui si basano le relazioni sono spesso in realtà colonne di sistema (ad esempio chiavi sostitutive in un data warehouse) ed è comunque consigliabile nascondere tali colonne.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. Se la colonna ha significato, introdurre una colonna calcolata visibile e avente un'espressione semplice equivalente alla chiave primaria,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. ad esempio:For example:

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

    L'obiettivo di questa operazione è semplicemente evitare un problema di prestazioni che può altrimenti verificarsi se un oggetto visivo include la colonna chiave primaria.The reason for doing this is simply to avoid a performance issue that can occur otherwise if a visual includes the primary key column.

  • Esaminare tutti gli usi delle colonne calcolate e le modifiche ai tipi di dati.Examine all uses of calculated columns and data type changes. L'uso di queste funzionalità non è necessariamente dannoso; implica che le query inviate all'origine sottostante contengano espressioni anziché semplici riferimenti a colonne e ciò può anche in questo caso impedire l'uso degli indici.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.
  • Evitare l'uso di filtri incrociati bidirezionali (anteprima) per le relazioni.Avoid use of the (preview) bi-directional cross filtering on relationships.
  • Provare l'impostazione Considera integrità referenziale.Experiment with setting Assume referential integrity. L'impostazione Considera integrità referenziale nelle relazioni consente alle query di usare istruzioni INNER JOIN invece di OUTER JOIN.The Assume Referential Integrity setting on relationships enables queries to use INNER JOIN statements rather than OUTER JOIN. Le prestazioni delle query generalmente migliorano, anche se ciò dipende dalle specifiche dell'origine dati.This generally improves query performance, though it does depend on the specifics of the data source.
  • Non usare filtri data relativi nell'editor di query.Do not use the relative data filtering in Query Editor. È possibile definire filtri data relativi nell'editor di query,It's possible to define relative date filtering in Query Editor. ad esempio per filtrare le righe in cui la data è negli ultimi 14 giorni.For example, to filter to the rows where the date is in the last 14 days.

    Si otterrà tuttavia un filtro basato sulla data fissa, come al momento in cui è stata creata la query.However, this will be translated into a filter based on the fixed date, as at the time the query was authored. Ciò può essere visto esaminando la query nativa.This can be seen from viewing the native query.

    Non si tratta quasi certamente del risultato desiderato.This is almost certainly not what was wanted. Per assicurarsi che il filtro venga applicato in base alla data in cui viene eseguito il report, applicare invece il filtro nel report come filtro report.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. Questa operazione viene attualmente eseguita creando una colonna calcolata per il calcolo del numero di giorni trascorsi, tramite la funzione DAX DATE(), e quindi usando tale colonna calcolata in 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.

Indicazioni per la progettazione del reportReport Design Guidance

Quando si crea un report tramite una connessione DirectQuery, osservare le indicazioni seguenti:When creating a report using a DirectQuery connection, adhere to the following guidance:

  • Applicare prima i filtri: applicare sempre eventuali filtri all'inizio della creazione di un oggetto visivo.Apply filters first: Always apply any applicable filters at the start of building a visual. Invece di introdurre TotalSalesAmount e ProductName, quindi filtrare in base a un anno specifico, applicare il filtro sull'anno all'inizio.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. Ogni passaggio della creazione di un oggetto visivo invia una query e anche se è possibile apportare un'altra modifica prima del completamento della prima query, questa operazione applica un carico superfluo all'origine sottostante.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. Applicando subito i filtri, le query intermedie diventano generalmente meno impegnative.By applying filters early, it generally makes those intermediate queries less costly. Con la mancata applicazione dei filtri all'inizio è anche possibile che venga raggiunto il limite di 1 milione di righe descritto in precedenza.Also, failing to apply filters early can result in hitting the 1m row limit above.
  • Limitare il numero di oggetti visivi in una pagina: quando si apre una pagina o si modifica il filtro dei dati a livello di pagina, tutti gli oggetti visivi presenti in una pagina vengono aggiornati.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. È anche previsto un limite al numero di query inviate in parallelo. Con l'aumentare del numero di oggetti visivi, alcuni di essi verranno quindi aggiornati in modo seriale, con il conseguente incremento del tempo necessario per aggiornare l'intera pagina.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. Per questo motivo è consigliabile limitare il numero di oggetti visivi presenti in una singola pagina e optare per più pagine semplici.For this reason it's recommended to limit the number of visuals on a single page, and instead have more, simpler pages.
  • Considerare la disattivazione dell'interazione tra oggetti visivi: per impostazione predefinita, le visualizzazioni in una pagina di report possono essere usate per applicare un filtro incrociato e un'evidenziazione incrociata nelle altre visualizzazioni nella pagina.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. Selezionando ad esempio "1999" nel grafico a torta, all'istogramma verrà applicata l'evidenziazione incrociata per visualizzare le vendite per categoria per l'anno "1999".For example, having selected “1999” on the pie chart, the column chart is cross highlighted to show the sales by category for “1999”.

    È tuttavia possibile gestire questa interazione come descritto in questo articolo.However, this interaction can be controlled as described in this article. In DirectQuery, il filtro incrociato e l'evidenziazione incrociata richiedono l'invio di query all'origine sottostante, quindi è necessario disattivare l'interazione se il tempo necessario per rispondere alle selezioni degli utenti diventa irragionevolmente lungo.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.

  • Considerare la sola condivisione dei report: sono disponibili diverse modalità di condivisione dei contenuti dopo la pubblicazione nel servizio Power BI.Consider sharing the report only: There are different ways of sharing content after publishing to the Power BI service. Nel caso di DirectQuery è consigliabile prendere in considerazione la sola condivisione del report completato, piuttosto che consentire ad altri utenti di creare nuovi report e riscontrare potenzialmente problemi di prestazioni per gli oggetti visivi da loro creati.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).

Oltre all'elenco di suggerimenti precedente, si noti che ognuna delle funzionalità di creazione di report seguenti può provare problemi di prestazioni:In addition to the above list of suggestions, note that each of the following reporting capabilities can cause performance issues:

  • Filtri di misure: gli oggetti visivi che contengono misure o aggregati di colonne possono contenere filtri in tali misure.Measure filters: Visuals containing measures (or aggregates of columns) can contain filters in those measures. L'oggetto visivo seguente visualizza ad esempio il valore di SalesAmount per categoria, ma includendo solo le categorie con oltre 20 milioni di vendite.For example, the visual below shows SalesAmount by Category, but only including those Categories with more than 20M of sales.

    Ciò comporta l'invio di due query all'origine sottostante:This will result in two queries being sent to the underlying source:

    • La prima query recupererà le categorie che soddisfano la condizione (Vendite > 20 milioni)The first query will retrieve the Categories meeting the condition (Sales > 20M)
    • La seconda query recupererà i dati necessari per l'oggetto visivo, includendo le categorie che soddisfano la condizione presente nella clausola WHJERE.The second query will then retrieve the necessary data for the visual, including the Categories that met the condition in the WHJERE clause.

    Questa operazione funziona correttamente in presenza di centinaia o migliaia di categorie, come in questo esempio.This generally performs just fine if there are hundreds or thousands of categories, as in this example. Le prestazioni possono ridursi se il numero di categorie è molto maggiore e in effetti la query avrà esito negativo se più di un milione di categorie soddisfano la condizione, a causa del limite di un milione di righe descritto in precedenza.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).

  • Filtri TopN: è possibile definire filtri avanzati per filtrare solo i primi o gli ultimi N valori classificati in base ad alcune misure, ad esempio per includere solo le prime 10 categorie nell'oggetto visivo precedente.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. Anche in questo caso, ciò comporta l'invio di due query all'origine sottostante.This will again result in two queries being sent to the underlying source. La prima query restituirà tuttavia tutte le categorie dell'origine sottostante; le prime N verranno determinate in base ai risultati restituiti.However, the first query will return all categories from the underlying source, and then the TopN are determined based on the returned results. A seconda della cardinalità della colonna interessata, ciò può provocare problemi di prestazioni oppure l'esito negativo delle query a causa del limite di 1 milione di righe.Depending on the cardinality of the column involved, this can lead to performance issues (or query failures due to the 1m row limit).
  • Mediana: le aggregazioni (Sum, Count Distinct e così via) vengono in genere inserite nell'origine sottostante.Median: Generally, any aggregation (Sum, Count Distinct, so on) is pushed to the underlying source. Questo non vale tuttavia per la mediana perché questa aggregazione non è in genere supportata dall'origine sottostante.However, this is not true for Median, as this aggregate is generally not supported by the underlying source. In questi casi, i dati di dettaglio vengono recuperati dall'origine sottostante e la mediana viene calcolata dai risultati restituiti.In such cases, the detail data is retrieved from the underlying source, and the Median calculated from the returned results. Questa operazione è ragionevole quando la mediana deve essere calcolata su un numero relativamente ridotto di risultati, mentre si verificheranno problemi di prestazioni, o errori di query a causa del limite di 1 milione di righe, se la cardinalità è di grandi dimensioni.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. La mediana della popolazione nazionale può essere ad esempio un'operazione ragionevole, mentre la mediana del prezzo di vendita potrebbe non esserlo.For example, Median Country Population might be reasonable, but Median Sales Price might not be.
  • Filtri per testo avanzati ("contiene" e così via): quando si filtra una colonna di testo, il filtro avanzato consente parametri come 'contiene', 'inizia con' e così via.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. Questi filtri possono certamente comportare prestazioni ridotte per alcune origini dati.These filters can certainly result in degraded performance for some data sources. In particolare, il filtro 'contiene' predefinito non deve essere usato se si intende ottenere in realtà una corrispondenza esatta ('è' o 'non è').In particular, the default ‘contains’ filter should not be used if what is really required is an exact match (‘is’ or ‘is not’). Anche se i risultati possono essere gli stessi, a seconda dei dati effettivi le prestazioni potrebbero differire notevolmente a causa dell'uso degli indici.Although the results might be the same, depending on the actual data, the performance might be drastically different due to the use of indexes.
  • Filtri dei dati di selezione multipla: per impostazione predefinita, i filtri dei dati consentono una sola selezione.Multi select slicers: By default, slicers only allow a single selection to be made. Consentire la selezione multipla nei filtri può causare alcuni problemi di prestazioni, perché quando l'utente seleziona un set di elementi nel filtro dei dati, ad esempio i dieci prodotti cui è interessato, ogni nuova selezione comporterà l'invio di query all'origine 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. Anche se l'utente può selezionare l'elemento successivo prima che la query venga completata, l'operazione comporta in ogni caso un carico aggiuntivo nell'origine sottostante.Whilst the user can select the next item prior to the query completing, this does result in extra load on the underlying source.

Diagnosi dei problemi di prestazioniDiagnosing performance issues

Questa sezione descrive come diagnosticare i problemi di prestazioni o come ottenere informazioni più dettagliate per consentire l'ottimizzazione dei report.This section describes how to diagnose performance issues, or how to get more detailed information to allow the reports to be optimized.

È consigliabile avviare la diagnosi dei problemi di prestazioni in Power BI Desktop piuttosto che nel servizio Power BI.It's strongly recommended that any diagnosis of performance issues starts in Power BI Desktop, rather than in the Power BI service. Accade spesso che i problemi di prestazioni siano semplicemente correlati al livello delle prestazioni dell'origine sottostante e che possano essere identificati e diagnosticati con maggiore facilità nell'ambiente molto più isolato di Power BI Desktop, eliminando inizialmente alcuni componenti come il gateway di 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 se non vengono trovati problemi di prestazioni con Power BI Desktop l'analisi dovrà concentrarsi sulle specifiche del report nel servizio 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.

È allo stesso modo consigliabile provare in prima battuta a isolare eventuali problemi per un singolo oggetto visivo, piuttosto che per molti oggetti visivi di una pagina.Similarly, it is recommended to first try to isolate any issues to an individual visual, rather than many visuals on a page.

Supponendo di aver eseguito i passaggi descritti nei paragrafi precedenti di questa sezione, si avrà ora un singolo oggetto visivo in una pagina in Power BI Desktop che è ancora lento.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. Per determinare le query inviate all'origine sottostante da Power BI Desktop, è possibile visualizzare tracce e informazioni di diagnostica che possono essere emesse da tale origine.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. Tali tracce possono anche contenere informazioni utili sui dettagli di esecuzione della query e su come migliorarla.Such traces might also contain useful information about the details of how the query was executed, and how it can be improved.

Anche in assenza di tali tracce nell'origine, è possibile visualizzare le query inviate da Power BI e i relativi tempi di esecuzione come descritto di seguito.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.

Determinazione delle query inviate da Power BI DesktopDetermining the queries sent by Power BI Desktop

Per impostazione predefinita, Power BI Desktop registra gli eventi di una sessione specifica in un file di traccia denominato FlightRecorderCurrent.trc.By default, Power BI Desktop logs events during a given session to a trace file called FlightRecorderCurrent.trc.

Per alcune origini DirectQuery, questo log include tutte le query inviate all'origine dati sottostante. Le altre origini DirectQuery saranno incluse in 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). Le origini che inviano query al log sono i seguenti:The sources that send queries to the log are the following:

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

Il file di traccia si trova nella cartella AppData dell'utente corrente:The trace file can be found in the AppData folder for the current user:

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

È possibile passare facilmente a questa cartella come segue: in Power BI Desktop selezionare File > Opzioni e impostazioni > Opzioni e quindi Diagnostica.Here's an easy way to get to this folder: In Power BI Desktop select File > Options and settings > Options, and then select Diagnostics. Verrà visualizzata la finestra di dialogo seguente:The following dialog window appears:

Quando si seleziona il collegamento Apri cartella tracce in Opzioni di diagnostica si aprirà la cartella seguente:When you select the Open traces folder link, under Diagnostic Options, the following folder opens:

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

Passando alla cartella padre di tale cartella verrà visualizzata la cartella contenente AnalysisServicesWorkspaces, che conterrà una sottocartella dell'area di lavoro per ogni istanza aperta di 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. Queste sottocartelle sono denominate con un suffisso intero, ad esempio AnalysisServicesWorkspace2058279583.These subfolders are named with an integer suffix, such as AnalysisServicesWorkspace2058279583.

All'interno della cartella è presente una sottocartella \Data contenente il file di traccia FlightRecorderCurrent.trc per la sessione corrente di Power BI.Inside that folder is a \Data subfolder that contains the trace file FlightRecorderCurrent.trc for the current Power BI session. La cartella dell'area di lavoro corrispondente viene eliminata al termine della sessione di Power BI Desktop associata.The corresponding workspace folder is deleted when the associated Power BI Desktop session ends.

I file di traccia possono essere letti usando lo strumento SQL Server Profiler, disponibile come download gratuito come parte di 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. Lo strumento può essere scaricato qui.You can get that from this location.

Dopo aver scaricato e installato SQL Server Management Studio, eseguire SQL Server Profiler.Once you download and install SQL Server Management Studio, run SQL Server Profiler.

Per aprire il file di traccia eseguire questa procedura:To open the trace file, take the following steps:

  1. In SQL Server Profiler selezionare File > Apri > File di tracciaIn SQL Server Profiler, select File > Open > Trace file
  2. Immettere il percorso del file di traccia per la sessione di Power BI attualmente aperta, ad esempio: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. Aprire il file FlightRecorderCurrent.trcOpen FilghtRecorderCurrent.trc

Vengono visualizzati tutti gli eventi dalla sessione corrente.All events from the current session are displayed. L'esempio con annotazioni illustrato di seguito evidenzia i gruppi di eventi.An annotated example is shown below, which highlights groups of events. Ogni gruppo presenta gli elementi seguenti:Each group has the following:

  • Un evento Query Begin e Query End, che rappresenta l'inizio e la fine di una query DAX generata dall'interfaccia utente, ad esempio da un oggetto visivo o dalla compilazione di un elenco di valori nell'interfaccia utente del filtroA 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)
  • Una o più coppie di eventi DirectQuery Begin e DirectQuery End, che rappresentano una query inviata all'origine dati sottostante, nell'ambito della valutazione della query 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.

Si noti che è possibile eseguire più query DAX in parallelo, quindi gli eventi di diversi gruppi possono essere con interleave.Note that multiple DAX queries can be executed in parallel, so events from different groups can be interleaved. Il valore di ActivityID può essere usato per determinare gli eventi appartenenti allo stesso gruppo.The value of the ActivityID can be used to determine which events belong to the same group.

Di seguito sono riportate altre colonne di interesse:Other columns of interest are the following:

  • TextData: dettagli testuali dell'evento.TextData: The textual detail of the event. Per gli eventi "Query Begin/End" sarà la query DAX.For “Query Begin/End” events this will be the DAX query. Per gli eventi "DirectQuery Begin/End" sarà la query SQL inviata all'origine sottostante.For “DirectQuery Begin/End” events this will be the SQL query sent to the underlying source. Nell'area in basso viene anche visualizzato l'elemento TextData per l'evento selezionato.The TextData for the currently selected event is also displayed in the region at the bottom.
  • EndTime: data/ora in cui l'evento è terminato.EndTime: When the event completed.
  • Duration: tempo in millisecondi impiegato per eseguire la query DAX o SQL.Duration: The duration, in milliseconds, taken to execute the DAX or SQL query.
  • Error: indica se si è verificato un errore. In quel caso l'evento verrà anche visualizzato in rosso.Error: Indicates if an error occurred (in which case the event is also displayed in red).

Si noti che nell'immagine precedente alcune colonne meno interessanti sono state limitate per visualizzare più facilmente le colonne interessanti.Note that in the image above, some of the less interesting columns have narrowed, to allow the interesting columns to be seen more easily.

L'approccio consigliato per l'acquisizione di una traccia utile per la diagnosi di un potenziale problema di prestazioni è il seguente:The recommended approach to capturing a trace to help diagnose a potential performance issue is the following:

  • Aprire una singola sessione di Power BI Desktop per evitare la confusione di più cartelle di aree di lavoroOpen a single Power BI Desktop session (to avoid the confusion of multiple workspace folders)
  • Eseguire il set di azioni di interesse in Power BI Desktop.Perform the set of actions of interest in Power BI Desktop. Includere alcune azioni aggiuntive per assicurare che gli eventi di interesse vengano scaricati nel file di traccia.Include a few additional actions beyond that, to ensure that the events of interest are flushed into the trace file.
  • Aprire SQL Server Profiler ed esaminare la traccia, come descritto in precedenza.Open SQL Server Profiler and examine the trace, as described earlier. Tenere presente che il file di traccia verrà eliminato al momento della chiusura di Power BI Desktop.Remember that the trace file will be deleted upon closing Power BI Desktop. Altre azioni in Power BI Desktop non verranno visualizzate immediatamente: è necessario chiudere e riaprire il file di traccia per visualizzare i nuovi eventi.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.
  • Mantenere le singole sessioni relativamente ridotte (dieci secondi di azioni, non centinaia) per semplificare l'interpretazione del file di traccia e anche per tenere conto del limite applicato alle dimensioni del file stesso, che nel caso di sessioni molto lunghe può provocare l'eliminazione degli eventi iniziali.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).

Informazioni sul formato delle query inviate da Power BI DesktopUnderstanding the form of query sent by Power BI Desktop

Il formato generale delle query create e inviate da Power BI Desktop usa sub-SELECT per ognuna delle tabelle a cui si fa riferimento, dove la sub-SELECT è definita dalla query specificata nell'editor di query.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. Si supponga ad esempio che siano presenti le tabelle TPC-DS seguenti in SQL Server:For example, assume the following TPC-DS tables in SQL Server:

Si consideri la query seguente:Consider the following query:

La query avrà come risultato l'oggetto visivo seguente:That query results in the following visual:

L'aggiornamento dell'oggetto visivo avrà come risultato la query SQL illustrata nel paragrafo successivo.Refreshing that visual will result in the SQL query shown below the next paragraph. Come si può vedere sono disponibili tre sub-SELECT per Web Sales, Item e Date_dim e ognuna restituisce tutte le colonne nella rispettiva tabella, anche se l'oggetto visivo fa effettivamente riferimento solo a quattro colonne.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. Queste query nelle sub-SELECT (ombreggiate) sono esattamente il risultato delle query definite nell'editor di query.These queries in the subselects (they're shaded) are exactly the result of the queries defined in Query editor. Questo uso delle sub-SELECT non sembra influire sulle prestazioni per le origini dati supportate finora per DirectQuery.Use of subselects in this manner has not been found to impact performance, for the data sources so far supported for DirectQuery. Origini dati come SQL Server ottimizzano semplicemente i riferimenti alle altre colonne.Data sources like SQL Server simply optimize away the references to the other columns.

Un motivo per cui Power BI usa questo modello è perché la query SQL usata può essere fornita direttamente dall'analista, quindi viene usata "così com'è", senza tentativi di riscriverla.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.

Passaggi successiviNext steps

Questo articolo descrive aspetti di DirectQuery comuni a tutte le origini dati.This article describes aspects of DirectQuery that are common across all data sources. Alcuni dettagli sono specifici delle singole origini.There are certain details that are specific to individual sources. Vedere gli argomenti seguenti relativi alle origini specifiche:See the following topics covering specific sources:

Per altre informazioni su DirectQuery, vedere le risorse seguenti:For more information about DirectQuery, check out the following resources: