Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce alcuni scenari di esempio per ognuno dei tre possibili risultati del riordino delle query. Include anche alcuni suggerimenti su come sfruttare al meglio il meccanismo di "query folding" e l'effetto che può avere sulle vostre interrogazioni.
Scenario
Si immagini uno scenario in cui, usando il database Wide World Importers per il database SQL di Azure Synapse Analytics, si deve creare una query in Power Query che si connette alla fact_Sale tabella e recupera le ultime 10 vendite con solo i campi seguenti:
- Elemento chiave per le vendite
- Chiave del Cliente
- Chiave della data della fattura
- Description
- Quantità
Annotazioni
A scopo dimostrativo, questo articolo usa il database descritto nell'esercitazione sul caricamento del database Wide World Importers in Azure Synapse Analytics. La differenza principale in questo articolo è che la fact_Sale tabella contiene solo i dati per l'anno 2000, con un totale di 3.644.356 righe.
Anche se i risultati potrebbero non corrispondere esattamente a quelli ottenuti seguendo l'esercitazione della documentazione di Azure Synapse Analytics, l'obiettivo di questo articolo è illustrare i concetti di base e l'impatto che il raggruppamento delle query può avere sulle query.
Questo articolo illustra tre modi per ottenere lo stesso output con livelli diversi di riduzione delle query:
- Nessun ripiegamento delle query
- Riduzione parziale delle query
- Riduzione completa delle query
Nessun esempio di riduzione delle query
Importante
Le query che si basano esclusivamente su origini dati non strutturate o che non dispongono di un motore di calcolo, ad esempio file CSV o Excel, non dispongono di funzionalità di riduzione delle query. Ciò significa che Power Query valuta tutte le trasformazioni di dati necessarie usando il motore di Power Query.
Dopo la connessione al database e la navigazione alla fact_Sale tabella, selezionare la trasformazione Mantieni le righe inferiori trovate all'interno del gruppo Riduci righe della scheda Home .
Dopo aver selezionato questa trasformazione, viene visualizzata una nuova finestra di dialogo. In questa nuova finestra di dialogo è possibile immettere il numero di righe che si desidera mantenere. In questo caso, immettere il valore 10 e quindi selezionare OK.
Suggerimento
In questo caso, l'esecuzione di questa operazione produce il risultato delle ultime 10 vendite. Nella maggior parte degli scenari è consigliabile fornire una logica più esplicita che definisce le righe considerate per ultime applicando un'operazione di ordinamento nella tabella.
Selezionare quindi la trasformazione Scegli colonne trovata all'interno del gruppo Gestisci colonne della scheda Home . È quindi possibile selezionare le colonne che si desidera mantenere dalla tabella e rimuovere il resto.
Infine, all'interno della finestra di dialogo Scegli colonne selezionare le Sale Keycolonne , Customer Key, Invoice Date KeyDescription, e Quantity e quindi selezionare OK.
L'esempio di codice seguente è lo script M completo per la query creata:
let
Source = Sql.Database(ServerName, DatabaseName),
Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
#"Kept bottom rows" = Table.LastN(Navigation, 10),
#"Choose columns" = Table.SelectColumns(
#"Kept bottom rows",
{"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}
)
in
#"Choose columns""
Nessuna riduzione della query: informazioni sulla valutazione della query
In Passaggi applicati nell'editor di Power Query si noti che gli indicatori di riduzione delle query per Le righe inferiori mantenute e Scegliere le colonne sono contrassegnati come passaggi valutati all'esterno dell'origine dati o, in altre parole, dal motore di Power Query.
È possibile fare clic con il pulsante destro del mouse sull'ultimo passaggio della query, quello denominato Scegli colonne, e selezionare l'opzione Visualizza piano di query. L'obiettivo del piano di query è fornire una visualizzazione dettagliata della modalità di esecuzione della query. Per altre informazioni su questa funzionalità, vedere Piano di query.
Ogni casella nell'immagine precedente è denominata nodo. Un nodo rappresenta la suddivisione dell'operazione per eseguire questa query. I nodi che rappresentano origini dati, ad esempio SQL Server nell'esempio precedente e il Value.NativeQuery nodo, rappresentano la parte della query scaricata nell'origine dati. Il resto dei nodi, in questo caso Table.LastN e Table.SelectColumns evidenziato nel rettangolo nell'immagine precedente, viene valutato dal motore di Power Query. Questi due nodi rappresentano le due trasformazioni aggiunte, Mantieni le righe inferiori e Scegli colonne. Il resto dei nodi rappresenta le operazioni eseguite a livello di origine dati.
Per visualizzare la richiesta esatta inviata all'origine dati, selezionare Visualizza dettagli nel Value.NativeQuery nodo.
Questa richiesta di origine dati si trova nella lingua nativa dell'origine dati. In questo caso, tale linguaggio è SQL e questa istruzione rappresenta una richiesta per tutte le righe e i campi della fact_Sale tabella.
Consultare questa fonte di dati può aiutarti a comprendere meglio il racconto che il piano di interrogazione cerca di trasmettere.
-
Sql.Database: questo nodo rappresenta l'accesso all'origine dati. Si connette al database e invia richieste di metadati per comprenderne le funzionalità. -
Value.NativeQuery: rappresenta la richiesta generata da Power Query per soddisfare la query. Power Query invia le richieste di dati in un'istruzione SQL nativa all'origine dati. In questo caso, rappresenta tutti i record e i campi (colonne) della tabellafact_Sale. Per questo scenario, questo caso è indesiderato, poiché la tabella contiene milioni di righe e l'interesse si trova solo negli ultimi 10. -
Table.LastN: dopo che Power Query riceve tutti i record dallafact_Saletabella, usa il motore di Power Query per filtrare la tabella e mantenere solo le ultime 10 righe. -
Table.SelectColumns: Power Query usa l'output delTable.LastNnodo e applica una nuova trasformazione denominataTable.SelectColumns, che seleziona le colonne specifiche da mantenere da una tabella.
Per la valutazione, questa query doveva scaricare tutte le righe e i campi dalla fact_Sale tabella. Questa query ha richiesto una media di 6 minuti e 1 secondo per l'elaborazione in un'istanza standard dei flussi di dati di Power BI (che rappresenta la valutazione e il caricamento dei dati nei flussi di dati).
Esempio di riduzione parziale delle query
Dopo la connessione al database e la navigazione alla tabella fact_Sale, inizia selezionando le colonne che si desidera mantenere dalla tabella. Selezionare la trasformazione Scegli colonne trovata all'interno del gruppo Gestisci colonne dalla scheda Home . Questa trasformazione consente di selezionare in modo esplicito le colonne che si desidera mantenere dalla tabella e rimuovere il resto.
Nella finestra di dialogo Scegli colonne selezionare le Sale Keycolonne , Customer KeyInvoice Date Key, , Descriptione Quantity e quindi selezionare OK.
Ora crea una logica che ordina la tabella per avere le ultime vendite nella parte inferiore. Selezionare la Sale Key colonna, ovvero la chiave primaria e la sequenza incrementale o l'indice della tabella. Ordinare la tabella usando solo questo campo in ordine crescente dal menu di scelta rapida per la colonna.
Selezionare quindi il menu contestuale della tabella e scegliere la trasformazione Mantieni le righe inferiori .
In Mantieni le righe inferiori immettere il valore 10 e quindi selezionare OK.
L'esempio di codice seguente è lo script M completo per la query creata:
let
Source = Sql.Database(ServerName, DatabaseName),
Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
#"Choose columns" = Table.SelectColumns(
Navigation,
{"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}
),
#"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Ascending}}),
#"Kept bottom rows" = Table.LastN(#"Sorted rows", 10)
in
#"Kept bottom rows"
Esempio di riduzione parziale della query: Informazioni sulla valutazione della query
Controllando il riquadro dei passaggi applicati, si noterà che gli indicatori di riduzione della query mostrano che l'ultima trasformazione aggiunta, Kept bottom rows, è contrassegnata come un passaggio valutato all'esterno dell'origine dati o, in altre parole, dal motore di Power Query.
È possibile fare clic con il pulsante destro del mouse sull'ultimo passaggio della query, quello denominato Kept bottom rowse selezionare l'opzione Piano di query per comprendere meglio la modalità di valutazione della query.
Ogni casella nell'immagine precedente è denominata nodo. Un nodo rappresenta ogni processo che deve verificarsi (da sinistra a destra) affinché la query venga valutata. Alcuni di questi nodi possono essere valutati nell'origine dati, mentre altri, ad esempio il nodo per Table.LastN, rappresentato dal passaggio Mantieni le righe inferiori , vengono valutati usando il motore di Power Query.
Per visualizzare la richiesta esatta inviata all'origine dati, selezionare Visualizza dettagli nel Value.NativeQuery nodo.
Questa richiesta si trova nella lingua nativa dell'origine dati. In questo caso, tale linguaggio è SQL e questa istruzione rappresenta una richiesta per tutte le righe, con solo i campi richiesti dalla fact_Sale tabella ordinata dal Sale Key campo.
Consultare questa richiesta di origine dati può aiutarti a comprendere meglio il messaggio che il piano di interrogazione completo cerca di comunicare. L'ordine dei nodi è un processo sequenziale che inizia richiedendo i dati dall'origine dati:
-
Sql.Database: si connette al database e invia richieste di metadati per comprenderne le funzionalità. -
Value.NativeQuery: rappresenta la richiesta generata da Power Query per soddisfare la query. Power Query invia le richieste di dati in un'istruzione SQL nativa all'origine dati. In questo caso, che rappresenta tutti i record, solo i campi richiesti dalla tabellafact_Salenel database sono ordinati in ordine crescente in base al campoSales Key. -
Table.LastN: dopo che Power Query riceve tutti i record dallafact_Saletabella, usa il motore di Power Query per filtrare la tabella e mantenere solo le ultime 10 righe.
Per la valutazione, questa query doveva scaricare tutte le righe e solo i campi obbligatori dalla fact_Sale tabella. L'elaborazione in un'istanza standard dei flussi di dati di Power BI è durata media di 3 minuti e 4 secondi, che determina la valutazione e il caricamento dei dati nei flussi di dati.
Esempio di piegatura completa della query
Dopo aver eseguito la connessione al database e passare alla fact_Sale tabella, iniziare selezionando le colonne che si desidera mantenere dalla tabella. Selezionare la trasformazione Scegli colonne trovata all'interno del gruppo Gestisci colonne dalla scheda Home . Questa trasformazione consente di selezionare in modo esplicito le colonne che si desidera mantenere dalla tabella e rimuovere il resto.
In Scegli colonne selezionare le Sale Keycolonne , Customer KeyInvoice Date Key, Description, e Quantity e quindi selezionare OK.
Ora crei la logica che ordina la tabella in modo che disponga delle ultime vendite in cima alla tabella. Selezionare la Sale Key colonna, ovvero la chiave primaria e la sequenza incrementale o l'indice della tabella. Ordina la tabella utilizzando solo questo campo in ordine decrescente dal menu contestuale della colonna.
Selezionare quindi il menu contestuale della tabella e scegliere la trasformazione Mantieni le prime righe .
In Mantieni le prime righe immettere il valore 10 e quindi selezionare OK.
L'esempio di codice seguente è lo script M completo per la query creata:
let
Source = Sql.Database(ServerName, DatabaseName),
Navigation = Source{[Schema = "wwi", Item = "fact_Sale"]}[Data],
#"Choose columns" = Table.SelectColumns(
Navigation,
{"Sale Key", "Customer Key", "Invoice Date Key", "Description", "Quantity"}
),
#"Sorted rows" = Table.Sort(#"Choose columns", {{"Sale Key", Order.Descending}}),
#"Kept top rows" = Table.FirstN(#"Sorted rows", 10)
in
#"Kept top rows"
Esempio di riduzione della query completa: Informazioni sulla valutazione della query
Quando si controlla il riquadro dei passaggi applicati, si noti che gli indicatori di riduzione delle query mostrano che le trasformazioni che hai aggiunto, Scegli colonne, Righe ordinate e Mantieni righe superiori, vengono contrassegnati come passaggi eseguiti sull'origine dati.
È possibile fare clic con il pulsante destro del mouse sull'ultimo passaggio della query, quello denominato Righe principali mantenute e selezionare l'opzione che legge piano di query.
Questa richiesta si trova nella lingua nativa dell'origine dati. In questo caso, tale linguaggio è SQL e questa istruzione rappresenta una richiesta per tutte le righe e i campi della fact_Sale tabella.
Consultare questa query sull'origine dati consente di comprendere meglio la storia che il piano di query completo cerca di comunicare.
-
Sql.Database: si connette al database e invia richieste di metadati per comprenderne le funzionalità. -
Value.NativeQuery: rappresenta la richiesta generata da Power Query per soddisfare la query. Power Query invia le richieste di dati in un'istruzione SQL nativa all'origine dati. In questo caso, che rappresenta una richiesta dei primi 10 record della tabellafact_Sale, con i soli campi obbligatori, dopo essere stati ordinati in ordine decrescente utilizzando il campoSale Key.
Annotazioni
Anche se non esiste alcuna clausola che può essere usata per SELEZIONARe le righe inferiori di una tabella nel linguaggio T-SQL, esiste una clausola TOP che recupera le prime righe di una tabella.
Per la sua valutazione, questa query scarica solo 10 righe, contenenti esclusivamente i campi richiesti dalla tabella fact_Sale. Questa query ha richiesto una media di 31 secondi per l'elaborazione in un'istanza standard dei flussi di dati di Power BI (che rappresenta la valutazione e il caricamento dei dati nei flussi di dati).
Confronto delle prestazioni
Per comprendere meglio l'effetto della riduzione delle query in queste query, è possibile aggiornare le query, registrare il tempo necessario per aggiornare completamente ogni query e confrontarle. Per semplicità, questo articolo fornisce i tempi medi di aggiornamento acquisiti usando il meccanico di aggiornamento dei flussi di dati di Power BI durante la connessione a un ambiente Azure Synapse Analytics dedicato con DW2000c come livello di servizio.
L'ora di aggiornamento per ogni query è la seguente:
| Example | Etichetta | Tempo in secondi |
|---|---|---|
| Nessun ripiegamento delle query | None | 361 |
| Riduzione parziale delle query | Parziale | 184 |
| Riduzione completa delle query | Completo | 31 |
Spesso una query che si integra completamente con l'origine dati è più efficiente di query simili che non si integrano completamente con l'origine dati. Ci potrebbero essere molte ragioni per cui questo è il caso. Questi motivi variano dalla complessità delle trasformazioni eseguite dalla query, alle ottimizzazioni delle query implementate nell'origine dati, ad esempio indici e risorse di calcolo dedicate e di rete. Esistono comunque due processi chiave specifici che il query folding tenta di usare per ridurre al minimo l'effetto che entrambi i processi hanno con Power Query.
- Dati in transito
- Trasformazioni eseguite dal motore di Power Query
Le sezioni seguenti illustrano l'effetto che questi due processi hanno nelle query menzionate in precedenza.
Dati in transito
Quando una query è eseguita, tenta di recuperare i dati dall'origine dati come uno dei primi passi. I dati che vengono recuperati dall'origine dati vengono determinati dal meccanismo di piegatura delle query. Questo meccanismo identifica i passaggi della query che possono essere delegati all'origine dati.
La tabella seguente elenca il numero di righe richieste dalla fact_Sale tabella del database. La tabella include anche una breve descrizione dell'istruzione SQL inviata per richiedere tali dati dall'origine dati.
| Example | Etichetta | Righe richieste | Description |
|---|---|---|---|
| Nessun ripiegamento delle query | None | 3644356 | Richiedere tutti i campi e tutti i record della fact_Sale tabella |
| Riduzione parziale delle query | Parziale | 3644356 | Richiesta di tutti i record, ma solo dei campi obbligatori della tabella fact_Sale dopo che è stata ordinata in base al campo Sale Key. |
| Riduzione completa delle query | Completo | 10 | Richiedere solo i campi obbligatori e i primi 10 record della tabella fact_Sale dopo l'ordinamento in ordine decrescente del campo Sale Key. |
Quando si richiedono dati da un'origine dati, l'origine dati deve calcolare i risultati per la richiesta e quindi inviare i dati al richiedente. Anche se le risorse di calcolo sono già state menzionate, le risorse di rete necessarie per lo spostamento dei dati dall'origine dati a Power Query, e quindi per consentire a Power Query di ricevere in modo efficace i dati e prepararli per le trasformazioni che avvengono localmente, possono richiedere del tempo a seconda delle dimensioni dei dati.
Per gli esempi presentati, Power Query ha dovuto richiedere oltre 3,6 milioni di righe dall'origine dati per gli esempi di assenza di piegatura delle query e piega parziale delle query. Per il completo esempio di folding della query, sono state richieste solo 10 righe. Per i campi richiesti, l'esempio senza riduzione della query ha richiesto tutti i campi disponibili dalla tabella. Sia negli esempi di accorpamento parziale della query che in quelli di accorpamento completo della query è stata inviata esattamente una richiesta per i campi necessari.
Attenzione
È consigliabile implementare soluzioni di aggiornamento incrementale che usano la riduzione delle query per query o tabelle con grandi quantità di dati. Diverse integrazioni di prodotti di Power Query implementano timeout per terminare query con esecuzione prolungata. Alcune origini dati implementano anche timeout nelle sessioni di lunga durata, cercando di eseguire query costose sui loro server. Altre informazioni: Uso dell'aggiornamento incrementale con flussi di dati e aggiornamento incrementale per i modelli semantici
Trasformazioni eseguite dal motore di Power Query
Questo articolo illustra come usare il piano di query per comprendere meglio il modo in cui la query può essere valutata. All'interno del piano di query è possibile visualizzare i nodi esatti delle operazioni di trasformazione eseguite dal motore di Power Query.
Nella tabella seguente vengono illustrati i nodi dei piani di query delle query precedenti che sarebbero stati valutati dal motore di Power Query.
| Example | Etichetta | Nodi di trasformazione del motore di Power Query |
|---|---|---|
| Nessun ripiegamento delle query | None |
Table.LastN, Table.SelectColumns |
| Riduzione parziale delle query | Parziale | Table.LastN |
| Riduzione completa delle query | Completo | — |
Per gli esempi illustrati in questo articolo, l'esempio di riduzione completa delle query non richiede alcuna trasformazione all'interno del motore di Power Query perché la tabella di output richiesta proviene direttamente dall'origine dati. Al contrario, le altre due query richiedevano l'esecuzione di alcuni calcoli nel motore di Power Query. A causa della quantità di dati che devono essere elaborati da queste due query, il processo in questi esempi richiede più tempo rispetto all'esempio di piegatura completa della query.
Le trasformazioni possono essere raggruppate nelle categorie seguenti:
| Tipo di operatore | Description |
|---|---|
| Remoto | Operatori che sono essi stessi nodi dell'origine dati. La valutazione di questi operatori si verifica all'esterno di Power Query. |
| Streaming | Gli operatori sono operatori pass-through. Ad esempio, Table.SelectRows con un filtro semplice è in genere possibile filtrare i risultati mentre passano attraverso l'operatore e non è necessario raccogliere tutte le righe prima di spostare i dati.
Table.SelectColumns e Table.ReorderColumns sono altri esempi di questi operatori. |
| Analisi completa | Operatori che devono raccogliere tutte le righe prima che i dati possano passare all'operatore successivo nella catena. Ad esempio, per ordinare i dati, Power Query deve raccogliere tutti i dati. Altri esempi di operatori di analisi completa sono Table.Group, Table.NestedJoine Table.Pivot. |
Suggerimento
Anche se non tutte le trasformazioni sono uguali dal punto di vista delle prestazioni, nella maggior parte dei casi, la presenza di meno trasformazioni è in genere migliore.
Considerazioni e suggerimenti
- Seguire le procedure consigliate per la creazione di una nuova query, come indicato in Procedure consigliate in Power Query.
- Usare gli indicatori di riduzione delle query per verificare quali passaggi impediscono la riduzione della query. Riordinarli se necessario per aumentare la piegatura.
- Usare il piano di query per determinare quali trasformazioni si verificano nel motore di Power Query per un passaggio specifico. Considerare di modificare la query esistente riorganizzando i passaggi. Controllare quindi di nuovo il piano di query dell'ultimo passaggio della query e verificare se il piano di query è migliore di quello precedente. Ad esempio, il nuovo piano di query ha meno nodi rispetto a quello precedente e la maggior parte dei nodi sono nodi "Streaming" e non "analisi completa". Per le origini dati che supportano la riduzione, tutti i nodi del piano di query diversi dai
Value.NativeQuerynodi di accesso alla fonte di dati rappresentano trasformazioni che non sono state ridotte. - Se disponibile, è possibile usare l'opzione View Native Query (o View data source query) per assicurarsi che la query possa essere ripiegata nell'origine dati. Se questa opzione è disabilitata per il tuo passaggio e stai utilizzando un'origine che normalmente la abilita, hai creato un passaggio che arresta il ripiegamento della query. Se si usa un'origine che non supporta questa opzione, è possibile basarsi sugli indicatori di riduzione delle query e sul piano di query.
- Usare gli strumenti di diagnostica delle query per comprendere meglio le richieste inviate all'origine dati quando sono disponibili funzionalità di piegatura delle query per il connettore.
- Quando si combinano dati originati dall'uso di più connettori, Power Query tenta di eseguire il push del maggior numero possibile di operazioni in entrambe le origini dati, rispettando al tempo stesso i livelli di privacy definiti per ogni origine dati.
- Leggere l'articolo sui livelli di privacy per proteggere le query da errori del Firewall per la privacy dei dati.
- Utilizzare altri strumenti per controllare l'ottimizzazione delle query dal punto di vista della richiesta ricevuta dalla fonte di dati. In base all'esempio riportato in questo articolo, è possibile usare Microsoft SQL Server Profiler per controllare le richieste inviate da Power Query e ricevute da Microsoft SQL Server.
- Se si aggiunge un nuovo passaggio a una query completamente ripiegata e anche il nuovo passaggio si ripiega, Power Query potrebbe inviare una nuova richiesta all'origine dati anziché usare una versione memorizzata nella cache del risultato precedente. In pratica, questo processo può comportare operazioni apparentemente semplici su una piccola quantità di dati che richiedono più tempo per l'aggiornamento nell'anteprima del previsto. Questo aggiornamento più lungo è dovuto al rieseguimento della query sull'origine dati piuttosto che all'utilizzo di una copia locale dei dati.