Sei sulla pagina 1di 1314

Contents

Documentazione di Power Query


Che cos'è Power Query?
Recuperare i dati
Acquisizione dei dati
Autenticazione con un'origine dati
Importazione di file SharePoint e OneDrive for Business
Mancanza di supporto per la connessione a Microsoft Graph
Connettività senza un connettore esistente
Trasformare i dati
Usare Power Query per trasformare i dati
Utilizzo dell'elenco dei passaggi applicati
Concetti di base della riduzione delle query
Esempi di folding delle query
Utilizzo degli strumenti di profilatura dei dati
Utilizzo del riquadro Query
Vista diagramma
Utilizzo della visualizzazione schema (anteprima)
Condividere una query
Utilizzo di funzioni personalizzate
Trasforma tabella
Alzare o abbassare di livello le intestazioni di colonna
Filtrare in base alla posizione delle righe
Filtrare in base ai valori
Scegliere o rimuovere colonne
Raggruppamento o riepilogo di righe
Trasformare una colonne tramite UnPivot
Trasformare una colonna tramite Pivot
Trasporre una tabella
Invertire le righe
Tipi di dati
Gestione degli errori
Utilizzo dei duplicati
Trasforma colonne
Inserire i valori in una colonna
Ordinare colonne
Rinomina colonna
Spostare colonne
Sostituisci valori
Analizzare testo come JSON o XML
Aggiungi colonne
Aggiungere una colonna da esempi
Aggiungere una colonna indice
Aggiungere una colonna personalizzata
Aggiungere una colonna condizionale
Aggiungere una colonna di valori cluster
Combinare i dati
Accodare query
Combinare file
Panoramica
Documenti CSV
Unire query
Panoramica
Left outer join
Right outer join
Full outer join
Inner join
Left anti-join
Right anti-join
Unione fuzzy
Cross join
Colonne suddivise
In base al delimitatore
In base al numero di caratteri
In base alle posizioni
Da minuscolo a maiuscolo
Da maiuscolo a minuscolo
Da cifra a non cifra
Da non cifra a cifra
Flussi di dati
Panoramica dei flussi di data
Differenze tra i flussi di elaborazione analitici e quelli standard
Creare e usare flussi di dati
Creare e usare flussi di dati in Teams
Usare l'aggiornamento incrementale
Connettersi alle origini dati
Licenze per il flusso di dati
Eseguire la migrazione di query a flussi di dati
Usare un gateway dati locale
Flussi di dati analitici
Ottenere dati dai flussi di dati
Creare entità calcolate
Collegare entità tra flussi di dati
Connettersi ad Azure Data Lake per l'archiviazione dei flussi di dati
Struttura di archiviazione
Struttura di archiviazione Common Data Model
Configurare l'archiviazione e il calcolo
Procedure consigliate per i flussi di dati
Scenari per le entità calcolate
Sviluppo di flussi di dati complessi
Riutilizzo dei flussi di data
Modello dimensionale
Prestazioni
Ottenere i dati dei flussi di date dai servizi di Azure
Flussi di data standard
Relazioni e ricerche
Mapping campi
Sicurezza e ruoli
Sincronizzazione dati Excel
Aggiungere dati a una tabella in Dataverse
Integrazione
Flussi di dati di Data Factory
Modelli di Power Automate per i flussi di dati
Panoramica dei modelli di Power Automate per i flussi di dati
Inviare una notifica al termine di un aggiornamento del flusso di dati
Aprire un ticket in caso di aggiornamento del flusso di dati non riuscito
Attivare flussi di dati e set di dati Power BI in sequenza
Usare Dataverse per compilare un report di monitoraggio dei flussi di dati
Usare Excel per compilare un report di monitoraggio dei flussi di dati
Usare un set di dati Power BI per compilare un report di monitoraggio dei flussi di
dati
Risoluzione dei problemi dei flussi di dati
Creazione di flussi di data
Recupero di dati da flussi di dati
Connessione all’origine dati
Tasti di scelta rapida
Procedure consigliate
Feedback e supporto
Argomenti avanzati
Riduzione della query
Corrispondenza fuzzy
Dietro le quinte del firewall per la privacy dei dati
Diagnostica query
Che cos'è la diagnostica delle query per Power Query?
Registrazione della diagnostica query
Lettura della diagnostica query
Informazioni sulla riduzione con diagnostica query
Perché la query viene eseguita più volte?
Indicatori di ripiegamento passaggio
Piano di query (anteprima)
Usare i parametri di query
Gestione degli errori
Importare dati tramite query native sul database
Creare flussi di dati Power Platform da query in Microsoft Excel (anteprima)
Ottimizzare Power Query durante l'espansione di colonne di tabella
Uso Microsoft Edge per OAuth in Power BI Desktop
Informazioni di riferimento sui connettori
Elenco di tutti i connettori di Power Query
Database di Access
Adobe Analytics
Amazon Athena
Amazon Redshift
Anaplan
AssembleView
Automy Data Analytics (Beta)
Azure Cosmos DB v2 (Beta)
Database SQL di Azure
Azure Synapse Analytics (SQL DW)
Azure Synapse Analytics di lavoro (Beta)
Dati e analisi di Bloomberg
BQE Core (Beta)
Common Data Service (legacy)
Data Lake Storage
Dataverse
Condivisione differenziale
EQuiS (beta)
Essbase
Excel
FHIR
Panoramica
Authentication
Riduzione della query
Criteri di folding delle query
Relazioni tra i dati
Cartella
Google Analytics
Google BigQuery
Fogli Google (Beta)
Hive LLAP
Database IBM DB2
JSON
Mailchimp (deprecato)
Microsoft Azure consumption Insights (Beta) (deprecato)
Microsoft Graph Security (deprecato)
Database MySQL
Feed OData
Connettore feed OData
Connessione ad Azure DevOps tramite OData
ODBC
Database Oracle
PDF
PostgreSQL
QuickBooks Online (beta)
Oggetti Salesforce
Report di Salesforce
SAP Business Warehouse
Server applicazioni SAP Business Warehouse
Server messaggi SAP Business Warehouse
Nozioni fondamentali su SAP BW
Esplorare gli oggetti query
Trasformare e filtrare un set di dati SAP BW
Dettagli dell'implementazione
Importa rispetto a DirectQuery per SAP BW
Autenticazione di Windows e Single Sign-On
Usare le opzioni avanzate
Risoluzione dei problemi del connettore SAP BW
Database SAP HANA
Panoramica
Crittografia SAP HANA
Configurare ODBC per SAP HANA
Risoluzione dei problemi
Cartella di SharePoint
Elenco SharePoint
Elenco SharePoint Online
SIS-CC SDMX
Snowflake
SoftOne BI (Beta)
Database di SQL Server
Stripe (deprecato)
SumTotal (beta)
Testo/CSV
TIBCO(R) Data Virtualization (Beta)
Usercube
Web
Connettore Web
Web da un esempio
Risoluzione dei problemi
Workforce Dimensions (Beta) (Deprecato)
XML
Zendesk (Beta)
Supporto e risoluzione dei problemi
Limiti di Power Query Online
Problemi comuni
Esaminare le modifiche dello script
Supporto e feedback del connettore
Acquisire richieste Web con Fiddler
Creare connettori di Power Query personalizzati
Guide introduttive
Installare l'SDK di Power Query
Iniziare a sviluppare connettori personalizzati
Creare il primo connettore - Hello World
Procedure dettagliate
Procedura dettagliata di TripPin
Panoramica
1. OData
2. API REST
3. Tabelle di navigazione
4. Percorsi
5. Paging
6. Schemi
7. Schemi avanzati
8. Diagnostica
9. Connessione di test
10. Riduzione
Esercitazioni su OAuth
GitHub
Esempi
Esempi funzionali
Esempi relativi a ODBC
Esempi relativi a TripPin
Concetti avanzati
Funzionalità aggiuntive del connettore
Gestione dell'autenticazione
Gestione dell'accesso ai dati
Sviluppo ODBC
Panoramica
Funzioni di estendibilità ODBC
Parametri per la funzione dell'origine dati
Parametri per Odbc.DataSource
Risoluzione dei problemi e test
Gestione del percorso delle risorse
Gestione del paging
Gestione delle trasformazioni
Statico
Dynamic
Gestione degli schemi
Gestione dei codici di stato
Comportamento predefinito
Modello attesa-tentativo
Gestione degli unit test
Funzioni helper
Gestione degli errori
Gestione della documentazione
Gestione delle tabelle di navigazione
Gestione del supporto del gateway
Gestione della firma del connettore
Certificazione del connettore
Panoramica
Invio
Documentazione per il connettore personalizzato
Risorse
Documentazione di Power BI
M function reference (Informazioni di riferimento sulla funzione M)
Documento sul linguaggio M
Riferimenti ai tipi M
Che cos'è Power Query?
07/12/2021 • 6 minutes to read

Power Query è un motore di trasformazione e preparazione dei dati. Power Query viene fornita con
un'interfaccia grafica per ottenere dati dalle origini e un editor di Power Query per l'applicazione delle
trasformazioni. Poiché il motore è disponibile in molti prodotti e servizi, la destinazione in cui verranno archiviati
i dati dipende dalla posizione Power Query usata. Usando Power Query, è possibile eseguire l'elaborazione
estrazione, trasformazione e caricamento (ETL) dei dati.

Diagramma con origini dati simbolizzate a destra, passando tramite Power Query per la trasformazione e quindi
passando a varie destinazioni, ad esempio Azure Data Lake Archiviazione, Dataverse, Microsoft Excel o Power BI.

Come Power Query con l'acquisizione dei dati


Gli utenti aziendali dedicano fino all'80% del tempo alla preparazione dei dati, ritardando così il lavoro di analisi
e processo decisionale. A questa situazione contribuiscono diverse sfide e Power Query aiuta a risolvere molte
di esse.

SF IDA ESIST EN T E C O M E P O W ER Q UERY ?

Trovare e connettersi ai dati è troppo difficile Power Query la connettività a un'ampia gamma di origini
dati, inclusi i dati di tutte le dimensioni e forme.

Le esperienze per la connettività dei dati sono troppo Coerenza dell'esperienza e parità delle funzionalità di query
frammentate su tutte le origini dati.
SF IDA ESIST EN T E C O M E P O W ER Q UERY ?

I dati devono spesso essere rimodellati prima dell'utilizzo Esperienza estremamente interattiva e intuitiva per la
creazione rapida e iterativa di query su qualsiasi origine dati,
di qualsiasi dimensione.

Qualsiasi data shaping è uno-off e non ripetibile Quando si Power Query per accedere e trasformare i dati, si
definisce un processo ripetibile (query) che può essere
facilmente aggiornato in futuro per ottenere dati aggiornati.
Nel caso in cui sia necessario modificare il processo o la
query per conto delle modifiche dello schema o dei dati
sottostanti, è possibile usare la stessa esperienza interattiva
e intuitiva usata quando si è definita inizialmente la query.

Volume (dimensioni dei dati), velocità (frequenza di modifica) Power Query offre la possibilità di usare un subset dell'intero
e varietà (ampiezza di origini dati e forme di dati) set di dati per definire le trasformazioni dei dati necessarie,
consentendo di filtrare e trasformare facilmente i dati in
dimensioni gestibili.
Power Query le query possono essere aggiornate
manualmente o sfruttando le funzionalità di aggiornamento
pianificato in prodotti specifici (ad esempio Power BI) o anche
a livello di codice (usando il modello Excel a oggetti).
Poiché Power Query offre connettività a centinaia di origini
dati e oltre 350 tipi diversi di trasformazioni dei dati per
ognuna di queste origini, è possibile usare i dati da qualsiasi
origine e in qualsiasi forma.

Power Query esperienze


L Power Query'esperienza utente viene fornita tramite l'editor di Power Query utente. Questa interfaccia
consente di applicare le trasformazioni necessarie semplicemente interagendo con un set semplice di barre
multifunzione, menu, pulsanti e altri componenti interattivi.
Il editor di Power Query è l'esperienza di preparazione dei dati principale, in cui è possibile connettersi a
un'ampia gamma di origini dati e applicare centinaia di trasformazioni di dati diverse visualizzando in anteprima
i dati e selezionando le trasformazioni dall'interfaccia utente. Queste funzionalità di trasformazione dei dati sono
comuni in tutte le origini dati, indipendentemente dalle limitazioni dell'origine dati sottostante.
Quando si crea un nuovo passaggio di trasformazione interagendo con i componenti dell'interfaccia Power
Query, Power Query crea automaticamente il codice M necessario per eseguire la trasformazione in modo che
non sia necessario scrivere codice.
Attualmente sono disponibili due Power Query esperienze:
Power Quer y Online — Si trovano in integrazioni come Power BI flussi di dati, flussi di dati Microsoft
Power Platform, Azure Data Factory flussi di dati wrangling e molti altri che offrono l'esperienza tramite una
pagina Web online.
Power Quer y per desktop — Si trova in integrazioni come Power Query per Excel e Power BI Desktop.

NOTE
Sebbene esistano Power Query esperienze, entrambe offrono quasi la stessa esperienza utente in ogni scenario.

Trasformazioni
Il motore di trasformazione Power Query include molte funzioni di trasformazione predefinite che possono
essere usate tramite l'interfaccia grafica del editor di Power Query. Queste trasformazioni possono essere
semplici come la rimozione di una colonna o l'applicazione di filtri alle righe o l'uso della prima riga come
intestazione di tabella. Sono disponibili anche opzioni di trasformazione avanzate, ad esempio merge, append,
group by, pivot e unpivot.
Tutte queste trasformazioni sono rese possibili scegliendo l'opzione di trasformazione nel menu e quindi
applicando le opzioni necessarie per tale trasformazione. La figura seguente illustra alcune delle trasformazioni
disponibili in editor di Power Query.

Altre informazioni: Guida introduttiva: Uso Power Query in Power BI

Flussi di dati
Power Query può essere usato in molti prodotti, ad esempio Power BI e Excel. Tuttavia, l'Power Query all'interno
di un prodotto ne limita l'utilizzo solo a quel prodotto specifico. I flussi di dati sono una versione del servizio
indipendente dal prodotto Power Query'esperienza che viene eseguita nel cloud. Usando i flussi di dati, è
possibile ottenere dati e trasformare i dati nello stesso modo, ma invece di inviare l'output a Power BI o Excel, è
possibile archiviare l'output in altre opzioni di archiviazione, ad esempio Dataverse o Azure Data Lake
Archiviazione. In questo modo, è possibile usare l'output dei flussi di dati in altri prodotti e servizi.
Altre informazioni: Che cosa sono i flussi di dati?

Lingua della formula di Power Query (M)


In qualsiasi scenario di trasformazione dei dati, alcune trasformazioni non possono essere eseguite nel modo
migliore usando l'editor grafico. Alcune di queste trasformazioni potrebbero richiedere configurazioni e
impostazioni speciali che l'interfaccia grafica attualmente non supporta. Il motore Power Query usa un
linguaggio di scripting dietro le quinte per tutte Power Query trasformazioni: il linguaggio della formula Power
Query M, noto anche come M.
Il linguaggio M è il linguaggio di trasformazione dei dati Power Query. Tutto ciò che accade nella query viene
scritto in M. Se si desidera eseguire trasformazioni avanzate usando il motore di Power Query, è possibile usare
il Editor avanzato per accedere allo script della query e modificarlo nel modo desiderato. Se le funzioni e le
trasformazioni dell'interfaccia utente non eseguono le modifiche esatte necessarie, usare il linguaggio Editor
avanzato e M per ottimizzare le funzioni e le trasformazioni.
let
Source = Exchange.Contents("xyz@contoso.com"),
Mail1 = Source{[Name="Mail"]}[Data],
#"Expanded Sender" = Table.ExpandRecordColumn(Mail1, "Sender", {"Name"}, {"Name"}),
#"Filtered Rows" = Table.SelectRows(#"Expanded Sender", each ([HasAttachments] = true)),
#"Filtered Rows1" = Table.SelectRows(#"Filtered Rows", each ([Subject] = "sample files for email PQ
test") and ([Folder Path] = "\Inbox\")),
#"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows1",{"Attachments"}),
#"Expanded Attachments" = Table.ExpandTableColumn(#"Removed Other Columns", "Attachments", {"Name",
"AttachmentContent"}, {"Name", "AttachmentContent"}),
#"Filtered Hidden Files1" = Table.SelectRows(#"Expanded Attachments", each [Attributes]?[Hidden]? <>
true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File from Mail", each
#"Transform File from Mail"([AttachmentContent])),
#"Removed Other Columns1" = Table.SelectColumns(#"Invoke Custom Function1", {"Transform File from
Mail"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File from
Mail", Table.ColumnNames(#"Transform File from Mail"(#"Sample File"))),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Column1", type text},
{"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6",
type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type
text}})
in
#"Changed Type"

Altre informazioni: linguaggio Power Query formula M

Dove è possibile usare Power Query?


Nella tabella seguente sono elencati i prodotti e i servizi Microsoft Power Query disponibili.

P O W ER Q UERY P O W ER Q UERY
P RO DOT TO M OTO RE M 1 DESK TO P 2 O N L IN E 3 F L USSI DI DAT I 4

Excel per Windows Sì Sì No No

Excel per Mac Sì No No No

Power BI Sì Sì Sì Sì

Power Apps Sì No Sì Sì

Power Automate Sì No Sì No

Azure Data Factory Sì No Sì Sì

SQL Server Sì No No No
Integration Services

SQL Server Analysis Sì Sì No No


Services

Dynamics 365 per Sì No Sì Sì


Customer Insights
Mo to re da 1 M Motore di esecuzione query sottostante che esegue query
espresse nel linguaggio Power Query formula ("M").

2 Power Quer y Desktop Esperienza Power Query disponibile nelle applicazioni


desktop.

3 Power Quer y Online Esperienza Power Query disponibile nelle applicazioni Web
browser.

4 Flussi di dati Power Query come servizio che viene eseguito nel cloud ed
è indipendente dal prodotto. Il risultato archiviato può
essere usato in altre applicazioni come servizi.

Vedi anche
Origini dati in Power Query
Recupero dei dati
Power Query introduttiva
Modellare e combinare i dati usando Power Query
Informazioni sui flussi di dati
Acquisizione dei dati
07/12/2021 • 3 minutes to read

Power Query possibile connettersi a molte origini dati diverse in modo da poter usare i dati necessari. Questo
articolo illustra in modo più completo i passaggi per l'I/O dei dati Power Query.
La connessione a un'origine dati Power Query segue un set standard di fasi prima dell'destinazione dei dati in
una destinazione. Questo articolo descrive ognuna di queste fasi.

NOTE
In alcuni casi, un connettore potrebbe avere tutte queste fasi e in altri casi un connettore potrebbe avere solo alcune di
esse. Per altre informazioni sull'esperienza di un connettore specifico, vedere la documentazione disponibile per il
connettore specifico.

Le fasi sono:
1. Impostazioni di connessione
2. Authentication
3. Anteprima dati
4. Destinazione query

1. Impostazioni di connessione
La maggior parte dei connettori richiede inizialmente almeno un parametro per inizializzare una connessione
all'origine dati. Ad esempio, il connettore SQL Server richiede almeno il nome host per stabilire una
connessione al database SQL Server.
In confronto, quando si tenta di connettersi a un file Excel, Power Query è necessario usare il percorso del file
per trovare il file a cui connettersi.
I parametri del connettore vengono comunemente usati per stabilire una connessione a un'origine dati e
insieme al connettore usato definiscono il cosiddetto — — percorso dell'origine dati.

NOTE
Alcuni connettori non richiedono l'immissione di parametri. Questi connettori sono denominati connettori singleton e
avranno un solo percorso di origine dati disponibile per ogni ambiente. Alcuni esempi sono Adobe Analytics, MailChimp e
Google Analytics.

2. Autenticazione
Ogni singola connessione effettuata in Power Query deve essere autenticata. I metodi di autenticazione variano
da connettore a connettore e alcuni connettori potrebbero offrire più metodi di autenticazione.
I metodi di autenticazione attualmente disponibili per Power Query sono:
Anonimo: comunemente usato per la connessione a un'origine dati che non richiede l'autenticazione utente,
ad esempio una pagina Web o un file disponibile su HTTP pubblico.
Basic: un nome utente e una password inviati nella codifica Base64 vengono accettati per l'autenticazione.
Chiave API: viene accettata una singola chiave API per l'autenticazione.
Account aziendale o account Microsoft: questo metodo è noto anche come OAuth 2.0.
Windows : può essere implicito o esplicito.
Database : disponibile solo in alcuni connettori di database.
Ad esempio, i metodi di autenticazione disponibili per il connettore SQL Server database sono Windows,
Database e account Microsoft.
3. Anteprima dei dati
L'obiettivo della fase di anteprima dei dati è fornire un modo semplice per visualizzare in anteprima e
selezionare i dati.
A seconda del connettore in uso, è possibile visualizzare in anteprima i dati usando:
Finestra Strumento di navigazione
Finestra di dialogo Anteprima tabella
Finestra Strumento di navigazione (tabella di navigazione )
La finestra Strumento di navigazione è costituita da due sezioni principali:
Il riquadro di selezione degli oggetti viene visualizzato sul lato sinistro della finestra. L'utente può
interagire con e selezionare questi oggetti.

NOTE
Per Power Query in Excel selezionare l'opzione Seleziona più elementi nell'angolo superiore sinistro della finestra di
spostamento per selezionare più oggetti alla volta nel riquadro di selezione degli oggetti.

NOTE
L'elenco di oggetti in Power Query Desktop è limitato a 10.000 elementi. Questo limite non esiste in Power Query
Online. Per una soluzione alternativa in Power Query Desktop, vedere Soluzione alternativa alla limitazione degli
oggetti.

Il riquadro di anteprima dei dati sul lato destro della finestra mostra un'anteprima dei dati dell'oggetto
selezionato.
Soluzione alternativa per la limitazione degli oggetti
È previsto un limite fisso di 10.000 oggetti nello strumento di navigazione in Power Query Desktop. Questo
limite non si verifica in Power Query Online. Alla fine, Power Query'interfaccia utente online sostituirà quella nel
desktop.
Nel frattempo, è possibile usare la soluzione alternativa seguente:
1. Fare clic con il pulsante destro del mouse sul nodo radice dello strumento di navigazione e quindi
scegliere Trasforma dati .
2. editor di Power Query quindi si apre con la tabella di navigazione completa nell'area di anteprima della
tabella. Questa vista non ha un limite al numero di oggetti ed è possibile usare filtri o altre trasformazioni
Power Query per esplorare l'elenco e trovare le righe desiderate, ad esempio in base alla colonna Nome.
3. Dopo aver trovato l'elemento desiderato, è possibile ottenere il contenuto selezionando il collegamento
dati ,ad esempio il collegamento Tabella nell'immagine seguente.

Finestra di dialogo Anteprima tabella


La finestra di dialogo anteprima tabella è costituita da una sola sezione per l'anteprima dei dati. Un esempio di
connettore che offre questa esperienza e questa finestra è il connettore Cartella.
4. Destinazione query
Questa è la fase in cui si specifica dove caricare la query. Le opzioni variano dall'integrazione all'integrazione,
ma l'unica opzione sempre disponibile è il caricamento dei dati nel editor di Power Query per trasformare e
arricchire ulteriormente la query.
Autenticazione con un'origine dati
07/12/2021 • 5 minutes to read

Quando si tenta di connettersi a un'origine dati usando un nuovo connettore per la prima volta, potrebbe essere
necessario selezionare il metodo di autenticazione da usare per l'accesso ai dati. Dopo aver selezionato il
metodo di autenticazione, non verrà richiesto di selezionare un metodo di autenticazione per il connettore
usando i parametri di connessione specificati. Tuttavia, se è necessario modificare il metodo di autenticazione in
un secondo momento, è possibile farlo.

Selezionare un metodo di autenticazione


Connettori diversi mostrano metodi di autenticazione diversi. Ad esempio, il connettore feed OData Power BI
Desktop e Excel la finestra di dialogo del metodo di autenticazione seguente.

Se si usa un connettore da un'app online, ad esempio il servizio Power BI o Power Apps, verrà visualizzata una
finestra di dialogo del metodo di autenticazione per il connettore feed OData simile all'immagine seguente.

Come si può vedere, un'altra selezione di metodi di autenticazione viene presentata da un'app online. Alcuni
connettori potrebbero anche chiedere di immettere il nome di un gateway dati locale per potersi connettere ai
dati.

Impostare il livello del metodo di autenticazione


Nei connettori che richiedono l'immissione di un URL verrà richiesto di selezionare il livello a cui verrà applicato
il metodo di autenticazione. Ad esempio, se si seleziona il connettore Web con URL , l'impostazione del livello
predefinito per https://contoso.com/2020data/List_of_countries_and_capitals il metodo di autenticazione sarà
https://contoso.com .

Il livello selezionato per il metodo di autenticazione scelto per questo connettore determina la parte di un URL a
cui verrà applicato il metodo di autenticazione. Se si seleziona l'indirizzo Web di primo livello, il metodo di
autenticazione selezionato per questo connettore verrà usato per tale indirizzo URL o per qualsiasi sottoindirizzo
all'interno di tale indirizzo.
Tuttavia, potrebbe non essere necessario impostare l'indirizzo di primo livello su un metodo di autenticazione
specifico perché sottoindirizzo diversi possono richiedere metodi di autenticazione diversi. Un esempio può
essere se si accede a due cartelle separate di un singolo sito SharePoint e si vuole usare account Microsoft
diversi per accedervi.
Dopo aver impostato il metodo di autenticazione per l'indirizzo specifico di un connettore, non sarà necessario
selezionare di nuovo il metodo di autenticazione per tale connettore usando tale indirizzo URL o qualsiasi
sottoindirizzo. Si supponga, ad esempio, di selezionare l'indirizzo come livello a cui si desidera applicare
https://contoso.com/ le impostazioni dell'URL del connettore Web. Ogni volta che si usa un connettore Web
per accedere a qualsiasi pagina Web che inizia con questo indirizzo, non sarà necessario selezionare
nuovamente il metodo di autenticazione.

Modificare il metodo di autenticazione


In alcuni casi potrebbe essere necessario modificare il metodo di autenticazione utilizzato in un connettore per
accedere a un'origine dati specifica.
Per modificare il metodo di autenticazione in Power BI Desktop o Excel
1. Eseguire una delle operazioni seguenti:
Nella Power BI Desktop file selezionare Opzioni e impostazioni Impostazioni > origine dati .
Nella Excel dati selezionare Ottieni origine dati Impostazioni > .

2. Nella finestra di dialogo Impostazioni origine dati selezionare Autorizzazioni globali , scegliere il sito
Web in cui si vuole modificare l'impostazione di autorizzazione e quindi selezionare Modifica
autorizzazioni .
3. Nella finestra di dialogo Modifica autorizzazioni selezionare Modifica in Credenziali .
4. Modificare le credenziali nel tipo richiesto dal sito Web, selezionare Salva e quindi selezionare OK.
È anche possibile eliminare le credenziali per un sito Web specifico nel passaggio 3 selezionando Cancella
autorizzazioni per un sito Web selezionato oppure selezionando Cancella tutte le autorizzazioni per tutti i siti
Web elencati.
Per modificare il metodo di autenticazione in Ser vizi online, ad esempio per i flussi di dati nel
ser vizio Power BI e Microsoft Power Platform
1. Selezionare il connettore e quindi selezionare Modifica connessione .

2. Apportare le modifiche necessarie e quindi selezionare Avanti.

Connessione con Azure Active Directory con i connettori Web e


OData
Quando ci si connette a origini dati e servizi che richiedono l'autenticazione tramite OAuth o l'autenticazione
basata su Azure Active Directory, in alcuni casi in cui il servizio è configurato correttamente, è possibile usare i
connettori Web o OData predefiniti per autenticare e connettersi ai dati senza richiedere un connettore
personalizzato o specifico del servizio.
Questa sezione descrive i sintomi di connessione quando il servizio non è configurato correttamente. Fornisce
anche informazioni sul modo in cui Power Query interagisce con il servizio quando è configurato correttamente.
Sintomi quando il servizio non è configurato correttamente
Se si verifica l'errore Non è stato possibile connettersi perché questo tipo di credenziale non è suppor tato
per questa risorsa. Scegliere un altro tipo di credenziale. Questo errore indica che il servizio non
supporta il tipo di autenticazione.
Un esempio è il servizio Northwind OData.
1. Immettere l'endpoint Northwind nell'esperienza "Ottieni dati" usando il connettore OData.

2. Selezionare OK per immettere l'esperienza di autenticazione. In genere, poiché Northwind non è un


servizio autenticato, è sufficiente usare Anonymous. Per dimostrare la mancanza di supporto per Azure
Active Directory, scegliere Account aziendale e quindi selezionare Accedi.

3. Si verifica l'errore, che indica che l'autenticazione OAuth o Azure Active Directory non è supportata nel
servizio.

Flusso di lavoro supportato


Un esempio di servizio supportato che funziona correttamente con OAuth è CRM, ad esempio
https://*.crm.dynamics.com/api/data/v8.2 .
1. Immettere l'URL nell'esperienza "Ottieni dati" usando il connettore OData.

2. Selezionare Account aziendale e quindi Accedi per continuare a connettersi usando OAuth.

3. La richiesta ha esito positivo e il flusso OAuth continua a consentire la corretta autenticazione.

Quando si seleziona Accedi nel passaggio 2 precedente, Power Query invia una richiesta all'endpoint URL
fornito con un'intestazione Authorization con un bearer token vuoto.

GET https://*.crm.dynamics.com/api/data/v8.2 HTTP/1.1


Authorization: Bearer
User-Agent: Microsoft.Data.Mashup (https://go.microsoft.com/fwlink/?LinkID=304225)
Host: pbi.crm.dynamics.com
Connection: Keep-Alive

È quindi previsto che il servizio risponda con una risposta 401 con un'intestazione WWW_Authenticate che
indica l'URI Azure AD di autorizzazione da usare. Questa risposta deve includere il tenant a cui accedere o
/common/ se la risorsa non è associata a un tenant specifico.
HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html
Server:
WWW-Authenticate: Bearer authorization_uri=https://login.microsoftonline.com/3df2eaf6-33d0-4a10-8ce8-
7e596000ebe7/oauth2/authorize
Date: Wed, 15 Aug 2018 15:02:04 GMT
Content-Length: 49

Power Query possibile avviare il flusso OAuth sul authorization_uri . Power Query richiede un valore Azure AD
Risorsa o Gruppo di destinatari uguale al dominio dell'URL richiesto. Questo valore sarà il valore che si usa per il
valore applicazione Azure URL ID nella registrazione dell'API o del servizio. Ad esempio, se si accede a , Power
Query il valore https://api.myservice.com/path/to/data/api dell'URL dell'ID applicazione sarà uguale a
https://api.myservice.com .

Gli ID Azure Active Directory client seguenti vengono usati da Power Query. Potrebbe essere necessario
consentire in modo esplicito a questi ID client di accedere al servizio e all'API, a seconda delle impostazioni
Azure Active Directory globali.

ID C L IEN T T ITO LO DESC RIZ IO N E

a672d62c-fc7b-4e81-a576- Power Query per Excel Client pubblico, usato in Power BI


e60dc46e951d Desktop gateway.

b52893c8-bc2e-47fc-918b- Power BI Aggiornamento dati Client riservato, usato nel Power BI


77022b299bbc servizio.

Se è necessario un maggiore controllo sul flusso OAuth (ad esempio, se il servizio deve rispondere con un
anziché con ), o se 302 l'URL dell'ID applicazione o il valore della risorsa Azure AD non corrispondono all'URL
del servizio, è necessario usare un connettore 401 personalizzato. Per altre informazioni sull'uso del flusso di
Azure AD integrato, vedere Azure Active Directory autenticazione.
Importazione di file SharePoint e OneDrive for
Business
07/12/2021 • 5 minutes to read

Power Query offre una serie di modi per accedere ai file ospitati in SharePoint o OneDrive for Business.

Ricerca dei file


NOTE
Attualmente, è possibile cercare solo i OneDrive for Business dell'utente autenticato all'interno di Power Query Online per
PowerApps.

Power Query un pulsante Sfoglia OneDrive accanto alla casella di testo Percorso file o URL quando si crea un
flusso di dati in PowerApps usando uno di questi connettori:
Excel
JSON
PDF
XML
TXT/CSV

Quando si seleziona questo pulsante, verrà richiesto di eseguire il processo di autenticazione. Dopo aver
completato questo processo, viene visualizzata una nuova finestra con tutti i file all'interno OneDrive for
Business dell'utente autenticato.
È possibile selezionare il file desiderato e quindi selezionare il pulsante Apri. Dopo aver selezionato Apri, si
tornerà alla pagina delle impostazioni di connessione iniziale in cui si può vedere che la casella di testo Percorso
file o URL contiene ora l'URL esatto del file selezionato da OneDrive for Business.

È possibile selezionare il pulsante Avanti nell'angolo inferiore destro della finestra per continuare il processo e
ottenere i dati.

Dal connettore Web usando un URL di file


1. Passare a OneDrive for Business usando un browser. Fare clic con il pulsante destro del mouse sul file da
usare e quindi scegliere Apri in Excel .

NOTE
L'interfaccia del browser potrebbe non apparire esattamente come nell'immagine seguente. Esistono diversi modi
per selezionare Apri in Excel per i file nell'interfaccia del browser di OneDrive for Business. È possibile usare
qualsiasi opzione che consenta di aprire il file in Excel.
2. In Excel selezionare File Info > (Informazioni file) e quindi il pulsante Copy path (Copia percorso).

Per usare il collegamento appena copiato in Power Query, seguire questa procedura:
1. Selezionare Recupera dati > Web .
2. Nella finestra di dialogo Da Web selezionare l'opzione Di base e incollare il collegamento nell'URL .
3. Rimuovere la stringa ?web=1 alla fine del collegamento in modo che Power Query possibile passare
correttamente al file e quindi selezionare OK.

4. Se Power Query richiede le credenziali, scegliere Windows (per i siti SharePoint locali) o Account
aziendale (per i siti Microsoft 365 o OneDrive for Business). Selezionare Connessione .
Cau t i on

Quando si lavora con i file ospitati in OneDrive per Home, il file a cui ci si vuole connettere deve essere
disponibile pubblicamente. Quando si imposta il metodo di autenticazione per questa connessione,
selezionare l'opzione Anonimo.
Quando viene visualizzata la finestra di dialogo Strumento di navigazione, è possibile selezionare dall'elenco
di tabelle, fogli e intervalli presenti nella cartella di lavoro Excel lavoro. Da qui è possibile usare il file di
OneDrive for Business esattamente come qualsiasi altro file di Excel. Si possono creare report e usarli nei set di
dati proprio come per qualsiasi altra origine dati.

NOTE
Per usare un file di OneDrive for Business come origine dati nel servizio Power BI, con l'aggiornamento del ser vizio
abilitato per tale file, assicurarsi di selezionare OAuth2 come metodo di autenticazione quando si configurano le
impostazioni di aggiornamento. In caso contrario, è possibile che venga restituito un errore (ad esempio L'aggiornamento
delle credenziali dell'origine dati non è riuscito. ) quando si prova a eseguire la connessione o l'aggiornamento. Selezionare
OAuth2 come metodo di autenticazione per risolvere l'errore delle credenziali.

connettore SharePoint cartelle


È possibile leggere una guida dettagliata su come connettersi ai file ospitati nel sito di SharePoint nell'articolo
SharePoint cartella.
Dopo aver stabilito la connessione, verrà visualizzata un'anteprima della tabella che mostra i file nel SharePoint
sito. Selezionare il pulsante Trasforma dati nella parte inferiore destra della finestra.
Selezionando il pulsante Trasforma dati si aprirà una visualizzazione dei dati denominata visualizzazione File
system. Ognuna delle righe in questa tabella rappresenta un file trovato nel SharePoint sito.

La tabella include una colonna denominata Content che contiene il file in formato binario. I valori nella
colonna Contenuto hanno un colore diverso rispetto al resto dei valori nelle altre colonne della tabella, a
indicare che sono selezionabili.
Selezionando un valore Binario nella colonna Contenuto, Power Query aggiungerà automaticamente una
serie di passaggi nella query per passare al file e interpretarne il contenuto laddove possibile.
Ad esempio, dalla tabella illustrata nell'immagine precedente, è possibile selezionare la seconda riga in cui il
valore del campo Name è 02-Februar y.csv . Power Query crea automaticamente una serie di passaggi per
esplorare e interpretare il contenuto del file come file CSV.
NOTE
È possibile interagire con la tabella applicando filtri, ordinamenti e altre trasformazioni prima di passare al file desiderato.
Dopo aver completato queste trasformazioni, selezionare il valore Binar y (Binario) che si vuole visualizzare.

OneDrive for Business esperienza


Il connettore SharePoint cartelle e la relativa esperienza funzionano anche per i file ospitati in OneDrive for
Business. Tuttavia, l'URL che è necessario usare è diverso da quello che si userebbe per un SharePoint sito. Per
individuare l'URL univoco, passare al portale OneDrive for Business e copiare l'URL dal browser. Questo URL
può essere simile all'esempio seguente:
https://contoso-my.sharepoint.com/personal/user123_contoso_com/_layouts/15/onedrive.aspx

Non è necessario l'URL completo, ma solo le prime parti. L'URL da usare in Power Query avrà il formato
seguente:
https://<unique_tenant_name>.sharepoint.com/personal/<user_identifier>

Ad esempio:
https://contoso-my.sharepoint/personal/user123_contoso_com

SharePoint. Funzione Contents


Anche se il connettore di cartelle SharePoint offre un'esperienza in cui è possibile visualizzare
contemporaneamente tutti i file disponibili nel sito di SharePoint o OneDrive for Business, è anche possibile
scegliere un'esperienza diversa. In questa esperienza è possibile spostarsi tra le cartelle SharePoint o OneDrive
for Business e raggiungere la cartella o i file a cui si è interessati.
Questa esperienza viene fornita tramite la SharePoint.Contents funzione . Per usare questa funzione, seguire
questa procedura:
1. Creare una query vuota.
2. Modificare il codice nella barra della formula in modo che sia lo stesso formato usato per il
SharePoint.Contents("url") url connettore SharePoint cartella. Ad esempio:

SharePoint.Contents("https://contoso.sharepoint.com/marketing/data")
NOTE
Per impostazione predefinita, questa funzione tenta di usare l'API SharePoint versione 14 per la connessione. Se
non si è certi della versione dell'API usata dal sito SharePoint, provare a usare il codice di esempio seguente:
SharePoint.Contents("https://contoso.sharepoint.com/marketing/data", [ApiVersion="Auto"]) .

3. Power Query verrà richiesto di aggiungere un metodo di autenticazione per la connessione. Usare lo
stesso metodo di autenticazione che si userebbe per il connettore SharePoint file.
4. Spostarsi tra i diversi documenti fino alla cartella o ai file specifici a cui si è interessati.
Si supponga, ad esempio, SharePoint un sito con una cartella Documenti condivisi. È possibile selezionare
il valore Tabella nella colonna Contenuto per la cartella e passare direttamente a tale cartella.

All'interno di questa cartella Documenti condivisi è presente una cartella in cui l'azienda archivia tutti i
report sulle vendite. Questa cartella è denominata Sales Reports. È possibile selezionare il valore
Tabella nella colonna Contenuto per la riga.

Con tutti i file all'interno della cartella Sales Reports, è possibile selezionare il pulsante Combina file
(vedere Panoramica sulla combinazione di file)per combinare i dati di tutti i file in questa cartella in una
singola tabella. In alternativa, è possibile passare direttamente a un singolo file di propria scelta
selezionando il valore Binario nella colonna Contenuto.
NOTE
L'esperienza fornita dalla funzione è ottimale per SharePoint SharePoint.Contents e OneDrive for Business ambienti
con un numero elevato di file.
Mancanza di supporto per Microsoft Graph in
Power Query
07/12/2021 • 2 minutes to read

La connessione alle API REST Graph Microsoft da Power Query non è consigliata o supportata. È invece
consigliabile esplorare soluzioni alternative per il recupero dei dati di analisi in base Graph, ad esempio
Microsoft Graph data connect.
Gli utenti potrebbero scoprire di poter effettuare determinate chiamate REST agli endpoint api di Microsoft
Graph tramite le funzioni o , ma questi approcci non sono affidabili come soluzioni Web.Contents OData.Feed a
lungo termine.
Questo articolo descrive i problemi associati a Microsoft Graph connettività da Power Query e spiega perché
non è consigliabile.

Autenticazione
Il flusso di autenticazione dell'account aziendale predefinito per Power Query e delle funzioni di non è
compatibile con la maggior parte Web.Contents OData.Feed Graph endpoint. In particolare, Power Query client
Azure Active Directory (Azure AD) richiede l'ambito, che non è compatibile con il Graph di sicurezza di
user_impersonation Graph. Graph usa un set completo di autorizzazioni che non sono disponibili tramite i
connettori Web e OData generici.
Anche l'implementazione di flussi di recupero delle credenziali Azure AD personalizzati direttamente dalla query
o usando credenziali hardcoded o incorporate non è consigliata per motivi di sicurezza.

Incompatibilità delle librerie OData


Alcuni endpoint Graph ed estensioni di Graph possono richiedere l'uso di librerie e funzionalità OData non
supportate dalla funzione incorporata di Power Query perché Graph e Power Query potrebbero usare due
versioni diverse delle librerie OData.Feed OData. Questi problemi in genere causano errori durante il recupero
del documento $metadata servizio. Gli utenti possono trovare indicazioni comuni relative al passaggio
dell'opzione alla chiamata di funzione per assicurarsi che siano usate le Implementation = "2.0" OData.Feed
librerie OData supportate più recenti. Anche se questo approccio risolve determinate incompatibilità di OData,
gli utenti possono comunque riscontrare errori nel corso del tempo quando Graph e Power Query adottano
nuove versioni delle librerie OData in momenti diversi.

Prestazioni
L'API microsoft Graph è progettata per supportare molti scenari applicativi, ma non è adatta al recupero dati su
larga scala necessario per la maggior parte degli scenari di analisi. Gli utenti che tentano di recuperare grandi
quantità di dati Graph possono riscontrare problemi di prestazioni. Per informazioni dettagliate sull'applicabilità
dello scenario, vedere Graph documentazione.

Uso di un connettore personalizzato


Alcuni Power Query hanno abilitato Graph connettività tramite connettori personalizzati, limitando le
funzionalità a determinate parti dell'API Graph. Questo approccio consente agli sviluppatori di connettori di
risolvere i problemi di autenticazione generali definendo il proprio client Azure AD con Graph autorizzazioni
specifiche. Alcuni connettori personalizzati possono risolvere i problemi di OData usando e simulando il
supporto Web.Contents di OData all'interno della logica del connettore. Tuttavia, questo approccio non è
consigliato perché gli utenti hanno spesso problemi di prestazioni e scalabilità descritti in precedenza. Gli
sviluppatori che prendono questa route devono continuare a tenere presenti queste limitazioni.
Alternative alla connettività out-of-box in Power BI
Desktop
07/12/2021 • 2 minutes to read

Anche se Power BI Desktop offre connettività predefinita a più di 150 origini dati, in alcuni casi un utente
potrebbe volersi connettere a un'origine dati per cui non è disponibile alcun connettore out-of-box.

Connettività tramite interfacce generiche


Potrebbe essere possibile connettersi a determinate origini dati senza un connettore incorporato incorporato
usando connettori di interfaccia generici.
Ad esempio, il connettore ODBC può connettersi ai servizi con le interfacce ODBC e il connettore Web può
connettersi ai servizi con le interfacce API REST.
L'uso di Power BI connettori di interfaccia generica disponibili per la connessione tramite interfacce supportate
dall'origine dati finale consente agli utenti di connettersi a molte più origini dati su Internet rispetto a connettori
specifici.
Per altre informazioni sulla connettività tramite interfacce generiche, vedere.

Connettività tramite un connettore personalizzato


L Power Query SDK consente agli utenti di creare connettori personalizzati per sbloccare gli scenari di
connettività Power BI Desktop. Gli utenti possono creare e distribuire connettori personalizzati ai servizi finali e
alle origini dati a cui possono eseguire l'autenticazione.
Community membri e organizzazioni possono anche condividere connettori personalizzati creati. Anche se
Microsoft non offre supporto, proprietà o garanzie per questi connettori personalizzati, gli utenti potrebbero
essere in grado di usarli per i propri scenari. Il Power BI partner include anche molti partner che possono creare
connettori personalizzati. Per altre informazioni sul programma o per trovare un partner, vedere Contattare un
partner Power BI partner.
Gli utenti proprietari di un servizio finale o di un'origine dati possono creare un connettore personalizzato e
possono essere idonei a certificare che il connettore sia reso disponibile pubblicamente all'interno di Power BI
Desktop.

Richiedere al proprietario dell'origine dati di compilare e certificare un


connettore
Poiché solo il proprietario dell'origine dati o una terza parte approvata può creare e certificare un connettore
personalizzato per qualsiasi servizio, gli utenti finali sono invitati a condividere la richiesta di un connettore
direttamente con il proprietario dell'origine dati per incoraggiare gli investimenti nella creazione e nella
certificazione di un connettore.

Richiesta nel forum Power BI Ideas


Oltre a coinvolgere direttamente il proprietario dell'origine dati, gli utenti devono anche creare o votare idee nel
forum di Power BI Ideas per dimostrare la necessità e la richiesta di un connettore. Questo feedback può anche
aiutare a incoraggiare il proprietario dell'origine dati a investire in un connettore certificato disponibile per gli
utenti in modalità Power BI Desktop.
Interfaccia Power Query utente
07/12/2021 • 11 minutes to read

Con Power Query, è possibile connettersi a molte origini dati diverse e trasformare i dati nella forma desiderata.
In questo articolo si apprenderà come creare query con Power Query individuando:
Funzionamento dell'esperienza "Ottieni dati" in Power Query.
Come usare e sfruttare l'interfaccia Power Query utente.
Come eseguire trasformazioni comuni come il raggruppamento e l'unione dei dati.
Se non si ha Power Query, è possibile iscriversi per ottenere una versione di valutazione gratuita Power BI prima
di iniziare. È possibile usare Power BI di dati per provare le Power Query online descritte in questo articolo.
È anche possibile scaricare Power BI Desktop gratuitamente.
Gli esempi in questo articolo si connettono a e usano il feed OData Northwind.

https://services.odata.org/V4/Northwind/Northwind.svc/

Connessione a un feed OData


Per iniziare, individuare il connettore di feed OData dall'esperienza "Ottieni dati". È possibile selezionare la
categoria Altro in alto o cercare OData nella barra di ricerca nell'angolo in alto a destra.

Dopo aver selezionato questo connettore, nella schermata vengono visualizzate le impostazioni di connessione
e le credenziali.
Per URL immettere l'URL del feed OData Northwind illustrato nella sezione precedente.
Per il gateway dati locale, lasciare none.
Per Tipo di autenticazione lasciare anonimo.
Selezionare il pulsante Avanti .
Verrà aper to lo strumento di navigazione, in cui è possibile selezionare le tabelle a cui connettersi dall'origine
dati. Selezionare la tabella Customers per caricare un'anteprima dei dati e quindi selezionare Trasforma dati .

La finestra di dialogo carica quindi i dati dalla tabella Customers nell'editor Power Query dati.
L'esperienza precedente per la connessione ai dati, la specifica del metodo di autenticazione e la selezione
dell'oggetto o della tabella specifica a cui connettersi è denominata Esperienza Di recupero dati ed è
documentata con altri dettagli nell'articolo Recupero di dati.

NOTE
Per altre informazioni sul connettore feed OData, vedere Feed OData.

Esperienza Power Query'utente dell'editor


L'editor Power Query rappresenta l'interfaccia utente di Power Query, in cui è possibile aggiungere o modificare
query, gestire query raggruppando o aggiungendo descrizioni ai passaggi di query o visualizzando le query e la
relativa struttura con viste diverse. L Power Query'interfaccia utente ha cinque componenti distinti.

1. Barra multifunzione: l'esperienza di spostamento della barra multifunzione, che offre più schede per
aggiungere trasformazioni, selezionare le opzioni per la query e accedere ai diversi pulsanti della barra
multifunzione per completare varie attività.
2. Riquadro Quer y: visualizzazione di tutte le query disponibili.
3. Visualizzazione corrente: visualizzazione di lavoro principale, che per impostazione predefinita visualizza
un'anteprima dei dati per la query. È anche possibile abilitare la visualizzazione diagramma insieme alla
visualizzazione di anteprima dei dati. È anche possibile passare dalla visualizzazione schema alla
visualizzazione di anteprima dei dati mantenendo la visualizzazione diagramma.
4. Impostazioni quer y : visualizzazione della query attualmente selezionata con informazioni rilevanti, ad
esempio il nome della query, i passaggi della query e vari indicatori.
5. Barra di stato: barra che visualizza informazioni importanti rilevanti sulla query, ad esempio il tempo di
esecuzione, le colonne e le righe totali e lo stato di elaborazione. Questa barra contiene anche pulsanti per
modificare la visualizzazione corrente.

NOTE
La visualizzazione schema e diagramma è attualmente disponibile solo in Power Query Online.

Uso dell'editor di Power Query


In questa sezione si inizierà a trasformare i dati usando Power Query. Ma prima di iniziare a lavorare alla
trasformazione dei dati, verranno illustrati alcuni riquadri dell'interfaccia utente che possono essere espansi o
compressi a seconda del contesto. La selezione dei riquadri appropriati consente di concentrarsi sulla
visualizzazione più importante per l'utente. Verranno anche illustrate le diverse visualizzazioni disponibili
nell'interfaccia Power Query interfaccia utente.
Espandere e comprimere i riquadri
Si noterà che in tutta l'Power Query utente sono presenti icone che consentono di comprimere o espandere
determinate visualizzazioni o sezioni. Ad esempio, nell'angolo superiore destro del riquadro Query è presente
un'icona che comprime il riquadro delle query quando è selezionato ed espande nuovamente il riquadro
quando viene selezionato.
Passare da una visualizzazione all'altra
Oltre a poter comprimere determinati riquadri e sezioni nell Power Query'interfaccia utente, è anche possibile
cambiare le visualizzazioni visualizzate. Per passare da una visualizzazione all'altra, passare alla scheda
Visualizza della barra multifunzione e trovare i gruppi Anteprima e Layout, che controllano l'aspetto dell'Power
Query'interfaccia utente.
Si consiglia di provare tutte queste opzioni per trovare la visualizzazione e il layout con cui si è più a proprio
agio nell'uso. Ad esempio, selezionare Visualizzazione schema dalla barra multifunzione.

Il lato destro della barra di stato contiene anche icone per il diagramma, i dati e le visualizzazioni dello schema. È
possibile usare queste icone per passare da una visualizzazione all'altra. È anche possibile usare queste icone
per abilitare o disabilitare la visualizzazione desiderata.
L Power Query'interfaccia utente con il riquadro query compresso e la visualizzazione corrente passa alla
visualizzazione
Informazioni sulla visualizzazione schema
La visualizzazione schema offre un modo rapido e semplice per interagire solo con i componenti dello schema
per la tabella, ad esempio i nomi di colonna e i tipi di dati. È consigliabile usare la visualizzazione schema
quando si desidera eseguire azioni correlate allo schema, ad esempio la rimozione di colonne, la
ridenominazione delle colonne, la modifica dei tipi di dati delle colonne, il riordino delle colonne o la
duplicazione delle colonne.

NOTE
Per altre informazioni sulla visualizzazione schema, vedere Uso della visualizzazione Schema.

Ad esempio, nella visualizzazione schema selezionare il segno di spunta accanto alle colonne Orders e
CustomerDemographics e dalla barra multifunzione selezionare l'azione Rimuovi colonne. Questa selezione
applica una trasformazione per rimuovere queste colonne dai dati.
Che cos'è la visualizzazione diagramma
È ora possibile tornare alla visualizzazione di anteprima dei dati e abilitare la visualizzazione diagramma per
visualizzare una prospettiva più visiva dei dati e delle query.

La visualizzazione diagramma consente di visualizzare come è strutturata la query e come potrebbe interagire
con altre query nel progetto. Ogni passaggio della query ha un'icona distinta che consente di riconoscere la
trasformazione usata. Sono anche presenti righe che connettono i passaggi per illustrare le dipendenze. Poiché
sia la visualizzazione di anteprima dei dati che la visualizzazione diagramma sono abilitate, la visualizzazione
diagramma viene visualizzata sopra l'anteprima dei dati.
NOTE
Per altre informazioni sulla visualizzazione diagramma, vedere Vista diagramma.

Iniziare a trasformare i dati


Con la visualizzazione diagramma abilitata, selezionare il segno più. È possibile cercare una nuova
trasformazione da aggiungere alla query. Cercare Raggruppa per e selezionare la trasformazione.

Viene quindi visualizzata la finestra di dialogo Raggruppa per. È possibile impostare l'operazione
Raggruppa per per raggruppare in base al paese e contare il numero di righe dei clienti per paese.
1. Mantenere selezionato il pulsante di opzione Basic.
2. Selezionare Paese in base a cui raggruppare.
3. Selezionare Customers e Count rows rispettivamente come nome e operazione della colonna.
Selezionare OK per eseguire l'operazione. L'anteprima dei dati viene aggiornata per visualizzare il numero
totale di clienti per paese.
Un modo alternativo per avviare la finestra di dialogo Raggruppa per consiste nell'usare il pulsante Raggruppa
per nella barra multifunzione o facendo clic con il pulsante destro del mouse sulla colonna Paese.

Per praticità, le trasformazioni in Power Query spesso sono accessibili da più posizioni, in modo che gli utenti
possano scegliere di usare l'esperienza preferita.

Aggiunta di una nuova query


Dopo aver creato una query che fornisce il numero di clienti per paese, è possibile aggiungere contesto a questi
dati individuando il numero totale di fornitori per ogni territorio.
In primo luogo, è necessario aggiungere i dati Suppliers. Selezionare Ottieni dati e dal menu a discesa e
quindi selezionare OData.
Viene nuovamente attivata l'esperienza di connessione OData. Immettere le impostazioni di connessione come
descritto in Connessione a un feed OData per connettersi al feed Northwind OData. Nell'esperienza
Navigator cercare e selezionare la tabella Suppliers.

Selezionare Crea per aggiungere la nuova query all'editor Power Query query. Nel riquadro delle query
verranno ora visualizzate sia la query Customers che la query Suppliers.
Aprire di nuovo la finestra di dialogo Raggruppa per, questa volta selezionando il pulsante Raggruppa per
sulla barra multifunzione nella scheda Trasforma.

Nella finestra di dialogo Raggruppa per impostare l'operazione Raggruppa per per raggruppare in base al
paese e contare il numero di righe fornitore per paese.
1. Mantenere selezionato il pulsante di opzione Basic.
2. Selezionare Countr y to group by (Paese in base a cui eseguire il raggruppamento).
3. Selezionare Suppliers e Count rows rispettivamente come nome e operazione della colonna.
NOTE
Per altre informazioni sulla trasformazione Raggruppa per, vedere Raggruppamento o riepilogo di righe.

Riferimento a query
Ora che sono state eseguite una query per i clienti e una query per i fornitori, l'obiettivo successivo è combinare
queste query in un'unica query. Esistono diversi modi per eseguire questa operazione, tra cui l'uso dell'opzione
Merge nella tabella Customers, la duplicazione di una query o il riferimento a una query. Per questo esempio
si creerà un riferimento facendo clic con il pulsante destro del mouse sulla tabella Customers e scegliendo
Riferimento , che crea in modo efficace una nuova query che fa riferimento alla query Customers.

Dopo aver creato questa nuova query, modificare il nome della query in Countr y Analysis e disabilitare il
caricamento della tabella Customers deselezionando l'opzione Abilita caricamento dalla query Suppliers.
Unione di query
Un'operazione di merge esegue il join di due tabelle esistenti in base ai valori corrispondenti di una o più
colonne. In questo esempio l'obiettivo è unire entrambe le tabelle Customers e Suppliers in una sola tabella
per i paesi che hanno sia Customers che Suppliers .
All'interno della query Country Analysis selezionare l'opzione Merge queries (Unisci query) nella scheda
Home della barra multifunzione.

Verrà visualizzata una nuova finestra di dialogo per l'operazione di unione. È quindi possibile selezionare la
query da unire alla query corrente. Selezionare la query Suppliers e selezionare il campo Countr y da
entrambe le query. Selezionare infine il tipo di inner join, in quanto per questa analisi si vogliono usare solo i
paesi in cui sono disponibili Clienti e Fornitori.
Dopo aver selezionato il pulsante OK, alla query countr y analysis viene aggiunta una nuova colonna
contenente i dati della query Suppliers. Selezionare l'icona accanto al campo Suppliers, in cui viene
visualizzato un menu in cui è possibile selezionare i campi da espandere. Selezionare solo il campo Suppliers
e quindi fare clic sul pulsante OK.

Il risultato di questa operazione di espansione è una tabella con solo 12 righe. Rinominare il campo
Suppliers.Suppliers in Suppliers facendo doppio clic sul nome del campo e immettendo il nuovo nome.
NOTE
Per altre informazioni sulla funzionalità Merge di quer y, vedere Panoramica delle query di merge.

Passaggi applicati
Ogni trasformazione applicata alla query viene salvata come passaggio nella sezione Passaggi applicati del
riquadro Impostazioni query. Se è necessario controllare il modo in cui la query viene trasformata da un
passaggio all'altro, è possibile selezionare un passaggio e visualizzare in anteprima la modalità di risoluzione
della query in quel punto specifico.
È anche possibile fare clic con il pulsante destro del mouse su una query e selezionare l'opzione Proprietà per
modificare il nome della query o aggiungere una descrizione per la query. Ad esempio, fare clic con il pulsante
destro del mouse sul passaggio Merge quer y della query Countr y Analysis e modificare il nome della query
in Merge with Suppliers e la descrizione in Getting data from the Suppliers quer y for Suppliers by
Countr y .

Questa modifica aggiunge una nuova icona accanto al passaggio su cui è possibile passare il mouse per
leggerne la descrizione.
NOTE
Per altre informazioni sui passaggi applicati, vedere Uso dell'elenco Passaggi applicati.

Prima di passare alla sezione successiva, disabilitare la visualizzazione Diagramma per visualizzare solo
l'anteprima dei dati.

Aggiunta di una nuova colonna


Con i dati per clienti e fornitori in un'unica tabella, è ora possibile calcolare il rapporto tra clienti e fornitori per
ogni paese. Selezionare l'ultimo passaggio della query countr y analysis e quindi selezionare entrambe le
colonne Customers e Suppliers. Nella scheda Aggiungi colonna della barra multifunzione e all'interno
del gruppo Da numero selezionare Standard e quindi Divide (Integer) dall'elenco a discesa.

Questa modifica crea una nuova colonna denominata Integer-division che è possibile rinominare in Ratio.
Questa modifica è il passaggio finale della query, in quanto è possibile visualizzare il rapporto cliente-fornitore
per i paesi in cui i dati hanno clienti e fornitori.

Profilatura dei dati


Un'Power Query che consente di comprendere meglio i dati è Profiling dati. Abilitando le funzionalità di
profilatura dei dati, si otterrà un feedback sui dati all'interno dei campi di query, ad esempio la distribuzione dei
valori, la qualità delle colonne e altro ancora.
È consigliabile usare questa funzionalità durante lo sviluppo delle query, ma è sempre possibile abilitare e
disabilitare la funzionalità per comodità. L'immagine seguente mostra tutti gli strumenti di profilatura dei dati
abilitati per la query countr y analysis.
NOTE
Per altre informazioni sulla profilatura dei dati, vedere Uso degli strumenti di profilatura dei dati.

Riepilogo
In questo articolo è stata creata una serie di query con Power Query che fornisce un'analisi del rapporto cliente-
fornitore a livello di paese per l'azienda Northwind.
Sono stati appresi i componenti dell'interfaccia utente di Power Query, come creare nuove query all'interno
dell'editor di query, fare riferimento a query, unire query, comprendere la sezione passaggi applicati, aggiungere
nuove colonne e usare gli strumenti di profilatura dei dati per comprendere meglio i dati.
Power Query è un potente strumento usato per connettersi a molte origini dati diverse e trasformare i dati nella
forma desiderata. Gli scenari descritti in questo articolo sono esempi che illustrano come gli utenti possono
usare Power Query per trasformare i dati non elaborati in importanti informazioni aziendali utili.
Utilizzo dell'elenco dei passaggi applicati
07/12/2021 • 2 minutes to read

Tutte le trasformazioni ai dati verranno mostrate nell'elenco Passaggi applicati. Ad esempio, se si modifica il
nome della prima colonna, verrà visualizzato nell'elenco Passaggi applicati come Colonne rinominate .

Se si seleziona un passaggio, verranno visualizzati i risultati di quel particolare passaggio, in modo da


visualizzare esattamente come cambiano i dati quando si aggiungono passaggi alla query.

Accedere all'elenco Passaggi applicati


Selezionare la scheda Visualizza sulla barra multifunzione e quindi selezionare Quer y Impostazioni .

Il menu Impostazioni query si aprirà a destra con l'elenco Passaggi applicati.


Passaggio Rinomina
Per rinominare un passaggio, fare clic con il pulsante destro del mouse sul passaggio e scegliere Rinomina .

Immettere il nome desiderato e quindi premere INVIO o fare clic all'indietro nel passaggio.

Eliminare un passaggio
Per eliminare un passaggio, fare clic con il pulsante destro del mouse sul passaggio e scegliere Elimina.
In alternativa, selezionare la x accanto al passaggio.

Elimina fino alla fine


Per eliminare una serie di passaggi, fare clic con il pulsante destro del mouse sul primo passaggio della serie e
scegliere Elimina fino alla fine. Questa azione eliminerà il passaggio selezionato e tutti i passaggi successivi.

Selezionare Elimina nella nuova finestra.


L'immagine seguente mostra l'elenco Passaggi applicati dopo l'uso di Elimina fino alla fine.

Inserisci passaggio dopo


Per aggiungere un nuovo passaggio, fare clic con il pulsante destro del mouse sull'ultimo passaggio nell'elenco
e scegliere Inserisci passaggio dopo .

Per inserire un nuovo passaggio intermedio, fare clic con il pulsante destro del mouse su un passaggio e
scegliere Inserisci passaggio dopo . Selezionare quindi Inserisci nella nuova finestra.
Per impostare una trasformazione per il nuovo passaggio, selezionare il nuovo passaggio nell'elenco e
apportare la modifica ai dati. La trasformazione verrà collegata automaticamente al passaggio selezionato.

Sposta passaggio
Per spostare un passaggio verso l'alto di una posizione nell'elenco, fare clic con il pulsante destro del mouse sul
passaggio e scegliere Sposta su.

Per spostare un passaggio verso il basso di una posizione nell'elenco, fare clic con il pulsante destro del mouse
sul passaggio e scegliere Sposta giù.
In alternativa, o per spostare più di una singola posizione, trascinare e rilasciare il passaggio nella posizione
desiderata.

Estrarre i passaggi precedenti nella query


È anche possibile separare una serie di trasformazioni in una query diversa. In questo modo è possibile fare
riferimento alla query per altre origini, operazione che può essere utile se si sta tentando di applicare la stessa
trasformazione a più set di dati. Per estrarre tutti i passaggi precedenti in una nuova query, fare clic con il
pulsante destro del mouse sul primo passaggio che non si vuole includere nella query e scegliere Estrai
precedente.
Assegnare un nome alla nuova query e selezionare OK. Per accedere alla nuova query, passare al riquadro
Quer y sul lato sinistro della schermata.

Modificare i nomi dei passaggi e le relative descrizioni


Per modificare il passaggio, fare clic con il pulsante destro del mouse sul passaggio e scegliere Proprietà .

Nella finestra è possibile modificare il nome e la descrizione del passaggio e salvare le modifiche selezionando
OK.
NOTE
L'aggiunta di una descrizione a un passaggio aggiungerà una piccola icona accanto al passaggio per indicare che il
passaggio ha una descrizione. È possibile passare il mouse su questa icona per visualizzare la descrizione come descrizione
comando.
Panoramica della valutazione delle query e del
ripiegamento delle query Power Query
07/12/2021 • 8 minutes to read

Questo articolo offre una panoramica di base del modo in cui le query M vengono elaborate e trasformate in
richieste di origine dati.

Power Query script M


Qualsiasi query, creata da Power Query, scritta manualmente dall'utente nell'editor avanzato o immessa usando
un documento vuoto, è costituita da funzioni e sintassidel linguaggio della formula Power Query M . Questa
query viene interpretata e valutata dal motore Power Query per l'output dei risultati. Lo script M funge da set di
istruzioni necessarie per valutare la query.

TIP
È possibile pensare allo script M come a una ricetta che descrive come preparare i dati.

Il modo più comune per creare uno script M è usare l'editor di Power Query. Ad esempio, quando ci si connette
a un'origine dati, ad esempio un database SQL Server, si noterà sul lato destro dello schermo che è presente una
sezione denominata passaggi applicati. In questa sezione vengono visualizzati tutti i passaggi o le trasformazioni
usati nella query. In questo senso, l'editor di Power Query funge da interfaccia per creare lo script M appropriato
per le trasformazioni che si stanno cercando e garantisce che il codice in uso sia valido.

NOTE
Lo script M viene usato nell'editor Power Query per:
Visualizzare la query come una serie di passaggi e consentire la creazione o la modifica di nuovi passaggi.
Visualizzare una visualizzazione diagramma.
L'immagine precedente evidenzia la sezione passaggi applicati, che contiene i passaggi seguenti:
Source : consente di stabilire la connessione all'origine dati. In questo caso, si tratta di una connessione a un
database SQL Server database.
Navigazione: consente di passare a una tabella specifica nel database.
Rimosse altre colonne: seleziona le colonne della tabella da mantenere.
Righe ordinate: ordina la tabella usando una o più colonne.
Righe principali mantenute: filtra la tabella in modo da mantenere solo un determinato numero di righe
dalla parte superiore della tabella.
Questo set di nomi di passaggio è un modo semplice per visualizzare lo script M Power Query creato
automaticamente. Esistono diversi modi per visualizzare lo script M completo. In Power Query, è possibile
selezionare Editor avanzato nella scheda Visualizza. È anche possibile selezionare Editor avanzato dal
gruppo Quer y nella scheda Home. In alcune versioni di Power Query, è anche possibile modificare la
visualizzazione della barra della formula per visualizzare lo script di query nella scheda Visualizza e nel gruppo
Layout selezionare Script visualizzazione Script Query > .
La maggior parte dei nomi trovati nel riquadro Passaggi applicati viene usata anche come nello script M. I
passaggi di una query vengono denominati usando un elemento denominato identificatori nel linguaggio M. A
volte i caratteri aggiuntivi vengono racchiusi tra i nomi dei passaggi in M, ma questi caratteri non vengono
visualizzati nei passaggi applicati. Un esempio è #"Kept top rows" , che viene categorizzato come identificatore
tra virgolette a causa di questi caratteri aggiuntivi. Un identificatore tra virgolette può essere usato per
consentire l'uso di qualsiasi sequenza di zero o più caratteri Unicode come identificatore, tra cui parole chiave,
spazi vuoti, commenti, operatori e segni di punteggiatura. Per altre informazioni sugli identificatori nel
linguaggio M, vedere struttura lessicale.
Qualsiasi modifica apportata alla query tramite l'editor Power Query aggiornerà automaticamente lo script M
per la query. Ad esempio, se si usa l'immagine precedente come punto di partenza, se si modifica il nome del
passaggio Delle prime righe mantenute in primi 20 righe, questa modifica verrà aggiornata automaticamente
nella visualizzazione script.

Sebbene sia consigliabile usare l'editor di Power Query per creare tutto o la maggior parte dello script M, è
possibile aggiungere o modificare manualmente parti dello script M. Per altre informazioni sulla lingua M,
visitare il sito della documentazione ufficiale per la lingua M.
NOTE
Lo script M, detto anche codice M, è un termine usato per qualsiasi codice che usa il linguaggio M. Nel contesto di questo
articolo, lo script M fa anche riferimento al codice presente all'interno di una query Power Query e accessibile tramite la
finestra dell'editor avanzata o tramite la visualizzazione script nella barra della formula.

Valutazione delle query in Power Query


Il diagramma seguente illustra il processo che si verifica quando una query viene valutata in Power Query.

1. Lo script M, disponibile all'interno dell'editor avanzato, viene inviato al motore Power Query motore. Sono
incluse anche altre informazioni importanti, ad esempio le credenziali e i livelli di privacy delle origini dati.
2. Power Query determina quali dati devono essere estratti dall'origine dati e invia una richiesta all'origine dati.
3. L'origine dati risponde alla richiesta Power Query trasferendo i dati richiesti Power Query.
4. Power Query riceve i dati in ingresso dall'origine dati ed esegue eventuali trasformazioni usando il motore di
Power Query, se necessario.
5. I risultati derivati dal punto precedente vengono caricati in una destinazione.

NOTE
Mentre questo esempio illustra una query con un database SQL come origine dati, il concetto si applica alle query con o
senza un'origine dati.

Quando Power Query legge lo script M, esegue lo script tramite un processo di ottimizzazione per valutare in
modo più efficiente la query. In questo processo determina quali passaggi (trasformazioni) dalla query possono
essere scaricati nell'origine dati. Determina anche quali altri passaggi devono essere valutati usando Power
Query motore. Questo processo di ottimizzazione è denominato query folding, in cui Power Query tenta di
eseguire il push della maggior parte della possibile esecuzione nell'origine dati per ottimizzare l'esecuzione
della query.
IMPORTANT
Vengono seguite tutte le regole Power Query linguaggio della formula M (noto anche come linguaggio M). In particolare,
la valutazione differita svolge un ruolo importante durante il processo di ottimizzazione. In questo processo Power Query
quali trasformazioni specifiche della query devono essere valutate. Power Query anche quali altre trasformazioni non
devono essere valutate perché non sono necessarie nell'output della query.
Inoltre, quando sono coinvolte più origini, il livello di privacy dei dati di ogni origine dati viene preso in considerazione
durante la valutazione della query. Altre informazioni: Dietro le quinte di Data Privacy Firewall

Il diagramma seguente illustra i passaggi che vengono esersi in questo processo di ottimizzazione.

1. Lo script M, disponibile all'interno dell'editor avanzato, viene inviato al motore Power Query motore.
Vengono fornite anche altre informazioni importanti, ad esempio le credenziali e i livelli di privacy delle
origini dati.
2. Il meccanismo di folding delle query invia richieste di metadati all'origine dati per determinare le funzionalità
dell'origine dati, gli schemi di tabella, le relazioni tra entità diverse nell'origine dati e altro ancora.
3. In base ai metadati ricevuti, il meccanismo di folding delle query determina quali informazioni estrarre
dall'origine dati e quale set di trasformazioni deve essere eseguita all'interno del motore Power Query dati.
Invia le istruzioni ad altri due componenti che si occupano del recupero dei dati dall'origine dati e della
trasformazione dei dati in ingresso nel motore di Power Query, se necessario.
4. Dopo che le istruzioni sono state ricevute dai componenti interni di Power Query, Power Query invia una
richiesta all'origine dati usando una query sull'origine dati.
5. L'origine dati riceve la richiesta dal Power Query e trasferisce i dati al motore Power Query dati.
6. Quando i dati sono all'interno di Power Query, il motore di trasformazione all'interno di Power Query (noto
anche come motore mashup) esegue le trasformazioni che non è stato possibile ripiegare o offcaricare
nell'origine dati.
7. I risultati derivati dal punto precedente vengono caricati in una destinazione.

NOTE
A seconda delle trasformazioni e dell'origine dati usata nello script M, Power Query se verrà eseguito il flusso o il buffer
dei dati in ingresso.
Panoramica della funzionalità di ripiegamento delle query
L'obiettivo della ripiego delle query è eseguire l'offload o il push della valutazione di una query in un'origine
dati in grado di calcolare le trasformazioni della query.
Il meccanismo di folding delle query raggiunge questo obiettivo traducendo lo script M in un linguaggio che
può essere interpretato ed eseguito dall'origine dati. Quindi inserisce la valutazione nell'origine dati e invia il
risultato di tale valutazione Power Query.
Questa operazione offre spesso un'esecuzione di query molto più veloce rispetto all'estrazione di tutti i dati
necessari dall'origine dati e all'esecuzione di tutte le trasformazioni necessarie nel motore Power Query dati.
Quando si usa l'esperienzaottieni dati, Power Query guida l'utente nel processo che consente di connettersi
all'origine dati. In questo caso, Power Query una serie di funzioni nel linguaggio M classificate come funzioni di
accesso ai dati. Queste funzioni specifiche usano meccanismi e protocolli per connettersi all'origine dati usando
un linguaggio comprensibile per l'origine dati.
Tuttavia, i passaggi che seguono nella query sono i passaggi o le trasformazioni che il meccanismo di folding
delle query tenta di ottimizzare. Verifica quindi se possono essere scaricati nell'origine dati anziché essere
elaborati usando il motore Power Query dati.

IMPORTANT
Tutte le funzioni dell'origine dati, comunemente visualizzate come passaggio Origine di una query, esere query sui dati
nell'origine dati nel linguaggio nativo. Il meccanismo di ripiegamento delle query viene utilizzato in tutte le trasformazioni
applicate alla query dopo la funzione dell'origine dati, in modo che possano essere convertite e combinate in una singola
query di origine dati o in tutte le trasformazioni che possono essere scaricate nell'origine dati.

A seconda della struttura della query, il meccanismo di folding delle query può avere tre possibili risultati:
Ripiegamento completo delle query: quando viene eseguito il push di tutte le trasformazioni di query
nell'origine dati e si verifica un'elaborazione minima nel motore Power Query dati.
Ripiegamento parziale delle query: quando è possibile eseguire il push all'origine dati solo di alcune
trasformazioni nella query e non di tutte. In questo caso, nell'origine dati viene eseguito solo un subset delle
trasformazioni e il resto delle trasformazioni di query si verifica nel motore Power Query dati.
Nessuna ripiegamento query: quando la query contiene trasformazioni che non possono essere convertite
nel linguaggio di query nativo dell'origine dati, perché le trasformazioni non sono supportate o il connettore
non supporta la riduplicazione delle query. In questo caso, Power Query i dati non elaborati dall'origine dati
e usa il motore Power Query per ottenere l'output desiderato elaborando le trasformazioni necessarie a
livello di Power Query motore.

NOTE
Il meccanismo di folding delle query è disponibile principalmente nei connettori per le origini dati strutturate, ad esempio,
Microsoft SQL Server feed OData. Durante la fase di ottimizzazione, il motore potrebbe talvolta riordinare i passaggi nella
query.
L'uso di un'origine dati con più risorse di elaborazione e funzionalità di folding delle query può velocizzare i tempi di
caricamento delle query quando l'elaborazione avviene nell'origine dati e non nel motore Power Query dati.

Passaggi successivi
Per esempi dettagliati dei tre possibili risultati del meccanismo di folding delle query, vedere Esempi di folding
delle query.
Esempi di folding delle query
07/12/2021 • 17 minutes to read

Questo articolo fornisce alcuni scenari di esempio per ognuno dei tre possibili risultati per la visualizzazione
delle query. Include anche alcuni suggerimenti su come ottenere il massimo dal meccanismo di ripiegamento
delle query e sull'effetto che può avere nelle query.

Scenario
Imagine uno scenario in cui, usando il database Wide World Importersper il database Azure Synapse Analytics
SQL , si ha l'attività di creazione di una query in Power Query che si connette alla tabella e recupera le ultime 10
vendite con solo i fact_Sale campi seguenti:
Chiave di vendita
Customer Key
Chiave data fattura
Descrizione
Quantità

NOTE
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 tabella contiene solo dati per
l'anno 2000, per un totale di fact_Sale 3.644.356 righe.
Anche se i risultati potrebbero non corrispondere esattamente ai risultati ottenuti seguendo l'esercitazione riportata nella
documentazione di Azure Synapse Analytics, l'obiettivo di questo articolo è illustrare i concetti di base e l'impatto che la
funzionalità di folding delle query può avere nelle query.

Questo articolo illustra tre modi per ottenere lo stesso output con diversi livelli di ripiegamento delle query:
Nessuna ripiegamento delle query
Ripiegamento parziale delle query
Ripiegamento completo delle query

Nessun esempio di ripiegamento delle query


IMPORTANT
Le query che si basano esclusivamente su origini dati non strutturate o che non hanno un motore di calcolo, ad esempio
file CSV o Excel, non hanno funzionalità di folding delle query. Ciò significa che Power Query valuta tutte le trasformazioni
dei dati necessarie usando il motore Power Query dati.

Dopo la connessione al database e l'esplorazione della tabella, selezionare la trasformazione Mantieni righe in
basso disponibile nel gruppo Riduci righe fact_Sale 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.

TIP
In questo caso, l'esecuzione di questa operazione restituisce il risultato delle ultime dieci vendite. Nella maggior parte degli
scenari è consigliabile fornire una logica più esplicita che definisce le righe considerate ultime applicando un'operazione di
ordinamento sulla tabella.

Selezionare quindi la trasformazione Scegli colonne disponibile nel gruppo Gestisci colonne della scheda
Home. È quindi possibile selezionare le colonne da mantenere dalla tabella e rimuovere le altre.
Infine, nella finestra di dialogo Scegli colonne selezionare le colonne , , , e e quindi selezionare Sale Key
Customer Key Invoice Date Key Description Quantity 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 ripiegamento delle query: informazioni sulla valutazione della query


In Passaggi applicati nell'editor Power Query si noterà che gli indicatori di ripiegamento dei passaggi per Le
righe inferiore mantenute e Scegli colonne sono contrassegnati come passaggi che verranno 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 quer y . 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 soddisfare questa query. I nodi che rappresentano origini dati, ad esempio SQL Server
nell'esempio precedente e il nodo , rappresentano la parte della query che viene Value.NativeQuery caricata
nell'origine dati. Gli altri nodi, in questo caso evidenziati nel rettangolo nell'immagine precedente, vengono
valutati dal motore Table.LastN Table.SelectColumns Power Query dati. Questi due nodi rappresentano le due
trasformazioni aggiunte, Righe in basso mantenute e Scegli colonne . Gli altri nodi rappresentano le
operazioni che si verificano 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 è nel linguaggio nativo dell'origine dati. In questo caso, tale lingua è SQL e
questa istruzione rappresenta una richiesta per tutte le righe e i campi della fact_Sale tabella.
La consulenza di questa richiesta di origine dati consente di comprendere meglio la storia che il piano di query
tenta 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 dal 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 fact_Sale tabella. Per questo scenario, questo caso è indesiderato, perché la tabella
contiene milioni di righe e l'interesse è solo nelle ultime 10.
Table.LastN : dopo Power Query tutti i record dalla tabella, usa il motore Power Query per filtrare la tabella e
mantenere solo le fact_Sale ultime 10 righe.
Table.SelectColumns : Power Query verrà utilizzato l'output del nodo e verrà applicata una nuova
trasformazione denominata , che seleziona le colonne specifiche che si desidera mantenere Table.LastN
Table.SelectColumns da una tabella.

Per la valutazione, questa query doveva scaricare tutte le righe e i campi dalla fact_Sale tabella. Questa query
ha richiesto in media 3 minuti e 4 secondi per l'elaborazione in un'istanza standard di flussi di dati Power BI (che
rappresenta la valutazione e il caricamento dei dati nei flussi di dati).

Esempio di folding parziale delle query


Dopo la connessione al database e l'esplorazione della tabella, è necessario selezionare le colonne che si
fact_Sale desidera mantenere dalla tabella. Selezionare la trasformazione Scegli colonne disponibile nel
gruppo Gestisci colonne della scheda Home. Questa trasformazione consente di selezionare in modo esplicito
le colonne che si desidera mantenere dalla tabella e rimuovere le altre.
Nella finestra di dialogo Scegli colonne selezionare le colonne , , , e e quindi selezionare Sale Key
Customer Key Invoice Date Key Description Quantity OK.

A questo punto si crea la logica che ordina la tabella in modo che abbia le ultime vendite nella parte inferiore
della tabella. 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 righe in basso.

In Mantieni le righe in basso 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 folding parziale delle query: Informazioni sulla valutazione della query
Controllando il riquadro dei passaggi applicati, si noterà che gli indicatori di ripiegamento dei passaggi
mostrano che l'ultima trasformazione aggiunta, , è contrassegnata come un passaggio che verrà valutato
all'esterno dell'origine dati o, in altre parole, dal motore Kept bottom rows Power Query.

È possibile fare clic con il pulsante destro del mouse sull'ultimo passaggio della query, quello denominato , e
selezionare l'opzione Piano di query per comprendere meglio come valutare Kept bottom rows la query.
Ogni casella nell'immagine precedente è denominata nodo. Un nodo rappresenta ogni processo che deve essere
eseguita (da sinistra a destra) per la valutazione della query. Alcuni di questi nodi possono essere valutati
nell'origine dati, mentre altri, ad esempio il nodo per , rappresentato dal passaggio Righe inferiore mantenute,
vengono valutati usando il motore Power Query Table.LastN dati.
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 lingua è SQL e questa istruzione
rappresenta una richiesta per tutte le righe, con solo i campi richiesti della tabella ordinati in base fact_Sale al
Sale Key campo.

La consulenza di questa richiesta di origine dati consente di comprendere meglio la storia che il piano di query
completo tenta di trasmettere. 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 dal 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, con solo i campi richiesti della tabella nel database ordinati in ordine crescente fact_Sale in base al
Sales Key campo.
Table.LastN : dopo Power Query tutti i record dalla tabella, usa il motore Power Query per filtrare la tabella e
mantenere solo le fact_Sale ultime 10 righe.

Per la valutazione, questa query doveva scaricare tutte le righe e solo i campi obbligatori dalla fact_Sale
tabella. L'elaborazione di una media di 3 minuti e 4 secondi in un'istanza standard di flussi di dati Power BI ( che
rappresenta la valutazione e il caricamento dei dati nei flussi di dati).

Esempio di folding completo della query


Dopo la connessione al database e il passaggio alla tabella, iniziare selezionando le colonne da fact_Sale
mantenere nella tabella. Selezionare la trasformazione Scegli colonne disponibile nel gruppo Gestisci
colonne della scheda Home. Questa trasformazione consente di selezionare in modo esplicito le colonne che si
desidera mantenere dalla tabella e rimuovere le altre.
In Scegli colonne selezionare le colonne , , , e e quindi selezionare Sale Key Customer Key Invoice Date Key
Description Quantity OK.

A questo punto si crea la logica per ordinare la tabella in modo da avere le ultime vendite nella parte superiore
della tabella. Consente di Sale Key selezionare la colonna, ovvero la chiave primaria e la sequenza incrementale
o l'indice della tabella. Ordinare la tabella solo usando questo campo in ordine decrescente dal menu di scelta
rapida per la colonna.
Selezionare quindi il menu di scelta rapida 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 folding completo della query: Informazioni sulla valutazione della query
Quando si controlla il riquadro dei passaggi applicati, si noterà che gli indicatori di folding dei passaggi
mostrano che le trasformazioni aggiunte, scegliere le colonne , le righe ordinate e le righe principali mantenute
sono contrassegnate come passaggi che verranno valutati nell'origine dati.

È possibile fare clic con il pulsante destro del mouse sull'ultimo passaggio della query, denominato Righe
principali mantenute , e selezionare l'opzione Piano di quer y .
Questa richiesta è nel linguaggio nativo dell'origine dati. In questo caso, tale lingua è SQL e questa istruzione
rappresenta una richiesta per tutte le righe e i campi della fact_Sale tabella.
Consultando questa query sull'origine dati è possibile comprendere meglio la storia che il piano di query
completo tenta di comunicare:
Sql.Database : si connette al database e invia richieste di metadati per comprenderne le funzionalità.
Value.NativeQuery : rappresenta la richiesta generata dal 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 una richiesta
solo per i primi 10 record della tabella, con solo i campi obbligatori dopo l'ordinamento decrescente usando
fact_Sale il Sale Key campo .

NOTE
Anche se non è disponibile alcuna clausola che può essere usata per selezionare le prime righe di una tabella nel
linguaggio T-SQL, esiste una clausola TOP che recupera le prime righe di una tabella.

Per la valutazione, questa query scarica solo 10 righe, con solo i campi richiesti dalla fact_Sale tabella.
L'elaborazione di questa query ha richiesto in media 31 secondi in un'istanza standard di flussi di dati Power BI (
che rappresenta la valutazione e il caricamento dei dati nei flussi di dati).

Confronto delle prestazioni


Per comprendere meglio l'effetto della query di folding in queste query, è possibile aggiornare le query,
registrare il tempo necessario per aggiornare completamente ogni query e confrontarle. Per semplicità, questo
articolo fornisce gli intervalli medi di aggiornamento acquisiti usando il meccanismo 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 era la seguente:

ESEM P IO ET IC H ET TA T EM P O IN SEC O N DI

Nessuna ripiegamento della query Nessuno 361

Folding parziale della query Partial 184

Folding completo della query Full 31

Spesso una query che si rilasci completamente all'origine dati supera le prestazioni di query simili che non si
rilascino completamente all'origine dati. Questo può essere il motivo per cui questo è il caso. Questi motivi
vanno dalla complessità delle trasformazioni eseguite dalla query alle ottimizzazioni delle query implementate
nell'origine dati, ad esempio indici, elaborazione dedicata e risorse di rete. Esistono comunque due processi
chiave specifici che la riduzione delle query tenta di usare per ridurre al minimo l'impatto di entrambi i processi
con Power Query:
Dati in transito
Trasformazioni eseguite dal motore Power Query
Le sezioni seguenti illustrano l'effetto di questi due processi nelle query indicate in precedenza.
Dati in transito
Quando viene eseguita una query, tenta di recuperare i dati dall'origine dati come uno dei primi passaggi. I dati
recuperati dall'origine dati sono definiti dal meccanismo di definizione della query. Questo meccanismo
identifica i passaggi della query che possono essere scaricati nell'origine dati.
Nella tabella seguente viene elencato 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.

ESEM P IO ET IC H ET TA RIGH E RIC H IEST E DESC RIZ IO N E


ESEM P IO ET IC H ET TA RIGH E RIC H IEST E DESC RIZ IO N E

Nessuna ripiegamento della Nessuno 3644356 Richiesta per tutti i campi e


query tutti i record della
fact_Sale tabella

Folding parziale della query Partial 3644356 Richiesta di tutti i record,


ma solo dei campi
obbligatori della
fact_Sale tabella dopo
l'ordinamento in base al
Sale Key campo

Folding completo della Full 10 Richiedere solo i campi


query obbligatori e i primi 10
record della tabella dopo
l'ordinamento decrescente
fact_Sale in base al
Sale Key campo

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 per lo
spostamento dei dati dall'origine dati a Power Query e quindi Power Query essere in grado di ricevere i dati in
modo efficace e prepararli per le trasformazioni che verranno esercite in locale possono richiedere tempo a
seconda delle dimensioni dei dati.
Per gli esempi presentati, Power Query è stato necessario richiedere più di 3,6 milioni di righe dall'origine dati
per gli esempi di query di tipo no query folding e partial query folding. Per l'esempio completo di folding della
query, sono richieste solo 10 righe. Per i campi richiesti, l'esempio no query folding ha richiesto tutti i campi
disponibili dalla tabella. Sia la query parziale che l'intero esempio di definizione della query hanno inviato solo
una richiesta per i campi necessari.
Cau t i on

È consigliabile implementare soluzioni di aggiornamento incrementale che sfruttano la funzionalità di folding


delle query per query o entità con grandi quantità di dati. Integrazioni di prodotti diverse di Power Query i
timeout per terminare le query a esecuzione lunga. Alcune origini dati implementano anche timeout nelle
sessioni a esecuzione lunga, tentando di eseguire query dispendiose sui server. Altre informazioni: Uso
dell'aggiornamento incrementale con i flussi di dati e Aggiornamento incrementale per i set di dati
Trasformazioni eseguite dal motore Power Query
Questo articolo ha illustrato come usare il piano di query per comprendere meglio come valutare la query.
All'interno del piano di query è possibile visualizzare i nodi esatti delle operazioni di trasformazione che
verranno eseguite dal motore Power Query query.
La tabella seguente illustra i nodi dei piani di query delle query precedenti che sarebbero stati valutati dal
motore Power Query dati.

P O W ER Q UERY N O DI DI
ESEM P IO ET IC H ET TA T RA SF O RM A Z IO N E DEL M OTO RE

Nessuna ripiegamento della query Nessuno Table.LastN ,


Table.SelectColumns

Folding parziale della query Partial Table.LastN

Folding completo della query Full —

Per gli esempi presentati in questo articolo, l'esempio completo di trasformazione della query non richiede
l'esecuzione di trasformazioni all'interno del motore Power Query perché la tabella di output richiesta proviene
direttamente dall'origine dati. Al contrario, le altre due query richiedono che alcuni calcoli avvengano Power
Query motore. A causa della quantità di dati che devono essere elaborati da queste due query, il processo per
questi esempi richiede più tempo rispetto all'esempio di compilazione della query completa.
Le trasformazioni possono essere raggruppate nelle categorie seguenti:

T IP O DI O P ERATO RE DESC RIZ IO N E

Gestione remota Operatori che sono nodi dell'origine dati. La valutazione di


questi operatori avviene al di fuori Power Query.
T IP O DI O P ERATO RE DESC RIZ IO N E

Streaming Gli operatori sono operatori pass-through. Ad esempio, con


un filtro semplice è in genere possibile filtrare i risultati
mentre passano attraverso l'operatore e non sarà necessario
raccogliere tutte le righe prima di Table.SelectRows
spostare i dati. Table.SelectColumns e
Table.ReorderColumns sono altri esempi di questo tipo di
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 necessario
raccogliere tutti i dati. Altri esempi di operatori di analisi
completa Table.Group sono Table.NestedJoin , e
Table.Pivot .

TIP
Anche se non tutte le trasformazioni sono le stesse dal punto di vista delle prestazioni, nella maggior parte dei casi è in
genere meglio avere un numero inferiore di trasformazioni.

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 folding dei passaggi per verificare quali passaggi impediscono la ripiegamento della
query. Riordinarli se necessario per aumentare la fase di ordinamento.
Usare il piano di query per determinare le trasformazioni in corso nel motore Power Query per un
particolare passaggio. Provare a modificare la query esistente riorganendo i passaggi. Controllare quindi di
nuovo il piano di query dell'ultimo passaggio della query e verificare se il piano di query ha un aspetto
migliore rispetto a quello precedente. Ad esempio, il nuovo piano di query ha meno nodi rispetto a quello
precedente e la maggior parte dei nodi è "Streaming" e non "analisi completa". Per le origini dati che
supportano la folding, tutti i nodi del piano di query diversi da e i nodi di accesso all'origine dati
rappresentano trasformazioni Value.NativeQuery che non sono stati rilevati.
Quando disponibile, è possibile usare l'opzione Visualizza query nativa (o Visualizza quer y origine dati ) per
assicurarsi che la query possa essere rilevata nell'origine dati. Se questa opzione è disabilitata per il
passaggio e si usa un'origine che in genere la abilita, è stato creato un passaggio che interrompe la
visualizzazione della query. Se si usa un'origine che non supporta questa opzione, è possibile fare
affidamento sugli indicatori di folding dei passaggi 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 configurazione delle query per il connettore.
Quando si combinano dati provenienti dall'uso di più connettori, Power Query tenta di eseguire il push del
maggior lavoro possibile per 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 l'esecuzione delle query da un errore del firewall sulla
privacy dei dati.
Usare altri strumenti per controllare la visualizzazione della query dal punto di vista della richiesta ricevuta
dall'origine dati. In base all'esempio riportato in questo articolo, è possibile usare Microsoft SQL Server
Profiler per controllare le richieste inviate Power Query e ricevute dal Microsoft SQL Server.
Se si aggiunge un nuovo passaggio a una query completamente concisa e anche il nuovo passaggio si rilevi,
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 richiede più tempo del previsto per l'aggiornamento
nell'anteprima. Questo aggiornamento più lungo è dovuto Power Query eseguire di nuovo una query
sull'origine dati anziché utilizzare una copia locale dei dati.
Utilizzo degli strumenti di profilatura dei dati
07/12/2021 • 2 minutes to read

Gli strumenti di profilatura dei dati offrono modi nuovi e intuitivi per pulire, trasformare e comprendere i dati in
editor di Power Query. e comprendono:
Colonna qualità
Colonna distribuzione
Profilo colonna
Per abilitare gli strumenti di profilatura dei dati, passare alla scheda Visualizza sulla barra multifunzione.
Abilitare le opzioni desiderate nel gruppo Anteprima dati, come illustrato nell'immagine seguente.

Dopo aver abilitato le opzioni, verrà visualizzata un'immagine simile alla seguente in editor di Power Query.

NOTE
Per impostazione predefinita, Power Query la profilatura dei dati nelle prime 1.000 righe dei dati. Per fare in modo che
funzioni sull'intero set di dati, controllare l'angolo inferiore sinistro della finestra dell'editor per modificare la modalità di
esecuzione della profilatura delle colonne.

Colonna qualità
La funzionalità di qualità della colonna etichetta i valori in righe in cinque categorie:
Valido, visualizzato in verde.
Errore , visualizzato in rosso.
Vuoto, visualizzato in grigio scuro.
Sconosciuto, visualizzato in verde tratteggiato. Indica quando sono presenti errori in una colonna, la
qualità dei dati rimanenti è sconosciuta.
Errore imprevisto, visualizzato in rosso tratteggiato.
Questi indicatori vengono visualizzati direttamente sotto il nome della colonna come parte di un piccolo grafico
a barre, come illustrato nell'immagine seguente.

Anche il numero di record in ogni categoria di qualità della colonna viene visualizzato come percentuale.
Passando il puntatore del mouse su una delle colonne, viene visualizzata la distribuzione numerica della qualità
dei valori in tutta la colonna. Inoltre, selezionando il pulsante con i puntini di sospensione (...) vengono
visualizzati alcuni pulsanti di azione rapida per le operazioni sui valori.
Colonna distribuzione
Questa funzionalità fornisce un set di oggetti visivi sotto i nomi delle colonne che illustrano la frequenza e la
distribuzione dei valori in ognuna delle colonne. I dati in queste visualizzazioni vengono ordinati in ordine
decrescente rispetto al valore con la frequenza più alta.

Passando il puntatore del mouse sui dati di distribuzione in una delle colonne, si ottengono informazioni sui dati
complessivi nella colonna (con conteggio distinct e valori univoci). È anche possibile selezionare il pulsante con i
puntini di sospensione e scegliere da un menu di operazioni disponibili.
Profilo colonna
Questa funzionalità offre un'analisi più approfondita dei dati in una colonna. Oltre all'istogramma di
distribuzione, contiene un istogramma di statistiche. Queste informazioni vengono visualizzate sotto la sezione
di anteprima dei dati, come illustrato nell'immagine seguente.

Filtrare in base al valore


È possibile interagire con il grafico di distribuzione dei valori sul lato destro e selezionare una delle barre
passando il puntatore del mouse sulle parti del grafico.
Fare clic con il pulsante destro del mouse per visualizzare un set di trasformazioni disponibili per tale valore.

Copiare i dati
Nell'angolo superiore destro delle sezioni statistiche colonna e distribuzione dei valori è possibile selezionare il
pulsante con i puntini di sospensione (...) per visualizzare un menu di scelta rapida Copia. Selezionarlo per
copiare negli Appunti i dati visualizzati in una delle due sezioni.

Raggruppa per valore


Quando si seleziona il pulsante con i puntini di sospensione (...) nell'angolo superiore destro del grafico di
distribuzione dei valori, oltre a Copia è possibile selezionare Raggruppa per . Questa funzionalità raggruppa i
valori nel grafico in base a un set di opzioni disponibili.
L'immagine seguente mostra una colonna di nomi di prodotti raggruppati in base alla lunghezza del testo. Dopo
aver raggruppato i valori nel grafico, è possibile interagire con i singoli valori nel grafico come descritto in
Filtrarein base al valore .
Utilizzo del riquadro Query
07/12/2021 • 3 minutes to read

In Power Query verranno create molte query diverse. Indipendentemente dal recupero di dati da molte tabelle o
dalla duplicazione della query originale, il numero di query aumenta.
Si usa il riquadro Quer y per spostarsi tra le query.

Esplorazione con il riquadro Query


L'utilizzo più semplice del riquadro Quer y è passare a tutte le query. La navigazione è simile a esplora file. Per
passare da una query all'altro, è sufficiente selezionare la query a cui si vuole passare.

NOTE
Alcune azioni nell'editor Power Query Online possono essere diverse da quelle nell'editor Power Query Desktop. Queste
differenze verranno notate in questo articolo.

Azioni di base nel riquadro Query


Analogamente alle funzionalità della barra multifunzione e dell'editor, il menu di scelta rapida di una query
consente di eseguire trasformazioni direttamente nella query.
Per raggiungere queste azioni, aprire il menu di scelta rapida (menu di scelta rapida) nel riquadro Quer y.
Differenze tra online e desktop:
Power Query Online
Power Query Desktop

Per essere più completi, verranno toccate tutte le azioni del menu di scelta rapida rilevanti per entrambe.
Rinominare una query
Per modificare direttamente il nome della query, fare doppio clic sul nome della query. Questa azione consentirà
di modificare immediatamente il nome.
Altre opzioni per rinominare la query sono:
Passare al menu di scelta rapida e selezionare Rinomina .
Passare a Quer y Impostazioni immettere un nome diverso nel campo di input Nome.

Eliminare una query


Per eliminare una query, aprire il riquadro di contesto della query e selezionare Elimina . Verrà visualizzato un
popup aggiuntivo che conferma l'eliminazione. Per completare l'eliminazione, selezionare il pulsante Elimina.

Duplicazione di una query


La duplicazione di una query creerà una copia della query che si sta selezionando.
Per duplicare la query, aprire il riquadro di contesto della query e selezionare Duplica . Sul lato del riquadro di
query verrà visualizzata una nuova query duplicata.
Riferimento a una query
Facendo riferimento a una query verrà creata una nuova query. La nuova query usa i passaggi di una query
precedente senza dover duplicare la query. Inoltre, tutte le modifiche apportate alla query originale verranno
trasferite alla query a cui si fa riferimento.
Per fare riferimento alla query, aprire il riquadro di contesto della query e selezionare Riferimento . Sul lato del
riquadro di query verrà visualizzata una nuova query a cui si fa riferimento.

Copiare e incollare
Copia e incolla può essere usato quando si dispone di una query copiata da inserire nell Power Query editor.

NOTE
Per altre informazioni su come copiare e incollare query in Power Query, vedere Condivisione di una query.

Opzioni del riquadro Contesto nel riquadro Query


Nel riquadro Query sono disponibili alcune opzioni aggiuntive del riquadro Di contesto che è possibile usare.
Queste opzioni sono Nuova quer y , Query di merge , Nuovo parametro e Nuovo gruppo .
Per accedere a queste opzioni, aprire il menu di scelta rapida (menu di scelta rapida) nel riquadro Query.
Differenze tra online e desktop:
Power Query Online

Power Query Desktop

Per essere più completi, verranno descritte ancora una volta tutte le azioni del menu di scelta rapida rilevanti per
entrambe.
Nuova query
È possibile importare dati nell'editor Power Query come opzione dal menu di scelta rapida.
Questa opzione funziona come la funzionalità Ottieni dati.
NOTE
Per informazioni su come ottenere dati in Power Query, vedere Recupero di dati

Unire query
Quando si seleziona l'opzione Merge queries (Unisci query) dal menu di scelta rapida, viene visualizzata la
schermata di input Merge queries (Unisci query).
Questa opzione funziona come la funzionalità Merge quer y disponibile sulla barra multifunzione e in altre aree
dell'editor.

NOTE
Per altre informazioni su come usare la funzionalità Merge di quer y, vedere Panoramica delle query di merge.

Nuovo parametro
Quando si seleziona l'opzione Nuovo parametro dal menu di scelta rapida, viene visualizzata la schermata
Di input nuovo parametro.
Questa opzione funziona come la funzionalità Nuovo parametro disponibile sulla barra multifunzione.

NOTE
Per altre informazioni sui parametri in Power Quer y, vedere Uso dei parametri.

Nuovo gruppo
È possibile creare cartelle e spostare le query all'interno e all'interno delle cartelle per scopi organizzativi.
Queste cartelle sono denominate gruppi.

Per spostare la query in un gruppo, aprire il menu di scelta rapida nella query specifica.
Nel menu selezionare Sposta nel gruppo .
Selezionare quindi il gruppo in cui si vuole inserire la query.
Lo spostamento sarà simile all'immagine seguente. Usando la stessa procedura descritta in precedenza, è anche
possibile spostare la query fuori dal gruppo selezionando Quer y (radice) o un altro gruppo.

Nelle versioni desktop di Power Query, è anche possibile trascinare e rilasciare le query nelle cartelle.
Vista diagramma
07/12/2021 • 13 minutes to read

La visualizzazione diagramma offre un modo visivo per preparare i dati nell Power Query editor. Con questa
interfaccia è possibile creare facilmente query e visualizzare il processo di preparazione dei dati. La
visualizzazione diagramma semplifica l'esperienza di introduzione a data wrangling. Velocizza il processo di
preparazione dei dati e consente di comprendere rapidamente il flusso di dati, sia la "visualizzazione generale"
del modo in cui le query sono correlate che la "visualizzazione dettagliata" dei passaggi specifici di preparazione
dei dati in una query.
Questo articolo offre una panoramica delle funzionalità fornite dalla visualizzazione diagramma.

Questa funzionalità viene abilitata selezionando Vista diagramma nella scheda Visualizza della barra
multifunzione. Con la vista diagramma abilitata, il riquadro dei passaggi e il riquadro delle query verranno
compressi.

NOTE
Attualmente, la vista diagramma è disponibile solo in Power Query Online.

Creazione di query con la vista diagramma


La visualizzazione Diagramma offre un'interfaccia visiva grafica per creare, visualizzare o modificare le query.
Nella visualizzazione diagramma è possibile connettersi a molti tipi diversi di origini dati usando l'esperienza
"Ottieni dati".
La visualizzazione Diagramma è anche connessa all'anteprima dei dati e alla barra multifunzione in modo che
sia possibile selezionare le colonne in Anteprima dati.
È possibile aggiungere un nuovo passaggio all'interno di una query, dopo il passaggio attualmente selezionato,
selezionando il pulsante e quindi cercando la trasformazione o scegliendo l'elemento dal + menu di scelta
rapida. Si tratta delle stesse trasformazioni disponibili nella barra multifunzione dell Power Query'editor.

Eseguendo una ricerca e selezionando la trasformazione dal menu di scelta rapida, il passaggio viene aggiunto
alla query, come illustrato nell'immagine seguente.

NOTE
Per altre informazioni su come creare query nell'editor di query usando la barra multifunzione dell'editor di Power Query o
l'anteprima dei dati, vedere Power Query Guida introduttiva.

Azioni a livello di query


È possibile eseguire due azioni rapide su una query — per espandere/comprimere una query ed evidenziare le
query correlate. Queste azioni rapide vengono mostrate in una query selezionata attiva o quando si passa il
mouse su una query.

È possibile eseguire altre azioni a livello di query, ad esempio duplicazione, riferimento e così via, selezionando il
menu di scelta rapida a livello di query (i tre punti verticali). È anche possibile fare clic con il pulsante destro del
mouse nella query e accedere allo stesso menu di scelta rapida.
Espandere o comprimere la query
Per espandere o comprimere una query, fare clic con il pulsante destro del mouse nella query e scegliere
Espandi/Comprimi dal menu di scelta rapida della query. È anche possibile fare doppio clic nella query per
espandere o comprimere una query.

Evidenziare le query correlate


Per visualizzare tutte le query correlate per una determinata query, fare clic con il pulsante destro del mouse in
una query e scegliere Evidenzia quer y correlate . È anche possibile selezionare il pulsante Evidenzia query
correlate in alto a destra di una query.
Ad esempio, se si seleziona il pulsante evidenzia query correlate nella query Top US Customers (Clienti
principali Stati Uniti), è possibile vedere che le query Customers e Orders sono evidenziate.

query di eliminazione
Per eliminare una query, fare clic con il pulsante destro del mouse su una query e scegliere Elimina dal menu
di scelta rapida. Verrà visualizzato un popup aggiuntivo per confermare l'eliminazione.
Rinominare la query
Per rinominare una query, fare clic con il pulsante destro del mouse su una query e scegliere Rinomina dal
menu di scelta rapida.

Abilita caricamento
Per assicurarsi che i risultati forniti dalla query siano disponibili per l'uso downstream, ad esempio la creazione
di report, per impostazione predefinita l'opzione Abilita caricamento è impostata su true. Nel caso in cui sia
necessario disabilitare il caricamento per una determinata query, fare clic con il pulsante destro del mouse in
una query e scegliere Abilita caricamento. Le query in cui Abilita caricamento è impostato su false
verranno visualizzate con un contorno grigio.
Duplicare
Per creare una copia di una determinata query, fare clic con il pulsante destro del mouse nella query e scegliere
Duplica. Nella vista diagramma verrà visualizzata una nuova query duplicata.

Riferimento
Facendo riferimento a una query verrà creata una nuova query. La nuova query userà i passaggi della query
precedente senza dover duplicare la query. Inoltre, tutte le modifiche apportate alla query originale verranno
trasferite alla query a cui si fa riferimento. Per fare riferimento a una query, fare clic con il pulsante destro del
mouse nella query e scegliere Riferimento .
Sposta nel gruppo
È possibile creare cartelle e spostare le query in queste cartelle per scopi organizzativi. Queste cartelle sono
denominate gruppi. Per spostare una determinata query in un gruppo di query, fare clic con il pulsante destro
del mouse in una query e scegliere Sposta nel gruppo . È possibile scegliere di spostare le query in un
gruppo esistente o creare un nuovo gruppo di query.

È possibile visualizzare i gruppi di query sopra la casella della query nella vista diagramma.
Creare una funzione
Quando è necessario applicare lo stesso set di trasformazioni in query o valori diversi, la creazione di funzioni
Power Query personalizzate può essere utile. Per altre informazioni sulle funzioni personalizzate, vedere Uso
delle funzioni personalizzate. Per convertire una query in una funzione riutilizzabile, fare clic con il pulsante
destro del mouse su una determinata query e scegliere Crea funzione.

Converti in parametro
Un parametro offre la flessibilità necessaria per modificare dinamicamente l'output delle query in base al
relativo valore e promuovere la riusabilità. Per convertire un valore non strutturato, ad esempio data, testo,
numero e così via, fare clic con il pulsante destro del mouse nella query e scegliere Conver ti in parametro.
NOTE
Per altre informazioni sui parametri, vedere Power Query parametri.

Editor avanzato
Con l'editor avanzato è possibile visualizzare il codice che Power Query'editor crea con ogni passaggio. Per
visualizzare il codice per una determinata query, fare clic con il pulsante destro del mouse nella query e
scegliere Editor avanzato .

NOTE
Per altre informazioni sul codice usato nell'editor avanzato, vedere Power Query specifica del linguaggio M.
Modificare il nome e la descrizione della query
Per modificare il nome di una query o aggiungere una descrizione, fare clic con il pulsante destro del mouse su
una query e scegliere Proprietà .

Verrà visualizzata una finestra di dialogo in cui è possibile modificare il nome della query o aggiungere o
modificare la descrizione della query.

Le query con descrizione della query avranno un affordance (icona i). È possibile visualizzare la descrizione
della query passando il puntatore del mouse accanto al nome della query.
Accoda query/Accoda query come nuove
Per aggiungere o eseguire un'unione di query, fare clic con il pulsante destro del mouse su una query e scegliere
Accoda quer y . Verrà visualizzata la finestra di dialogo Accoda in cui è possibile aggiungere altre tabelle alla
query corrente. Accoda quer y come nuove visualizza anche la finestra di dialogo Accoda , ma consente di
accodare più tabelle in una nuova query.

NOTE
Per altre informazioni su come accodare query in Power Query, vedere Aggiungere query.

Unire query/Unire query come nuove


Per unire query o JOIN, fare clic con il pulsante destro del mouse su una query e scegliere Merge quer y .
Verrà visualizzata la finestra di dialogo Merge con la query selezionata come tabella a sinistra dell'operazione
di unione. Se si uniscono quer y come nuove, verrà visualizzata anche la finestra di dialogo Merge , ma sarà
possibile unire due tabelle in una nuova query.
NOTE
Per altre informazioni su come unire query in Power Query, vedere Panoramica dell'unione di query.

Azioni a livello di passaggio


Facendo clic con il pulsante destro del mouse su un passaggio, è possibile eseguire azioni a livello di passaggio,
ad esempio Modifica impostazioni, Rinomina e così via.

È anche possibile eseguire azioni a livello di passaggio passando il puntatore del mouse sul passaggio e
selezionando i puntini di sospensione (tre punti verticali).
Modificare impostazioni
Per modificare le impostazioni a livello di passaggio, fare clic con il pulsante destro del mouse sul passaggio e
scegliere Modifica impostazioni . In alternativa, è possibile fare doppio clic sul passaggio (con le
impostazioni del passaggio) e accedere direttamente alla finestra di dialogo delle impostazioni. Nella finestra di
dialogo delle impostazioni è possibile visualizzare o modificare le impostazioni a livello di passaggio. Ad
esempio, l'immagine seguente mostra la finestra di dialogo delle impostazioni per il passaggio Dividi colonna.

Passaggio Rinomina
Per rinominare un passaggio, fare clic con il pulsante destro del mouse sul passaggio e scegliere Rinomina .
Questa azione apre la finestra di dialogo Proprietà passaggio. Immettere il nome desiderato e quindi
selezionare OK.
Eliminare un passaggio
Per eliminare un passaggio, fare clic con il pulsante destro del mouse sul passaggio e scegliere Elimina. Per
eliminare una serie di passaggi fino alla fine, fare clic con il pulsante destro del mouse sul passaggio e scegliere
Elimina fino alla fine.

Sposta prima/Sposta dopo


Per spostare un passaggio prima di , fare clic con il pulsante destro del mouse su un passaggio e scegliere
Sposta prima di . Per spostare un passaggio dopo, fare clic con il pulsante destro del mouse su un passaggio e
scegliere Sposta dopo .

Estrai precedente
Per estrarre tutti i passaggi precedenti in una nuova query, fare clic con il pulsante destro del mouse sul primo
passaggio che non si vuole includere nella query e quindi scegliere Estrai precedente.

Modificare il nome e la descrizione del passaggio


Per aggiungere le descrizioni dei passaggi, fare clic con il pulsante destro del mouse su un passaggio in una
query e quindi scegliere Proprietà .

È anche possibile accedere al menu di scelta rapida a livello di passaggio passando il puntatore del mouse sul
passaggio e selezionando i puntini di sospensione (tre punti verticali).

Verrà visualizzata una finestra di dialogo in cui è possibile aggiungere la descrizione del passaggio. Questa
descrizione del passaggio sarà utile quando si torna alla stessa query dopo alcuni giorni o quando si
condividono le query o i flussi di dati con altri utenti.
Passando il puntatore del mouse su ogni passaggio, è possibile visualizzare una chiamata che mostra l'etichetta
del passaggio, il nome del passaggio e le descrizioni dei passaggi aggiunti.

Selezionando ogni passaggio, è possibile visualizzare l'anteprima dei dati corrispondente per tale passaggio.

Espandere e comprimere le query


Per assicurarsi che sia possibile visualizzare le query nella visualizzazione diagramma, è possibile comprimere
quelle su cui non si sta lavorando attivamente ed espandere quelle a cui si è più a cui si è distorsi. Espandere o
comprimere le query selezionando il pulsante Espandi/Comprimi in alto a destra di una query. In alternativa,
facendo doppio clic su una query espansa la query verrà compressa e viceversa.

È anche possibile espandere o comprimere una query selezionando le azioni a livello di query dal menu di scelta
rapida della query.
Per espandere o comprimere tutte le query, selezionare il pulsante Espandi tutto/Comprimi tutto accanto alle
opzioni di layout nel riquadro della visualizzazione diagramma.

È anche possibile fare clic con il pulsante destro del mouse su qualsiasi spazio vuoto nel riquadro della
visualizzazione diagramma e visualizzare un menu di scelta rapida per espandere tutte le query o comprimervi
tutte.

In modalità compressa è possibile esaminare rapidamente i passaggi della query passando il puntatore del
mouse sul numero di passaggi nella query. È possibile selezionare questi passaggi per passare al passaggio
specifico all'interno della query.
Opzioni di layout
Nella visualizzazione diagramma sono disponibili quattro opzioni di layout: zoom indietro, zoom avanti,
schermo intero, adatta alla visualizzazione e reimpostazione.
Zoom indietro/zoom avanti
Con questa opzione è possibile regolare il livello di zoom e fare zoom indietro o zoom avanti per visualizzare
tutte le query nella vista diagramma.

Schermo intero
Con questa opzione è possibile visualizzare tutte le query e le relative relazioni tramite la modalità schermo
intero. Il riquadro della visualizzazione diagramma si espande a schermo intero e il riquadro di anteprima dei
dati, il riquadro query e il riquadro dei passaggi rimangono compressi.

Adatta alla visualizzazione


Con questa opzione è possibile modificare il livello di zoom in modo che tutte le query e le relative relazioni
possano essere visualizzate completamente nella vista diagramma.

Reset
Con questa opzione è possibile reimpostare il livello di zoom al 100% e anche ripristinare l'angolo superiore
sinistro del riquadro.
Visualizzare le relazioni tra query
Per visualizzare tutte le query correlate per una determinata query, selezionare il pulsante Evidenzia quer y
correlate. Ad esempio, selezionando il pulsante evidenzia query correlate nella query Top US Customers
(Clienti principali stati Uniti), le query Customers e Orders vengono evidenziate, come illustrato nell'immagine
seguente.

È anche possibile selezionare l'dongle a sinistra di una determinata query per visualizzare le query di
riferimento dirette e indirette.

Analogamente, è possibile selezionare l'dongle destro per visualizzare le query dipendenti dirette e indirette.

È anche possibile passare il mouse sull'icona del collegamento sotto un passaggio per visualizzare un callout
che mostra le relazioni tra query.

Impostazioni della vista diagramma


Per modificare le impostazioni della visualizzazione diagramma, selezionare la metà inferiore del pulsante Vista
diagramma all'interno della scheda Visualizza della barra multifunzione.
Etichette e nomi dei passaggi
Le etichette dei passaggi vengono visualizzate per impostazione predefinita all'interno della vista
diagramma.

È possibile modificare le impostazioni della vista diagramma per visualizzare i nomi dei passaggi in modo che
corrispondano ai passaggi applicati all'interno del riquadro impostazioni quer y.

Evidenzia automaticamente le query correlate


Selezionando Evidenzia automaticamente le quer y correlate nelle impostazioni della vista diagramma, le
query correlate vengono sempre evidenziate in modo da poter visualizzare visivamente meglio le dipendenze
delle query

Visualizzazione compatta
Quando sono presenti query con più passaggi, può essere difficile scorrere orizzontalmente per visualizzare tutti
i passaggi all'interno del viewport.
Per risolvere questo problema, la vista diagramma offre la visualizzazione Compatta, che comprime i passaggi
dall'alto verso il basso anziché da sinistra a destra. Questa vista può essere particolarmente utile quando si
dispone di query con più passaggi, in modo da poter visualizzare il maggior numero possibile di query
all'interno del viewport.

Per abilitare questa visualizzazione, passare alle impostazioni della visualizzazione diagramma e selezionare
Visualizzazione compatta all'interno della scheda Visualizza della barra multifunzione.

Ottimizzare l'anteprima dei dati


È possibile visualizzare più dati all'interno dell'anteprima dei dati per comprendere e analizzare i dati. A tale
scopo, espandere l'anteprima dei dati in modo che sia possibile visualizzare la quantità di dati precedente
all'interno dell'anteprima dei dati senza uscire dalla vista diagramma.

Espandere o comprimere tutte le query


Per impostazione predefinita, le query all'interno della vista diagramma sono compresse. Sono disponibili
opzioni per espandere o comprimere ogni query con un solo clic.

È anche possibile espandere o comprimere le query correlate dal menu di scelta rapida a livello di query.

Query a selezione multipla


È possibile selezionare più query all'interno della vista diagramma tenendo premuto CTRL e facendo clic sulle
query. Dopo la selezione multipla, facendo clic con il pulsante destro del mouse viene visualizzato un menu di
scelta rapida che consente di eseguire operazioni quali unione, accodamento, spostamento nel gruppo,
espansione/compressione e altro ancora.

Ridenominazione inline
È possibile fare doppio clic sul nome della query per rinominare la query.

Facendo doppio clic sul nome del passaggio è possibile rinominare il passaggio, a condizione che l'impostazione
della vista diagramma mostri i nomi dei passaggi.
Quando le etichette dei passaggi vengono visualizzate nella visualizzazione diagramma, facendo doppio clic
sull'etichetta del passaggio viene visualizzata la finestra di dialogo per rinominare il nome del passaggio e
fornire una descrizione.

Accessibilità
La visualizzazione diagramma supporta funzionalità di accessibilità come la navigazione tramite tastiera, la
modalità a contrasto elevato e il supporto dell'utilità per la lettura dello schermo. Nella tabella seguente
vengono descritti i tasti di scelta rapida disponibili nella visualizzazione diagramma. Per altre informazioni sui
tasti di scelta rapida disponibili in Power Query Online, vedere tasti di scelta rapida in Power Query.

A Z IO N E TA STO DI SC ELTA RA P IDA

Espandere la query selezionata CTRL+tasto freccia DESTRA

Comprimi query selezionata CTRL+tasto freccia SINISTRA

Spostare lo stato attivo dal livello di query al livello di ALT+tasto freccia GIÙ
passaggio

Spostare lo stato attivo dal livello di passaggio al livello di ESC


query

Espandere tutte le query CTRL+MAIUSC+tasto freccia DESTRA

Comprimi tutte le query CTRL+MAIUSC+tasto freccia SINISTRA


A Z IO N E TA STO DI SC ELTA RA P IDA

Inserire un nuovo passaggio usando +pulsante (dopo il CTRL+ALT+N


passaggio selezionato)

Evidenziare le query correlate CTRL + ALT + R

Selezionare tutte le query CTRL+A

Copiare query CTRL+C

Incollare query CTRL+V


Utilizzo della visualizzazione schema (anteprima)
07/12/2021 • 2 minutes to read

La vista schema è progettata per ottimizzare il flusso quando si lavora su operazioni a livello di schema
inserendo le informazioni sulle colonne della query in primo piano e al centro. La visualizzazione schema offre
interazioni contestuali per modellare la struttura dei dati e operazioni di latenza più basse perché richiede solo il
calcolo dei metadati della colonna e non i risultati completi dei dati.
Questo articolo illustra la visualizzazione dello schema e le funzionalità offerte.

NOTE
La funzionalità visualizzazione schema è disponibile solo per Power Query Online.

Panoramica
Quando si lavora su set di dati con molte colonne, le attività semplici possono diventare estremamente
complicate perché anche trovare la colonna destra scorrendo orizzontalmente e analizzando tutti i dati è
inefficiente. La visualizzazione Schema visualizza le informazioni sulle colonne in un elenco facile da analizzare e
con cui interagire, rendendo più semplice che mai lavorare sullo schema.
Oltre a un'esperienza ottimizzata di gestione delle colonne, un altro vantaggio chiave della visualizzazione
schema è che le trasformazioni tendono a produrre risultati più velocemente. Questi risultati sono più veloci
perché questa vista richiede solo il calcolo delle informazioni sulle colonne anziché un'anteprima dei dati.
Pertanto, anche l'uso di query con esecuzione di lunga durata con poche colonne può trarre vantaggio dall'uso
della vista schema.
È possibile attivare la visualizzazione schema selezionando Visualizzazione schema nella scheda Visualizza .
Quando si è pronti per lavorare di nuovo sui dati, è possibile selezionare Vista dati per tornare indietro.
Riordinamento delle colonne
Un'attività comune quando si lavora allo schema è il riordinamento delle colonne. In Visualizzazione schema
questa operazione può essere eseguita facilmente trascinando le colonne nell'elenco e rilasciandole nella
posizione corretta fino a ottenere l'ordine desiderato per le colonne.

Applicazione di trasformazioni
Per modifiche più avanzate allo schema, è possibile trovare le trasformazioni a livello di colonna più usate
direttamente nell'elenco e nella scheda Strumenti schema. È anche possibile usare le trasformazioni disponibili
in altre schede della barra multifunzione.
Condividere una query
07/12/2021 • 2 minutes to read

È possibile usare Power Query per estrarre e trasformare i dati da origini dati esterne. Questi passaggi di
estrazione e trasformazione sono rappresentati come query. Le query create con Power Query vengono
espresse usando il linguaggio M ed eseguite tramite il motore M.
È possibile condividere e riutilizzare facilmente le query tra progetti e anche tra Power Query del prodotto.
Questo articolo illustra i meccanismi generali per condividere una query in Power Query.

Copia/Incolla
Nel riquadro delle query fare clic con il pulsante destro del mouse sulla query da copiare. Nel menu a discesa
selezionare l'opzione Copia. La query e la relativa definizione verranno aggiunte agli Appunti.

NOTE
La funzionalità di copia non è attualmente disponibile nelle Power Query Online.

Per incollare la query dagli Appunti, passare al riquadro delle query e fare clic con il pulsante destro del mouse
su qualsiasi spazio vuoto. Scegliere Incolla dal menu.
Quando si incolla questa query in un'istanza che ha già lo stesso nome di query, alla query incollata verrà
aggiunto un suffisso con il formato , dove il segno di cancelletto viene sostituito con un numero per distinguere
le query (#) incollate.

È anche possibile incollare query tra più istanze e integrazioni di prodotti. Ad esempio, è possibile copiare la
query da Power BI Desktop, come illustrato nelle immagini precedenti, e incollarla in Power Query per Excel
come illustrato nell'immagine seguente.

WARNING
La copia e incolla di query tra integrazioni di prodotti non garantisce che tutte le funzioni e le funzionalità trovate nella
query incollata funzioneranno nella destinazione. Alcune funzionalità potrebbero essere disponibili solo nell'integrazione
del prodotto di origine.

Copiare il codice M
È anche possibile copiare il codice completo della query.
1. Selezionare la query che si vuole condividere.
2. Nella barra multifunzione selezionare la scheda Visualizza e quindi selezionare Editor avanzato .
3. Nella finestra Editor avanzato selezionare tutto il codice e copiarlo.
Con il codice della query negli Appunti, è possibile condividere la query con i mezzi di propria scelta. Il
destinatario di questo codice deve creare una query vuota e seguire la stessa procedura descritta in precedenza.
Invece di copiare il codice, il destinatario sostituirà il codice trovato nella query vuota con il codice specificato.

NOTE
Per creare una query vuota, passare alla finestra Ottieni dati e selezionare Quer y vuota dalle opzioni.

Funzionalità di condivisione delle query specifiche del prodotto


Alcune Power Query di prodotti possono offrire più modi per condividere query, ad esempio, ma non limitate a:
In Microsoft Excel — Creazione di Office connessione dati (con estensione odc) da condividere con altri
utenti.
In Power BI Desktop — Creazione di un Power BI personalizzato (con estensione pbit) da condividere con
altri utenti.
È consigliabile leggere la documentazione dell'integrazione del prodotto a cui si è interessati per ottenere altre
informazioni sulle funzionalità di condivisione delle query disponibili in tali prodotti.
Utilizzo di funzioni personalizzate
07/12/2021 • 9 minutes to read

Se ci si trova in una situazione in cui è necessario applicare lo stesso set di trasformazioni a query o valori
diversi, la creazione di una funzione personalizzata Power Query che può essere riutilizzata tutte le volte che è
necessario potrebbe essere utile. Una Power Query funzione personalizzata è un mapping da un set di valori di
input a un singolo valore di output e viene creata da funzioni e operatori M nativi.
Sebbene sia possibile creare manualmente una funzione personalizzata Power Query usando il codice come
illustrato in Informazioni sulle funzioni M di Power Query, l'interfaccia utente di Power Query offre funzionalità
per velocizzare, semplificare e migliorare il processo di creazione e gestione di una funzione personalizzata.
Questo articolo si concentra su questa esperienza fornita solo tramite l Power Query'interfaccia utente e su
come ottenere il massimo da questa esperienza.

IMPORTANT
Questo articolo illustra come creare una funzione personalizzata con Power Query usando trasformazioni comuni
accessibili nell'interfaccia utente Power Query utente. Si concentra sui concetti di base per creare funzioni personalizzate e
collegamenti ad altri articoli in Power Query documenation per altre informazioni sulle trasformazioni specifiche a cui si fa
riferimento in questo articolo.

Creare una funzione personalizzata da un riferimento a una tabella


È possibile seguire questo esempio scaricando i file di esempio usati in questo articolo dal collegamento di
download seguente. Per semplicità, questo articolo usa il connettore Cartella. Per altre informazioni sul
connettore Cartella, vedere Cartella. L'obiettivo di questo esempio è creare una funzione personalizzata che può
essere applicata a tutti i file in tale cartella prima di combinare tutti i dati di tutti i file in una singola tabella.
Per iniziare, usare l'esperienza connettore cartella per passare alla cartella in cui si trovano i file e selezionare
Trasforma dati o Modifica . Verrà ora visualizzato l'Power Query di lavoro. Fare clic con il pulsante destro del
mouse sul valore binario scelto nel campo Contenuto e selezionare l'opzione Aggiungi come nuova quer y.
Per questo esempio, si può vedere che la selezione è stata effettuata per il primo file dall'elenco, che si verifica
come il file aprile 2019.csv.

Questa opzione crea in modo efficace una nuova query con un passaggio di navigazione direttamente nel file
come file binario e il nome di questa nuova query sarà il percorso del file selezionato. Rinominare questa query
come File di esempio .
Creare un nuovo parametro con il nome Parametro file . Usare la query File di esempio come valore
corrente , come illustrato nell'immagine seguente.
NOTE
È consigliabile leggere l'articolo parametri per comprendere meglio come creare e gestire i parametri in Power Query.
Le funzioni personalizzate possono essere create usando qualsiasi tipo di parametro. Non è necessario che una funzione
personalizzata abbia un file binario come parametro.
È possibile creare una funzione personalizzata senza un parametro. Ciò si verifica in genere negli scenari in cui è possibile
dedurre un input dall'ambiente in cui viene richiamata la funzione. Ad esempio, una funzione che accetta la data e l'ora
correnti dell'ambiente e crea una stringa di testo specifica da tali valori.

Fare clic con il pulsante destro del mouse su Parametro file nel riquadro Query. Selezionare l'opzione
Riferimento.

Rinominare la query appena creata da Parametro file (2) in Trasforma file di esempio .

Fare clic con il pulsante destro del mouse su questa nuova query trasforma file di esempio e selezionare
l'opzione Crea funzione.
Questa operazione creerà in modo efficace una nuova funzione che verrà collegata alla query trasforma file di
esempio. Tutte le modifiche apportate alla query trasforma file di esempio verranno replicate automaticamente
nella funzione personalizzata. Durante la creazione di questa nuova funzione, usare File di trasformazione
come nome della funzione .

Dopo aver creato la funzione, si noterà che verrà creato automaticamente un nuovo gruppo con il nome della
funzione. Questo nuovo gruppo conterrà:
Tutti i parametri a cui è stato fatto riferimento nella query del file transform sample.
La quer y transform sample file, comunemente nota come query di esempio.
Funzione appena creata, in questo caso File di trasformazione .
Applicazione di trasformazioni a una query di esempio
Dopo la creazione della nuova funzione, selezionare la query con il nome Transform Sample file . Questa
query è ora collegata alla funzione Trasforma file, quindi tutte le modifiche apportate a questa query
verranno riflesse nella funzione. Questo è il concetto di query di esempio collegata a una funzione.
La prima trasformazione che deve essere eseguita a questa query è quella che interpreterà il file binario. È
possibile fare clic con il pulsante destro del mouse sul file binario nel riquadro di anteprima e selezionare
l'opzione CSV per interpretare il file binario come file CSV.

Il formato di tutti i file CSV nella cartella è lo stesso. Tutti hanno un'intestazione che si estende per le prime
quattro righe. Le intestazioni di colonna si trovano nella riga cinque e i dati iniziano dalla riga sei verso il basso,
come illustrato nell'immagine successiva.
Il set successivo di passaggi di trasformazione che devono essere applicati al file di esempio di
trasformazione sono:
1. Rimuovere le prime quattro righe — Questa azione elimina le righe considerate parte della sezione
di intestazione del file.
NOTE
Per altre informazioni su come rimuovere righe o filtrare una tabella in base alla posizione di riga, vedere Filtrare in
base alla posizione della riga.

2. Alzare di livello le intestazioni — Le intestazioni per la tabella finale sono ora nella prima riga della
tabella. È possibile alzarli di livello come illustrato nell'immagine successiva.
Power Query per impostazione predefinita aggiungerà automaticamente un nuovo passaggio Tipo modificato
dopo l'innalzamento di livello delle intestazioni di colonna che rileverà automaticamente i tipi di dati per ogni
colonna. La quer y trasforma file di esempio sarà simile all'immagine successiva.

NOTE
Per altre informazioni su come alzare di livello e abbassare di livello le intestazioni, vedere Alzare o abbassare di livello le
intestazioni di colonna.

Cau t i on

La funzione Trasforma file si basa sui passaggi eseguiti nella query Trasforma file di esempio. Tuttavia, se si
tenta di modificare manualmente il codice per la funzione Trasforma file, verrà visualizzato un avviso che
legge
The definition of the function 'Transform file' is updated whenever query 'Transform Sample file' is updated.
However, updates will stop if you directly modify function 'Transform file'.

Richiamare una funzione personalizzata come nuova colonna


Dopo aver creato la funzione personalizzata e incorporato tutti i passaggi di trasformazione, è possibile tornare
alla query originale in cui è disponibile l'elenco di file dalla cartella. Nella scheda Aggiungi colonna della barra
multifunzione selezionare Richiama funzione personalizzata nel gruppo Generale. Nella finestra Richiama
funzione personalizzata immettere Tabella di output come Nome nuova colonna . Selezionare il nome della
funzione, Trasforma file , nell'elenco a discesa Quer y funzione. Dopo aver selezionato la funzione dal menu a
discesa, verrà visualizzato il parametro per la funzione ed è possibile selezionare la colonna della tabella da
usare come argomento per questa funzione. Selezionare la colonna Contenuto come valore/argomento da
passare per il parametro File .

Dopo aver selezionato OK, verrà creata una nuova colonna con il nome Tabella di output. Nelle celle di questa
colonna sono presenti valori di tabella, come illustrato nell'immagine successiva. Per semplicità, rimuovere tutte
le colonne da questa tabella, ad eccezione di Nome e Tabella di output .
NOTE
Per altre informazioni su come scegliere o rimuovere colonne da una tabella, vedere Scegliere o rimuovere colonne.

La funzione è stata applicata a ogni singola riga della tabella usando i valori della colonna Content come
argomento per la funzione. Ora che i dati sono stati trasformati nella forma che si sta cercando, è possibile
espandere la colonna Tabella di output, come illustrato nell'immagine seguente, senza usare alcun prefisso per
le colonne espanse.

È possibile verificare la presenza di dati da tutti i file nella cartella controllando i valori nella colonna Nome o
Data. In questo caso, è possibile controllare i valori della colonna Date, in quanto ogni file contiene solo dati per
un singolo mese di un determinato anno. Se ne vengono visualizzati più, significa che i dati di più file sono stati
combinati correttamente in una singola tabella.
NOTE
Quello letto finora è fondamentalmente lo stesso processo che si verifica durante l'esperienza Combina file, ma eseguito
manualmente.
È consigliabile leggere anche l'articolo Combina file overview e Combine CSV files (Combina file CSV) per comprendere
meglio il funzionamento dell'esperienza combina file Power Query e il ruolo delle funzioni personalizzate.

Aggiungere un nuovo parametro alla funzione personalizzata esistente


Imagine che sia presente un nuovo requisito in base a quanto creato. Il nuovo requisito richiede che prima di
combinare i file, filtrare i dati al loro interno per ottenere solo le righe in cui country è uguale a Panama.
Per eseguire questo requisito, creare un nuovo parametro denominato Market con il tipo di dati text. Per
Valore corrente immettere il valore Dio.
Con questo nuovo parametro, selezionare la query Transform Sample file (Trasforma file di esempio) e
filtrare il campo Countr y usando il valore del parametro Market.

NOTE
Per altre informazioni su come filtrare le colonne in base ai valori, vedere Filtrare i valori.

L'applicazione di questo nuovo passaggio alla query aggiornerà automaticamente la funzione Trasforma file,
che richiederà ora due parametri in base ai due parametri utilizzati dal file transform sample.
Ma accanto alla query dei file CSV è visualizzato un segno di avviso. Ora che la funzione è stata aggiornata,
sono necessari due parametri. Pertanto, il passaggio in cui si richiama la funzione restituisce valori di errore,
poiché solo uno degli argomenti è stato passato alla funzione del file transform durante il passaggio Funzione
personalizzata richiamata.

Per correggere gli errori, fare doppio clic su Invoked Custom Function (Funzione personalizzata richiamata)
in Passaggi applicati per aprire la finestra Richiama funzione personalizzata. Nel parametro Market
immettere manualmente il valore Disa.

È ora possibile controllare la query per verificare che nel set di risultati finale della query di file CSV verranno
visualizzate solo le righe in cui Country è uguale a Quello che è uguale a Countr y.
Creare una funzione personalizzata da una parte della logica
riutilizzabile
Se sono presenti più query o valori che richiedono lo stesso set di trasformazioni, è possibile creare una
funzione personalizzata che funge da elemento logico riutilizzabile. Successivamente, questa funzione
personalizzata può essere richiamata sulle query o i valori di propria scelta. Questa funzione personalizzata
consente di risparmiare tempo e di gestire il set di trasformazioni in una posizione centrale, che è possibile
modificare in qualsiasi momento.
Si supponga, ad esempio, di avere una query con diversi codici come stringa di testo e di voler creare una
funzione che decodifica tali valori.

Iniziare con un parametro con un valore che funge da esempio. In questo caso, sarà il valore PTY-CM1090-
L AX .
Da tale parametro viene creata una nuova query in cui applicare le trasformazioni necessarie. In questo caso, si
vuole suddividere il codice PTY-CM1090-LAX in più componenti:
Origin = PTY
Destinazione = LAX
Airline = CM
FlightID = 1090

Il codice M per il set di trasformazioni è illustrato di seguito.


let
Source = code,
SplitValues = Text.Split( Source, "-"),
CreateRow = [Origin= SplitValues{0}, Destination= SplitValues{2}, Airline=Text.Start( SplitValues{1},2),
FlightID= Text.End( SplitValues{1}, Text.Length( SplitValues{1} ) - 2) ],
RowToTable = Table.FromRecords( { CreateRow } ),
#"Changed Type" = Table.TransformColumnTypes(RowToTable,{{"Origin", type text}, {"Destination", type
text}, {"Airline", type text}, {"FlightID", type text}})
in
#"Changed Type"

NOTE
Per altre informazioni sul linguaggio delle formule Power Query M, vedere Power Query linguaggio delle formule M

È quindi possibile trasformare la query in una funzione facendo clic con il pulsante destro del mouse sulla query
e selezionando Crea funzione. Infine, è possibile richiamare la funzione personalizzata in qualsiasi query o
valore, come illustrato nell'immagine successiva.

Dopo alcune altre trasformazioni, è possibile vedere che è stato raggiunto l'output desiderato e si è sfruttata la
logica per una trasformazione di questo tipo da una funzione personalizzata.
Alzare o abbassare di livello le intestazioni di
colonna
07/12/2021 • 2 minutes to read

Quando si crea una nuova query da origini dati non strutturate, ad esempio file di testo, Power Query analizza il
contenuto del file. Se Power Query un criterio diverso per la prima riga, tenterà di alzare di livello la prima riga
di dati come intestazioni di colonna per la tabella. Tuttavia, Power Query potrebbe non identificare
correttamente il modello al 100% del tempo, quindi questo articolo spiega come alzare di livello o abbassare di
livello manualmente le intestazioni di colonna dalle righe.

Per alzare di livello le righe alle intestazioni di colonna


Nell'esempio seguente Power Query impossibile determinare le intestazioni di colonna per la tabella perché la
tabella contiene un set di righe di intestazione per le prime tre righe. Le intestazioni di colonna effettive per la
tabella sono contenute nella riga 5.

Tabella con le colonne (Column1, Column2, Column3 e column 4) tutte impostate sul tipo di dati Text, con
quattro righe contenenti un'intestazione nella parte superiore, un'intestazione di colonna nella riga 5 e sette
righe di dati nella parte inferiore.
Prima di poter alzare di livello le intestazioni, è necessario rimuovere le prime quattro righe della tabella. A tale
fine, selezionare il menu tabella nell'angolo superiore sinistro della finestra di anteprima e quindi selezionare
Rimuovi le prime righe.
Nella finestra Rimuovi righe principali immettere 4 nella casella Numero di righe.

NOTE
Per altre informazioni su Rimuovere le prime righe e altre operazioni della tabella, vedere Filtrare in base alla posizione
della riga.

Il risultato di tale operazione lascia le intestazioni come prima riga della tabella.
Percorsi dell'operazione di innalzamento di livello delle intestazioni
Da qui è possibile selezionare l'operazione alza di livello intestazioni in diverse posizioni:
Nel gruppo Trasforma della scheda Home.

Nel gruppo Tabella della scheda Trasforma.

Nel menu della tabella.

Dopo aver fatto l'operazione di innalzamento di livello delle intestazioni, la tabella avrà un aspetto simile
all'immagine seguente.
Tabella con le intestazioni di colonna Date, Country, Total Units e Total Revenue e sette righe di dati.
L'intestazione di colonna Date ha un tipo di dati Date, l'intestazione di colonna Country ha un tipo di dati Text,
l'intestazione di colonna Total Units ha un tipo di dati Numero intero e l'intestazione di colonna Total Revenue ha
un tipo di dati Numero decimale.

NOTE
I nomi delle colonne della tabella devono essere univoci. Se la riga da alzare di livello a una riga di intestazione contiene
più istanze della stessa stringa di testo, Power Query disambigua le intestazioni di colonna aggiungendo un suffisso
numerico preceduto da un punto a ogni stringa di testo non univoca.

Per abbassare di livello le intestazioni di colonna alle righe


Nell'esempio seguente le intestazioni di colonna non sono corrette: fanno effettivamente parte dei dati della
tabella. È necessario abbassare di livello le intestazioni per far parte delle righe della tabella.

Posizioni dell'operazione di abbassamento di livello delle intestazioni


In diverse posizioni è possibile selezionare l'operazione di abbassamento di livello delle intestazioni:
Nel gruppo Trasforma della scheda Home.

Nel gruppo Tabella della scheda Trasforma.


Dopo aver fatto questa operazione, la tabella sarà simile all'immagine seguente.

Come ultimo passaggio, selezionare ogni colonna e digitare un nuovo nome. Il risultato finale sarà simile
all'immagine seguente.

Tabella finale dopo la ridenominazione delle intestazioni di colonna in Date, Country, Total Units e Total Revenue,
con colonne rinominate evidenziate nel riquadro Impostazioni query e il codice M visualizzato nella barra della
formula.
Vedi anche
Filtrare in base alla posizione delle righe
Filtrare una tabella in base alla posizione di riga
07/12/2021 • 7 minutes to read

Power Query sono disponibili più opzioni per filtrare una tabella in base alle posizioni delle righe, mantenendo o
rimuovendo tali righe. Questo articolo illustra tutti i metodi disponibili.

Mantenere le righe
Il set di funzioni keep rows selezionerà un set di righe dalla tabella e rimuoverà tutte le altre righe che non
soddisfano i criteri.
I pulsanti Mantieni righe sono disponibili in due posizioni:
Nel gruppo Riduci righe della scheda Home.

Nel menu della tabella.


NOTE
Nella sezione di anteprima dei dati al centro della finestra Power Query è possibile visualizzare la posizione delle righe sul
lato sinistro della tabella. Ogni posizione di riga è rappresentata da un numero. La riga superiore inizia con la posizione 1.

Mantieni prime righe


Imagine tabella seguente che esce da un sistema con un layout fisso.

Questo report contiene sempre sette righe di dati e sotto i dati è presente una sezione per i commenti con un
numero sconosciuto di righe. In questo esempio si vogliono mantenere solo le prime sette righe di dati. A tale
scopo, selezionare Mantieni le prime righe dal menu tabella. Nella finestra di dialogo Mantieni le prime
righe immettere 7 nella casella Numero di righe .

Il risultato di tale modifica offrirà la tabella di output che si sta cercando. Dopo aver impostato i tipi di dati per le
colonne, la tabella sarà simile all'immagine seguente.
Mantenere le righe in basso
Imagine tabella seguente che esce da un sistema con un layout fisso.

Tabella di esempio iniziale con Column1, Column2 e Column3 come intestazioni di colonna, tutte impostate sul
tipo di dati Text e le prime sette righe contenenti dati e sopra una riga di intestazioni di colonna e un numero
sconosciuto di commenti.
Questo report contiene sempre sette righe di dati alla fine della pagina del report. Sopra i dati, il report include
una sezione per i commenti con un numero sconosciuto di righe. In questo esempio si vogliono mantenere solo
le ultime sette righe di dati e la riga di intestazione.
A tale scopo, selezionare Mantieni le righe in basso dal menu della tabella. Nella finestra di dialogo
Mantieni righe in basso immettere 8 nella casella Numero di righe .
Il risultato di tale operazione offrirà otto righe, ma ora la riga di intestazione fa parte della tabella.

È necessario alzare di livello le intestazioni di colonna dalla prima riga della tabella. A tale scopo, selezionare
Usa la prima riga come intestazioni dal menu tabella. Dopo aver definito i tipi di dati per le colonne, si
creerà una tabella simile all'immagine seguente.

Tabella di esempio finale per Mantenere le righe più in basso dopo aver innalzato di livello la prima riga alle
intestazioni di colonna e aver mantenuto sette righe di dati e quindi aver impostato unità sul tipo di dati
Number.
Altre informazioni: Alzare di livello o abbassare di livello le intestazioni di colonna
Mantenere un intervallo di righe
Imagine tabella seguente che esce da un sistema con un layout fisso.
Tabella di esempio iniziale con le colonne (Column1, Column2 e Column3) tutte impostate sul tipo di dati Text e
contenenti le intestazioni di colonna e sette righe di dati al centro della tabella.
Questo report contiene sempre cinque righe per l'intestazione, una riga di intestazioni di colonna sotto
l'intestazione, sette righe di dati sotto le intestazioni di colonna e quindi un numero sconosciuto di righe per la
sezione dei commenti. In questo esempio si vogliono ottenere le otto righe dopo la sezione di intestazione del
report e solo quelle otto righe.
A tale scopo, selezionare Mantieni inter vallo di righe dal menu tabella. Nella finestra di dialogo Mantieni
intervallo di righe immettere 6 nella casella Prima riga e 8 nella casella Numero di righe .

Analogamente all'esempio precedente per mantenere le righe più in basso, il risultato di questa operazione
fornisce otto righe con le intestazioni di colonna come parte della tabella. Tutte le righe sopra la prima riga
definita (riga 6) vengono rimosse.
È possibile eseguire la stessa operazione descritta in Mantenere le righe in basso per alzare di livello le
intestazioni di colonna dalla prima riga della tabella. Dopo aver impostato i tipi di dati per le colonne, la tabella
sarà simile all'immagine seguente.

Tabella di esempio finale per Mantenere l'intervallo di righe dopo aver promosso la prima riga alle intestazioni
di colonna, impostando la colonna Unità sul tipo di dati Number e mantenendo sette righe di dati.

Rimuovere le righe
Questo set di funzioni selezionerà un set di righe dalla tabella, le rimuoverà e mantenerà le altre righe nella
tabella.
I pulsanti Rimuovi righe sono disponibili in due posizioni:
Nel gruppo Riduci righe della scheda Home.

Nel menu della tabella.


Rimuovi prime righe
Imagine tabella seguente che esce da un sistema con un layout fisso.

Tabella di esempio iniziale per Rimuovere le prime righe con le colonne (Column1, Column2 e Column3) tutte
impostate sul tipo di dati Text, un'intestazione nella parte superiore e una riga di intestazione di colonna e sette
righe di dati nella parte inferiore.
Questo report contiene sempre un'intestazione fissa dalla riga 1 alla riga 5 della tabella. In questo esempio si
vogliono rimuovere queste prime cinque righe e mantenere il resto dei dati.
A tale scopo, selezionare Rimuovi le prime righe dal menu tabella. Nella finestra di dialogo Rimuovi righe
principali immettere 5 nella casella Numero di righe .
Come negli esempi precedenti per "Mantieni righe in basso" e "Mantieni un intervallo di righe", il risultato di
questa operazione fornisce otto righe con le intestazioni di colonna come parte della tabella.

È possibile eseguire la stessa operazione descritta negli esempi precedenti per alzare di livello le intestazioni di
colonna dalla prima riga della tabella. Dopo aver impostato i tipi di dati per le colonne, la tabella sarà simile
all'immagine seguente.

Tabella di esempio finale per Rimuovere le prime righe dopo aver innalzato di livello la prima riga alle
intestazioni di colonna e aver impostato la colonna Unità sul tipo di dati Number e aver mantenuto sette righe di
dati.
Rimuovi ultime righe
Imagine tabella seguente che esce da un sistema con un layout fisso.
Tabella di esempio iniziale per Rimuovere le righe in basso, con le colonne di intestazione tutte impostate sul
tipo di dati Text, sette righe di dati e quindi un piè di pagina di lunghezza fissa nella parte inferiore.
Questo report contiene sempre una sezione o un piè di pagina fisso che occupa le ultime cinque righe della
tabella. In questo esempio si vuole rimuovere le ultime cinque righe e mantenere il resto dei dati.
A tale scopo, selezionare Rimuovi le righe in basso dal menu della tabella. Nella finestra di dialogo
Rimuovi righe principali immettere 5 nella casella Numero di righe .

Il risultato di tale modifica offrirà la tabella di output che si sta cercando. Dopo aver impostato i tipi di dati per le
colonne, la tabella sarà simile all'immagine seguente.

Rimuovere righe alternative


Imagine tabella seguente che esce da un sistema con un layout dinamico.
Tabella di esempio iniziale con le intestazioni di colonna presenti e tutte impostate sul tipo di dati Text e ogni
altra riga di dati contenente commenti sulla riga di dati sopra di essa.
Il modo in cui questo report è strutturato è che sono presenti elementi in coppie di righe. Ogni riga dispari (1, 3,
5...) contiene i dati necessari. Ogni riga pari, direttamente sotto ogni riga dispari, contiene commenti su ognuno
di questi record. I commenti non sono necessari e si vuole rimuoverli tutti.
A tale scopo, selezionare Rimuovi righe alternative dal menu tabella. Nella finestra di dialogo Rimuovi
righe alternative immettere i valori seguenti:
Nella casella Prima riga da rimuovere immettere 2 .
Si vuole iniziare a contare dalla seconda riga. Tutte le righe al di sopra di questa prima riga da rimuovere
verranno mantenute.
Nella casella Number of rows to remove (Numero di righe da rimuovere) immettere 1 .
Qui si inizia a definire il modello per la rimozione delle righe. Dopo aver trovato la seconda riga, è necessario
rimuovere solo la riga specifica, in modo da specificare che è necessario rimuovere solo una riga.
Nella casella Number of rows to keep (Numero di righe da mantenere) immettere 1 .
Dopo aver rimosso una riga, mantenere la riga successiva. Il processo viene avviato di nuovo per la riga
successiva.
Il risultato di tale selezione offrirà la tabella di output che si sta cercando. Dopo aver impostato i tipi di dati sulle
colonne, la tabella sarà simile all'immagine seguente.
Filtrare in base ai valori in una colonna
07/12/2021 • 4 minutes to read

In Power Query è possibile includere o escludere righe in base a un valore specifico in una colonna. È possibile
scegliere tra tre metodi per filtrare i valori nella colonna:
Menu Ordina e filtra
Menu di scelta rapida della cella
Filtro specifico del tipo
Dopo aver applicato un filtro a una colonna, nell'intestazione di colonna viene visualizzata una piccola icona di
filtro, come illustrato nella figura seguente.

Menu Ordina e filtra


Nell'intestazione di colonna verrà visualizzata un'icona con un triangolo inverso. Quando si seleziona questa
icona, viene visualizzato il menu di ordinamento e filtro. Con questo menu è possibile applicare o rimuovere
eventuali filtri dalla colonna.

NOTE
Questo articolo illustra gli aspetti correlati al filtro dei dati. Per altre informazioni sulle opzioni di ordinamento e su come
ordinare le colonne in Power Query, vedere Ordinare le colonne.
Rimuovi vuoto
Il comando Rimuovi vuoto applica due regole di filtro alla colonna. La prima regola elimina tutti i valori Null.
La seconda regola elimina tutti i valori vuoti. Si supponga, ad esempio, che una tabella con una sola colonna di
testo con cinque righe abbia un valore Null e una cella vuota.

NOTE
Un valore Null è un valore specifico nel linguaggio Power Query che non rappresenta alcun valore.

Selezionare quindi Rimuovi vuoto dal menu di ordinamento e filtro, come illustrato nell'immagine seguente.

È anche possibile selezionare questa opzione dalla scheda Home del gruppo Riduci righe nell'elenco a discesa
Rimuovi righe, come illustrato nell'immagine successiva.
Il risultato dell'operazione Remove empty restituisce la stessa tabella senza i valori vuoti.

Cancella filtro
Quando un filtro viene applicato a una colonna, il comando Cancella filtro viene visualizzato nel menu di
ordinamento e filtro.

Filtro automatico
L'elenco nel menu di ordinamento e filtro è denominato elenco di filtri automatici, che mostra i valori univoci
nella colonna. È possibile selezionare o deselezionare manualmente i valori da includere nell'elenco. Tutti i valori
selezionati verranno presi in considerazione dal filtro. Tutti i valori non selezionati verranno ignorati.
Questa sezione del filtro automatico include anche una barra di ricerca che consente di trovare i valori
dell'elenco.

NOTE
Quando si carica l'elenco di filtri automatici, vengono caricati solo i primi 1.000 valori distinct nella colonna. Se sono
presenti più di 1.000 valori distinct nella colonna in cui si sta filtrando, verrà visualizzato un messaggio che indica che
l'elenco di valori nell'elenco di filtri potrebbe essere incompleto e viene visualizzato il collegamento Carica altro. Selezionare
il collegamento Carica altro per caricare altri 1.000 valori distinti.
Se vengono trovati esattamente 1.000 valori distinti, l'elenco viene visualizzato con un messaggio che informa che
l'elenco potrebbe essere ancora incompleto.
Se vengono trovati meno di 1.000 valori distinct, viene visualizzato l'elenco completo dei valori.

Menu di scelta rapida della cella


È possibile fare clic con il pulsante destro del mouse su una cella specifica di una colonna per aprire il menu di
scelta rapida per tale valore. Scegliere la piccola icona del filtro e quindi selezionare l'opzione di filtro che si
vuole usare.
NOTE
Power Query visualizza un filtro specifico del tipo in base al tipo di dati della colonna.

Filtri specifici del tipo


A seconda del tipo di dati della colonna, nel menu di ordinamento e filtro verranno visualizzati comandi diversi.
Le immagini seguenti mostrano esempi di colonne data, testo e numeriche.
Filtra righe
Quando si seleziona uno dei filtri specifici del tipo, si userà la finestra di dialogo Filtra righe per specificare le
regole di filtro per la colonna. Questa finestra di dialogo è illustrata nell'immagine seguente.
La finestra di dialogo Filtra righe ha due modalità: Di base e Avanzate.
B a si c

Con la modalità di base è possibile implementare fino a due regole di filtro basate su filtri specifici del tipo.
Nell'immagine precedente si noti che il nome della colonna selezionata viene visualizzato dopo l'etichetta
Mantieni righe in cui , per determinare la colonna in cui vengono implementate queste regole di filtro.
Si supponga, ad esempio, che nella tabella seguente si voglia filtrare il codice conto in base a tutti i valori che
iniziano con PA o PTY.

A tale scopo, è possibile passare alla finestra di dialogo Filtra righe per la colonna Codice conto e specificare il
set di regole di filtro desiderato.
In questo esempio selezionare prima di tutto il pulsante Di base. In Keep rows where "Account Code"
(Mantieni righe in cui "Codice account" ) selezionare inizia con e quindi immettere PA . Selezionare quindi il
pulsante o . Sotto il pulsante o selezionare inizia con e quindi immettere PTY. Selezionare OK.
Il risultato di tale operazione offrirà il set di righe che si sta cercando.

A van z at o

Con la modalità avanzata è possibile implementare tutti i filtri specifici del tipo necessari da tutte le colonne
della tabella.
Si supponga, ad esempio, che invece di applicare il filtro precedente in modalità di base, si voglia implementare
un filtro per codice conto per visualizzare tutti i valori che terminano con 4 . Inoltre, si vogliono visualizzare
valori oltre $ 100 nella colonna Sales.
In questo esempio selezionare prima il pulsante Avanzate. Nella prima riga selezionare Codice conto in Nome
colonna , termina con in Operatore e selezionare 4 per Valore. Nella seconda riga selezionare e , quindi
selezionare Sales in Nome colonna , è maggiore di in Operatore e 100 in Valore . Selezionare quindi OK.

Il risultato di tale operazione offrirà una sola riga che soddisfa entrambi i criteri.
NOTE
È possibile aggiungere tutte le clausole che si desiderano selezionando Aggiungi clausola . Tutte le clausole agiscono allo
stesso livello, quindi è consigliabile creare più passaggi di filtro se è necessario implementare filtri che si basano su altri
filtri.
Scegliere o rimuovere colonne
07/12/2021 • 2 minutes to read

Scegliere le colonne e Rimuovi colonne sono operazioni che consentono di definire le colonne che devono
essere conservate nella tabella e quelle da rimuovere. Questo articolo illustra come usare i comandi Scegli
colonne e Rimuovi colonne usando la tabella di esempio seguente per entrambe le operazioni.

L'obiettivo è creare una tabella simile all'immagine seguente.

Scegliere le colonne
Nel gruppo Gestisci colonne della scheda Home selezionare Scegli colonne.

Verrà visualizzata la finestra di dialogo Scegli colonne contenente tutte le colonne disponibili nella tabella. È
possibile selezionare tutti i campi che si desidera mantenere e rimuovere campi specifici deselezionando la
casella di controllo associata. Per questo esempio, si desidera rimuovere il GUID e il repor t creato dalle
colonne, in modo da deselezionare le caselle di controllo per tali campi.
Dopo aver selezionato OK, si creerà una tabella che contiene solo le colonne Date , Product , SalesPerson e
Units.

Rimuovere le colonne
Quando si seleziona Rimuovi colonne dalla scheda Home sono disponibili due opzioni:
Rimuovi colonne : rimuove le colonne selezionate.
Rimuovi altre colonne: rimuove tutte le colonne dalla tabella ad eccezione di quelle selezionate.

Rimuovere le colonne selezionate


A partire dalla tabella di esempio, selezionare le colonne GUID e Report create. Fare clic con il pulsante destro
del mouse per selezionare una delle intestazioni di colonna. Verrà visualizzato un nuovo menu di scelta rapida,
in cui è possibile selezionare il comando Rimuovi colonne.
Dopo aver selezionato Rimuovi colonne , si creerà una tabella che contiene solo le colonne Date , Product ,
SalesPerson e Units.

Rimuovi altre colonne


A partire dalla tabella di esempio, selezionare tutte le colonne della tabella, ad eccezione del GUID e del repor t
creato. Nella scheda Home selezionare Rimuovi colonne Rimuovi altre > colonne .

Dopo aver selezionato Rimuovi altre colonne, si creerà una tabella che contiene solo le colonne Date ,
Product , SalesPerson e Units.
Raggruppamento o riepilogo di righe
07/12/2021 • 5 minutes to read

In Power Query è possibile raggruppare i valori di varie righe in un singolo valore raggruppando le righe in
base ai valori in una o più colonne. È possibile scegliere tra due tipi di operazioni di raggruppamento:
Aggregare una colonna usando una funzione di aggregazione.
Eseguire un'operazione di riga.
Per questa esercitazione si usa la tabella di esempio illustrata nell'immagine seguente.

Tabella con colonne che mostrano Anno (2020), Paese (USA, Canada), Prodotto (shirt o shorts), canale di vendita
(online o rivenditore) e unità (vari valori da 55 a 7500) :::image-end:::

Posizione in cui trovare il pulsante Raggruppa per


È possibile trovare il pulsante Raggruppa per in tre posizioni:
Nel gruppo Trasforma della scheda Home .

Nel gruppo Tabella della scheda Trasforma .

Nel menu di scelta rapida fare clic con il pulsante destro del mouse per selezionare le colonne.
Usare una funzione di aggregazione per raggruppare in base a una o
più colonne
In questo esempio l'obiettivo è riepilogare le unità totali vendute a livello di paese e canale di vendita. Si
useranno le colonne Countr y e Sales Channel per eseguire l'operazione group by.
1. Selezionare Raggruppa per nella scheda Home.
2. Selezionare l'opzione Avanzate per poter selezionare più colonne in base alle quali eseguire il
raggruppamento.
3. Selezionare le colonne Countr y e Sales Channel.
4. Nella sezione Nuove colonne creare una nuova colonna in cui il nome è Total units , l'operazione di
aggregazione è Sum e la colonna usata è Units .
5. Fare clic su OK
Questa operazione fornisce la tabella che si sta cercando.

Eseguire un'operazione di riga per raggruppare in base a una o più


colonne
In questo esempio si vogliono le unità totali vendute e si vogliono anche altre due colonne che forniscono il
nome e le unità vendute per il prodotto con le prestazioni migliori, riepilogate a livello di paese e canale — — di
vendita.
L'obiettivo è raggiungere una tabella simile all'immagine seguente della tabella di esempio originale.
1. Usare le colonne seguenti come colonne Group by:
Paese
Sales Channel
2. Creare due nuove colonne seguendo questa procedura:
a. Aggregare la colonna Units usando l'operazione Sum. Assegnare a questa colonna il nome Total
units .
b. Aggiungere una nuova colonna Products usando l'operazione Tutte le righe.

Al termine dell'operazione, si noti che la colonna Products contiene valori di [ tabella ] all'interno di ogni cella.
Ogni valore table contiene tutte le righe raggruppate in base alle colonne Country e [ ] Sales Channel della
tabella originale. È possibile selezionare lo spazio vuoto all'interno della cella per visualizzare un'anteprima del
contenuto della tabella nella parte inferiore della finestra di dialogo.
NOTE
Il riquadro di anteprima dei dettagli potrebbe non visualizzare tutte le righe usate per l'operazione group-by. È possibile
selezionare il [ valore Tabella per visualizzare tutte le righe relative ] all'operazione group-by corrispondente.

Successivamente, è necessario estrarre la riga con il valore più alto nella colonna Units delle tabelle all'interno
della nuova colonna Products e chiamare la nuova colonna Top performer product .
Estrarre le informazioni sui prodotti con prestazioni migliori
Con la nuova colonna Products con valori di tabella, è possibile creare una nuova colonna personalizzata dalla
scheda Aggiungi colonna sulla barra multifunzione e selezionando Colonna personalizzata [ dal ] gruppo
Generale.

Assegnare alla nuova colonna il nome Top performer product . Immettere la formula
Table.Max([Products], "Units" ) in Formula colonna personalizzata .
Il risultato di tale formula crea una nuova colonna con valori [ ] Record. Questi valori di record sono
essenzialmente una tabella con una sola riga. Questi record contengono la riga con il valore massimo per la
colonna Units di ogni valore Table [ nella ] colonna Products.

Con questa nuova colonna prodotto Top performer che contiene valori [ ] Record, è possibile selezionare
l'espansione. espandere l'icona, selezionare i campi Prodotto e Unità e quindi selezionare OK.

Dopo la rimozione della colonna Products e l'impostazione del tipo di dati per entrambe le colonne appena
espanse, il risultato sarà simile all'immagine seguente.

Raggruppamento fuzzy
NOTE
La funzionalità seguente è disponibile solo in Power Query Online.

Per illustrare come eseguire il "raggruppamento fuzzy", si consideri la tabella di esempio illustrata nell'immagine
seguente.

L'obiettivo del raggruppamento fuzzy è eseguire un'operazione group-by che usa un algoritmo di
corrispondenza approssimativo per le stringhe di testo. Power Query usa l'algoritmo di somiglianza Diacard per
misurare la somiglianza tra coppie di istanze. Applica quindi un clustering gerarchico agglomerato per
raggruppare le istanze. L'immagine seguente mostra l'output previsto, in cui la tabella verrà raggruppata in base
alla colonna Person.

Per eseguire il raggruppamento fuzzy, eseguire gli stessi passaggi descritti in precedenza in questo articolo.
L'unica differenza è che questa volta, nella finestra di dialogo Raggruppa per , selezionare la casella di controllo
Usa raggruppamento fuzzy .

Per ogni gruppo di righe, Power Query selezionerà l'istanza più frequente come istanza "canonica". Se si
verificano più istanze con la stessa frequenza, Power Query selezionerà la prima. Dopo aver selezionato OK
nella finestra di dialogo Raggruppa per, si otterrà il risultato previsto.

Tuttavia, si ha un maggiore controllo sull'operazione di raggruppamento fuzzy espandendo le opzioni del


gruppo fuzzy .
Per il raggruppamento fuzzy sono disponibili le opzioni seguenti:
Soglia di somiglianza (facoltativo): questa opzione indica il raggruppamento di due valori simili.
L'impostazione minima 0 determina il raggruppamento di tutti i valori. L'impostazione massima di 1
consentirà di raggruppare solo i valori che corrispondono esattamente. Il valore predefinito è 0,8.
Ignora maiuscole/minuscole: durante il confronto delle stringhe di testo, la distinzione tra maiuscole e
minuscole verrà ignorata. Questa opzione è attivata per impostazione predefinita.
Raggruppando le par ti di testo: l'algoritmo tenterà di combinare parti di testo (ad esempio, micro e
soft in Microsoft) per raggruppare i valori.
Tabella di trasformazione (facoltativo): è possibile selezionare una tabella di trasformazione che esegue
il mapping dei valori (ad esempio, il mapping di MSFT a Microsoft) per raggrupparli.
Per questo esempio, verrà usata una tabella di trasformazione per illustrare come è possibile eseguire il
mapping dei valori. La tabella di trasformazione include due colonne:
Da : stringa di testo da cercare nella tabella.
A : stringa di testo da usare per sostituire la stringa di testo nella colonna Da.
Nell'immagine seguente viene illustrata la tabella di trasformazione utilizzata in questo esempio.
IMPORTANT
È importante che la tabella di trasformazione abbia gli stessi nomi di colonne e colonne illustrati in precedenza (devono
essere "From" e "To"), in caso contrario Power Query non li riconoscerà.

Tornare alla finestra di dialogo Raggruppa per , espandere Opzioni gruppo fuzzy e quindi selezionare il menu
a discesa Tabella di trasformazione .

Dopo aver selezionato la tabella di trasformazione, selezionare OK. Il risultato di tale operazione offrirà il
risultato illustrato nell'immagine seguente.

In questo esempio è stata abilitata l'opzione Ignora maiuscole/minuscole, pertanto i valori nella colonna Da
della tabella Trasformazione verranno usati per cercare la stringa di testo senza considerare la distinzione tra
maiuscole e minuscole. Questa operazione di trasformazione viene eseguita per prima e quindi viene eseguita
l'operazione di raggruppamento fuzzy.

NOTE
Quando si esegue il raggruppamento in base a più colonne, la tabella di trasformazione eseguirà l'operazione di
sostituzione in tutte le colonne se la sostituzione del valore aumenta il punteggio di somiglianza.

Vedi anche
Aggiungere una colonna personalizzata
Rimuovere duplicati
Trasformare le colonne tramite UnPivot
07/12/2021 • 7 minutes to read

In Power Query è possibile trasformare le colonne in coppie attributo-valore, in cui le colonne diventano righe.

Diagramma che mostra una tabella a sinistra con una colonna e righe vuote e i valori degli attributi A1, A2 e A3
come intestazioni di colonna. La colonna A1 contiene i valori V1, V4 e V7, la colonna A2 contiene i valori V2, V5
e V8 e la colonna A3 contiene i valori V3, V6 e V9. Con le colonne unPivot, una tabella a destra del diagramma
contiene una colonna vuota e righe, una colonna Attributi con nove righe con A1, A2 e A3 ripetute tre volte e
una colonna Valori con valori da V1 a V9.
Ad esempio, data una tabella simile alla seguente, in cui le righe dei paesi e le colonne data creano una matrice
di valori, è difficile analizzare i dati in modo scalabile.

Tabella contenente un set di colonne Country nel tipo di dati Text e colonne 01/06/2020, 01/07/2020 e
1/08/2020 impostate come tipo di dati Numero intero. La colonna Country contiene gli Stati Uniti nella riga 1, il
Canada nella riga 2 e il Canada nella riga 3.
È invece possibile trasformare la tabella in una tabella con colonne trasformate tramite UnPivot, come illustrato
nell'immagine seguente. Nella tabella trasformata è più semplice usare la data come attributo per filtrare.

Tabella contenente una colonna Country impostata come tipo di dati Text, una colonna Attribute impostata come
tipo di dati Text e una colonna Value impostata come tipo di dati Numero intero. La colonna Country contiene gli
Stati Uniti nelle prime tre righe, il Canada nelle tre righe successive e il Canada nelle ultime tre righe. La colonna
Attribute contiene 6/1/2020 nella prima, nella seconda e nella settima riga, 7/1/2020 nella seconda, quinta e
ottava riga e 8/1/2020 nella terza, sesta e nona riga.
La chiave di questa trasformazione è che nella tabella è presente un set di date che devono far parte di una
singola colonna. Il rispettivo valore per ogni data e paese deve essere in una colonna diversa, creando in effetti
una coppia attributo-valore.
Power Query crea sempre la coppia attributo-valore usando due colonne:
Attributo : nome delle intestazioni di colonna che sono state unPivot.
Valore : i valori sottostanti a ognuna delle intestazioni di colonna tramite UnPivot.
Nell'interfaccia utente sono disponibili più posizioni in cui è possibile trovare colonne UnPivot. È possibile fare
clic con il pulsante destro del mouse sulle colonne che si desidera trasformare tramite UnPivot oppure
selezionare il comando dalla scheda Trasforma della barra multifunzione.
Esistono tre modi per eseguire l'unpivot delle colonne da una tabella:
Trasformare le colonne tramite UnPivot
UnPivot per altre colonne
Solo colonne selezionate tramite UnPivot

Trasformare le colonne tramite UnPivot


Per lo scenario descritto in precedenza, è prima di tutto necessario selezionare le colonne per cui si vuole
eseguire l'unpivot. È possibile premere CTRL quando si selezionano tutte le colonne necessarie. Per questo
scenario, si desidera selezionare tutte le colonne tranne quella denominata Countr y . Dopo aver selezionato le
colonne, fare clic con il pulsante destro del mouse su una delle colonne selezionate e quindi scegliere UnPivot
columns (UnPivot per colonne).

Il risultato di tale operazione restituisce il risultato illustrato nell'immagine seguente.


Tabella contenente una colonna Country impostata come tipo di dati Text, una colonna Attribute impostata come
tipo di dati Text e una colonna Value impostata come tipo di dati Numero intero. La colonna Country contiene gli
Stati Uniti nelle prime tre righe, il Canada nelle tre righe successive e il Canada nelle ultime tre righe. La colonna
Attribute contiene 6/1/2020 nella prima, nella seconda e nella settima riga, 7/1/2020 nella seconda, quinta e
ottava riga e 8/1/2020 nella terza, sesta e nona riga. Inoltre, la voce Colonne UnPivot viene evidenziata nel
riquadro Impostazioni query e il codice della lingua M viene visualizzato nella barra della formula.
Considerazioni speciali
Dopo aver creato la query dai passaggi precedenti, si supponga che la tabella iniziale venga aggiornata in modo
da avere un aspetto simile allo screenshot seguente.

Tabella con le stesse colonne Country, 1/6/2020, 1/7/2020 e 8/1/2020, con l'aggiunta di una colonna 9/1/2020.
La colonna Country contiene ancora i valori USA, Canada e Country, ma include anche UK aggiunto alla quarta
riga e Mexico aggiunto alla quinta riga.
Si noti che è stata aggiunta una nuova colonna per la data 01/09/2020 (1 settembre 2020) e due nuove righe
per i paesi Regno Unito e Messico.
Se si aggiorna la query, si noterà che l'operazione verrà eseguita sulla colonna aggiornata, ma non influirà sulla
colonna che non è stata selezionata in origine (Countr y , in questo esempio). Ciò significa che anche tutte le
nuove colonne aggiunte alla tabella di origine verranno esportate tramite UnPivot.
L'immagine seguente mostra l'aspetto della query dopo l'aggiornamento con la nuova tabella di origine
aggiornata.
Tabella con colonne Country, Attribute e Value. Le prime quattro righe della colonna Country contengono gli
Stati Uniti, le seconde quattro contengono il Canada, le terze quattro contengono Il Messico, le quarta quattro
contengono il Regno Unito e le cinque quattro contengono il Messico. La colonna Attributo contiene 1/6/2020,
01/07/2020, 01/08/2020 e 01/09/2020 nelle prime quattro righe, che vengono ripetute per ogni paese.

UnPivot per altre colonne


È anche possibile selezionare le colonne che non si desidera convertire tramite UnPivot e unPivot per il resto
delle colonne della tabella. In questa operazione vengono visualizzate altre colonne tramite UnPivot.
Il risultato di tale operazione restituisce esattamente lo stesso risultato ottenuto dalle colonne UnPivot .

Tabella contenente una colonna Country impostata come tipo di dati Text, una colonna Attribute impostata come
tipo di dati Text e una colonna Value impostata come tipo di dati Numero intero. La colonna Country contiene gli
Stati Uniti nelle prime tre righe, il Canada nelle tre righe successive e il Canada nelle ultime tre righe. La colonna
Attribute contiene 6/1/2020 nella prima, nella seconda e nella settima riga, 7/1/2020 nella seconda, quinta e
ottava riga e 8/1/2020 nella terza, sesta e nona riga.

NOTE
Questa trasformazione è fondamentale per le query con un numero sconosciuto di colonne. L'operazione unpivot di tutte
le colonne della tabella, ad eccezione di quelle selezionate. Si tratta di una soluzione ideale se l'origine dati dello scenario
ha ottenuto nuove colonne data in un aggiornamento, perché tali colonne verranno prelevate e unPivot.
Considerazioni speciali
Analogamente all'operazione UnPivot sulle colonne, se la query viene aggiornata e vengono prelevati più dati
dall'origine dati, tutte le colonne verranno copiate tramite UnPivot ad eccezione di quelle selezionate in
precedenza.
Per illustrare questo aspetto, si immagini di avere una nuova tabella simile a quella illustrata nell'immagine
seguente.

Tabella con colonne Country, 1/6/2020, 01/07/2020, 01/08/2020 e 01/09/2020, con tutte le colonne impostate
sul tipo di dati Text. La colonna Country contiene, dall'alto verso il basso, USA, Canada, Country, Uk e Mexico.
È possibile selezionare la colonna Countr y e quindi selezionare UnPivot per un'altra colonna , che
restituisce il risultato seguente.

Tabella con colonne Country, Attribute e Value. Le colonne Country e Attribute sono impostate sul tipo di dati
Text. La colonna Valore è impostata sul tipo di dati Valore intero. Le prime quattro righe della colonna Country
contengono gli Stati Uniti, le seconde quattro contengono il Canada, le terze quattro contengono Il Messico, le
quarta quattro contengono il Regno Unito e le cinque quattro contengono il Messico. La colonna Attributo
contiene 1/6/2020, 01/07/2020, 01/08/2020 e 01/09/2020 nelle prime quattro righe, che vengono ripetute per
ogni paese.
Solo colonne selezionate tramite UnPivot
Lo scopo di quest'ultima opzione è quello di convertire tramite UnPivot solo colonne specifiche della tabella.
Questo è importante per gli scenari in cui si ha a che fare con un numero sconosciuto di colonne dall'origine
dati e si desidera eseguire il unpivot solo per le colonne selezionate.
Per eseguire questa operazione, selezionare le colonne da convertire tramite UnPivot, che in questo esempio
sono tutte le colonne ad eccezione della colonna Countr y. Fare quindi clic con il pulsante destro del mouse su
una delle colonne selezionate e quindi scegliere Unpivot only selected columns (UnPivot solo colonne
selezionate).

Si noti che questa operazione produce lo stesso output degli esempi precedenti.

Tabella contenente una colonna Country impostata come tipo di dati Text, una colonna Attribute impostata come
tipo di dati Text e una colonna Value impostata come tipo di dati Numero intero. La colonna Country contiene gli
Stati Uniti nelle prime tre righe, il Canada nelle tre righe successive e il Canada nelle ultime tre righe. La colonna
Attribute contiene 6/1/2020 nella prima, nella seconda e nella settima riga, 7/1/2020 nella seconda, quinta e
ottava riga e 8/1/2020 nella terza, sesta e nona riga.
Considerazioni speciali
Dopo l'aggiornamento, se la tabella di origine cambia in modo da avere una nuova colonna 9/1/2020 e nuove
righe per Regno Unito e Messico, l'output della query sarà diverso dagli esempi precedenti. Si immagini che la
tabella di origine, dopo un aggiornamento, cambi alla tabella nell'immagine seguente.

L'output della query sarà simile all'immagine seguente.

L'operazione unPivot è stata applicata solo alle colonne 01/06/2020 , 01/07/2020 e 1/08/2020, quindi la
colonna con intestazione 01/09/2020 rimane invariata.
Trasformare colonne tramite Pivot
07/12/2021 • 4 minutes to read

In Power Query è possibile creare una tabella contenente un valore aggregato per ogni valore univoco in una
colonna. Power Query raggruppa ogni valore univoco, esegue un calcolo aggregato per ogni valore e trasforma
la colonna in una nuova tabella.

Diagramma che mostra una tabella a sinistra con una colonna e righe vuote. Una colonna Attributes contiene
nove righe con A1, A2 e A3 ripetute tre volte. Una colonna Valori contiene, dall'alto verso il basso, i valori da V1
a V9. Con le colonne pivot, una tabella a destra contiene una colonna vuota e righe, i valori di Attributi A1, A2 e
A3 come intestazioni di colonna, con la colonna A1 contenente i valori V1, V4 e V7, la colonna A2 contenente i
valori V2, V5 e V8 e la colonna A3 contenente i valori V3, V6 e V9.
Imagine una tabella come quella nell'immagine seguente.

Tabella contenente una colonna Country impostata come tipo di dati Text, una colonna Date impostata come
Tipo di dati e una colonna Valore impostata come tipo di dati Numero intero. La colonna Country contiene gli
Stati Uniti nelle prime tre righe, il Canada nelle tre righe successive e il Canada nelle ultime tre righe. La colonna
Date contiene 1/6/2020 nella prima, nella seconda e nella settima riga, 7/1/2020 nella seconda, quinta e ottava
riga e 8/1/2020 nella terza, sesta e nona riga.
Questa tabella contiene i valori per paese e data in una tabella semplice. In questo esempio si vuole trasformare
questa tabella in quella in cui la colonna data viene trasformata con Pivot, come illustrato nell'immagine
seguente.
Tabella contenente un set di colonne Country nel tipo di dati Text e colonne 01/06/2020, 01/07/2020 e
1/08/2020 impostate come tipo di dati Numero intero. La colonna Country contiene il Canada nella riga 1, Il
Paese nella riga 2 e gli Stati Uniti nella riga 3.

NOTE
Durante l'operazione sulle colonne pivot, Power Query la tabella verrà ordinata in base ai valori trovati nella prima colonna
a sinistra della tabella — — in ordine crescente.

Per eseguire il pivot di una colonna


1. Selezionare la colonna da convertire in Pivot.
2. Nella scheda Trasforma del gruppo Qualsiasi colonna selezionare Colonna pivot .

3. Nell'elenco Colonna valore della finestra di dialogo Colonna pivot selezionare Valore .
Per impostazione predefinita, Power Query tenterà di eseguire una somma come aggregazione, ma è
possibile selezionare l'opzione Avanzate per visualizzare altre aggregazioni disponibili.

Le opzioni disponibili sono:


Non aggregare
Conteggio (tutti)
Conteggio (non vuoto)
Minima
Massimo
Mediana
Somma
Media

Pivoting di colonne che non possono essere aggregate


È possibile eseguire il pivot delle colonne senza aggregarsi quando si lavora con colonne che non possono
essere aggregate o l'aggregazione non è necessaria per le operazioni che si sta tentando di eseguire. Si
immagini, ad esempio, una tabella come l'immagine seguente, con i campi Countr y, Position e Product.
Tabella con la colonna Country contenente gli Stati Uniti nelle prime tre righe, Canada nelle tre righe successive
e Country nelle ultime tre righe. La colonna Position contiene first place nella prima, quarta e settima riga,
second place nella seconda, quinta e ottava riga e terza posizione nella terza, sesta e nona riga.
Si vuole convertire la colonna Position in questa tabella in modo da avere i relativi valori come nuove colonne.
Per i valori di queste nuove colonne, si useranno i valori della colonna Product. Selezionare la colonna
Posizione e quindi selezionare Colonna pivot per eseguire il pivot di tale colonna.

Nella finestra di dialogo Colonna pivot selezionare la colonna Product come colonna valore. Selezionare il
pulsante di opzione Avanzate nella finestra di dialogo Colonne pivot e quindi selezionare Non aggregare .
Il risultato di questa operazione restituisce il risultato illustrato nell'immagine seguente.

Tabella contenente le colonne Country, First Place, Second Place e Third Place, con la colonna Country che
contiene il Canada nella riga 1, la Colonna Della Seconda e gli Stati Uniti nella riga 3.
Errori durante l'uso dell'opzione Non aggregare
L'opzione Non aggregare funziona perché consente di recuperare un singolo valore per l'operazione pivot da
inserire come valore per l'intersezione della coppia di colonne e righe. Si supponga, ad esempio, di avere una
tabella simile a quella nell'immagine seguente.

Tabella con colonne Country, Date e Value. La colonna Country contiene gli Stati Uniti nelle prime tre righe, il
Canada nelle tre righe successive e il Canada nelle ultime tre righe. La colonna Date contiene una data di
1/6/2020 in tutte le righe. La colonna value contiene vari numeri interi compresi tra 20 e 785.
Si vuole convertire tramite Pivot la tabella usando la colonna Data e usare i valori della colonna Valore .
Poiché questo pivot fa in modo che la tabella abbia solo i valori Countr y nelle righe e Le date come colonne, si
otterrà un errore per ogni singolo valore di cella perché sono presenti più righe per ogni combinazione di
Countr y e Date . Il risultato dell'operazione di colonna pivot restituisce i risultati mostrati nell'immagine
seguente.
editor di Power Query che mostra una tabella con le colonne Country e 6/1/2020. La colonna Country contiene
Canada nella prima riga, Country nella seconda riga e USA nella terza riga. Tutte le righe nella colonna 1/6/2020
contengono errori. Nella tabella è presente un altro riquadro che mostra l'errore di espressione con il
messaggio "Sono presenti troppi elementi nell'enumerazione per completare l'operazione".
Si noti il messaggio di errore "Expression.Error: There were too many elements in the enumeration to complete
the operation". Questo errore si verifica perché l'operazione Non aggregare prevede un solo valore per la
combinazione di paese e data.
Trasporre una tabella
07/12/2021 • 2 minutes to read

L'operazione di trasposizione della tabella Power Query ruota la tabella di 90 gradi, trasformando le righe in
colonne e le colonne in righe.
Imagine una tabella come quella nell'immagine seguente, con tre righe e quattro colonne.

Tabella con quattro colonne denominate Da Column1 a Column4, con tutte le colonne impostate sul tipo di dati
Text. Column1 contiene Events nella riga 1, Participants nella riga 2 e Funds nella riga 3. Column2 contiene
l'evento 1 nella riga 1, 150 nella riga 2 e 4000 nella riga 3. Column3 contiene l'evento 2 nella riga 1, 450 nella
riga 2 e 10000 nella riga 3. Column4 contiene l'evento 2 nella riga 1, 1250 nella riga 2 e 15000 nella riga 3.
L'obiettivo di questo esempio è trasporre la tabella in modo da ottenere quattro righe e tre colonne.

Tabella con tre colonne denominate Eventi con tipo di dati Testo, Partecipanti con tipo di dati Numero intero e
Fondi con un tipo di dati numero intero. La colonna Eventi contiene, dall'alto verso il basso, Evento 1, Evento 2
ed Evento 3. La colonna Partecipanti contiene, dall'alto verso il basso, 150, 450 e 1250. La colonna Fondi
contiene, dall'alto verso il basso, 4000, 10000 e 15000.
Nella scheda Trasforma della barra multifunzione selezionare Trasporre .

Il risultato di tale operazione sarà simile all'immagine seguente.


Tabella con tre colonne denominate Column1, Column2 e Column 3, con tutte le colonne impostate sul tipo di
dati Any. Column1 contiene, dall'alto verso il basso, Eventi, Evento 1, Evento 2 ed Evento 3. Column2 contiene,
dall'alto verso il basso, Partecipanti, 150, 450 e 1250. La colonna 3 contiene, dall'alto verso il basso, Fondi, 4000,
10000 e 15000.

NOTE
Durante l'operazione di trasposizione verrà trasposto solo il contenuto della tabella. Le intestazioni di colonna della tabella
iniziale andranno perse. Le nuove colonne avranno il nome Column seguito da un numero sequenziale.

Le intestazioni necessarie in questo esempio sono nella prima riga della tabella . Per alzare di livello la prima
riga in intestazioni, selezionare l'icona della tabella nell'angolo superiore sinistro dell'anteprima dei dati e quindi
selezionare Usa la prima riga come intestazioni.

Il risultato di tale operazione restituisce l'output che si sta cercando.

Tabella finale con tre colonne denominate Events con tipo di dati Text, Participants con tipo di dati Whole
number e Funds con un tipo di dati number intero. La colonna Eventi contiene, dall'alto verso il basso, Evento 1,
Evento 2 ed Evento 3. La colonna Partecipanti contiene, dall'alto verso il basso, 150, 450 e 1250. La colonna
Fondi contiene, dall'alto verso il basso, 4000, 10000 e 15000.
NOTE
Per altre informazioni sull'operazione di innalzamento di livello delle intestazioni, nota anche come Usare la prima riga
come intestazioni, passare a Alzare di livello o abbassare di livello le intestazioni di colonna.
Invertire le righe
07/12/2021 • 2 minutes to read

Con Power Query, è possibile invertire l'ordine delle righe in una tabella.
Imagine una tabella con due colonne, ID e Countr y , come illustrato nell'immagine seguente.

Tabella iniziale con le colonne ID e Country. Le righe ID contengono, dall'alto verso il basso, valori da 1 a 7. Le
righe Country contengono, dall'alto verso il basso, Stati Uniti, Canada, Messico, Cina, Spagna, Spagna, e Canada.
Nella scheda Trasforma selezionare Inver ti righe.

Il risultato di questa operazione sarà simile al seguente.

Tabella di output con le righe invertte. Le righe ID ora contengono, dall'alto verso il basso, i valori di 7 fino a 1.
Le righe Country contengono, dall'alto verso il basso, Country, Country, Spagna, Cina, Messico, Canada e Stati
Uniti.
Tipi di dati in Power Query
07/12/2021 • 10 minutes to read

I tipi di dati Power Query vengono usati per classificare i valori in modo da avere un set di dati più strutturato. I
tipi di dati vengono definiti a livello di campo i valori all'interno di un campo vengono impostati in modo da
essere conformi al tipo — di dati del campo.
Il tipo di dati di una colonna viene visualizzato sul lato sinistro dell'intestazione di colonna con un'icona che
rappresenta il tipo di dati.

NOTE
Power Query fornisce un set di trasformazioni contestuali e opzioni basate sul tipo di dati della colonna. Ad esempio,
quando si seleziona una colonna con un tipo di dati Date, si ottengono trasformazioni e opzioni applicabili a quel tipo di
dati specifico. Queste trasformazioni e opzioni si verificano in tutta Power Query,ad esempio nelle schede Trasforma e
Aggiungi colonna e nelle opzioni di filtro intelligente.

Nella tabella seguente sono elencati i Power Query di dati più comuni usati nella tabella seguente. Anche se non
si ambito di questo articolo, è possibile trovare l'elenco completo dei tipi di dati nell'articolo Power Query M
formula language Types ( Tipi di linguaggio delleformule M).

T IP O DI DAT I IC O N A DESC RIZ IO N E

Text Stringa di dati di tipo carattere


Unicode. Può trattatasi di stringhe,
numeri o date rappresentati in un
formato di testo. La lunghezza
massima della stringa è 268.435.456
caratteri Unicode (dove ogni carattere
Unicode è di due byte) o 536.870.912
byte.

Vero/Falso Valore booleano True o False.


T IP O DI DAT I IC O N A DESC RIZ IO N E

Numero decimale Rappresenta un numero a virgola


mobile a 64 bit (otto byte). Si tratta del
tipo di numero più comune e
corrisponde ai numeri come si pensa in
genere. Anche se concepito per gestire
numeri con valori frazionari, questo
tipo gestisce anche numeri interi. Il
tipo Numero decimale può gestire
valori negativi da – 1,79E +308 a –
2,23E 308, 0 e valori positivi da –
2,23E – 308 a 1,79E + 308. Ad
esempio, 34, 34,01 e 34,000367063
sono numeri decimali validi. La
massima precisione che può essere
rappresentata in un tipo Numero
decimale è di 15 cifre. Il separatore
decimale può essere inserito in
qualsiasi punto del numero. Il tipo
Numero decimale corrisponde al modo
in cui Excel archivia i relativi numeri. Si
noti che un numero a virgola mobile
binario non può rappresentare tutti i
numeri nell'intervallo supportato con
un'accuratezza del 100%. Di
conseguenza, potrebbero verificarsi
piccole differenze di precisione quando
si rappresentano determinati numeri
decimali.

Numero decimale fisso Noto anche come tipo Currency,


questo tipo di dati ha una posizione
fissa per il separatore decimale. Il
separatore decimale ha sempre
quattro cifre a destra e consente 19
cifre significative. Il valore più grande
che può rappresentare è
922.337.203.685.477,5807 (positivo o
negativo). A differenza del numero
decimale, il tipo Numero decimale fisso
è sempre preciso ed è quindi utile nei
casi in cui l'imprecisione della
notazione a virgola mobile potrebbe
introdurre errori.

Numero intero Rappresenta un valore intero a 64 bit


(otto byte). Poiché è un numero intero,
non ha cifre a destra della posizione
decimale. Consente 19 cifre. numeri
interi positivi o negativi compresi tra –
9.223.372.036.854.775.807 –
(2^63+1) e
9.223.372.036.854.775.806 (2^63 –
2). Può rappresentare la massima
precisione possibile dei vari tipi di dati
numerici. Come per il tipo Numero
decimale fisso, il tipo Numero intero
può essere utile nei casi in cui è
necessario controllare
l'arrotondamento.
T IP O DI DAT I IC O N A DESC RIZ IO N E

Percentuale Fondamentalmente uguale a un tipo


Numero decimale, ma include una
maschera per formattare i valori nella
colonna come percentuale nella
finestra editor di Power Query dati.

Data/Ora Rappresenta un valore di data e ora. Il


valore data/ora viene archiviato come
tipo Numero decimale, quindi è
possibile eseguire effettivamente la
conversione tra i due tipi. La parte
relativa all'ora di una data viene
archiviata come frazione in multipli
interi di 1/300 secondi (3,33 ms). Sono
supportate le date tra gli anni 1900 e
9999.

Data Rappresenta solo una data (nessuna


parte dell'ora). Una data quando viene
convertita nel modello corrisponde al
valore Data/Ora con il valore
frazionario uguale a zero.

Time Rappresenta la data e l'ora (nessuna


parte della data). Un valore Ora
quando viene convertito nel modello
corrisponde al valore Data/Ora senza
cifre a sinistra della posizione decimale.

Data/Ora/Fuso orario Rappresenta una data/ora UTC con


una differenza di fuso orario. Viene
convertito in data/ora quando viene
caricato nel modello.

Duration Rappresenta un periodo di tempo, che


viene convertito in un tipo Numero
decimale quando viene caricato nel
modello. Come numero decimale, può
essere aggiunto o sottratto da un
campo data/ora con risultati corretti.
Poiché si tratta di un tipo Numero
decimale, è possibile usarlo facilmente
nelle visualizzazioni che mostrano la
grandezza.

Binario Il tipo di dati binario può essere usato


per rappresentare qualsiasi altro tipo di
dati con un formato binario.
T IP O DI DAT I IC O N A DESC RIZ IO N E

qualsiasi Il tipo di dati Any è lo stato assegnato


a una colonna che non ha una
definizione esplicita del tipo di dati.
Qualsiasi è il tipo di dati che classifica
tutti i valori. È consigliabile definire
sempre in modo esplicito i tipi di dati
delle colonne per le query da origini
non strutturate ed evitare di avere
colonne con il tipo di dati Any come
output della query.

<a name="data-type-detection">Rilevamento del tipo di dati


Il rilevamento dei tipi di dati viene eseguito automaticamente quando ci si connette a:
Le origini dati strutturate, ad esempio i database , Power Query legge lo schema della tabella
dall'origine dati e visualizzano automaticamente i dati usando il tipo di dati corretto per ogni colonna.
Le origini non strutturate, ad esempio Excel, CSV e file di testo, Power Query rileva automaticamente i
tipi di dati controllando i valori nella tabella. Per impostazione predefinita, il rilevamento automatico dei
tipi di dati è Power Query per le origini non strutturate.
È anche possibile usare il comando Rileva tipo di dati nel gruppo Qualsiasi colonna della scheda Trasforma per
rilevare automaticamente i tipi di dati delle colonne della tabella.
![Comando Rileva tipo di dati nella scheda Trasforma.](images/me-detect-data-type-icon-any-column.png
"Comando Rileva tipo di dati nella scheda Trasforma")

Come definire un tipo di dati di colonna


È possibile definire o modificare il tipo di dati di una colonna in una delle quattro posizioni seguenti:
Nel gruppo Trasforma della scheda Home scegliere Tipo di dati dal menu a discesa.

Nel gruppo Qualsiasi colonna della scheda Trasforma scegliere Tipo di dati dal menu a discesa Tipo di
dati.
Selezionando l'icona sul lato sinistro dell'intestazione di colonna.

Nel menu di scelta rapida della colonna, in Modifica tipo .


Rilevamento automatico del tipo di dati e delle intestazioni delle colonne
Questa impostazione è specifica per le origini non strutturate. Consente di esaminare e rilevare
automaticamente i tipi di colonna e le intestazioni in base alle prime 200 righe della tabella. Quando questa
impostazione è abilitata, Power Query aggiunge automaticamente due passaggi alla query:
Alza di livello le intestazioni di colonna: alza di livello la prima riga della tabella in modo che sia
l'intestazione di colonna.
Tipo modificato: converte i valori dal tipo di dati Any in un tipo di dati in base all'ispezione dei valori di
ogni colonna.
Per impostazione predefinita, questa impostazione è abilitata. Per disabilitare o abilitare questa impostazione,
seguire la procedura che si applica all'esperienza Power Query personalizzata.
Per configurare il rilevamento automatico dei tipi di dati in Power Quer y Online
Nella scheda Home selezionare Opzioni e quindi selezionare Project opzioni . Nella finestra Project opzioni
selezionare la casella di controllo Rileva automaticamente i tipi di colonna e le intestazioni per le origini non
strutturate .
Per configurare il rilevamento automatico dei tipi di dati in Power Quer y per Desktop
È possibile definire questo comportamento sia a livello globale che a livello di file nella finestra Opzioni (nel
editor di Power Query, nella scheda File selezionare Opzioni e impostazioni > Opzioni).
Globale: nel riquadro sinistro in Globale selezionare Caricamento dati. Nel riquadro destro in
Rilevamento del tipo è possibile selezionare una delle tre configurazioni di rilevamento dei tipi che
verranno applicate a ogni nuovo file creato nell'applicazione:
Rilevare sempre i tipi di colonna e le intestazioni per le origini non strutturate
Rilevare i tipi di colonna e le intestazioni per le origini non strutturate in base
all'impostazione di ogni file
Non rilevare mai i tipi di colonna e le intestazioni per le origini non strutturate
File corrente: nel riquadro sinistro in File corrente selezionare Caricamento dati. Nel riquadro
destro in Rilevamento dei tipi selezionare se si vuole abilitare o disabilitare il rilevamento dei tipi per il
file corrente.
Impostazioni locali del documento o del progetto
Power Query gestisce due componenti distinti che gestiscono l'aspetto e l'interpretazione degli elementi:
Localizzazione: componente che indica Power Query in quale lingua deve essere visualizzato.
Globalizzazione: componente che gestisce la formattazione dei valori, oltre all'interpretazione dei valori di
testo.
Le impostazioni locali sono un singolo valore che contiene sia i componenti di localizzazione che di
globalizzazione. Le impostazioni locali vengono usate per interpretare i valori di testo e convertirli in altri tipi di
dati. Ad esempio, le impostazioni locali inglese (Stati Uniti) significano che la localizzazione è in inglese Stati
Uniti e la globalizzazione, o formato del valore, si basa sugli standard usati nel Stati Uniti.
Quando Power Query definisce un tipo di dati di colonna o esegue la conversione da un tipo di dati a un altro,
deve interpretare i valori da convertire prima di poterli trasformare in un tipo di dati diverso.
In Power Query Online questa interpretazione è definita nelle opzioni Project , in Impostazioni locali.
In Power Query desktop, Power Query automaticamente il formato locale del sistema operativo e lo usa
per interpretare i valori per la conversione del tipo di dati. Per eseguire l'override di questa
configurazione delle impostazioni locali, aprire la finestra Opzioni query e nel riquadro sinistro in File
corrente selezionare Impostazioni internazionali. Da qui è possibile modificare le impostazioni locali
in base all'impostazione desiderata.
Questa impostazione delle impostazioni locali è importante per l'interpretazione dei valori di testo in un tipo di
dati specifico. Si supponga, ad esempio, di avere le impostazioni locali impostate come inglese (Stati Uniti), ma
che una colonna in uno dei file CSV abbia le date formattate nel formato Regno Unito di giorno/mese/anno.

Quando si prova a impostare il tipo di dati della colonna Date su Date , si ottengono valori di errore.
Questi errori si verificano perché le impostazioni locali in uso tentano di interpretare la data nel formato inglese
(Stati Uniti), ovvero mese/giorno/anno. Poiché non è presente alcun mese 22 nel calendario, viene generato un
errore.
Invece di provare a selezionare solo il tipo di dati Date, è possibile fare clic con il pulsante destro del mouse
sull'intestazione di colonna, scegliere Cambia tipo e quindi selezionare Uso delle impostazioni locali.

Nella finestra di dialogo Modifica tipo di colonna con impostazioni locali selezionare il tipo di dati che si
desidera impostare, ma è anche possibile selezionare le impostazioni locali da usare, che in questo caso devono
essere inglese (Regno Unito).
Usando queste impostazioni locali, Power Query sarà in grado di interpretare correttamente i valori e convertirli
nel tipo di dati corretto.

Per verificare i valori di data finali


La formattazione dei valori è basata sul valore di globalizzazione. In caso di dubbi sul valore visualizzato da
Power Query, è possibile verificare la conversione dei valori di data aggiungendo nuove colonne per il giorno, il
mese e l'anno dal valore . A tale scopo, selezionare la colonna Data e passare alla scheda Aggiungi colonna
sulla barra multifunzione. Nel gruppo di colonne Data e ora sono disponibili le opzioni per una colonna data.
Da qui è possibile estrarre parti del valore della data, ad esempio il numero dell'anno, il numero del mese, il
numero del giorno o ancora più colonne estratte dalla colonna Date.

Usando queste colonne, è possibile verificare che il valore di data sia stato convertito correttamente.

Matrice di conversione dei tipi di dati


La matrice seguente è progettata per offrire una rapida panoramica della fattibilità della conversione del tipo di
dati di un valore da un tipo di dati a un altro.
T IP I
DI
DAT I


Nume
ro
decim
ale


Valuta


Nume
ro
intero


Perce
ntuale


Data/
ora


Data


Ora


Data/
Ora/F
uso
orario


Durat
a


Testo


Vero/
Falso

IC O N A DESC RIZ IO N E

Possibile

Non consentita
IC O N A DESC RIZ IO N E

Possibile, ma aggiunge valori al valore originale

Possibile, ma tronca il valore originale


Gestione degli errori in Power Query
07/12/2021 • 6 minutes to read

In Power Query possibile riscontrare due tipi di errori:


Errori a livello di passaggio
Errori a livello di cella
Questo articolo fornisce suggerimenti su come correggere gli errori più comuni che è possibile trovare a ogni
livello e descrive il motivo dell'errore, il messaggio di errore e i relativi dettagli.

Errore a livello di passaggio


Un errore a livello di passaggio impedisce il caricamento della query e visualizza i componenti dell'errore in un
riquadro giallo.

Motivo dell'errore: la prima sezione prima dei due punti. Nell'esempio precedente il motivo dell'errore è
Expression.Error .
Messaggio di errore: la sezione direttamente dopo il motivo. Nell'esempio precedente il messaggio di
errore è La colonna 'Column' della tabella non è stata trovata.
Dettagli errore: la sezione subito dopo la stringa Details: . Nell'esempio precedente il dettaglio dell'errore
è Column .
Errori comuni a livello di passaggio
In tutti i casi, è consigliabile esaminare in dettaglio il motivo dell'errore, il messaggio di errore e i dettagli
dell'errore per comprendere la causa dell'errore. È possibile selezionare il pulsante Vai all'errore, se
disponibile, per visualizzare il primo passaggio in cui si è verificato l'errore.

Non è possibile trovare l'origine - DataSource.Error


Questo errore si verifica in genere quando l'origine dati non è accessibile dall'utente, l'utente non ha le
credenziali corrette per accedere all'origine dati o l'origine è stata spostata in un'altra posizione.
Esempio: si dispone di una query da un riquadro di testo che si trova nell'unità D e creato dall'utente A.
L'utente A condivide la query con l'utente B, che non ha accesso all'unità D. Quando questa persona tenta di
eseguire la query, ottiene un oggetto DataSource.Error perché nel proprio ambiente non è presente alcuna
unità D.
Possibili soluzioni: è possibile modificare il percorso del file di testo in un percorso a cui entrambi gli utenti
hanno accesso. L'utente B può modificare il percorso del file in modo che sia una copia locale dello stesso file di
testo. Se il pulsante Modifica impostazioni è disponibile nel riquadro degli errori, è possibile selezionarlo e
modificare il percorso del file.
La colonna della tabella non è stata trovata
Questo errore viene in genere attivato quando un passaggio crea un riferimento diretto a un nome di colonna
che non esiste nella query.
Esempio: si dispone di una query da un file di testo in cui uno dei nomi di colonna è Column . Nella query è
presente un passaggio che rinomina la colonna in Date . Ma è stata apportata una modifica al file di testo
originale e non ha più un'intestazione di colonna con il nome Column perché è stata modificata manualmente
in Date . Power Query non riesce a trovare un'intestazione di colonna denominata Column, quindi non può
rinominare alcuna colonna. Viene visualizzato l'errore illustrato nell'immagine seguente.

Possibili soluzioni: esistono più soluzioni per questo caso, ma tutte dipendono dall'operazione che si desidera
eseguire. Per questo esempio, poiché l'intestazione di colonna Date corretta proviene già dal file di testo, è
sufficiente rimuovere il passaggio che rinomina la colonna. In questo modo la query verrà eseguita senza
questo errore.
Altri errori comuni a livello di passaggio
Quando si combinano o si uniscono dati tra più origini dati, è possibile che venga visualizzato un errore
Formula.Firewall, ad esempio quello illustrato nell'immagine seguente.

Questo errore può essere causato da diversi motivi, ad esempio i livelli di privacy dei dati tra le origini dati o il
modo in cui queste origini dati vengono combinate o unite. Per altre informazioni su come diagnosticare questo
problema, vedere Firewall della privacy dei dati.

Errore a livello di cella


Un errore a livello di cella non impedisce il caricamento della query, ma visualizza i valori di errore come Errore
nella cella. Se si seleziona lo spazio vuoto nella cella, viene visualizzato il riquadro degli errori sotto l'anteprima
dei dati.
NOTE
Gli strumenti di profilatura dei dati consentono di identificare più facilmente gli errori a livello di cella con la funzionalità di
qualità della colonna. Altre informazioni: Strumenti di profilatura dati

Gestione degli errori a livello di cella


Quando si verificano errori a livello di cella, Power Query un set di funzioni per gestirli rimuovendo, sostituendo
o mantenendo gli errori.
Per le sezioni successive, gli esempi forniti usano la stessa query di esempio del punto iniziale. In questa query è
presente una colonna Sales contenente una cella con un errore causato da un errore di conversione. Il valore
all'interno di tale cella era NA, ma quando la colonna è stata trasformata in un numero intero Power Query non
è stato possibile convertire NA in un numero, quindi viene visualizzato l'errore seguente.

Rimuovere gli errori


Per rimuovere le righe con errori Power Query, selezionare prima di tutto la colonna contenente gli errori. Nel
gruppo Riduci righe della scheda Home selezionare Rimuovi righe . Dal menu a discesa selezionare Rimuovi
errori.
Il risultato di tale operazione offrirà la tabella che si sta cercando.

Errori di sostituzione
Se invece di rimuovere righe con errori, è possibile sostituire gli errori con un valore fisso. Per sostituire le righe
con errori, selezionare prima di tutto la colonna contenente gli errori. Nel gruppo Qualsiasi colonna della
scheda Trasforma selezionare Sostituisci valori . Dal menu a discesa selezionare Sostituisci errori .

Nella finestra di dialogo Sostituisci errori immettere il valore 10 perché si desidera sostituire tutti gli errori con
il valore 10.

Il risultato di tale operazione offrirà la tabella che si sta cercando.

Mantenere gli errori


Power Query può essere utilizzato come strumento di controllo efficace per identificare eventuali righe con
errori, anche se non si correggino gli errori. È qui che possono essere utili gli errori keep. Per mantenere le
righe con errori, selezionare prima di tutto la colonna contenente gli errori. Nel gruppo Riduci righe della
scheda Home selezionare Mantieni righe . Dal menu a discesa selezionare Mantieni errori .

Il risultato di tale operazione offrirà la tabella che si sta cercando.

Errori comuni a livello di cella


Come per qualsiasi errore a livello di passaggio, è consigliabile esaminare in dettaglio i motivi dell'errore, i
messaggi di errore e i dettagli dell'errore forniti a livello di cella per comprendere la causa degli errori. Le
sezioni seguenti illustrano alcuni degli errori a livello di cella più frequenti Power Query.
Errori di conversione dei tipi di dati
Attivato in genere quando si modifica il tipo di dati di una colonna in una tabella. Alcuni valori trovati nella
colonna non possono essere convertiti nel tipo di dati desiderato.
Esempio: si dispone di una query che include una colonna denominata Sales. Una cella in tale colonna ha NA
come valore di cella, mentre le altre hanno numeri interi come valori. Si decide di convertire il tipo di dati della
colonna da testo a numero intero, ma la cella con il valore NA causa un errore.

Possibili soluzioni: dopo aver identificato la riga con l'errore, è possibile modificare l'origine dati in modo che
rifletta il valore corretto anziché NA oppure è possibile applicare un'operazione replace error per fornire un
valore per tutti i valori NA che causano un errore.
Errori dell'operazione
Quando si tenta di applicare un'operazione non supportata, ad esempio moltiplicando un valore di testo per un
valore numerico, si verifica un errore.
Esempio: si vuole creare una colonna personalizzata per la query creando una stringa di testo contenente la
frase "Total Sales: " concatenata al valore della colonna Sales. Si verifica un errore perché l'operazione di
concatenazione supporta solo colonne di testo e non numeriche.

Possibili soluzioni: prima di creare questa colonna personalizzata, modificare il tipo di dati della colonna
Sales in testo.
Utilizzo di valori duplicati
07/12/2021 • 2 minutes to read

È possibile usare set duplicati di valori tramite trasformazioni che possono rimuovere i duplicati dai dati o
filtrare i dati in modo da visualizzare solo i duplicati, in modo da poterli concentrare su di essi.

WARNING
Power Query fa distinzione tra maiuscole e minuscole. Quando si lavora con valori duplicati, Power Query considera la
distinzione tra maiuscole e minuscole del testo, che potrebbe causare risultati indesiderati. Come soluzione alternativa, gli
utenti possono applicare una trasformazione maiuscola o minuscola prima di rimuovere i duplicati.

Per questo articolo, gli esempi usano la tabella seguente con le colonne id , Categor y e Total.

Rimuovere duplicati
Una delle operazioni che è possibile eseguire è rimuovere i valori duplicati dalla tabella.
1. Consente di selezionare le colonne che contengono valori duplicati.
2. Passare alla scheda Home.
3. Nel gruppo Riduci righe selezionare Rimuovi righe .
4. Dal menu a discesa selezionare Rimuovi duplicati.
WARNING
Non è garantito che la prima istanza di un set di duplicati venga scelta quando vengono rimossi i duplicati.

Rimuovere duplicati da più colonne


In questo esempio si vogliono identificare e rimuovere i duplicati usando tutte le colonne della tabella.

Sono presenti quattro righe duplicate. L'obiettivo è rimuovere le righe duplicate in modo che nella tabella siano
presenti solo righe univoche. Selezionare tutte le colonne della tabella e quindi selezionare Rimuovi
duplicati.
Il risultato di tale operazione offrirà la tabella che si sta cercando.

NOTE
Questa operazione può essere eseguita anche con un subset di colonne.

Rimuovere i duplicati da una singola colonna


In questo esempio si vogliono identificare e rimuovere i duplicati usando solo la colonna Categor y dalla
tabella.

Si vogliono rimuovere questi duplicati e mantenere solo i valori univoci. Per rimuovere i duplicati dalla colonna
Categoria, selezionarla e quindi selezionare Rimuovi duplicati.
Il risultato di tale operazione offrirà la tabella che si sta cercando.

Mantieni duplicati
Un'altra operazione che è possibile eseguire con i duplicati è mantenere solo i duplicati trovati nella tabella.
1. Consente di selezionare le colonne che contengono valori duplicati.
2. Passare alla scheda Home.
3. Nel gruppo Riduci righe selezionare Mantieni righe .
4. Dal menu a discesa selezionare Mantieni duplicati.

Mantenere duplicati da più colonne


In questo esempio si vogliono identificare e mantenere i duplicati usando tutte le colonne della tabella.

Sono presenti quattro righe duplicate. L'obiettivo in questo esempio è mantenere solo le righe duplicate nella
tabella. Selezionare tutte le colonne della tabella e quindi selezionare Mantieni duplicati.
Il risultato di tale operazione offrirà la tabella che si sta cercando.
Mantenere i duplicati da una singola colonna
In questo esempio si vogliono identificare e mantenere i duplicati usando solo la colonna id della tabella.

In questo esempio sono presenti più duplicati e si vogliono mantenere solo i duplicati dalla tabella. Per
mantenere i duplicati dalla colonna id, selezionare la colonna id e quindi selezionare Mantieni duplicati.
Il risultato di tale operazione offrirà la tabella che si sta cercando.

Vedi anche
Strumenti di Profiling dati
Inserire i valori in una colonna
07/12/2021 • 2 minutes to read

È possibile usare fill up e fill down per sostituire i valori Null con l'ultimo valore non vuoto in una colonna. Si
immagini, ad esempio, la tabella seguente in cui si desidera compilare la colonna Data e compilare la colonna
Commenti.

Il risultato previsto è illustrato nell'immagine seguente.

Copiare
L'operazione di riempimento accetta una colonna e attraversa i valori in essa contenuti per riempire i valori Null
nelle righe successive fino a quando non trova un nuovo valore. Questo processo continua riga per riga fino a
quando non sono presenti altri valori nella colonna.
Nell'esempio seguente si vuole riempire la colonna Date. A tale scopo, è possibile fare clic con il pulsante
destro del mouse per selezionare la colonna Data e quindi scegliere > Riempi.
Il risultato di tale operazione sarà simile all'immagine seguente.

Riempimento
Allo stesso modo dell'operazione di riempimento, il riempimento funziona su una colonna. Al contrario, fill up
trova l'ultimo valore della colonna e inserisce tutti i valori Null nelle righe precedenti fino a quando non trova un
nuovo valore. Si verifica quindi lo stesso processo per tale valore. Questo processo continua fino a quando non
sono presenti altri valori nella colonna.
Nell'esempio seguente si vuole riempire la colonna Commenti dal basso verso l'alto. Si noterà che la colonna
Commenti non ha valori Null. Contiene invece celle vuote. Prima di eseguire l'operazione di riempimento, è
necessario trasformare le celle vuote in valori Null: selezionare la colonna, passare alla scheda Trasforma e
quindi selezionare Sostituisci valori .

Nella finestra di dialogo Sostituisci valori lasciare vuoto Valore. Per Sostituisci con immettere null.

Altre informazioni: Sostituire i valori


Dopo che tutte le celle vuote sono state sostituite con null, selezionare la colonna Commenti, passare alla
scheda Trasforma e quindi selezionare Riempi. >

Il risultato di tale operazione sarà simile all'immagine seguente.


Pulizia della tabella
1. Filtrare la colonna Unità per visualizzare solo le righe diverse da Null.

2. Rinominare la colonna Commenti come Sales Person .

3. Rimuovere i valori Sales Person: dalla colonna Sales Person in modo da ottenere solo i nomi dei
venditori.
A questo punto dovrebbe essere disponibile esattamente la tabella che si stava cercando.

Vedi anche
Sostituire i valori
Ordinare colonne
07/12/2021 • 2 minutes to read

È possibile ordinare una tabella in Power Query in base a una o più colonne. Ad esempio, prendere la tabella
seguente con le colonne denominate Concorrenza , Concorrente e Posizione .

Tabella con le colonne Concorrenza, Concorrente e Posizione. La colonna Competition contiene 1 - Apertura
nelle righe 1 e 6, 2 - Main nelle righe 3 e 5 e 3-Final nelle righe 2 e 4. La riga Position contiene un valore pari a 1
o 2 per ognuno dei valori di Competition.
Per questo esempio, l'obiettivo è ordinare questa tabella in base ai campi Competition e Position in ordine
crescente.

Tabella con le colonne Concorrenza, Concorrente e Posizione. La colonna Competition contiene 1 - Apertura
nelle righe 1 e 2, 2 - Main nelle righe 3 e 4 e 3-Final nelle righe 5 e 6. La riga Position contiene, dall'alto verso il
basso, un valore pari a 1, 2, 1, 2, 1 e 2.

Per ordinare una tabella tramite colonne


Per ordinare la tabella, selezionare prima la colonna da ordinare. Dopo aver selezionato la colonna, è possibile
selezionare l'operazione di ordinamento da una delle due posizioni seguenti:
Nel gruppo Ordina della scheda Home sono presenti icone per ordinare la colonna in ordine crescente o
decrescente.

Dal menu a discesa dell'intestazione di colonna. Accanto al nome della colonna è presente un indicatore
del menu a discesa . Quando si seleziona l'icona, viene visualizzata l'opzione per ordinare la colonna.
In questo esempio è prima necessario ordinare la colonna Concorrenza. L'operazione verrà eseguita usando i
pulsanti nel gruppo Ordina della scheda Home. Questa azione crea un nuovo passaggio nella sezione
Passaggi applicati denominata Righe ordinate .

Un indicatore visivo, visualizzato come freccia rivolta verso l'alto, viene aggiunto all'icona del menu a discesa
Concorrente per mostrare che la colonna viene ordinata in ordine crescente.
A questo punto il campo Posizione verrà ordinato anche in ordine crescente, ma questa volta si userà il menu a
discesa Intestazione di colonna Posizione.
Si noti che questa azione non crea un nuovo passaggio Righe ordinate, ma la modifica per eseguire entrambe
le operazioni di ordinamento in un unico passaggio. Quando si ordinano più colonne, l'ordine in cui vengono
ordinate le colonne è basato sull'ordine in cui sono state selezionate le colonne. Un indicatore visivo, visualizzato
come numero a sinistra dell'indicatore del menu a discesa, mostra la posizione che ogni colonna occupa
nell'ordinamento.

Per cancellare un'operazione di ordinamento da una colonna


Eseguire una di queste azioni:
Selezionare la freccia giù accanto all'intestazione di colonna e quindi selezionare Cancella ordinamento.
In Passaggi applicati nel riquadro Impostazioni query eliminare il passaggio Righe ordinate.
Rinominare le colonne
07/12/2021 • 2 minutes to read

In Power Query è possibile rinominare le colonne per formattare il set di dati in modo chiaro e conciso.
Si inizierà ad esempio con un set di dati con due colonne.

C O LO N N A 1 C O LO N N A 2

Panama Panama

USA New York

Canada Toronto

Le intestazioni di colonna sono Column 1 e Column 2, ma si desidera modificare tali nomi in nomi più
descrittivi per le colonne.
La colonna 1 diventa Countr y
La colonna 2 diventa City
Il risultato finale desiderato in Power Query è simile alla tabella seguente.

Come rinominare una colonna


Esistono tre modi per rinominare una colonna in Power Query.
Fare doppio clic sull'intestazione di colonna : l'azione di doppio clic consente di rinominare
immediatamente la colonna.

Fare clic con il pulsante destro del mouse sulla colonna scelta: viene visualizzato un menu di scelta
rapida ed è possibile selezionare l'opzione Rinomina per rinominare la colonna selezionata.
Opzione Rinomina nella scheda Trasforma : nel gruppo Qualsiasi colonna della scheda Trasforma
selezionare l'opzione Rinomina.

Evitare nomi di colonna duplicati


Power Query i nomi delle colonne della tabella devono essere univoci in tutte le colonne. Ciò significa che se si
tenta di rinominare una colonna con un nome di colonna già esistente nella tabella, viene visualizzato un errore
con il messaggio Conflitto nome colonna. Sarà necessario rinominare la colonna con un altro nome.
Ad esempio, per la prima tabella di esempio fornita in questo articolo, si supponga di provare a rinominare
entrambe le colonne Column 1 e Column 2 in "Geography". Viene visualizzato un messaggio di errore che
impedisce di rinominare la seconda colonna in "Geography".
Disambiguazione del nome di colonna
Con molte azioni eseguite in Power Query che potrebbero causare un conflitto di nomi di colonna, Power Query
tenta di disambiguare rinominando tutte le istanze duplicate dello stesso nome di colonna. Il modo in cui Power
Query rinomina queste colonne è tramite l'aggiunta di un suffisso al nome della colonna originale con un
separatore (in genere un punto o un carattere di sottolineatura) e quindi un numero che rappresenta l'istanza
del nome di colonna duplicato nell'ordine in cui è stato trovato da Power Query. Questa ridenominazione può
spesso verificarsi con azioni quali, ma non solo:
Innalzamento di livello delle intestazioni di colonna dalla prima riga: ad esempio, se si è provato a
promuovere la prima riga della tabella di esempio in questo articolo, Power Query rinomina le colonne in
e Panama_1 .

NOTE
Per altre informazioni su come alzare di livello le intestazioni dalla prima riga, vedere Alzare di livello oabbassare di
livello le intestazioni di colonna.

Espansione di una colonna con un nome di campo presente anche nella tabella corrente: ciò può
verificarsi, ad esempio, quando si esegue un'operazione di unione e la colonna con la tabella unita ha
nomi di campo che esistono anche nella tabella. Quando si tenta di espandere i campi di tale colonna,
Power Query cerca automaticamente di evitare errori di conflitto di nomi di colonna.
Spostare colonne
07/12/2021 • 2 minutes to read

Un processo comune durante la preparazione dei dati è lo spostamento di colonne nel set di dati.
Per eseguire questo spostamento, è possibile selezionare l'opzione Sposta o trascinare e rilasciare la colonna.

Opzione Sposta
L'esempio seguente illustra i diversi modi per spostare le colonne. Questo esempio è in particolare lo
spostamento della colonna Nome contatto.

Per spostare la colonna, usare l'opzione Sposta. Questa opzione si trova nel gruppo Qualsiasi colonna nella
scheda Trasforma. Nell'opzione Sposta le opzioni disponibili sono:
Prima
After
All'inizio
Per terminare

È anche possibile trovare questa opzione quando si fa clic con il pulsante destro del mouse su una colonna.
Se si vuole spostare una colonna a sinistra, selezionare Prima di .

La nuova posizione della colonna è ora una colonna a sinistra della posizione originale.

Se si vuole spostare una colonna a destra, selezionare Dopo .


La nuova posizione della colonna è ora una colonna a destra della posizione originale.

Se si vuole spostare la colonna nello spazio più a sinistra del set di dati, selezionare A par tire da .

La nuova posizione della colonna si trova ora sul lato sinistro della tabella.

Se si vuole spostare la colonna nello spazio più a destra del set di dati, selezionare Per terminare .
La nuova posizione della colonna si trova ora all'estrema destra della tabella.

Trascinamento della selezione


Un altro modo per spostare una colonna nel set di dati è trascinare la colonna. Spostare la colonna nella
posizione in cui si vuole posizionarla.

Funzionalità Vai a colonna


Se si vuole trovare una colonna specifica, passare alla scheda Visualizza sulla barra multifunzione e selezionare
Vai alla colonna .
Da qui è possibile selezionare in modo specifico la colonna che si vuole visualizzare, che è particolarmente utile
se sono presenti molte colonne.
Sostituire valori ed errori
07/12/2021 • 2 minutes to read

Con Power Query, è possibile sostituire un valore con un altro valore ovunque tale valore si trova in una
colonna. Il comando Sostituisci valori è disponibile:
Nel menu di scelta rapida della cella. Fare clic con il pulsante destro del mouse sulla cella per sostituire il
valore selezionato nella colonna con un altro valore.

Nel menu di scelta rapida della colonna.

Nel gruppo Trasforma della scheda Home .


Nel gruppo Qualsiasi colonna della scheda Trasforma .

L'operazione replace values ha due modalità:


Sostituisci tutto il contenuto delle celle: questo è il comportamento predefinito per le colonne non di
testo, in cui Power Query cerca e sostituisce il contenuto completo di una cella. È possibile abilitare questa
modalità per le colonne di testo selezionando Opzioni avanzate e quindi selezionando la casella di
controllo Corrispondenza dell'intero contenuto della cella.
Sostituire le istanze di una stringa di testo: questo è il comportamento predefinito per le colonne di testo, in
cui Power Query cerca una stringa di testo specifica in tutte le righe di una colonna e sostituisce il numero di
istanze della stringa di testo trovata.
Le opzioni avanzate sono disponibili solo nelle colonne con tipo di dati Testo. All'interno di questo set di opzioni
è disponibile l'opzione Sostituisci usando caratteri speciali.

Sostituire il contenuto dell'intera cella


Imagine una tabella simile alla seguente, in cui sono disponibili colonne per ACCOUNT ID , Categor y Name e
Sales Goal .

Il valore -1 nella colonna Sales Goal è un errore nell'origine e deve essere sostituito con l'obiettivo di vendita
standard definito dall'azienda per queste istanze, ovvero 250.000. A tale scopo, fare clic con il pulsante destro
del mouse sul valore -1 e quindi scegliere Sostituisci valori . Verrà visualizzata la finestra di dialogo
Sostituisci valori con Valore da trovare impostato su -1. A questo punto è necessario immettere 250000
nella casella Sostituisci con.

Il risultato di tale operazione offrirà il risultato che si sta cercando.

Sostituire istanze di una stringa di testo


Continuando con la tabella precedente, si vuole rimuovere la stringa di testo "Category Name: " dalla colonna
Categor y Name. A tale scopo, passare al gruppo Trasforma della scheda Home e selezionare Sostituisci
valori . Nella finestra di dialogo Sostituisci valori immettere la stringa di testo Categor y Name: (seguito da
uno spazio) nella casella Valore da trovare, lasciare vuota la casella Sostituisci con e quindi selezionare OK .

Il risultato di tale operazione fornisce la tabella nell'immagine seguente.


Analizzare testo come JSON o XML
07/12/2021 • 2 minutes to read

In Power Query, è possibile analizzare il contenuto di una colonna con stringhe di testo identificando il
contenuto come stringa di testo JSON o XML.
È possibile eseguire questa operazione di analisi selezionando il pulsante Analizza disponibile nelle posizioni
seguenti nel editor di Power Query:
Scheda Trasforma — Questo pulsante trasformerà la colonna esistente analizzando il relativo
contenuto.

Scheda Aggiungi colonna — Questo pulsante aggiungerà una nuova colonna alla tabella analizzando
il contenuto della colonna selezionata.

Per questo articolo si usa la tabella di esempio seguente che contiene le colonne seguenti che è necessario
analizzare:
SalesPerson — Contiene stringhe di testo JSON non analizzate con informazioni su FirstName e
LastName del venditore, come nell'esempio seguente.

{
"id" : 249319,
"FirstName": "Lesa",
"LastName": "Byrd"
}

Paese — Contiene stringhe di testo XML non analizzate con informazioni sul paese e sulla divisione a cui
è stato assegnato l'account, come nell'esempio seguente.

<root>
<id>1</id>
<Country>USA</Country>
<Division>BI-3316</Division>
</root>
La tabella di esempio è simile alla seguente.

L'obiettivo è analizzare le colonne citate in precedenza ed espandere il contenuto di tali colonne per ottenere
questo output.

Come JSON
Selezionare la colonna SalesPerson. Selezionare quindi JSON dal menu a discesa Analizza all'interno della
scheda Trasforma. Questi passaggi trasformeranno la colonna SalesPerson dalla presenza di stringhe di
testo a valori Record, come illustrato nell'immagine successiva. È possibile selezionare un punto qualsiasi nello
spazio vuoto all'interno della cella del valore Record per ottenere un'anteprima dettagliata del contenuto del
record nella parte inferiore della schermata.

Selezionare l'icona di espansione accanto all'intestazione di colonna SalesPerson. Dal menu Espandi
colonne selezionare solo i campi FirstName e LastName, come illustrato nell'immagine seguente.
Il risultato di tale operazione indica la tabella seguente.

Come XML
Selezionare la colonna Paese. Selezionare quindi il pulsante XML dal menu a discesa Analizza all'interno
della scheda Trasforma. Questi passaggi trasformeranno la colonna Countr y dalla presenza di stringhe di
testo alla presenza di valori Di tabella, come illustrato nell'immagine successiva. È possibile selezionare un
punto qualsiasi nello spazio vuoto all'interno della cella del valore Tabella per ottenere un'anteprima dettagliata
del contenuto della tabella nella parte inferiore della schermata.

Selezionare l'icona di espansione accanto all'intestazione di colonna Paese. Dal menu Espandi colonne
selezionare solo i campi Paese e Divisione, come illustrato nell'immagine seguente.
È possibile definire tutte le nuove colonne come colonne di testo. Il risultato di tale operazione offrirà la tabella
di output che si sta cercando.
Aggiungere una colonna da esempi
07/12/2021 • 3 minutes to read

Quando si aggiungono colonne da esempi, è possibile creare rapidamente e facilmente nuove colonne che
soddisfino le proprie esigenze. Ciò è utile nelle situazioni seguenti:
Si conoscono i dati che si vogliono ottenere nella nuova colonna, ma non si è certi di quale trasformazione, o
raccolta di trasformazioni, consenta di ottenerli.
Si sa già qual è la trasformazione necessaria, ma non si è sicuri di che cosa selezionare nell'interfaccia utente
per eseguirla.
Si conoscono tutte le trasformazioni necessarie usando un'espressione di colonna personalizzata nel
linguaggio M, ma una o più di queste trasformazioni non sono disponibili nell'interfaccia utente.
Il comando Colonna da esempi si trova nella scheda Aggiungi colonna del gruppo Generale.

Aggiungere una nuova colonna da esempi


In questo esempio si inizia con la tabella illustrata nell'immagine seguente.

L'obiettivo in questo esempio è creare due nuove colonne:


Inter vallo: creare contenitori per la colonna Monthly Income con incrementi discreti di 5.000.
Nome completo: concatenare le colonne Cognome e Nome a una singola colonna.
Colonna degli esempi, dalle colonne selezionate
Una delle opzioni disponibili durante la creazione della nuova colonna è selezionare le colonne che verranno
usate nei calcoli. Per questo esempio si creerà la colonna Inter vallo dai valori nella colonna Monthly
Income.
A tale scopo, selezionare la colonna Monthly Income, selezionare il comando Column from examples
(Colonna da esempi) e quindi from selection (Da selezione).

Nel riquadro di anteprima viene visualizzata una nuova colonna modificabile in cui è possibile immettere gli
esempi. Per il primo esempio, il valore della colonna selezionata è 19500. Nella nuova colonna immettere quindi
il testo da 15000 a 20000, ovvero il contenitore in cui cade il valore.
Quando Power Query trova una trasformazione corrispondente, i risultati della trasformazione vengono riempiti
nelle righe rimanenti usando testo di colore chiaro. È anche possibile visualizzare il testo della formula M per la
trasformazione sopra l'anteprima della tabella.
Dopo aver selezionato OK, la nuova colonna verrà visualizzata come parte della query. Verrà anche aggiunto un
nuovo passaggio alla query.

Colonna di esempi, da tutte le colonne


L'obiettivo successivo è creare una colonna Full Name usando i valori delle colonne First Name e Last
Name.
A tale scopo, selezionare il comando Colonna da esempi e quindi selezionare Da tutte le colonne .
A questo punto si immetterà il primo esempio di nome completo come Enders, Maria .

Dopo aver selezionato OK, la nuova colonna verrà visualizzata come parte della query. Verrà anche aggiunto un
nuovo passaggio alla query.

L'ultimo passaggio consiste nel rimuovere le colonne First Name , Last Name e Monthly Income. La tabella
finale contiene ora le colonne Inter vallo e Nome completo con tutti i dati prodotti nei passaggi precedenti.
Suggerimenti e considerazioni
Quando si forniscono esempi, Power Query un utile elenco di campi, valori e trasformazioni suggerite
disponibili per le colonne selezionate. È possibile visualizzare questo elenco selezionando qualsiasi cella della
nuova colonna.

È importante notare che l'esperienza Colonna da esempi funziona solo nelle prime 100 righe dell'anteprima
dei dati. È possibile applicare passaggi prima del passaggio Colonna da esempi per creare un esempio di
dati personalizzato. Dopo aver creato la colonna Colonna da esempi, è possibile eliminare i passaggi
precedenti. la colonna appena creata non verrà interessata.

Elenco di trasformazioni supportate


Molte trasformazioni, ma non tutte, sono disponibili quando si usa Colonna da esempi . L'elenco seguente
mostra le trasformazioni supportate.
Generale
Colonna condizionale
Riferimento
Riferimento a una colonna specifica, incluse le trasformazioni di taglio, pulizia e maiuscole/minuscole
Trasformazioni di testo
Combina (supporta la combinazione di stringhe letterali e di interi valori di colonna)
Sostituisci
Lunghezza
Estrai
Primi caratteri
Ultimi caratteri
Intervallo
Testo prima del delimitatore
Testo dopo il delimitatore
Testo racchiuso tra delimitatori
Lunghezza
Rimuovi caratteri
Mantieni caratteri

NOTE
Tutte le trasformazioni di testo tengono conto dell'eventuale necessità di tagliare, pulire o di applicare una trasformazione
di maiuscole/minuscole al valore della colonna.

Trasformazioni di data
Giorno
Giorno della settimana
Nome giorno della settimana
Giorno dell'anno
Month
Month Name
Trimestre dell'anno
Settimana del mese
Settimana dell'anno
Anno
Età
Inizio dell'anno
Fine dell'anno
Inizio del mese
Fine del mese
Inizio del trimestre
Giorni del mese
Fine del trimestre
Inizio della settimana
Fine della settimana
Giorno del mese
Inizio della giornata
Fine della giornata
Trasformazioni di ora
Hour
Minuto
Second
In Ora Locale
NOTE
Tutte le trasformazioni di data e ora prendono in considerazione la potenziale necessità di convertire il valore della colonna
in Date, Time o DateTime.

Trasformazioni di numero
Valore assoluto
Arcocoseno
Arcoseno
Arcotangente
Converti in numero
Coseno
Cubo
Dividi
Esponente
Fattoriale
Divisione intera
È pari
È dispari
Ri
Logaritmo in base 10
Modulo
Moltiplica
Arrotonda per difetto
Arrotonda per eccesso
Segno
Seno
Radice quadrata
Quadrato
Sottrai
Somma
Tangente
Bucket/Intervalli
Aggiungere una colonna indice
07/12/2021 • 2 minutes to read

Il comando Index column aggiunge una nuova colonna alla tabella con valori di posizione espliciti e viene in
genere creato per supportare altri modelli di trasformazione.

Per impostazione predefinita, l'indice iniziale inizierà dal valore 0 e avrà un incremento di 1 per riga.

È anche possibile configurare il comportamento di questo passaggio selezionando l'opzione Personalizzata e


configurando due parametri:
Indice iniziale: specifica il valore di indice iniziale.
Incremento : specifica la quantità di incremento di ogni valore di indice.
Per l'esempio in questo articolo, si inizia con la tabella seguente con una sola colonna, ma si noti il modello di
dati nella colonna.

Si immagini che l'obiettivo sia trasformare la tabella in quella illustrata nell'immagine seguente, con le colonne
Date , Account e Sale .

Passaggio 1. Aggiungere una colonna indice


È prima necessario aggiungere una nuova colonna Index alla tabella che inizia da 0.
Passaggio 2. Aggiungere una colonna modulo dalla colonna
dell'indice
Il passaggio successivo consiste nel selezionare la colonna dell'indice appena aggiunta e quindi nella scheda
Aggiungi colonna selezionare Modulo > standard .

Nella finestra di dialogo Modulo immettere il numero da cui trovare il resto per ogni valore nella colonna. In
questo caso, il modello si ripete ogni tre righe, quindi si immette 3 .

Il risultato di tale operazione offrirà una nuova colonna denominata Modulo .

Passaggio 3. Aggiungere una colonna integer-divide dalla colonna


dell'indice
Selezionare la colonna Indice, passare alla scheda Aggiungi colonna e quindi selezionare Divisione
standard > (integer).

Nella finestra di dialogo Divisione numeri interi immettere un numero in base al quale dividere ogni valore
nella colonna. In questo caso, il modello si ripete ogni tre righe, quindi immettere il valore 3 .

Rimuovere la colonna Index perché non è più necessaria. La tabella è ora simile all'immagine seguente.

Passaggio 4. Pivot di una colonna


La tabella include ora tre colonne in cui:
Column1 contiene i valori che devono essere presenti nella tabella finale.
Modulo fornisce la posizione della colonna del valore (simile alle coordinate y di un grafico xy).
La divisione integer fornisce la posizione di riga del valore (simile alle coordinate x di un grafico xy).
Per ottenere la tabella desiderata, è necessario eseguire il pivot della colonna Modulo usando i valori di
Column1 in cui questi valori non vengono aggregati. Nella scheda Trasforma selezionare la colonna Modulo
e quindi selezionare Colonna pivot nel gruppo Qualsiasi colonna. Nella finestra di dialogo Colonna pivot
selezionare il pulsante di opzione Avanzate. Assicurarsi che la colonna Valore sia impostata su Column1 e
che la funzione Valori aggregati sia impostata su Non aggregare .

Altre informazioni: Colonne pivot


Il risultato di tale operazione offrirà una tabella con quattro colonne, come illustrato nell'immagine seguente.

Passaggio 5. Pulire la tabella


È ora possibile eliminare la colonna Integer-division e alzare di livello la prima riga della tabella in modo da
diventare le intestazioni della tabella. Altre informazioni: Alzare di livello o abbassare di livello le intestazioni di
colonna
Dopo aver definito i tipi di dati corretti per le colonne, si creerà una tabella simile alla tabella seguente, con
esattamente le tre colonne necessarie e la forma cercata.
Aggiungere una colonna personalizzata
07/12/2021 • 2 minutes to read

Se è necessaria una maggiore flessibilità per l'aggiunta di nuove colonne rispetto a quelle fornite in Power
Query, è possibile creare una colonna personalizzata usando il linguaggio della formula Power Query M.
Imagine si dispone di una tabella con il set di colonne seguente.

Usando le colonne Unità, Prezzo unitario e Sconto, si desidera creare due nuove colonne:
Total Sale before Discount : calcolato moltiplicando la colonna Unità per la colonna Prezzo unitario.
Total Sale after Discount : calcolato moltiplicando la colonna Total Sale before Discount per il valore
percentuale netto (uno meno il valore dello sconto).
L'obiettivo è creare una tabella con nuove colonne simili all'immagine seguente.

Creare una colonna personalizzata


Nella scheda Aggiungi colonna selezionare Colonna personalizzata .

Verrà visualizzata la finestra di dialogo Colonna personalizzata . Questa finestra di dialogo consente di
definire la formula per creare la colonna.
La finestra di dialogo Colonna personalizzata contiene:
Elenco Colonne disponibili a destra.
Nome iniziale della colonna personalizzata nella casella Nome nuova colonna. È possibile rinominare
la colonna.
Power Query formula M nella casella Formula colonna personalizzata.
Per aggiungere una nuova colonna personalizzata, selezionare una colonna dall'elenco Colonne disponibili sul
lato destro della finestra di dialogo. Selezionare quindi il pulsante Inserisci colonna sotto l'elenco per
aggiungerla alla formula della colonna personalizzata. È anche possibile aggiungere una colonna selezionandola
nell'elenco. In alternativa, è possibile scrivere una formula personalizzata usando il linguaggio della formula
Power Query M nella casella Formula colonna personalizzata.

NOTE
Se si verifica un errore di sintassi durante la creazione della colonna personalizzata, verrà visualizzata un'icona di avviso
gialla, insieme a un messaggio di errore e a un motivo.

Aggiunta della colonna Total Sale before Discount


La formula che è possibile usare per creare la colonna Total Sale before Discount è [Units] * [Unit Price]
. L'immagine seguente illustra l'aspetto che avrà nella finestra di dialogo Colonna personalizzata .
Il risultato di tale operazione aggiungerà una nuova colonna Total Sale before Discount alla tabella e avrà
un aspetto simile all'immagine seguente.

Aggiunta della colonna Total Sale after Discount


La formula che è possibile usare per creare la vendita totale prima dello sconto è
[Total Sale before Discount]* (1-[Discount]) . L'immagine seguente mostra l'aspetto che avrà nella finestra
di dialogo Colonna personalizzata.
Il risultato di tale operazione aggiungerà una nuova colonna Total Sale after Discount alla tabella e avrà un
aspetto simile all'immagine seguente.

Impostazione dei tipi di dati della colonna


Si noti che per le nuove colonne non è ancora definito un tipo di dati. A tale scopo, vedere l'icona
nell'intestazione della colonna con l'icona del tipo di dati (ABC123). È necessario modificare i tipi di dati di
entrambe le nuove colonne in Valuta.
1. Selezionare entrambe le colonne Total Sale before Discount e Total Sale after Discount.
2. Nel gruppo Trasforma della scheda Home selezionare Tipo di dati > Valuta .
Dopo aver definito i tipi di dati per entrambe le colonne, si creerà una tabella simile all'immagine seguente.

Modificare una colonna personalizzata esistente


Power Query aggiunge la colonna personalizzata alla tabella e aggiunge il passaggio Personalizzato Aggiunto
all'elenco Passaggi applicati in Impostazioni quer y .

Per modificare la colonna personalizzata, selezionare il passaggio Aggiunta personalizzata nell'elenco


Passaggi applicati.
Verrà visualizzata la finestra di dialogo Colonna personalizzata con la formula di colonna personalizzata
creata.

Passaggi successivi
È possibile creare una colonna personalizzata in altri modi, ad esempio creando una colonna in base agli
esempi forniti editor di Power Query. Altre informazioni: Aggiungere una colonna da un esempio
Per Power Query informazioni di riferimento su M, vedere Power Query riferimento alla funzione M.
Aggiungere una colonna condizionale
07/12/2021 • 2 minutes to read

Con Power Query, è possibile creare nuove colonne i cui valori saranno basati su una o più condizioni applicate
ad altre colonne della tabella.
Il comando Colonna condizionale si trova nella scheda Aggiungi colonna del gruppo Generale.

Aggiunta di una colonna condizionale


In questo esempio si usa la tabella illustrata nell'immagine seguente.

In questa tabella è presente un campo che fornisce CustomerGroup . Sono inoltre disponibili prezzi diversi
applicabili a tale cliente nei campi Tier 1 Price (Prezzo di livello 1), Tier 2 Price (Prezzo di livello 2) e Tier 3
Price (Prezzo di livello 3). In questo esempio l'obiettivo è creare una nuova colonna con il nome Final Price
in base al valore presente nel campo CustomerGroup. Se il valore nel campo CustomerGroup è uguale a 1,
è necessario usare il valore del campo Tier 1 Price. In caso contrario, si userà il valore del prezzo di livello 3.
Per aggiungere questa colonna condizionale, selezionare Colonna condizionale . Nella finestra di dialogo
Aggiungi colonna condizionale è possibile definire tre sezioni numerate nell'immagine seguente.

1. Nome nuova colonna: è possibile definire il nome della nuova colonna. In questo esempio si userà il nome
Final Price .
2. Clausole condizionali: qui si definiscono le clausole condizionali. È possibile aggiungere altre clausole
selezionando Aggiungi clausola . Ogni clausola condizionale verrà testata nell'ordine indicato nella finestra
di dialogo, dall'alto verso il basso. Ogni clausola è di quattro parti:
Nome colonna: nell'elenco a discesa selezionare la colonna da usare per il test condizionale. Per
questo esempio selezionare CustomerGroup .
Operatore : selezionare il tipo di test o operatore per il test condizionale. In questo esempio il valore
della colonna CustomerGroup deve essere uguale a 1, quindi selezionare uguale a .
Valore: è possibile immettere un valore o selezionare una colonna da usare per il test condizionale.
Per questo esempio immettere 1 .
Output: se il test è positivo, il valore immesso qui o la colonna selezionata sarà l'output. Per questo
esempio, se il valore CustomerGroup è uguale a 1, il valore output deve essere il valore della
colonna Tier 1 Price.
3. Clausola Else finale: se nessuna delle clausole precedenti restituisce un test positivo, l'output di questa
operazione sarà quello definito qui, come valore immesso manualmente o come valore di una colonna. In
questo caso, l'output sarà il valore della colonna Tier 3 Price.In this case, the output will be the value from
the Tier 3 Price column.
Il risultato di tale operazione offrirà una nuova colonna Prezzo finale.

NOTE
Per le nuove colonne condizionali non sarà definito un tipo di dati. È possibile aggiungere un nuovo passaggio per definire
un tipo di dati per questa colonna appena creata seguendo la procedura descritta in Tipi di dati in Power Query.

Aggiunta e organizzazione di più clausole


Per questo esempio, è possibile modificare l'obiettivo. Le nuove clausole condizionali sono:
Se il valore della colonna CustomerGroup è uguale a 1, Output sarà il valore della colonna Tier 1 Price.
Se il valore della colonna CustomerGroup è uguale a 2, output sarà il valore della colonna Tier 2 Price.
Se nessuno dei test precedenti è positivo, output sarà il valore della colonna Tier 3 Price.
NOTE
Alla fine di ogni clausola è possibile selezionare il pulsante con i puntini di sospensione (...) per eliminare, spostare verso
l'alto o verso il basso la clausola.

Il risultato di tale operazione offrirà il risultato che si sta cercando.


Valori del cluster
07/12/2021 • 3 minutes to read

I valori cluster creano automaticamente gruppi con valori simili usando un algoritmo di corrispondenza fuzzy e
quindi esegue il mapping del valore di ogni colonna al gruppo con la corrispondenza migliore. Questa
trasformazione è molto utile quando si lavora con dati con molte varianti diverse dello stesso valore ed è
necessario combinare i valori in gruppi coerenti.
Si consideri una tabella di esempio con una colonna ID che contiene un set di ID e una colonna Person
contenente un set di versioni con varie lettere maiuscole e con ortografia diversa dei nomi Mike, Mike, Bill e Bill.

In questo esempio, il risultato che si sta cercando è una tabella con una nuova colonna che mostra i gruppi di
valori appropriati dalla colonna Person e non tutte le diverse varianti delle stesse parole.

NOTE
La funzionalità Valori cluster è disponibile solo per Power Query Online.

Creare una colonna Cluster


Per eseguire il clustering dei valori, selezionare prima di tutto la colonna Person, passare alla scheda Aggiungi
colonna nella barra multifunzione e quindi selezionare l'opzione Valori cluster.
Nella finestra di dialogo Valori cluster confermare la colonna da usare per creare i cluster e immettere il nuovo
nome della colonna. In questo caso, assegnare alla nuova colonna il nome Cluster .

Il risultato di tale operazione restituisce il risultato mostrato nell'immagine successiva.

NOTE
Per ogni cluster di valori, Power Query l'istanza più frequente dalla colonna selezionata come istanza "canonica". Se si
verificano più istanze con la stessa frequenza, Power Query seleziona la prima.

Uso delle opzioni del cluster fuzzy


Per il clustering dei valori in una nuova colonna sono disponibili le opzioni seguenti:
Soglia di somiglianza (facoltativo): questa opzione indica il raggruppamento di due valori simili.
L'impostazione minima di 0 determina il raggruppamento di tutti i valori. L'impostazione massima di 1
consente solo il raggruppamento dei valori che corrispondono esattamente. Il valore predefinito è 0,8.
Ignora maiuscole/minuscole: quando si confrontano stringhe di testo, la distinzione tra maiuscole e
minuscole viene ignorata. Questa opzione è attivata per impostazione predefinita.
Raggruppa per combinazione di par ti di testo: l'algoritmo tenta di combinare parti di testo (ad
esempio, la combinazione di Micro e Soft in Microsoft) per raggruppare i valori.
Mostra punteggi di somiglianza: mostra i punteggi di somiglianza tra i valori di input e i valori
rappresentativi calcolati dopo il clustering fuzzy.
Tabella di trasformazione (facoltativo): è possibile selezionare una tabella di trasformazione che esegue
il mapping dei valori (ad esempio, il mapping di MSFT a Microsoft) per raggrupparli.
Per questo esempio viene usata una nuova tabella di trasformazione con il nome My transform table per
illustrare come è possibile eseguire il mapping dei valori. Questa tabella di trasformazione include due colonne:
Da : stringa di testo da cercare nella tabella.
A : stringa di testo da usare per sostituire la stringa di testo nella colonna Da.

IMPORTANT
È importante che la tabella di trasformazione abbia le stesse colonne e gli stessi nomi di colonna illustrati nell'immagine
precedente (devono essere denominati "Da" e "A"), in caso contrario Power Query non riconoscerà questa tabella come
tabella di trasformazione e non verrà eseguita alcuna trasformazione.

Usando la query creata in precedenza, fare doppio clic sul passaggio Valori cluster , quindi nella finestra di
dialogo Valori cluster espandere Opzioni cluster fuzzy . In Opzioni cluster fuzzy abilitare l'opzione Mostra
punteggi di somiglianza. Per Tabella di trasformazione (facoltativo) selezionare la query contenente la
tabella di trasformazione.
Dopo aver selezionato la tabella di trasformazione e aver abilitato l'opzione Mostra punteggi di
somiglianza, selezionare OK. Il risultato di tale operazione fornisce una tabella che contiene le stesse colonne
ID e Person della tabella originale, ma include anche due nuove colonne a destra denominate Cluster e
Person_Cluster_Similarity . La colonna Cluster contiene le versioni con ortografia corretta e con lettere
maiuscole dei nomi Delle versioni di Mike e Mike per le versioni di Bill, Bill, e Bill e Bill. La
Person_Cluster_Similarity contiene i punteggi di somiglianza per ognuno dei nomi.
Accodare query
07/12/2021 • 2 minutes to read

L'operazione di accodamento crea una singola tabella aggiungendo il contenuto di una o più tabelle a un'altra e
aggrega le intestazioni di colonna dalle tabelle per creare lo schema per la nuova tabella.

NOTE
Quando vengono aggiunte tabelle che non hanno le stesse intestazioni di colonna, tutte le intestazioni di colonna di tutte
le tabelle vengono aggiunte alla tabella risultante. Se una delle tabelle accodate non ha un'intestazione di colonna di altre
tabelle, la tabella risultante mostra i valori Null nella rispettiva colonna, come illustrato nell'immagine precedente nelle
colonne C e D.

È possibile trovare il comando Accoda query nella scheda Home del gruppo Combina. Nel menu a discesa
sono disponibili due opzioni:
Quer y di accodamento consente di visualizzare la finestra di dialogo Accoda per aggiungere altre
tabelle alla query corrente.
Accoda quer y come nuove visualizza la finestra di dialogo Accoda per creare una nuova query
aggiungendo più tabelle.

L'operazione di accodamento richiede almeno due tabelle. La finestra di dialogo Aggiungi presenta due
modalità:
Due tabelle: combinano due query di tabella. Questa è la modalità predefinita.
Tre o più tabelle: consentono la combinazione di un numero arbitrario di query di tabella.

NOTE
Le tabelle verranno aggiunte nell'ordine in cui sono selezionate, a partire dalla tabella primaria per la modalità Due tabelle
e dalla tabella primaria nell'elenco Tabelle da accodare per la modalità Tre o più tabelle.
Accodare due tabelle
Per l'esempio in questo articolo si useranno le due tabelle seguenti con dati di esempio:
Online Sales : vendite effettuate tramite un canale online.

Store Sales: vendite effettuate tramite le sedi fisiche dell'azienda.

Per accodare queste tabelle, selezionare prima di tutto la tabella Online Sales. Nella scheda Home
selezionare Accoda quer y per creare un nuovo passaggio nella query Online Sales. La tabella Online Sales
sarà la tabella primaria. La tabella da accodare alla tabella primaria sarà Store Sales.

Power Query esegue l'operazione di accodamento in base ai nomi delle intestazioni di colonna trovate in
entrambe le tabelle e non in base alla relativa posizione nelle sezioni delle intestazioni delle rispettive tabelle.
Nella tabella finale verranno aggiunte tutte le colonne di tutte le tabelle.
Nel caso in cui una tabella non abbia colonne trovate in un'altra tabella, i valori Null verranno visualizzati nella
colonna corrispondente, come illustrato nella colonna Referer della query finale.
Aggiungere tre o più tabelle
In questo esempio si desidera aggiungere non solo le tabelle Online Sales e Store Sales, ma anche una nuova
tabella denominata Vendite all'ingrosso .

Il nuovo approccio per questo esempio consiste nel selezionare Accoda query come nuova e quindi nella
finestra di dialogo Aggiungi selezionare il pulsante di opzione Tre o più tabelle. Nell'elenco Tabelle
disponibili selezionare ogni tabella da accodare e quindi selezionare Aggiungi . Dopo aver visualizzato tutte
le tabelle da visualizzare nell'elenco Tabelle da accodare, selezionare OK.

Dopo aver selezionato OK, verrà creata una nuova query con tutte le tabelle aggiunte.
Panoramica della combinazione di file
07/12/2021 • 4 minutes to read

Con Power Query, è possibile combinare più file con lo stesso schema in una singola tabella logica.
Questa funzionalità è utile quando si vogliono combinare tutti i file presenti nella stessa cartella. Ad esempio, se
si dispone di una cartella che contiene file mensili con tutti gli ordini di acquisto per l'azienda, è possibile
combinare questi file per consolidare gli ordini in un'unica visualizzazione.
I file possono provengono da diverse origini, ad esempio (ma non solo):
Cartelle locali
Siti di SharePoint
Archiviazione BLOB di Azure
Azure Data Lake Storage (Gen1 e Gen2)
Quando si lavora con queste origini, si noterà che condividono lo stesso schema di tabella, comunemente noto
come file system visualizzazione. Lo screenshot seguente mostra un esempio della file system visualizzazione.

Nella vista file system, la colonna Contenuto contiene la rappresentazione binaria di ogni file.

NOTE
È possibile filtrare l'elenco di file nella file system visualizzazione usando uno dei campi disponibili. È consigliabile filtrare
questa visualizzazione in modo da visualizzare solo i file da combinare, ad esempio filtrando campi come Estensione o
Percorso car tella . Altre informazioni: Cartella

La selezione di uno dei valori binari nella colonna Contenuto crea automaticamente una serie di passaggi di [
navigazione per il file ] specifico. Power Query di interpretare il file binario usando uno dei connettori
disponibili, ad esempio Text/CSV, Excel, JSON o XML.
La combinazione dei file avviene nelle fasi seguenti:
Anteprima tabella
Finestra di dialogo Combina file
Output di file combinati
Anteprima tabella
Quando ci si connette a un'origine dati usando uno dei connettori indicati in precedenza, viene visualizzata
un'anteprima della tabella. Se si è certi di voler combinare tutti i file nella cartella, selezionare Combina
nell'angolo inferiore destro della schermata.

In alternativa, è possibile selezionare Trasforma dati per accedere al editor di Power Query e creare un subset
dell'elenco di file, ad esempio usando filtri nella colonna percorso cartella per includere solo i file di una
sottocartella specifica. Combinare quindi i file selezionando la colonna che contiene i file binari nella colonna
Contenuto e quindi selezionando una delle opzioni seguenti:
Comando Combina file nel gruppo Combina della scheda Home.

Icona Combina file nell'intestazione di colonna della colonna che contiene valori [ ] binari.

Finestra di dialogo Combina file


Dopo aver selezionato il comando Combina o Combina file, viene visualizzata la finestra di dialogo Combina
file e si verifica quanto segue:
1. Power Query analizza il file di esempio (per impostazione predefinita, il primo file nell'elenco) e determina il
connettore di file corretto da usare per aprire il file.
2. La finestra di dialogo fornisce l'esperienza del connettore di file esattamente come se ci si connetteva
direttamente al file di esempio.
Se si vuole usare un file diverso per il file di esempio, è possibile sceglierlo dal menu a discesa File di
esempio.
Facoltativo: è possibile selezionare Ignora file con errori per escludere dall'output finale tutti i file
che generano errori.
Nell'immagine seguente Power Query ha rilevato che il primo file ha un'estensione .csv, quindi usa il connettore
Testo/CSV per interpretare il file.

Output di file combinati


Al termine del processo Combina file, Power Query esegue automaticamente le azioni seguenti:
1. Crea una query di esempio che esegue tutti i passaggi di estrazione necessari per un singolo file. Usa il
file selezionato come file di esempio nella finestra di dialogo Combina file .
Questa query di esempio ha il nome Transform Sample file nel riquadro Query.
2. Crea una query di funzione che parametrizza l'input file/binario per la query di esempio. La query di
esempio e la query di funzione sono collegate, in modo che le modifiche apportate alla query di esempio
siano riflesse nella query di funzione.
Queste query sono elencate nel gruppo Quer y helper.
3. Applica la query di funzione alla query originale con i file binari di input (ad esempio, la query della
cartella) in modo che applii la query di funzione per gli input binari in ogni riga e quindi espande
l'estrazione dei dati risultante come colonne di primo livello.
4. Crea un nuovo gruppo con il prefisso Transform file from e la query iniziale come suffisso e organizza
tutti i componenti usati per creare questi file combinati in tale gruppo.
È possibile combinare facilmente tutti i file all'interno di una determinata cartella, purché presentino lo stesso
tipo di file e la stessa struttura (incluse le stesse colonne). È anche possibile applicare passaggi aggiuntivi di
trasformazione o estrazione modificando la query di esempio generata automaticamente, senza doversi
preoccupare di modificare o creare passaggi aggiuntivi della query di funzione.

NOTE
È possibile modificare i passaggi all'interno della query di esempio per modificare la funzione applicata a ogni file binario
nella query. La query di esempio è collegata alla funzione, quindi tutte le modifiche apportate alla query di esempio
verranno riflesse nella query della funzione.
Se una delle modifiche influisce sui nomi di colonna o sui tipi di dati delle colonne, assicurarsi di controllare l'ultimo
passaggio della query di output. L'aggiunta di un passaggio Modifica tipo di colonna può introdurre un errore a livello
di passaggio che impedisce la visualizzazione della tabella. Altre informazioni: Gestione degli errori

Vedi anche
Combinare file CSV
Combinare file CSV
07/12/2021 • 5 minutes to read

In Power Query è possibile combinare più file da una determinata origine dati. Questo articolo descrive il
funzionamento dell'esperienza quando i file da combinare sono file CSV. Altre informazioni: Panoramica della
combinazione di file

TIP
È possibile seguire questo esempio scaricando i file di esempio usati in questo articolo da questo collegamento per il
download. È possibile inserire tali file nell'origine dati scelta, ad esempio una cartella locale, una cartella SharePoint, un
archivio BLOB di Azure, Azure Data Lake Archiviazione o un'altra origine dati che fornisce la visualizzazione file system dati.

Per semplicità, l'esempio in questo articolo usa il connettore Cartella. Altre informazioni: Cartella

Informazioni sui file di esempio usati


Per combinare i file, è fondamentale che tutti abbia la stessa struttura e la stessa estensione. Tutti i file usati in
questo esempio hanno la stessa struttura ed estensione (.csv).
Sono disponibili 12 file CSV, uno per ogni mese dell'anno di calendario 2019. L'immagine seguente mostra le
prime 15 righe del file per il mese di gennaio.

Il numero di righe varia da file a file, ma tutti i file hanno una sezione di intestazione nelle prime quattro righe.
Hanno intestazioni di colonna nella quinta riga e i dati per la tabella iniziano nella sesta riga e continuano in
tutte le righe successive.
L'obiettivo è combinare tutti e 12 i file in un'unica tabella. Questa tabella combinata contiene la riga di
intestazione nella parte superiore della tabella e include il nome di origine, la data, il paese, le unità e i dati sui
ricavi per l'intero anno in colonne separate dopo la riga di intestazione.
Anteprima tabella
Quando ci si connette alla cartella che ospita i file da combinare in questo esempio, il nome della cartella è File
CSV. Viene visualizzata la finestra di dialogo di anteprima della tabella, che visualizza il percorso della cartella —
— nell'angolo superiore sinistro. L'anteprima dei dati mostra la file system dati.

Per questo esempio, selezionare Combina .

NOTE
In una situazione diversa, è possibile selezionare Trasforma dati per filtrare e trasformare ulteriormente i dati prima di
combinare i file. È consigliabile selezionare Combina solo quando si è certi che la cartella contenga solo i file da
combinare.

Finestra di dialogo Combina file


Dopo aver selezionato Combina nell'anteprima della tabella, viene visualizzata la finestra di dialogo
Combina file.

NOTE
Power Query rileva automaticamente il connettore da usare in base al primo file trovato nell'elenco. Per altre informazioni
sul connettore CSV, vedere Testo/CSV.

Per questo esempio, lasciare tutte le impostazioni predefinite ( File di esempio impostato su Primo file e i valori
predefiniti per Origine file , Delimitatore e Rilevamento del tipo di dati ).
Selezionare ora Trasforma dati nell'angolo inferiore destro per passare alla query di output.

Query di output
Dopo aver selezionato Trasforma dati nella finestra di dialogo Combina file, si tornerà al editor di Power Query
nella query creata inizialmente dalla connessione alla cartella locale. La query di output contiene ora il nome del
file di origine nella colonna più a sinistra, insieme ai dati di ogni file di origine nelle colonne rimanenti.
Tuttavia, i dati non sono nella forma corretta. È necessario rimuovere le prime quattro righe da ogni file prima di
combinarle. Per apportare questa modifica in ogni file prima di combinarli, selezionare la query Trasforma file
di esempio nel riquadro Query sul lato sinistro dello schermo.
Modificare la query del file di esempio di trasformazione
In questa query del file transform sample i valori nella colonna Date indicano che i dati sono relativi al mese di
aprile, che ha il formato anno-mese-giorno (AAAA-MM-GG). April 2019.csv è il primo file visualizzato
nell'anteprima della tabella.

È ora necessario applicare un nuovo set di trasformazioni per pulire i dati. Ogni trasformazione verrà convertita
automaticamente in una funzione all'interno del gruppo di query helper che verrà applicata a ogni file nella
cartella prima di combinare i dati di ogni file.
Le trasformazioni che devono essere aggiunte alla query transform sample file sono:
1. Rimuovi le prime righe: per eseguire questa operazione, selezionare il menu dell'icona della tabella
nell'angolo superiore sinistro della tabella e quindi selezionare Rimuovi le prime righe.
Nella finestra di dialogo Rimuovi le prime righe immettere 4 e quindi selezionare OK.

Dopo aver selezionato OK, la tabella non avrà più le prime quattro righe.
2. Usa la prima riga come intestazioni: selezionare di nuovo l'icona della tabella e quindi selezionare
Usa la prima riga come intestazioni.

Il risultato di tale operazione alza di livello la prima riga della tabella alle nuove intestazioni di colonna.
Al termine di questa operazione, Power Query per impostazione predefinita tenterà di rilevare automaticamente
i tipi di dati delle colonne e di aggiungere un nuovo passaggio Tipo di colonna modificato.
Revisione della query di output
Quando si torna alla query di file CSV, si noterà che l'ultimo passaggio restituisce un errore che indica che la
colonna "Column1" della tabella non è stata trovata. Il motivo di questo errore è che lo stato precedente della
query stava eseguendo un'operazione su una colonna denominata Column1. Tuttavia, a causa delle modifiche
apportate alla query del file transform sample, questa colonna non esiste più. Altre informazioni: Gestione
degli errori in Power Query

È possibile rimuovere l'ultimo passaggio della query dal riquadro Passaggi applicati selezionando l'icona X
elimina sul lato sinistro del nome del passaggio. Dopo aver eliminato questo passaggio, la query mostrerà i
risultati corretti.
Si noti tuttavia che nessuna delle colonne derivate dai file (Date, Country, Units, Revenue) ha un tipo di dati
specifico assegnato. Assegnare il tipo di dati corretto a ogni colonna usando la tabella seguente.

N O M E C O LO N N A T IP O DI DAT I

Data Data

Paese Testo

Unità Numero intero

Ricavi Valuta

Dopo aver definito i tipi di dati per ogni colonna, si sarà pronti per caricare la tabella.
NOTE
Per informazioni su come definire o modificare i tipi di dati delle colonne, vedere Tipi di dati.

Verifica
Per verificare che tutti i file siano stati combinati, è possibile selezionare l'icona del filtro nell'intestazione di
colonna Source.Name, che visualizza tutti i nomi dei file che sono stati combinati. Se viene visualizzato l'avviso
"L'elenco potrebbe essere incompleto", selezionare Carica altro nella parte inferiore del menu per visualizzare
altri valori disponibili nella colonna.
Dopo aver selezionato Carica altro , verranno visualizzati tutti i nomi di file disponibili.
Panoramica delle query di unione
07/12/2021 • 4 minutes to read

Un'operazione di merge esegue il join di due tabelle esistenti in base ai valori corrispondenti di una o più
colonne. È possibile scegliere di usare diversi tipi di join, a seconda dell'output desiderato.

Unione di query
È possibile trovare il comando Merge quer y nella scheda Home del gruppo Combina. Nel menu a discesa
sono disponibili due opzioni:
Merge quer y : consente di visualizzare la finestra di dialogo Merge con la query selezionata come tabella a
sinistra dell'operazione di unione.
Merge di quer y come nuove : consente di visualizzare la finestra di dialogo Merge senza alcuna tabella
preselezionata per l'operazione di unione.

Identificare le tabelle per l'unione


L'operazione di unione richiede due tabelle:
Tabella sinistra per l'unione: la prima selezione, dall'alto verso il basso dello schermo.
Tabella a destra per l'unione: la seconda selezione, dall'alto verso il basso dello schermo.
NOTE
La posizione — sinistra o destra delle tabelle diventa molto importante quando si seleziona il tipo di join corretto da —
usare.

Selezionare coppie di colonne


Dopo aver selezionato entrambe le tabelle a sinistra e a destra, è possibile selezionare le colonne che guidano il
join tra le tabelle. Nell'esempio seguente sono presenti due tabelle:
Sales: il campo Countr yID è una chiave o un identificatore della tabella Countries.
Paesi: questa tabella contiene l'ID paese e il nome del paese.
Finestra di dialogo Merge con la tabella Left per merge impostata su Sales e la colonna CountryID selezionata e
la tabella Right per merge impostata su Countries e la colonna CountryID selezionata.
L'obiettivo è creare un join di queste tabelle usando la colonna Countr yID di entrambe le tabelle, in modo da
selezionare la colonna Countr yID da ogni tabella. Dopo aver selezionato le opzioni, viene visualizzato un
messaggio con un numero stimato di corrispondenze nella parte inferiore della finestra di dialogo.

NOTE
Anche se in questo esempio viene illustrata la stessa intestazione di colonna per entrambe le tabelle, questo non è un
requisito per l'operazione di unione. Non è necessario che le intestazioni di colonna corrispondano tra tabelle. È tuttavia
importante notare che le colonne devono essere dello stesso tipo di dati. In caso contrario, l'operazione di unione
potrebbe non produrre risultati corretti.

È anche possibile selezionare più colonne per eseguire il join premendo CTRL mentre si selezionano le colonne.
In questo caso, l'ordine in cui sono state selezionate le colonne viene visualizzato in numeri piccoli accanto alle
intestazioni di colonna, a partire da 1.
Per questo esempio sono disponibili le tabelle Sales e Countries. Ogni tabella include le colonne
Countr yID e StateID, che è necessario associare per il join tra entrambe le colonne.
Selezionare prima di tutto la colonna Countr yID nella tabella Sales, premere CTRL e quindi selezionare la
colonna StateID. Verranno visualizzati i numeri piccoli nelle intestazioni di colonna. Eseguire quindi le stesse
selezioni nella tabella Paesi. L'immagine seguente mostra il risultato della selezione di tali colonne.

! [Finestra di dialogo Merge con la tabella Left per merge impostata su Sales, con le colonne CountryID e StateID
selezionate e la tabella Right per merge impostata su Countries, con le colonne CountryID e StateID selezionate.
Il tipo di join è impostato su Left outer.
Espandere o aggregare la nuova colonna della tabella unita
Dopo aver selezionato OK nella finestra di dialogo Merge, la tabella di base della query conterà tutte le
colonne della tabella a sinistra. Verrà inoltre aggiunta una nuova colonna con lo stesso nome della tabella a
destra. Questa colonna contiene i valori corrispondenti alla tabella di destra riga per riga.
Da qui è possibile scegliere di espandere o aggregare i campi di questa nuova colonna della tabella, che saranno
i campi della tabella a destra.
Tabella che mostra la colonna Countries unita a destra, con tutte le righe contenenti una tabella. L'icona di
espansione a destra dell'intestazione di colonna Paesi è stata selezionata e il menu di espansione è aperto. Nel
menu di espansione sono selezionate le selezioni Seleziona tutto, CountryID, StateID, Country e State. È
selezionata anche l'opzione Usa il nome della colonna originale come prefisso.

NOTE
Attualmente, l'Power Query online offre solo l'operazione di espansione nella relativa interfaccia. L'opzione per
l'aggregazione verrà aggiunta più avanti nel corso dell'anno.

Tipi di join
Un tipo di join specifica come verrà eseguita un'operazione di unione. Nella tabella seguente vengono descritti i
tipi di join disponibili in Power Query.

T IP O DI JO IN IC O N A DESC RIZ IO N E

Left outer Tutte le righe della tabella a sinistra,


corrispondenti alle righe della tabella di
destra

Esterno destro Tutte le righe della tabella di destra,


corrispondenti alle righe della tabella di
sinistra

Full outer Tutte le righe di entrambe le tabelle

Interno Solo righe corrispondenti da entrambe


le tabelle
T IP O DI JO IN IC O N A DESC RIZ IO N E

Left anti Solo le righe della tabella a sinistra

Right anti Solo le righe della tabella a destra

Corrispondenza fuzzy
L'unione fuzzy viene utilizzata per applicare algoritmi di corrispondenza fuzzy durante il confronto delle
colonne, per tentare di trovare corrispondenze tra le tabelle da unire. È possibile abilitare questa funzionalità
selezionando la casella di controllo Usa corrispondenza fuzzy per eseguire l'unione nella finestra di dialogo
Merge . Espandere Le opzioni di corrispondenza fuzzy per visualizzare tutte le configurazioni disponibili.

NOTE
La corrispondenza fuzzy è supportata solo per le operazioni di unione su colonne di testo.
Left outer join
07/12/2021 • 2 minutes to read

Uno dei tipi di join disponibili nella finestra di dialogo Merge di Power Query è un left outer join, che mantiene
tutte le righe della tabella di sinistra e consente di visualizzare tutte le righe corrispondenti della tabella di
destra. Altre informazioni: Panoramica delle operazioni di unione

La figura mostra una tabella a sinistra con le colonne Date, CountryID e Units. La colonna CountryID evidenziata
contiene i valori 1 nelle righe 1 e 2, 3 nella riga 3 e 4 nella riga 4. Una tabella a destra contiene le colonne ID e
Country. La colonna ID evidenziata contiene i valori 1 nella riga 1 (indica gli Stati Uniti), 2 nella riga 2 (che indica
il Canada) e 3 nella riga 3 (che indica Il Messico). Una tabella sotto le prime due tabelle contiene le colonne Date,
CountryID, Units e Country. La tabella contiene quattro righe, con le prime due righe contenenti i dati per
CountryID 1, una riga per CountryID 3 e una riga per Country ID 4. Poiché la tabella di destra non contiene un ID
pari a 4, il valore della quarta riga nella colonna Country contiene Null.
Questo articolo usa dati di esempio per illustrare come eseguire un'operazione di unione con il left outer join. Le
tabelle di origine di esempio per questo esempio sono:
Sales: questa tabella include i campi Date, Countr yID e Units. Countr yID è un valore numerico intero
che rappresenta l'identificatore univoco della tabella Countries.

Paesi: questa tabella è una tabella di riferimento con i campi id e Countr y . Il campo id rappresenta
l'identificatore univoco per ogni record.
Tabella Countries con ID impostato su 1 nella riga 1, 2 nella riga 2 e 3 nella riga 3 e Country
impostato su USA nella riga 1, Canada nella riga 2 e Country nella riga 3.

In questo esempio si uniranno entrambe le tabelle, con la tabella Sales come tabella a sinistra e la tabella
Countries come tabella a destra. Il join verrà effettuato tra le colonne seguenti.

C A M P O DEL L A TA B EL L A SA L ES C A M P O DEL L A TA B EL L A C O UN T RIES

COUNTRYID id

L'obiettivo è quello di creare una tabella simile alla seguente, in cui il nome del paese viene visualizzato come
nuova colonna Countr y nella tabella Sales purché countr yID sia presente nella tabella Countries. Se non
sono presenti corrispondenze tra le tabelle di sinistra e di destra, il risultato dell'unione per la riga è un valore
Null. Nell'immagine seguente, questo è il caso di Countr yID 4, che è stato portato dalla tabella Sales.

Per eseguire un'left outer join


1. Selezionare la query Sales e quindi selezionare Merge queries (Unisci quer y).
2. Nella finestra di dialogo Merge selezionare Paesi in Tabella destra per l'unione.
3. Nella tabella Sales selezionare la colonna Countr yID.
4. Nella tabella Paesi selezionare la colonna ID.
5. Nella sezione Tipo di join selezionare Left outer .
6. Selezionare OK .
Dalla colonna Paesi appena creata espandere il campo Paese. Non selezionare la casella di controllo Usa il
nome della colonna originale come prefisso.
Dopo aver eseguito questa operazione, si creerà una tabella simile all'immagine seguente.
Right outer join
07/12/2021 • 2 minutes to read

Uno dei tipi di join disponibili nella finestra di dialogo Unisci in Power Query è un right outer join, che mantiene
tutte le righe della tabella di destra e contiene tutte le righe corrispondenti della tabella di sinistra. Altre
informazioni: Panoramica delle operazioni di merge

La figura mostra una tabella a sinistra con le colonne Date, CountryID e Units. La colonna CountryID evidenziata
contiene i valori 1 nelle righe 1 e 2, 3 nella riga 3 e 4 nella riga 4. Una tabella a destra contiene le colonne ID e
Country, con una sola riga. La colonna ID evidenziata contiene il valore 3 nella riga 1 (che indica Panama). Una
tabella sotto le prime due tabelle contiene le colonne Date, CountryID, Units e Country. La tabella include una
riga, con CountryID di 3 e Country of Panama.
Questo articolo usa dati di esempio per illustrare come eseguire un'operazione di unione con il right outer join.
Le tabelle di origine di esempio per questo esempio sono:
Sales: questa tabella include i campi Date , Countr yID e Units . CountryID è un valore numerico intero
che rappresenta l'identificatore univoco della tabella Countries.

Countries : questa tabella è una tabella di riferimento con i campi ID e Countr y . Il campo id
rappresenta l'identificatore univoco per ogni record.

In questo esempio si uniranno entrambe le tabelle, con la tabella Sales come tabella a sinistra e la tabella
Countries come quella destra. Il join verrà effettuato tra le colonne seguenti.

C A M P O DEL L A TA B EL L A SA L ES C A M P O DEL L A TA B EL L A C O UN T RIES

CountryID id
L'obiettivo è creare una tabella simile alla seguente, in cui il nome del paese viene visualizzato come nuova
colonna Countr y nella tabella Sales. A causa del funzionamento right outer join, verranno inserite tutte le
righe della tabella di destra, ma verranno mantenute solo le righe corrispondenti della tabella di sinistra.

Per eseguire una right outer join


1. Selezionare la query Sales e quindi selezionare Merge queries (Unisci quer y).
2. Nella finestra di dialogo Unisci in Tabella destra per l'unione selezionare Paesi .
3. Nella tabella Sales selezionare la colonna Countr yID.
4. Nella tabella Paesi selezionare la colonna ID.
5. Nella sezione Tipo di join selezionare Right outer .
6. Selezionare OK .

Nella colonna Paesi appena creata espandere il campo Paese. Non selezionare la casella di controllo Usa
nome colonna originale come prefisso .

Dopo aver eseguito questa operazione, si creerà una tabella simile all'immagine seguente.
Full outer join
07/12/2021 • 3 minutes to read

Uno dei tipi di join disponibili nella finestra di dialogo Merge di Power Query è un full outer join, che consente di
visualizzare tutte le righe delle tabelle di sinistra e destra. Altre informazioni: Panoramica delle operazioni di
unione

La figura mostra una tabella a sinistra con le colonne Date, CountryID e Units. La colonna CountryID evidenziata
contiene i valori 1 nelle righe 1 e 2, 3 nella riga 3 e 2 nella riga 4. Una tabella a destra contiene le colonne ID e
Country. La colonna ID evidenziata contiene i valori 1 nella riga 1 (indica gli Stati Uniti), 2 nella riga 2 (che indica
il Canada), 3 nella riga 3 (che indica La Spagna) e 4 (che indica la Spagna) nella riga 4. Una tabella sotto le prime
due tabelle contiene le colonne Date, CountryID, Units e Country. Tutte le righe sono state ridisporte in ordine
numerico in base al valore CountryID. Il paese associato al numero CountryID viene visualizzato nella colonna
Country. Poiché l'ID paese per la Spagna non era contenuto nella tabella a sinistra, viene aggiunta una nuova
riga e i valori relativi a data, ID paese e unità per questa riga sono impostati su Null.
Questo articolo usa dati di esempio per illustrare come eseguire un'operazione di unione con il full outer join. Le
tabelle di origine di esempio per questo esempio sono:
Sales: questa tabella include i campi Date, Countr yID e Units. Countr yID è un valore numerico intero
che rappresenta l'identificatore univoco della tabella Countries.

Paesi: si tratta di una tabella di riferimento con i campi id e Countr y . Il campo id rappresenta
l'identificatore univoco per ogni record.
In questo esempio si uniranno entrambe le tabelle, con la tabella Sales come tabella a sinistra e la tabella
Countries come tabella a destra. Il join verrà effettuato tra le colonne seguenti.

C A M P O DEL L A TA B EL L A SA L ES C A M P O DEL L A TA B EL L A C O UN T RIES

COUNTRYID id

L'obiettivo è creare una tabella simile alla seguente, in cui il nome del paese viene visualizzato come nuova
colonna Countr y nella tabella Sales. A causa del funzionamento full outer join, verranno inserite tutte le righe
delle tabelle sinistra e destra, indipendentemente dal fatto che vengano visualizzate solo in una delle tabelle.

Completa outer join tabella finale con Date, CountryID e Units derivati dalla tabella Sales e una colonna Country
derivata dalla tabella Countries. È stata aggiunta una quinta riga per contenere i dati della Spagna, ma tale riga
contiene null nelle colonne Date, CountryID e Units perché tali valori non esistevano per la Spagna nella tabella
Sales.
Per eseguire un'full outer join
1. Selezionare la query Sales e quindi selezionare Merge queries (Unisci quer y).
2. Nella finestra di dialogo Merge selezionare Paesi in Tabella destra per l'unione.
3. Nella tabella Sales selezionare la colonna Countr yID.
4. Nella tabella Paesi selezionare la colonna ID.
5. Nella sezione Tipo di join selezionare Full outer .
6. Selezionare OK .
TIP
Esaminare in dettaglio il messaggio nella parte inferiore della finestra di dialogo che indica che la selezione corrisponde a 4
di 4 righe della prima tabella e 3 di 4 righe della seconda tabella. Questo messaggio è fondamentale per comprendere il
risultato che si ottiene da questa operazione.

Nella tabella Paesi è presente il campo Countr y Spagna con ID 4, ma non sono presenti record per Countr yID
4 nella tabella Sales. Per questo motivo solo tre delle quattro righe della tabella di destra hanno trovato una
corrispondenza. Tutte le righe della tabella di destra che non hanno righe corrispondenti della tabella di sinistra
verranno raggruppate e visualizzate in una nuova riga della tabella di output senza valori per i campi della
tabella di sinistra.
Dalla colonna Paesi appena creata dopo l'operazione di unione espandere il campo Paese. Non selezionare la
casella di controllo Usa il nome della colonna originale come prefisso.

Dopo aver eseguito questa operazione, si creerà una tabella simile all'immagine seguente.

Tabella outer join tabella finale contenente Date, CountryID e Units derivati dalla tabella Sales e una colonna
Country derivata dalla tabella Countries. È stata aggiunta una quinta riga per contenere i dati della Spagna, ma
tale riga contiene null nelle colonne Date, CountryID e Units perché tali valori non esistevano per la Spagna nella
tabella Sales.
Inner join
07/12/2021 • 2 minutes to read

Uno dei tipi di join disponibili nella finestra di dialogo Merge di Power Query è un inner join, che consente di
visualizzare solo le righe corrispondenti delle tabelle di sinistra e destra. Altre informazioni: Panoramica delle
operazioni di unione

La figura mostra una tabella a sinistra con le colonne Date, CountryID e Units. La colonna CountryID evidenziata
contiene i valori 1 nelle righe 1 e 2, 3 nella riga 3 e 2 nella riga 4. Una tabella a destra contiene le colonne ID e
Country. La colonna ID evidenziata contiene i valori 3 nella riga 1 (che indica La Spagna) e 4 nella riga 2 (che
indica la Spagna). Una tabella sotto le prime due tabelle contiene le colonne Date, CountryID, Units e Country,
ma solo una riga di dati per IlVaro.
Questo articolo usa dati di esempio per illustrare come eseguire un'operazione di unione con il inner join. Le
tabelle di origine di esempio per questo esempio sono:
Sales: questa tabella include i campi Date, Countr yID e Units. Countr yID è un valore numerico intero
che rappresenta l'identificatore univoco della tabella Countries.

Paesi: si tratta di una tabella di riferimento con i campi id e Countr y . Il campo id rappresenta
l'identificatore univoco per ogni record.

In questo esempio si uniranno entrambe le tabelle, con la tabella Sales come tabella a sinistra e la tabella
Countries come tabella a destra. Il join verrà effettuato tra le colonne seguenti.
C A M P O DEL L A TA B EL L A SA L ES C A M P O DEL L A TA B EL L A C O UN T RIES

COUNTRYID id

L'obiettivo è creare una tabella simile alla seguente, in cui il nome del paese viene visualizzato come nuova
colonna Countr y nella tabella Sales. A causa del funzionamento inner join, verranno inserite solo le righe
corrispondenti delle tabelle sinistra e destra.

Per eseguire un'inner join


1. Selezionare la query Sales e quindi selezionare Merge queries (Unisci quer y).
2. Nella finestra di dialogo Merge selezionare Paesi in Tabella destra per l'unione.
3. Nella tabella Sales selezionare la colonna Countr yID.
4. Nella tabella Paesi selezionare la colonna ID.
5. Nella sezione Join kind (Tipo di join) selezionare Inner (Interno).
6. Selezionare OK .
TIP
Esaminare più in dettaglio il messaggio nella parte inferiore della finestra di dialogo che indica che la selezione corrisponde
a 1 di 4 righe della prima tabella e a 1 di 2 righe dalla seconda tabella. Questo messaggio è fondamentale per
comprendere il risultato che si ottiene da questa operazione.

Nella tabella Sales il valore countr yID è 1 e 2, ma nessuno di questi valori è presente nella tabella Countries.
Per questo motivo la corrispondenza ha trovato solo una delle quattro righe nella tabella sinistra (prima).
Nella tabella Paesi è presente il campo Countr y Spagna con ID 4, ma nella tabella Sales non sono presenti
record per countr yID 4. Per questo motivo solo una delle due righe della tabella di destra (seconda) ha trovato
una corrispondenza.
Dalla colonna Paesi appena creata espandere il campo Paese. Non selezionare la casella di controllo Usa il
nome della colonna originale come prefisso.
Dopo aver eseguito questa operazione, si creerà una tabella simile all'immagine seguente.
Left anti-join
07/12/2021 • 3 minutes to read

Uno dei tipi di join disponibili nella finestra di dialogo Merge di Power Query è un join left anti, che consente di
importare solo le righe della tabella di sinistra che non hanno righe corrispondenti dalla tabella di destra. Altre
informazioni: Panoramica delle operazioni di unione

La figura mostra una tabella a sinistra con le colonne Date, CountryID e Units. La colonna CountryID evidenziata
contiene i valori 1 nelle righe 1 e 2, 3 nella riga 3 e 2 nella riga 4. Una tabella a destra contiene le colonne ID e
Country. La colonna ID evidenziata contiene i valori 3 nella riga 1 (che indica La Spagna) e 4 nella riga 2 (che
indica la Spagna). Una tabella sotto le prime due tabelle contiene le colonne Date, CountryID, Units e Country. La
tabella contiene tre righe, con due righe contenenti i dati per CountryID 1 e una riga per CountryID 2. Poiché
nessuno dei CountryID rimanenti corrisponde ad alcuno dei paesi nella tabella di destra, le righe nella colonna
Country della tabella unita contengono tutti Null.
Questo articolo usa dati di esempio per illustrare come eseguire un'operazione di merge con left anti join. Le
tabelle di origine di esempio per questo esempio sono:
Sales: questa tabella include i campi Date, Countr yID e Units. Countr yID è un valore numerico intero
che rappresenta l'identificatore univoco della tabella Countries.

Paesi: questa tabella è una tabella di riferimento con i campi id e Countr y . Il campo id rappresenta
l'identificatore univoco per ogni record.
In questo esempio si uniranno entrambe le tabelle, con la tabella Sales come tabella a sinistra e la tabella
Countries come tabella a destra. Il join verrà effettuato tra le colonne seguenti.

C A M P O DEL L A TA B EL L A SA L ES C A M P O DEL L A TA B EL L A C O UN T RIES

COUNTRYID id

L'obiettivo è creare una tabella simile alla seguente, in cui vengono mantenute solo le righe della tabella di
sinistra che non corrispondono ad alcuna della tabella di destra.

Tabella finale anti join a sinistra con intestazioni di colonna Date, CountryID, Units e Country e tre righe di dati di
cui i valori per la colonna Country sono tutti Null.
Per eseguire un join left anti join
1. Selezionare la query Sales e quindi selezionare Merge queries (Unisci quer y).
2. Nella finestra di dialogo Merge selezionare Paesi in Tabella destra per l'unione.
3. Nella tabella Sales selezionare la colonna Countr yID.
4. Nella tabella Paesi selezionare la colonna ID.
5. Nella sezione Tipo di join selezionare Left anti .
6. Selezionare OK .
TIP
Esaminare in dettaglio il messaggio nella parte inferiore della finestra di dialogo che indica che la selezione esclude 1 di 4
righe dalla prima tabella. Questo messaggio è fondamentale per comprendere il risultato che si ottiene da questa
operazione.

Nella tabella Sales è presente un Countr yID di 1 e 2, ma nessuno dei due è presente nella tabella Countries.
Per questo motivo la corrispondenza ha trovato solo una delle quattro righe nella tabella sinistra (prima).
Nella tabella Paesi è presente il campo Countr y Spagna con ID 4, ma non sono presenti record per Countr yID
4 nella tabella Sales. Per questo motivo solo una delle due righe della tabella di destra (seconda) ha trovato
una corrispondenza.
Dalla colonna Paesi appena creata espandere il campo Paese. Non selezionare la casella di controllo Usa il
nome della colonna originale come prefisso.
Dopo aver fatto questa operazione, si creerà una tabella simile all'immagine seguente. Il campo Countr y
appena espanso non ha valori. Questo perché il join left anti non importa alcun valore dalla tabella di destra,
ma mantiene solo — le righe della tabella di sinistra.

Tabella finale con le intestazioni di colonna Date, CountryID, Units e Country e tre righe di dati di cui i valori per
la colonna Country sono tutti Null.
Right anti-join
07/12/2021 • 2 minutes to read

Uno dei tipi di join disponibili nella finestra di dialogo Merge di Power Query è un join right anti, che consente di
importare solo le righe della tabella di destra che non hanno righe corrispondenti dalla tabella di sinistra. Altre
informazioni: Panoramica delle operazioni di unione

La figura mostra una tabella a sinistra con le colonne Date, CountryID e Units. La colonna CountryID evidenziata
contiene i valori 1 nelle righe 1 e 2, 3 nella riga 3 e 2 nella riga 4. Una tabella a destra contiene le colonne ID e
Country. La colonna ID evidenziata contiene i valori 3 nella riga 1 (che indica La Spagna) e 4 nella riga 2 (che
indica la Spagna). Una tabella sotto le prime due tabelle contiene le colonne Date, CountryID, Units e Country. La
tabella contiene una riga, con Date, CountryID e Units impostati su Null e Country impostato su Spagna.
Questo articolo usa dati di esempio per illustrare come eseguire un'operazione di merge con right anti join. Le
tabelle di origine di esempio per questo esempio sono:
Sales: questa tabella include i campi Date, Countr yID e Units. Countr yID è un valore numerico intero
che rappresenta l'identificatore univoco della tabella Countries.

Paesi: si tratta di una tabella di riferimento con i campi id e Countr y . Il campo id rappresenta
l'identificatore univoco per ogni record.

In questo esempio si uniranno entrambe le tabelle, con la tabella Sales come tabella a sinistra e la tabella
Countries come tabella a destra. Il join verrà effettuato tra le colonne seguenti.
C A M P O DEL L A TA B EL L A SA L ES C A M P O DEL L A TA B EL L A C O UN T RIES

COUNTRYID id

L'obiettivo è creare una tabella simile alla seguente, in cui vengono mantenute solo le righe della tabella di
destra che non corrispondono ad alcuna della tabella di sinistra. Come caso d'uso comune, è possibile trovare
tutte le righe disponibili nella tabella di destra, ma non nella tabella di sinistra.

Tabella finale anti-join a destra con le colonne di intestazione Date, CountryID, Units e Country, contenenti una
riga con null in tutte le colonne, ad eccezione di Country, che contiene la Spagna.
Per eseguire un join right anti join
1. Selezionare la query Sales e quindi selezionare Merge queries (Unisci quer y).
2. Nella finestra di dialogo Merge selezionare Paesi in Tabella destra per l'unione.
3. Nella tabella Sales selezionare la colonna Countr yID.
4. Nella tabella Paesi selezionare la colonna ID.
5. Nella sezione Tipo di join selezionare Right anti .
6. Selezionare OK .
TIP
Esaminare in dettaglio il messaggio nella parte inferiore della finestra di dialogo che indica che la selezione esclude 1 di 2
righe dalla seconda tabella. Questo messaggio è fondamentale per comprendere il risultato che si ottiene da questa
operazione.

Nella tabella Paesi è presente il campo Countr y Spagna con ID 4, ma non sono presenti record per Countr yID
4 nella tabella Sales. Per questo motivo solo una delle due righe della tabella di destra (seconda) ha trovato
una corrispondenza. A causa del funzionamento right anti join, nell'output di questa operazione non verranno
mai visualizzate righe della tabella sinistra (prima).
Dalla colonna Paesi appena creata espandere il campo Paese. Non selezionare la casella di controllo Usa il
nome della colonna originale come prefisso.
Dopo aver eseguito questa operazione, si creerà una tabella simile all'immagine seguente. Il campo Countr y
appena espanso non ha valori. Questo perché il join right anti non importa alcun valore dalla tabella di sinistra,
ma mantiene solo — le righe della tabella di destra.

Tabella finale con le colonne di intestazione Date, CountryID, Units e Country, che contiene una riga con null in
tutte le colonne, ad eccezione di Country, che contiene la Spagna.
Unione fuzzy
07/12/2021 • 5 minutes to read

L'unione fuzzy è una funzionalità di preparazione intelligente dei dati che è possibile usare per applicare
algoritmi di corrispondenza fuzzy durante il confronto delle colonne, per tentare di trovare corrispondenze tra le
tabelle da unire.
È possibile abilitare la corrispondenza fuzzy nella parte inferiore della finestra di dialogo Merge selezionando il
pulsante di opzione Usa corrispondenza fuzzy per eseguire l'unione . Altre informazioni: Panoramica delle
operazioni di unione

NOTE
La corrispondenza fuzzy è supportata solo nelle operazioni di unione su colonne di testo. Power Query usa l'algoritmo di
somiglianza Diacard per misurare la somiglianza tra coppie di istanze.

Scenario di esempio
Un caso d'uso comune per la corrispondenza fuzzy è quello dei campi di testo in formato libero, ad esempio in
un sondaggio. Per questo articolo, la tabella di esempio è stata presa direttamente da un sondaggio online
inviato a un gruppo con una sola domanda: Qual è la torta preferita?
I risultati del sondaggio sono illustrati nell'immagine seguente.

Tabella di output del sondaggio di esempio contenente il grafico di distribuzione delle colonne che mostra nove
risposte distinte con tutte le risposte univoche e le risposte al sondaggio con tutti i problemi di digitazione,
plurale o singolare e caso.
I nove record riflettono gli invii di sondaggi. Il problema con gli invii di sondaggi è che alcuni hanno errori di
digitazione, alcuni sono plurali, altri singolari, altri sono maiuscoli e altri sono minuscoli.
Per standardizzare questi valori, in questo esempio è presente una tabella di riferimento Disartie.

Tabella di riferimento dei fiori contenente il grafico della distribuzione delle colonne che mostra quattro distinti
fiori con tutti i fiori univoci e l'elenco dei fiori: apple,apple, watermelon e banane.

NOTE
Per semplicità, questa tabella di riferimento Distorsio include solo il nome degli elementi che saranno necessari per
questo scenario. La tabella di riferimento può contenere tutte le righe necessarie.

L'obiettivo è creare una tabella simile alla seguente, in cui tutti questi valori sono stati standardizzati in modo da
poter eseguire un'analisi più approfondita.

Tabella di output del sondaggio di esempio con la colonna Domanda contenente il grafico della distribuzione
delle colonne che mostra nove risposte distinte con tutte le risposte univoche e le risposte al sondaggio con tutti
i problemi di digitazione, plurale o singolare e caso, e contiene anche la colonna Fruit contenente il grafico della
distribuzione delle colonne che mostra quattro risposte distinte con una risposta univoca ed elenca tutti i
prodotti digitati correttamente, singolare e maiuscole/minuscole appropriate.

Unione fuzzy
Per eseguire l'unione fuzzy, iniziare eseguendo un'unione. In questo caso, si userà un left outer join, dove la
tabella a sinistra è quella del sondaggio e la tabella a destra è la tabella di riferimento Distorsi. Nella parte
inferiore della finestra di dialogo selezionare la casella di controllo Usa corrispondenza fuzzy per eseguire
l'unione .

Dopo aver selezionato OK , è possibile visualizzare una nuova colonna nella tabella a causa di questa operazione
di unione. Se la si espande, si noterà che è presente una riga che non contiene valori. Questo è esattamente ciò
che il messaggio della finestra di dialogo nell'immagine precedente ha dichiarato quando ha detto "La selezione
corrisponde a 8 di 9 righe della prima tabella".
Colonna Fruit aggiunta alla tabella Survey, con tutte le righe nella colonna Question espanse, ad eccezione della
riga 9, che non è stata espansa e la colonna Fruit contiene Null.

Opzioni di corrispondenza fuzzy


È possibile modificare le opzioni di corrispondenza fuzzy per modificare il modo in cui deve essere eseguita
la corrispondenza approssimativa. Selezionare prima di tutto il comando Merge quer y e quindi nella finestra
di dialogo Merge espandere Opzioni di corrispondenza fuzzy .

Le opzioni disponibili sono:


Soglia di somiglianza (facoltativo): valore compreso tra 0,00 e 1,00 che consente di trovare
corrispondenze tra i record al di sopra di un determinato punteggio di somiglianza. Un valore di soglia pari a
1,00 equivale a specificare un criterio di corrispondenza esatta. Ad esempio, uva corrisponde a Graes (senza
la lettera p) solo se la soglia è impostata su minore di 0,90. Per impostazione predefinita, questo valore è
impostato su 0,80.
Ignora maiuscole/minuscole: consente di trovare record corrispondenti indipendentemente dalla
distinzione tra maiuscole e minuscole del testo.
Corrispondenza combinando par ti di testo: consente di combinare le parti di testo per trovare
corrispondenze. Ad esempio, Micro soft viene abbinato a Microsoft se questa opzione è abilitata.
Numero di corrispondenze (facoltativo): specifica il numero massimo di righe corrispondenti che
possono essere restituite per ogni riga di input.
Tabella di trasformazione (facoltativo): consente di trovare record corrispondenti in base a mapping di
valori personalizzati. Ad esempio, uva viene abbinata con uva passa se viene specificata una tabella di
trasformazione in cui la colonna From contiene Uva e la colonna A contiene uva passa .
Tabella di trasformazione
Per l'esempio in questo articolo, è possibile usare una tabella di trasformazione per eseguire il mapping del
valore con una coppia mancante. Tale valore è apls , che deve essere mappato ad Apple. La tabella di
trasformazione include due colonne:
Da contiene i valori da trovare.
Per contiene i valori che verranno utilizzati per sostituire i valori trovati utilizzando la colonna Da .
Per questo articolo, la tabella di trasformazione avrà un aspetto simile al seguente:

DA A

apls Apple

È possibile tornare alla finestra di dialogo Merge e in Opzioni di corrispondenza fuzzy in Numero di
corrispondenze (facoltativo) immettere 1. In Tabella di trasformazione (facoltativo) selezionare Trasforma
tabella dal menu a discesa.
Dopo aver selezionato OK, si creerà una tabella simile all'immagine seguente, con tutti i valori mappati
correttamente. Si noti come l'esempio sia iniziato con nove valori distinti, ma dopo l'unione fuzzy sono presenti
solo quattro valori distinti.

Tabella di output del sondaggio di unione fuzzy con la colonna Domanda contenente il grafico della
distribuzione delle colonne che mostra nove risposte distinte con tutte le risposte univoche e le risposte al
sondaggio con tutti i problemi di digitazione, plurale o singolare e caso. Contiene anche la colonna Fruit con il
grafico di distribuzione delle colonne che mostra quattro risposte distinte con una risposta univoca ed elenca
tutte le case correttamente digitate, singolari e corrette.
Cross join
07/12/2021 • 2 minutes to read

Un cross join è un tipo di join che restituisce il prodotto cartesiano delle righe delle tabelle nel join. In altre
parole, combina ogni riga della prima tabella con ogni riga della seconda tabella.
Questo articolo illustra, con un esempio pratico, come eseguire un cross join in Power Query.

Tabelle di input e output di esempio


Per questo esempio, le tabelle di origine di esempio sono:
Product: tabella con tutti i prodotti generici venduti.

Colori: una tabella con tutte le varianti di prodotto, come colori, che è possibile avere nell'inventario.

L'obiettivo è eseguire un'operazione di cross join con queste due tabelle per creare un elenco di tutti i prodotti
univoci che è possibile avere nell'inventario, come illustrato nella tabella seguente. Questa operazione è
necessaria perché la tabella Product contiene solo il nome generico del prodotto e non contiene il livello di
dettaglio necessario per vedere quali varianti del prodotto (ad esempio il colore) sono presenti.

Eseguire un cross join


Per eseguire un'operazione di cross join Power Query, passare prima alla tabella Product. Nella scheda
Aggiungi colonna della barra multifunzione selezionare Colonna personalizzata. Altre informazioni:
Aggiungere una colonna personalizzata

Nella finestra di dialogo Colonna personalizzata immettere il nome che si desidera nella casella Nome nuova
colonna e immettere Colors nella casella Formula colonna personalizzata .

IMPORTANT
Se il nome della query contiene spazi, ad esempio Colori prodotto, il testo da immettere nella sezione Formula colonna
personalizzata deve seguire la sintassi #"Query name" . Per Colori prodotto è necessario immettere
#"Product Colors"

È possibile controllare il nome delle query nel riquadro Impostazioni query sul lato destro della schermata o nel riquadro
Quer y a sinistra.
Dopo aver selezionato OK nella finestra di dialogo Colonna personalizzata , viene aggiunta una nuova
colonna alla tabella. Nella nuova intestazione di colonna selezionare Espandi per espandere il contenuto
della colonna appena creata e quindi selezionare OK.

Dopo aver selezionato OK, si raggiungerà l'obiettivo di creare una tabella con tutte le possibili combinazioni di
Prodotto e Colori .
Dividere le colonne in base al delimitatore
07/12/2021 • 2 minutes to read

In Power Query, è possibile dividere una colonna con metodi diversi. In questo caso, le colonne selezionate
possono essere suddivise in base a un delimitatore.

Dove trovare le colonne suddivise > per delimitatore


L'opzione Split Columns: By Delimiter (Dividi colonne: per delimitatore) è disponibile in tre posizioni:
Scheda Home — nel menu a discesa Dividi colonna all'interno del gruppo Trasforma.

Scheda Trasforma — nel menu a discesa Dividi colonna all'interno del gruppo di colonne Testo.

Fare clic con il pulsante destro del mouse su una colonna — all'interno dell'opzione Dividi
colonna.
Suddividere le colonne in base al delimitatore in colonne
In questo esempio la tabella iniziale sarà quella illustrata nell'immagine seguente, con una sola colonna per
Accounts .

Questa colonna contiene due valori:


Numero conto
Nome account
In questo esempio si vuole dividere questa colonna in due colonne. I valori sono delimitati da uno spazio — il
primo spazio da sinistra a destra. A tale scopo, selezionare la colonna e quindi selezionare l'opzione per dividere
la colonna in base a un delimitatore. In Dividi colonna per delimitatore applicare la configurazione seguente:
Selezionare o immettere delimitatore : Spazio
Dividi in : delimitatore più a sinistra

Il risultato di tale operazione offrirà una tabella con le due colonne che si prevede.

NOTE
Power Query la colonna verrà suddivisa in tutte le colonne necessarie. Il nome delle nuove colonne conterrà lo stesso
nome della colonna originale. Al nome delle nuove colonne verrà aggiunto un suffisso che include un punto e un numero
che rappresenta le sezioni di divisione della colonna originale.

Dividere le colonne in base al delimitatore in righe


In questo esempio la tabella iniziale sarà quella illustrata nell'immagine seguente, con le colonne Cost Center e
Accounts .

La colonna Accounts contiene valori in coppie separate da una virgola. Queste coppie sono separate da un
punto e virgola. L'obiettivo di questo esempio è suddividere questa colonna in nuove righe usando il punto e
virgola come delimitatore.
A tale scopo, selezionare la colonna Account. Selezionare l'opzione per dividere la colonna in base a un
delimitatore. In Dividi colonna per delimitatore applicare la configurazione seguente:
Selezionare o immettere il delimitatore : punto e virgola
Dividi in : ogni occorrenza del delimitatore
Dividi in : righe

Il risultato di tale operazione offrirà una tabella con lo stesso numero di colonne, ma molte altre righe perché i
valori all'interno delle celle sono ora nelle proprie celle.
Suddivisione finale
La tabella richiede comunque un'ultima operazione di divisione della colonna. È necessario dividere la colonna
Accounts in base alla prima virgola trovata. Questa suddivisione creerà una colonna per il nome dell'account e
un'altra colonna per il numero di account.
A tale scopo, selezionare la colonna Account e quindi selezionare Dividi colonna > per delimitatore . Nella
finestra Dividi colonna applicare la configurazione seguente:
Selezionare o immettere il delimitatore : virgola
Dividi in : ogni occorrenza del delimitatore

Il risultato di tale operazione offrirà una tabella con le tre colonne che si prevede. Rinominare quindi le colonne
come indicato di seguito:

N O M E P REC EDEN T E N UO VO N O M E

Account.1 Nome account

Account.2 Numero di account

La tabella finale è simile a quella nell'immagine seguente.


Dividere le colonne in base al numero di caratteri
07/12/2021 • 2 minutes to read

In Power Query, è possibile dividere una colonna tramite metodi diversi. In questo caso, le colonne selezionate
possono essere suddivise in base al numero di caratteri.

Posizione in cui trovare le colonne di > per numero di caratteri


È possibile trovare l'opzione Dividi colonne > per numero di caratteri in tre posizioni:
Scheda Home — nel menu a discesa Dividi colonna all'interno del gruppo Trasforma.

Scheda Trasforma — nel menu a discesa Dividi colonna all'interno del gruppo Colonna di testo.

Fare clic con il pulsante destro del mouse su una colonna — all'interno dell'opzione Dividi
colonna.
Suddividere le colonne in base al numero di caratteri in colonne
La tabella iniziale per questo esempio sarà la seguente, con una sola colonna per Column1 .

Questa colonna contiene tre valori:


Nome account — nei primi sei caratteri
Data — negli otto caratteri seguenti con il formato yyyymmdd
Unità — i caratteri rimanenti
In questo esempio si vuole dividere questa colonna in tre colonne contenenti i valori descritti nell'elenco
precedente.
A tale scopo, selezionare la colonna e quindi selezionare l'opzione per dividere la colonna in base al numero di
caratteri. In Dividi colonna per numero di caratteri applicare la configurazione seguente:
Numero di caratteri : 6
Dividi: una sola volta, il più a sinistra possibile
Il risultato di tale operazione offrirà una tabella con due colonne. Una per il nome dell'account e l'altra che
contiene i valori combinati per la data e le unità.

NOTE
Power Query la colonna verrà suddivisa in due colonne. Il nome delle nuove colonne conterrà lo stesso nome della
colonna originale. Ai nomi delle nuove colonne verrà aggiunto un suffisso contenente un punto e un numero che
rappresenta la sezione di divisione della colonna.

Continuare ora a eseguire la stessa operazione sulla nuova colonna Column1.2, ma con la configurazione
seguente:
Numero di caratteri : 8
Dividi: una sola volta, il più a sinistra possibile

Il risultato di tale operazione restituisce una tabella con tre colonne. Si notino i nuovi nomi delle due colonne
all'estrema destra. Column1.2.1 e Column1.2.2 sono stati creati automaticamente dall'operazione di divisione
della colonna.
È ora possibile modificare il nome delle colonne e definire anche i tipi di dati di ogni colonna nel modo
seguente:

N O M E C O LO N N A O RIGIN A L E N O M E N UO VA C O LO N N A T IP O DI DAT I

Colonna 1.1 Nome account Testo

Colonna 1.2.1 Data Data

Colonna 1.2.2 Unità Numero intero

La tabella finale sarà simile a quella nell'immagine seguente.

Suddividere le colonne in base al numero di caratteri in righe


La tabella iniziale per questo esempio sarà la seguente, con le colonne Group e Account .

La colonna Account può contenere più valori nella stessa cella. Ogni valore ha la stessa lunghezza in caratteri,
con un totale di sei caratteri. In questo esempio si vogliono dividere questi valori in modo da poter disporre di
ogni valore dell'account nella propria riga.
A tale scopo, selezionare la colonna Account e quindi selezionare l'opzione per dividere la colonna in base al
numero di caratteri. In Dividi colonna per numero di caratteri applicare la configurazione seguente:
Numero di caratteri : 6
Dividi : ripetutamente
Dividi in : righe
Il risultato di tale operazione offrirà una tabella con lo stesso numero di colonne, ma molte altre righe perché i
frammenti all'interno dei valori di cella originali nella colonna Account sono ora suddivisi in più righe.
Dividere le colonne in base alle posizioni
07/12/2021 • 2 minutes to read

In Power Query, è possibile dividere una colonna con metodi diversi. In questo caso, le colonne selezionate
possono essere suddivise in base alle posizioni.

Posizione in cui trovare le colonne di > in base alle posizioni


È possibile trovare l'opzione Dividi colonne > per posizioni in tre posizioni:
Scheda Home — nel menu a discesa Dividi colonna all'interno del gruppo Trasforma.

Scheda Trasforma — nel menu a discesa Dividi colonna all'interno del gruppo Colonna di testo.

Fare clic con il pulsante destro del mouse su una colonna — all'interno dell'opzione Dividi
colonna.
Suddividere le colonne in base alle posizioni in colonne
La tabella iniziale per questo esempio sarà quella illustrata nell'immagine seguente, con una sola colonna per
Column1 .

Questa colonna contiene tre valori:


Nome account — nei primi sei caratteri
Data — negli otto caratteri successivi con il formato yyyymmdd
Unità — il resto dei caratteri
In questo esempio si vuole dividere questa colonna nelle tre colonne effettuate dai valori nell'elenco precedente.
A tale scopo, selezionare la colonna e quindi selezionare l'opzione per dividere la colonna in base alle posizioni.
In Dividi colonna per posizioni applicare la configurazione seguente:
Posizioni: 0,6,14
Le posizioni sono in base zero e separate da virgole, dove la posizione zero è l'inizio della stringa.
NOTE
Questa operazione inizierà prima a creare una colonna dalla posizione 0 alla posizione 6, quindi dalla posizione 7 alla
posizione 14. Nel contenuto corrente dell'anteprima dei dati dovrebbe essere presente un'altra colonna con una lunghezza
di 16 o più caratteri.

Il risultato di tale operazione offrirà una tabella con tre colonne.

NOTE
Power Query la colonna verrà suddivisa in due colonne. Il nome delle nuove colonne conterrà lo stesso nome della
colonna originale. Un suffisso creato da un punto e un numero che rappresenta la sezione di divisione della colonna
verranno aggiunti al nome delle nuove colonne.

È ora possibile modificare il nome delle colonne e definire anche i tipi di dati di ogni colonna nel modo
seguente:

N O M E C O LO N N A O RIGIN A L E N O M E N UO VA C O LO N N A T IP O DI DAT I

Colonna 1.1 Nome account Testo

Colonna 1.2 Data Data

Colonna 1.3 Unità Numero intero

La tabella finale avrà un aspetto simile a quello nell'immagine seguente.

Suddividere le colonne in base alle posizioni in righe


La tabella iniziale per questo esempio sarà simile a quella nell'immagine seguente, con le colonne Group e
Account .

La colonna Account può contenere solo due valori nella stessa cella. Ogni valore ha la stessa lunghezza in
caratteri, con un totale di sei caratteri. In questo esempio si vogliono dividere questi valori in modo da poter
disporre di ogni valore dell'account nella propria riga. A tale scopo, selezionare la colonna Account e quindi
selezionare l'opzione per dividere la colonna in base alle posizioni. In Dividi colonna per posizioni applicare
la configurazione seguente:
Posizioni: 0, 6
Dividi in : righe

NOTE
Questa operazione inizierà prima di tutto a creare una colonna dalla posizione 0 alla posizione 6. Nel contenuto corrente
dell'anteprima dei dati dovrebbe essere presente un'altra colonna con una lunghezza di 8 o più caratteri.

Il risultato di tale operazione offrirà una tabella con lo stesso numero di colonne, ma molte altre righe perché i
valori all'interno delle celle sono ora nelle proprie celle.
Dividere le colonne in lettere minuscole in lettere
maiuscole
07/12/2021 • 2 minutes to read

In Power Query, è possibile dividere una colonna tramite metodi diversi. Se i dati contengono testo CamelCased
o un modello simile, le colonne selezionate possono essere suddivise facilmente in base a ogni istanza
dell'ultima lettera minuscola alla lettera maiuscola successiva.

Dove trovare le colonne di > da minuscole a maiuscole


È possibile trovare l'opzione Split Columns: By Lowercase to Uppercase (Dividi colonne: da minuscolo a
maiuscolo) in tre posizioni:
Scheda Home — nel menu a discesa Dividi colonna all'interno del gruppo Trasforma.

Scheda Trasforma — nel menu a discesa Dividi colonna all'interno del gruppo Colonna di testo.

Fare clic con il pulsante destro del mouse su una colonna — all'interno dell'opzione Dividi
colonna.
Suddividere le colonne da minuscole a maiuscole in colonne
La tabella iniziale in questo esempio sarà quella illustrata nell'immagine seguente, con una colonna per Word e
una colonna aggiuntiva denominata Syllables . Si concentrerà solo sulla prima colonna.

Questa colonna contiene due valori in ogni riga:


FirstWord — Prima metà della parola composta.
SecondWord — Seconda metà della parola composta.
In questo esempio si vuole dividere questa colonna nelle due colonne descritte nell'elenco precedente.
Selezionare la colonna e quindi selezionare l'opzione per dividere la colonna in lettere minuscole in lettere
maiuscole.
Questa singola colonna verrà suddivisa in più colonne, in base a ogni istanza dell'ultima lettera minuscola alla
lettera maiuscola successiva. In questo caso, viene suddiviso solo in due colonne.
La tabella finale sarà simile all'immagine seguente.
Dividere le colonne in lettere maiuscole in
minuscole
07/12/2021 • 2 minutes to read

In Power Query, è possibile dividere una colonna tramite metodi diversi. In questo caso, le colonne selezionate
possono essere suddivise per ogni istanza dell'ultima lettera maiuscola alla lettera minuscola successiva.

Dove trovare le colonne di > da maiuscole a minuscole


È possibile trovare l'opzione Dividi colonne > da maiuscole a minuscole in tre posizioni:
Scheda Home — nel menu a discesa Dividi colonna all'interno del gruppo Trasforma.

Scheda Trasforma — nel menu a discesa Dividi colonna all'interno del gruppo Colonna di testo.

Fare clic con il pulsante destro del mouse su una colonna — all'interno dell'opzione Dividi
colonna.
Suddividere le colonne da maiuscole a minuscole in colonne
La tabella iniziale in questo esempio sarà quella illustrata nell'immagine seguente, con una sola colonna per
Column1 .

Questa colonna contiene due valori:


FirstWord — La prima metà di un prodotto che si trova nel caso camel.
SecondWord — Seconda metà di un prodotto nel caso camel.
In questo esempio si vuole dividere questa colonna nelle due colonne descritte nell'elenco precedente.
Selezionare la colonna e quindi selezionare l'opzione per suddividere la colonna da maiuscola a minuscola.
Questa singola colonna verrà suddivisa in più colonne, in base a ogni istanza dell'ultima lettera maiuscola alla
lettera minuscola successiva. In questo caso, viene suddiviso solo in due colonne.
La tabella finale sarà simile all'immagine seguente.
Dividere le colonne in base a una cifra in un valore
diverso da una cifra
07/12/2021 • 2 minutes to read

In Power Query è possibile suddividere una colonna in diversi metodi. In questo caso, le colonne selezionate
possono essere suddivise in base a ogni istanza di una cifra seguita da una non cifra.

Dove trovare le colonne di > per cifra a non cifra


È possibile trovare l'opzione Split Columns: By Digit to Non-Digit (Dividi colonne: da cifra a non cifra) in
tre posizioni:
Scheda Home — nel menu a discesa Split Column (Dividi colonna) all'interno del gruppo Transform
(Trasforma).

Scheda Trasforma — nel menu a discesa Split Column (Dividi colonna) all'interno del gruppo Text
Column (Colonna di testo).

Fare clic con il pulsante destro del mouse su una colonna — all'interno dell'opzione Dividi
colonna.
Suddividere le colonne per cifra in colonne non di tipo numerico
La tabella iniziale in questo esempio sarà quella illustrata nell'immagine seguente, con una colonna per Animali
domestici e altre colonne aggiuntive. Questo esempio si concentrerà solo sulla colonna Pets.

Questa colonna contiene due valori in ogni riga:


Classifica — Classificazione dell'animale.
Tipo di animale — La seconda parte della parola è il tipo di animale.
In questo esempio si vuole suddividere questa colonna nelle due colonne descritte nell'elenco precedente.
Selezionare la colonna e quindi selezionare l'opzione per suddividere la colonna per cifra in non numerica.
Questa singola colonna verrà suddivisa in più colonne, in base a ogni istanza di una cifra seguita da una non
cifra. In questo caso, lo suddivide solo in due.
La tabella finale sarà simile all'immagine seguente.
Dividere le colonne in base a una cifra non
numerica
07/12/2021 • 2 minutes to read

In Power Query è possibile suddividere una colonna in diversi metodi. In questo caso, le colonne selezionate
possono essere suddivise in base a ogni istanza di una non cifra seguita da una cifra.

Dove trovare le colonne di > da una cifra a una cifra


È possibile trovare l'opzione Split Columns > By Non-Digit to Digit (Dividi colonne) in tre posizioni:
Scheda Home — nel menu a discesa Split Column (Dividi colonna) all'interno del gruppo Transform
(Trasforma).

Scheda Trasforma — nel menu a discesa Split Column (Dividi colonna) all'interno del gruppo Text
Column (Colonna di testo).

Fare clic con il pulsante destro del mouse su una colonna — all'interno dell'opzione Dividi
colonna.
Dividere le colonne in base a una cifra non da cifrare in colonne
La tabella iniziale in questo esempio sarà quella illustrata nell'immagine seguente, con una colonna per Animali
domestici e altre colonne aggiuntive. In questo esempio ci si concentrerà solo sulla colonna Pets.

Questa colonna contiene due valori in ogni riga:


Tipo di animale — La prima parte è il tipo di animale.
Numero — Numero di animale che è arrivato nella vita della persona.
In questo esempio si vuole suddividere questa colonna nelle due colonne descritte nell'elenco precedente.
Selezionare la colonna e quindi selezionare l'opzione per suddividere la colonna in base a una cifra non
numerica.
Questa singola colonna verrà suddivisa in più colonne, data ogni istanza di una cifra seguita da una non cifra. In
questo caso, viene suddiviso solo in due colonne.
La tabella finale sarà simile all'immagine seguente.
Che cosa sono i flussi di dati?
07/12/2021 • 6 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

I flussi di dati sono una tecnologia di preparazione dei dati self-service, basata sul cloud. I flussi di dati
consentono ai clienti di inserire, trasformare e caricare dati in ambienti Microsoft Dataverse, aree di lavoro
Power BI o nell'account Azure Data Lake Archiviazione dell'organizzazione. I flussi di dati vengono creati usando
Power Query, un'esperienza unificata di preparazione e connettività dei dati già presente in molti prodotti
Microsoft, tra cui Excel e Power BI. I clienti possono attivare flussi di dati per l'esecuzione su richiesta o
automaticamente in base a una pianificazione; i dati vengono sempre aggiornati.

I flussi di dati possono essere creati in più prodotti Microsoft


I flussi di dati sono presenti in più prodotti Microsoft e non richiedono la creazione o l'esecuzione di una licenza
specifica del flusso di dati. I flussi di dati sono disponibili in Power Apps, Power BI e Dynamics 365 Customer
Insights. La possibilità di creare ed eseguire flussi di dati è in bundle con le licenze di tali prodotti. Le funzionalità
del flusso di dati sono per lo più comuni in tutti i prodotti in cui sono presenti, ma alcune funzionalità specifiche
del prodotto potrebbero esistere nei flussi di dati creati in un prodotto rispetto a un altro.
Come funziona il flusso di dati?

L'immagine precedente mostra una visualizzazione complessiva della definizione di un flusso di dati. Un flusso
di dati ottiene dati da origini dati diverse (sono già supportate più di 80 origini dati). In base alle trasformazioni
configurate con l'esperienza di creazione Power Query, il flusso di dati trasforma i dati usando il motore del
flusso di dati. Infine, i dati vengono caricati nella destinazione di output, che può essere un ambiente Microsoft
Power Platform, un'area di lavoro Power BI o l'account Azure Data Lake Archiviazione dell'organizzazione.
I flussi di dati vengono eseguiti nel cloud
I flussi di dati sono basati sul cloud. Quando un flusso di dati viene creato e salvato, la relativa definizione viene
archiviata nel cloud. Un flusso di dati viene eseguito anche nel cloud. Tuttavia, se un'origine dati è locale, è
possibile usare un gateway dati locale per estrarre i dati nel cloud. Quando viene attivata un'esecuzione del
flusso di dati, la trasformazione e il calcolo dei dati vengono eseguiti nel cloud e la destinazione è sempre nel
cloud.

I flussi di dati usano un potente motore di trasformazione


Power Query è il motore di trasformazione dati usato nel flusso di dati. Questo motore è in grado di supportare
molte trasformazioni avanzate. Usa anche un'interfaccia utente grafica semplice, ma potente, denominata editor
di Power Query. È possibile usare i flussi di dati con questo editor per sviluppare le soluzioni di integrazione dei
dati in modo più rapido e semplice.

Integrazione del flusso di dati con Microsoft Power Platform e Dynamics 365
Poiché un flusso di dati archivia le entità risultanti nell'archiviazione basata sul cloud, altri servizi possono
interagire con i dati prodotti dai flussi di dati.

Ad esempio, le applicazioni Power BI, Power Apps, Power Automate, Power Virtual Agents e Dynamics 365
possono ottenere i dati prodotti dal flusso di dati connettendosi a Dataverse, a un connettore del flusso di dati
Power Platform o direttamente attraverso il lake, a seconda della destinazione configurata al momento della
creazione del flusso di dati.

Vantaggi dei flussi di dati


L'elenco seguente evidenzia alcuni dei vantaggi dell'uso dei flussi di dati:
Un flusso di dati disaccoglie il livello di trasformazione dei dati dal livello di modellazione e
visualizzazione in una Power BI soluzione.
Il codice di trasformazione dei dati può risiedere in una posizione centrale, un flusso di dati, anziché
essere distribuito tra più elementi.
Un autore di flussi di dati deve solo Power Query competenze. In un ambiente con più autori, l'autore del
flusso di dati può far parte di un team che insieme compila l'intera soluzione BI o l'applicazione operativa.
Un flusso di dati è indipendente dal prodotto. Non è solo un componente di Power BI; è possibile ottenere
i dati in altri strumenti e servizi.
I flussi di dati sfruttano Power Query, un'esperienza di trasformazione dei dati potente, grafica e self-
service.
I flussi di dati vengono eseguiti interamente nel cloud. Non è necessaria alcuna infrastruttura aggiuntiva.
Sono disponibili più opzioni per iniziare a usare i flussi di dati, usando licenze per Power Apps, Power BI e
Customer Insights.
Sebbene i flussi di dati siano in grado di eseguire trasformazioni avanzate, sono progettati per scenari
self-service e non richiedono background IT o sviluppatori.

Scenari di casi d'uso per i flussi di dati


È possibile usare i flussi di dati per molti scopi. Gli scenari seguenti forniscono alcuni esempi di casi d'uso
comuni per i flussi di dati.
Migrazione dei dati da sistemi legacy
In questo scenario, un'organizzazione ha deciso di usare Power Apps per la nuova esperienza dell'interfaccia
utente anziché per il sistema locale legacy. Power Apps, Power Automate e AI Builder tutti usano Dataverse come
sistema di archiviazione dati primario. I dati correnti nel sistema locale esistente possono essere migrati in
Dataverse usando un flusso di dati e quindi questi prodotti possono usare tali dati.
Uso di flussi di dati per compilare un data warehouse
È possibile usare i flussi di dati come sostituzione per altri strumenti di estrazione, trasformazione, caricamento
(ETL) per compilare un data warehouse. In questo scenario, i data engineer di un'azienda decidono di usare i
flussi di dati per creare lo schema star progettato data warehouse, incluse le tabelle dei fatti e delle dimensioni –
in Data Lake Archiviazione. Quindi Power BI viene usato per generare report e dashboard ottenendo i dati dai
flussi di dati.

Uso dei flussi di dati per compilare un modello dimensionale


È possibile usare i flussi di dati in sostituzione di altri strumenti ETL per creare un modello dimensionale. Ad
esempio, i data engineer di un'azienda decidono di usare i flussi di dati per creare il modello dimensionale
progettato con schema star, incluse le tabelle dei fatti e delle dimensioni in Azure Data Lake Archiviazione Gen2.
Quindi Power BI viene usato per generare report e dashboard ottenendo i dati dai flussi di dati.
Centralizzare la preparazione e il riutilizzo dei set di dati in più soluzioni Power BI dati
Se più Power BI usano la stessa versione trasformata di una tabella, il processo di creazione della tabella verrà
ripetuto più volte. Ciò aumenta il carico nel sistema di origine, usa più risorse e crea dati duplicati con più punti
di errore. È invece possibile creare un singolo flusso di dati per calcolare i dati per tutte le soluzioni. Power BI
possibile riutilizzare il risultato della trasformazione in tutte le soluzioni. Il flusso di dati, se usato in questo
modo, può far parte di un'architettura di implementazione di Power BI affidabile che evita che il codice Power
Query duplici e riduca i costi di manutenzione del livello di integrazione dei dati.

Passaggi successivi
Gli articoli seguenti forniscono altri materiali di studio per i flussi di dati.
Creare e usare flussi di dati in Microsoft Power Platform
Creazione e uso di flussi di dati in Power BI
Informazioni sulle differenze tra i tipi di flusso di dati
07/12/2021 • 7 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

I flussi di dati vengono usati per estrarre, trasformare e caricare i dati in una destinazione di archiviazione in cui
è possibile sfruttarli per scenari diversi. Poiché non tutte le destinazioni di archiviazione condividono le stesse
caratteristiche, alcune funzionalità e comportamenti del flusso di dati variano a seconda della destinazione di
archiviazione in cui il flusso di dati carica i dati. Prima di creare un flusso di dati, è importante comprendere
come verranno usati i dati e scegliere la destinazione di archiviazione in base ai requisiti della soluzione.
La selezione di una destinazione di archiviazione di un flusso di dati determina il tipo del flusso di dati. Un flusso
di dati che carica i dati in tabelle Dataverse viene categorizzato come flusso di dati standard. I flussi di dati che
caricano dati in entità analitiche vengono categorizzati come flussi di dati analitici.
I flussi di dati creati in Power BI sono sempre flussi di dati analitici. I flussi di dati creati in Power Apps possono
essere standard o analitici, a seconda della selezione effettuata durante la creazione del flusso di dati.

Flussi di data standard


Un flusso di dati standard carica i dati nelle tabelle Dataverse. I flussi di dati standard possono essere creati solo
in Power Apps. Un vantaggio della creazione di questo tipo di flusso di dati è che qualsiasi applicazione che
dipende dai dati in Dataverse può usare i dati creati dai flussi di dati standard. Le applicazioni tipiche che
sfruttano le tabelle Dataverse sono Power Apps, Power Automate, AI Builder e Power Virtual Agents.
Versioni dei flussi di dati standard
Per migliorare le prestazioni e l'affidabilità dei flussi di dati standard, sono stati eserciti aggiornamenti
significativi dei flussi di dati standard. Questi miglioramenti saranno infine disponibili per tutti i flussi di dati
standard. Nel frattempo, tuttavia, si distinguerà tra i flussi di dati standard esistenti (versione 1) e i nuovi flussi di
dati standard (versione 2) aggiungendo un indicatore di versione in Power Apps.

Confronto delle funzionalità delle versioni del flusso di dati standard


La tabella seguente elenca le principali differenze di funzionalità tra i flussi di dati standard V1 e V2 e fornisce
informazioni sul comportamento di ogni funzionalità in ogni versione.

F UN Z IO N A L ITÀ STA N DA RD V1 STA N DA RD V2

Numero massimo di flussi di dati che è 50 Nessuna limitazione


possibile salvare con la pianificazione
automatica per ogni tenant del cliente
F UN Z IO N A L ITÀ STA N DA RD V1 STA N DA RD V2

Numero massimo di record inseriti per 500.000 Unbounded. Il numero massimo di


query/tabella record che è possibile inserire per ogni
query o tabella dipende ora dai limiti di
protezione del servizio Dataverse al
momento dell'inserimento.

Velocità di inserimento in Dataverse Prestazioni di base Miglioramento delle prestazioni di


alcuni fattori. I risultati effettivi
possono variare e dipendere dalle
caratteristiche dei dati inseriti e caricare
nel servizio Dataverse al momento
dell'inserimento.

Criteri di aggiornamento incrementale Non supportato Supportato

Resilienza Quando vengono rilevati limiti di Quando vengono rilevati limiti di


protezione del servizio Dataverse, un protezione del servizio Dataverse, un
record verrà ritentato fino a 3 volte. record verrà ritentato fino a 3 volte.

Flussi di dati analitici


Un flusso di dati analitici carica i dati in tipi di archiviazione ottimizzati per l'analisi di — Azure Data Lake
Archiviazione. Microsoft Power Platform ambienti e Power BI di lavoro offrono ai clienti una posizione di
archiviazione analitica gestita in bundle con tali licenze del prodotto. Inoltre, i clienti possono collegare l'account
di archiviazione Azure Data Lake dell'organizzazione come destinazione per i flussi di dati.
I flussi di dati analitici sono funzionalità analitiche aggiuntive. Ad esempio, l'integrazione con Power BI di
intelligenza artificiale o l'uso di entità calcolate che verranno discusse più avanti.
È possibile creare flussi di dati analitici in Power BI. Per impostazione predefinita, caricano i dati nell'Power BI di
archiviazione gestita. Ma è anche possibile configurare Power BI per archiviare i dati nell'istanza di Azure Data
Lake dell'organizzazione Archiviazione.
È anche possibile creare flussi di dati analitici nei Power Apps e nei portali di Customer Insights di Dynamics
365. Quando si crea un flusso di dati nel portale Power Apps, è possibile scegliere tra Dataverse gestisce
l'archiviazione analitica o nell'account Azure Data Lake Archiviazione dell'organizzazione.

Integrazione dell'intelligenza artificiale


A volte, a seconda dei requisiti, potrebbe essere necessario applicare alcune funzioni di intelligenza artificiale e
machine learning ai dati tramite il flusso di dati. Queste funzionalità sono disponibili nei flussi di Power BI e
richiedono un'area Premium lavoro.

Gli articoli seguenti illustrano come usare le funzioni di intelligenza artificiale in un flusso di dati:
Integrazione di Azure Machine Learning in Power BI
Servizi cognitivi in Power BI
Machine Learning automatizzato in Power BI
Si noti che le funzionalità elencate Power BI specifiche e non sono disponibili quando si crea un flusso di dati nei
portali di Power Apps o Dynamics 365 Customer Insights.
Entità calcolate
Uno dei motivi per cui usare un'entità calcolata è la possibilità di elaborare grandi quantità di dati. L'entità
calcolata è utile in questi scenari. Se si dispone di un'entità in un flusso di dati e un'altra entità nello stesso flusso
di dati usa l'output della prima entità, verrà creata un'entità calcolata.
L'entità calcolata consente di migliorare le prestazioni delle trasformazioni dei dati. Invece di eseguire di nuovo
le trasformazioni necessarie nella prima entità più volte, la trasformazione verrà eseguita una sola volta
nell'entità calcolata. Il risultato verrà quindi usato più volte in altre entità.
Per altre informazioni sulle entità calcolate, vedere Using computed entities on Power BI Premium.
Le entità calcolate sono disponibili solo in un flusso di dati analitici.

Flussi di dati standard e analitici


Nella tabella seguente sono elencate alcune differenze tra un'entità standard e un'entità analitica.

O P ERA Z IO N E STA N DA RD A N A L IT IC A

Modalità di creazione Flussi di dati Power Platform Flussi di dati Power BI


Power Platform flussi di dati
selezionando la casella di controllo
Entità analitica durante la creazione
del flusso di dati

Opzioni di archiviazione Dataverse Azure Data Lake Archiviazione interno


per i flussi di Power BI dati
Azure Data Lake Archiviazione
collegato al flusso di dati Power BI o
Power Platform dati

Power Query trasformazioni Sì Sì

Funzioni di intelligenza artificiale No Sì

Entità calcolata No Sì

Può essere usato in altre applicazioni Sì, tramite Dataverse Power BI flussi di dati: solo in Power BI
Power Platform flussi di dati o Power BI
flussi di dati esterni: Sì, tramite Azure
Data Lake Archiviazione

Mapping a entità standard Sì Sì

Carico incrementale Caricamento incrementale predefinito Caricamento completo predefinito


È possibile modificare usando la casella È possibile configurare
di controllo Elimina righe che non l'aggiornamento incrementale
esistono più nell'output della configurando l'aggiornamento
quer y nelle impostazioni di incrementale nelle impostazioni del
caricamento flusso di dati
O P ERA Z IO N E STA N DA RD A N A L IT IC A

Aggiornamento pianificato Sì Sì, la possibilità di inviare una notifica ai


proprietari del flusso di dati in caso di
errore

Scenari per l'uso di ogni tipo di flusso di dati


Ecco alcuni scenari di esempio e consigli sulle procedure consigliate per ogni tipo di flusso di dati.
Flusso di dati standard di utilizzo — multipiattaforma
Se il piano per la creazione di flussi di dati prevede l'uso di dati archiviati in più piattaforme (non solo Power BI,
ma anche altri servizi Microsoft Power Platform, Dynamics 365 e così via), un flusso di dati standard è un'ottima
scelta. I flussi di dati standard archiviano i dati in Dataverse, a cui è possibile accedere tramite molte altre
piattaforme e servizi.
Trasformazioni di dati pesanti in tabelle di dati di grandi dimensioni — flusso di dati analitici
I flussi di dati analitici sono un'opzione eccellente per l'elaborazione di grandi quantità di dati. I flussi di dati
analitici migliorano anche la potenza di calcolo alla base della trasformazione. La presenza dei dati archiviati in
Azure Data Lake Archiviazione aumenta la velocità di scrittura in una destinazione. Rispetto a Dataverse (che
potrebbe avere molte regole da controllare al momento dell'archiviazione dei dati), Azure Data Lake
Archiviazione è più veloce per le transazioni di lettura/scrittura su una grande quantità di dati.
Flusso di dati analitici delle funzionalità di intelligenza — artificiale
Se si prevede di usare qualsiasi funzionalità di intelligenza artificiale tramite la fase di trasformazione dei dati, è
utile usare un flusso di dati analitici perché è possibile usare tutte le funzionalità di intelligenza artificiale
supportate con questo tipo di flusso di dati.
Creare e usare flussi di dati in Microsoft Power
Platform
07/12/2021 • 7 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

L'uso di flussi di Microsoft Power Platform semplifica la preparazione dei dati e consente di riutilizzare le
operazioni di preparazione dei dati nei report, nelle app e nei modelli successivi.
Nel mondo dei dati in continua espansione, la preparazione dei dati può essere difficile e costosa, consumando
fino al 60-80% del tempo e dei costi per un progetto di analisi tipico. Tali progetti possono richiedere la gestione
di dati frammentati e incompleti, un'integrazione complessa del sistema, dati con incoerenza strutturale e una
barriera di set di competenze elevata.
Per semplificare la preparazione dei dati e ottenere più valore sui dati, Power Query e Power Platform flussi di
dati.

Con i flussi di dati, Microsoft introduce le funzionalità di preparazione dei dati self-service di Power Query nei
Power BI e Power Apps Servizi online ed espande le funzionalità esistenti nei modi seguenti:
Preparazione dei dati self-ser vice per Big Data con flussi di dati: i flussi di dati possono essere usati per
inserire, pulire, trasformare, integrare, arricchire e schematizzare facilmente i dati da una matrice di
origini transazionali e osservazionali in continua crescita, che comprende tutta la logica di preparazione
dei dati. In precedenza, la logica di estrazione, trasformazione, caricamento (ETL) poteva essere inclusa
solo nei set di dati in Power BI, copiata più volte tra i set di dati e associata alle impostazioni di gestione
dei set di dati.
Con i flussi di dati, la logica ETL è elevata a un artefatto di prima classe all'interno dei servizi Microsoft
Power Platform e include esperienze di creazione e gestione dedicate. Gli analisti aziendali, i professionisti
di business intelligence e i data scientist possono usare i flussi di dati per gestire le sfide di preparazione
dei dati più complesse e basarsi sul lavoro reciproco, grazie a un motore di calcolo basato su modello,
che si occupa di tutta la logica di trasformazione e dipendenza, riducendo tempo, costi ed esperienza a
una frazione di ciò che tradizionalmente era necessario per tali attività. È possibile creare flussi di dati
usando l'esperienza nota di preparazione dei dati self-service di Power Query. I flussi di dati vengono
creati e gestiti facilmente nelle aree di lavoro per le app o negli ambienti, rispettivamente in Power BI o
Power Apps, con tutte le funzionalità offerte da questi servizi, ad esempio la gestione delle autorizzazioni
e gli aggiornamenti pianificati.
Caricare i dati in Dataverse o Azure Data Lake Archiviazione: a seconda del caso d'uso, è possibile
archiviare i dati preparati da flussi di dati Power Platform in Dataverse o nell'account Azure Data Lake
Archiviazione dell'organizzazione:
Dataverse consente di archiviare e gestire in modo sicuro i dati usati dalle applicazioni aziendali. I
dati all'interno di Dataverse vengono archiviati in un set di tabelle. Una tabella è un set di righe (in
precedenza denominato record) e colonne (precedentemente denominate campi/attributi). Ogni
colonna della tabella è progettata per archiviare un determinato tipo di dati, ad esempio nome, età,
stipendio e così via. Dataverse include un set di base di tabelle standard che coprono scenari tipici,
ma è anche possibile creare tabelle personalizzate specifiche dell'organizzazione e popolarle con i
dati usando flussi di dati. Gli autori di app possono quindi Power Apps e Power Automate creare
applicazioni complesse che usano questi dati.
Azure Data Lake Archiviazione consente di collaborare con gli utenti dell'organizzazione
usando i servizi Power BI, Dati di Azure e intelligenza artificiale oppure usando una linea di
Business Applications personalizzata che legge i dati dal lake. I flussi di dati che caricano dati in un
account Azure Data Lake Archiviazione archiviano i dati in Common Data Model cartelle. le cartelle
Common Data Model contengono dati e metadati schematizzati in un formato standardizzato, per
facilitare lo scambio di dati e per consentire l'interoperabilità completa tra i servizi che producono
o utilizzano i dati archiviati nell'account Azure Data Lake Archiviazione di un'organizzazione come
livello di archiviazione condiviso.
Analisi avanzata e intelligenza artificiale con Azure: i flussi di dati Power Platform archiviano i dati in
Dataverse o Azure Data Lake Archiviazione il che significa che i dati inseriti tramite flussi di dati sono ora
disponibili per i data engineer e i data scientist per sfruttare tutte le funzionalità di Servizi dati di Azure,
ad esempio Azure Machine Learning, Azure Databricks e Azure SQL Data Warehouse per funzionalità
avanzate — analisi e intelligenza artificiale. In questo modo business analyst, data engineer e data
scientist possono collaborare agli stessi dati all'interno dell'organizzazione.
Suppor to per Common Data Model: Common Data Model è un set di schemi di dati standardizzati e
un sistema di metadati per consentire la coerenza dei dati e il relativo significato tra le applicazioni e i
processi aziendali. I flussi di Common Data Model supportano l'Common Data Model offrendo un
semplice mapping da qualsiasi tipo di dati alle entità Common Data Model standard, ad esempio Account
e Contact. I flussi di dati vengono inoltre insoddisfiati, sia per le entità standard che per le entità
personalizzate, Common Data Model schematizzato. I business analyst possono sfruttare lo schema
standard e la coerenza semantica oppure personalizzare le entità in base alle esigenze specifiche.
Common Data Model continua ad evolversi come parte dell'iniziativa Open Data.

Funzionalità del flusso di dati nei Microsoft Power Platform dati


La maggior parte delle funzionalità del flusso di dati è disponibile sia Power Apps che Power BI. I flussi di dati
sono disponibili come parte dei piani di questi servizi. Alcune funzionalità del flusso di dati sono specifiche del
prodotto o sono disponibili in piani di prodotto diversi. La tabella seguente descrive le funzionalità del flusso di
dati e la relativa disponibilità.

F UN Z IO N A L ITÀ DEL F L USSO DI DAT I P O W ER A P P S P O W ER B I

Aggiornamento pianificato Fino a 48 al giorno Fino a 48 al giorno

Tempo massimo di aggiornamento per Fino a 2 ore Fino a 2 ore


entità

Creazione di flussi di dati con Power Sì Sì


Query Online

Gestione del flusso di dati Nel Power Apps di amministrazione Nel Power BI di amministrazione

Nuovi connettori Sì Sì

Schema standardizzato/supporto Sì Sì
predefinito per l'Common Data Model

Connettore dati flussi di dati in Power Per i flussi di dati con Azure Data Lake Sì
BI Desktop Archiviazione come destinazione

Integrazione con Azure Data Lake Sì Sì


Archiviazione

Integrazione con Dataverse Sì No

Entità collegate del flusso di dati Per i flussi di dati con Azure Data Lake Sì
Archiviazione come destinazione

Entità calcolate (trasformazioni in Per i flussi di dati con Azure Data Lake Power BI Premium solo
archiviazione con M) Archiviazione come destinazione

Aggiornamento incrementale del Per i flussi di dati con Azure Data Lake Power BI Premium solo
flusso di dati Archiviazione destinazione, è
necessario Power Apps Piano2

Esecuzione in Power BI No Sì
Premium/esecuzione parallela delle
trasformazioni

Altre informazioni sui flussi di dati in Power Apps:


Preparazione dei dati self-service in Power Apps
Creazione e uso di flussi di dati in Power Apps
Connettere Azure Data Lake Storage Gen2 per l'archiviazione dei flussi di dati
Aggiungere dati a una tabella in Dataverse usando Power Query
Visitare la community Power Apps flussi di dati e condividere le proprie attività, porre domande o inviare
nuove idee
Visitare il forum Power Apps community dei flussi di dati e condividere le proprie attività, porre domande o
inviare nuove idee
Altre informazioni sui flussi di dati in Power BI:
Preparazione dei dati self-service in Power BI
Creare e usare flussi di dati in Power BI
White paper sui flussi di dati
Video dettagliato di una procedura dettagliata per i flussi di dati
Visitare la community Power BI flussi di dati e condividere ciò che si sta facendo, porre domande o inviare
nuove idee

Passaggi successivi
Gli articoli seguenti descrivono più in dettaglio gli scenari di utilizzo comuni per i flussi di dati.
Uso dell'aggiornamento incrementale con i flussi di dati
Creazione di entità calcolate nei flussi di dati
Connessione alle origini dati per i flussi di dati
Collegare entità tra flussi di dati
Per altre informazioni sui Common Data Model e lo standard Common Data Model cartella, leggere gli articoli
seguenti:
Panoramica del modello CDM (Common Data Model)
Common Data Model cartelle
Common Data Model file del modello di cartella
Creare e usare flussi di dati in Microsoft Teams
(anteprima)
07/12/2021 • 6 minutes to read

NOTE
Sono in fase di implementazione graduali i flussi Microsoft Teams dati. Questa funzionalità potrebbe non essere ancora
disponibile nell'area.

Microsoft Dataverse per Teams offre una piattaforma dati predefinita a basso codice per Microsoft Teams. Offre
archiviazione dei dati relazionali, tipi di dati complessi, governance di livello aziendale e distribuzione di
soluzioni con un solo clic. Dataverse per Teams consente a tutti di compilare e distribuire facilmente le app.
Prima di oggi, il modo per ottenere i dati in Dataverse Teams è stato aggiungendo manualmente i dati
direttamente in una tabella. Questo processo può essere incresciato da errori e non è scalabile. Ma ora, con la
preparazione dei dati self-service è possibile trovare, pulire, modellare e importare i dati in Dataverse per Teams.
Con i dati aziendali già presenti in una posizione diversa, è possibile usare flussi di dati Power Query per
accedere direttamente ai dati tramite i connettori e caricare i dati in Dataverse per Teams. Quando si aggiornano
i dati dell'organizzazione, è possibile aggiornare i flussi di dati con un solo clic e anche i dati in Dataverse Teams
vengono aggiornati. È anche possibile usare le trasformazioni Power Query dati per convalidare e pulire
facilmente i dati e applicare la qualità dei dati per le app.
Sono stati introdotti flussi di dati per consentire alle organizzazioni di recuperare dati da origini diverse e
prepararli per l'utilizzo. È possibile creare facilmente flussi di dati usando l'esperienza Power Query self-service
per inserire, trasformare, integrare e arricchire i dati. Quando si crea un flusso di dati, ci si connette ai dati, si
trasformano i dati e si caricano i dati in Dataverse per Teams tabelle. Dopo aver creato il flusso di dati, inizia il
processo di importazione dei dati nella tabella Dataverse. È quindi possibile iniziare a creare app per sfruttare i
dati.

Creare un flusso di dati dalla pagina flussi di dati


In questo esempio si caricano dati da un file Excel che si trova OneDrive in Dataverse per Teams.
1. Accedere a Teams Webe quindi selezionare il collegamento per Power Apps .
2. Selezionare la scheda Compila e quindi Selezionare Flussi di dati (anteprima).
3. Per creare un nuovo flusso di dati, selezionare il pulsante Nuovo.

4. Selezionare il connettore Excel car tella di lavoro.

5. Immettere un indirizzo URL in Percorso file o URL oppure usare il pulsante Sfoglia OneDrive per
spostarsi tra le cartelle OneDrive file. Selezionare il file desiderato e quindi fare clic sul pulsante Avanti.
Per altre informazioni sull'uso della connessione OneDrive o sul recupero di dati, vedere SharePoint e
OneDrive for Business file importati o Recupero di dati da altre origini.
6. In Strumento di navigazione selezionare le tabelle presenti nel file Excel dati. Se il file Excel contiene più
fogli e tabelle, selezionare solo le tabelle a cui si è interessati. Al termine, selezionare Trasforma dati .
7. Pulire e trasformare i dati usando Power Query. È possibile usare le trasformazioni predefiniti per
eliminare valori mancanti, eliminare colonne non necessarie o filtrare i dati. Con Power Query, è possibile
applicare più di 300 trasformazioni diverse ai dati. Per altre informazioni sulle trasformazioni Power
Query, vedere Usare Power Query per trasformare i dati. Al termine della preparazione dei dati,
selezionare Avanti.

8. In Tabelle mappa selezionare Carica nella nuova tabella per creare una nuova tabella in Dataverse per
Teams. È anche possibile scegliere di caricare i dati in una tabella esistente. Nella schermata Tabelle
mappa è anche possibile specificare una colonna Nome primario univoco e una colonna Chiave
alternativa (facoltativa). In questo esempio, lasciare le selezioni con i valori predefiniti. Per altre
informazioni sul mapping dei dati e delle diverse impostazioni, vedere Considerazioni sul mapping dei
campi per i flussi di dati standard.
9. Selezionare Crea per completare il flusso di dati. Dopo aver creato il flusso di dati, i dati iniziano a
caricarsi in Dataverse per Teams. Questo processo può richiedere tempo ed è possibile usare la pagina di
gestione per controllare lo stato. Quando un flusso di dati completa un'esecuzione, i relativi dati sono
disponibili per l'uso.

Gestione dei flussi di dati


È possibile gestire qualsiasi flusso di dati creato dalla scheda Flussi di dati (anteprima). Qui è possibile
visualizzare lo stato di tutti i flussi di dati, l'ultimo aggiornamento del flusso di dati ed eseguire un'azione dalla
barra delle azioni.

Nella colonna Ultimo aggiornamento è possibile visualizzare l'ultimo aggiornamento dei dati. Se
l'aggiornamento non è riuscito, viene visualizzata un'indicazione di errore. Se si seleziona l'indicazione di errore,
vengono visualizzati i dettagli dell'errore e i passaggi consigliati per risolvere l'errore.
Nella colonna Stato è possibile visualizzare lo stato corrente del flusso di dati. Gli stati possibili sono elencati di
seguito:
Aggiornamento in corso: il flusso di dati sta estraendo, trasformando e caricando i dati dall'origine alle
tabelle di Dataverse. Questo processo può richiedere alcuni minuti a seconda della complessità delle
trasformazioni e delle prestazioni dell'origine dati. È consigliabile controllare spesso lo stato del flusso di dati.
Per passare alla barra delle azioni, selezionare i tre puntini "..." accanto al flusso di dati.

A questo punto è possibile:


Modificare il flusso di dati se si vuole modificare la logica di trasformazione o il mapping.
Rinominare il flusso di dati. Al momento della creazione, viene assegnato un nome creato
automaticamente.
Aggiornare il flusso di dati. Quando si aggiornano i flussi di dati, i dati verranno aggiornati.
Eliminare il flusso di dati.
Mostra cronologia aggiornamenti . In questo modo è possibile ottenere i risultati dell'ultimo
aggiornamento.
Selezionare Mostra cronologia aggiornamenti per visualizzare informazioni sull'ultimo aggiornamento del
flusso di dati. Quando l'aggiornamento del flusso di dati ha esito positivo, è possibile visualizzare il numero di
righe aggiunte o aggiornate in Dataverse. Quando l'aggiornamento del flusso di dati non ha avuto esito
positivo, è possibile esaminare il motivo con l'aiuto del messaggio di errore.

I flussi di dati in Teams è una versione leggera


I flussi di dati Teams sono una versione leggera dei flussi di dati nel portale maker e possono caricare i dati solo
in Dataverse per Teams. I flussi di dati Teams ottimizzati per un'importazione di dati una sola volta, ma è
possibile aggiornare i dati manualmente tramite il pulsante di aggiornamento nella pagina di gestione dei flussi
di dati. Se si desidera una funzionalità completa dei flussi di dati, è possibile aggiornare l'ambiente.
Le origini dati supportate nei flussi di dati Teams sono:
Excel (OneDrive)
Testo/CSV (OneDrive)
PDF (OneDrive)
SharePoint Cartella online
Elenco SharePoint Online
XML (OneDrive)
JSON (OneDrive)
OData
API Web

NOTE
I flussi di dati Teams non supportano origini dati non locali, ad esempio percorsi di file locali.

Nella tabella seguente sono elencate le principali differenze di funzionalità tra i flussi di dati per Dataverse
Teams e i flussi di dati per Dataverse.

F UN Z IO N A L ITÀ DEL F L USSO DI DAT I DATAVERSE P ER T EA M S DATAVERSE

Flussi di data standard Sì Sì

Flussi di dati analitici No Sì

Supporto del gateway No Sì

Aggiornamento manuale Sì Sì

Aggiornamento pianificato No Sì

Aggiornamento incrementale No Sì
F UN Z IO N A L ITÀ DEL F L USSO DI DAT I DATAVERSE P ER T EA M S DATAVERSE

Tabelle standard No Sì

Tabelle personalizzate Sì Sì

Funzionalità PQ completa Sì Sì

Connettori supportati Subset di connettori Tutti i connettori

Volumi di dati di piccole dimensioni Sì Sì

Volumi di dati più grandi No 1 Sì

1 Anche se non esiste alcuna limitazione alla quantità di dati che è possibile caricare in Dataverse per
Teams, per
migliorare le prestazioni nel caricamento di grandi quantità di dati, è consigliabile un ambiente Dataverse.
Uso dell'aggiornamento incrementale con i flussi di
dati
07/12/2021 • 10 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Con i flussi di dati, è possibile portare grandi quantità di dati in Power BI o nell'archiviazione fornita
dall'organizzazione. In alcuni casi, tuttavia, non è pratico aggiornare una copia completa dei dati di origine
durante ogni aggiornamento. Una valida alternativa è l'aggiornamento incrementale , che offre i vantaggi
seguenti per i flussi di dati:
L'aggiornamento viene eseguito più velocemente: è necessario aggiornare solo i dati modificati. Ad
esempio, è sufficiente aggiornare gli ultimi cinque giorni di un flusso di dati di 10 anni.
L'aggiornamento è più affidabile: ad esempio, non è necessario mantenere connessioni a esecuzione
lunga a sistemi di origine volatili.
L'utilizzo delle risorse è ridotto: un minor numero di dati da aggiornare riduce il consumo complessivo
di memoria e altre risorse.
L'aggiornamento incrementale è disponibile nei flussi di dati creati in Power BI e nei flussi di dati creati in Power
Apps. Questo articolo illustra le schermate Power BI, ma queste istruzioni si applicano ai flussi di dati creati in
Power BI o in Power Apps.
L'uso dell'aggiornamento incrementale nei flussi di dati creati in Power BI richiede che il flusso di dati risieda in
un'area di lavoro Premium capacità. L'aggiornamento incrementale Power Apps richiede Power Apps piano 2.
In entrambi Power BI o Power Apps, l'uso dell'aggiornamento incrementale richiede che i dati di origine inseriti
nel flusso di dati presentino un campo DateTime in cui l'aggiornamento incrementale può filtrare.

Configurazione dell'aggiornamento incrementale per i flussi di dati


Un flusso di dati può contenere molte entità. L'aggiornamento incrementale è configurato a livello di entità, in
modo da consentire a un flusso di dati di contenere sia le entità completamente aggiornate che quelle
aggiornate in modo incrementale.
Per configurare un'entità aggiornata in modo incrementale, iniziare configurando normalmente l'entità.
Dopo aver creato e salvato il flusso di dati, selezionare Aggiornamento incrementale nella visualizzazione
entità, come illustrato nell'immagine seguente.
Quando si seleziona l'icona, viene visualizzata la finestra Impostazioni aggiornamento incrementale.
Attivare l'aggiornamento incrementale.

L'elenco seguente descrive le impostazioni della finestra Impostazioni di aggiornamento incrementale .


Attivazione/disattivazione dell'aggiornamento incrementale: attiva o disattiva i criteri di
aggiornamento incrementale per l'entità.
Elenco a discesa Campo filtro : seleziona il campo di query in base al quale l'entità deve essere filtrata
per gli incrementi. Questo campo contiene solo campi DateTime. Non è possibile usare l'aggiornamento
incrementale se l'entità non contiene un campo DateTime.
Archivia/aggiorna righe dal passato: l'esempio nell'immagine precedente illustra queste
impostazioni successive.
In questo esempio vengono definiti criteri di aggiornamento per archiviare cinque anni di dati in totale e
aggiornare in modo incrementale 10 giorni di dati. Supponendo che l'entità sia aggiornata ogni giorno,
per ogni operazione di aggiornamento vengono eseguite le azioni seguenti:
Aggiungere un nuovo giorno di dati.
Aggiornare 10 giorni, fino alla data corrente.
Rimuovere gli anni di calendario precedenti a cinque anni prima della data corrente. Ad esempio,
se la data corrente è il 1° gennaio 2019, l'anno 2013 viene rimosso.
Il primo aggiornamento del flusso di dati potrebbe richiedere del tempo per importare tutti e cinque gli
anni, ma è probabile che gli aggiornamenti successivi siano completati molto più rapidamente.
Rilevare le modifiche ai dati: un aggiornamento incrementale di 10 giorni è molto più efficiente
rispetto a un aggiornamento completo di cinque anni, ma potrebbe essere ancora meglio. Quando si
seleziona la casella di controllo Rileva modifiche ai dati , è possibile selezionare una colonna di
data/ora per identificare e aggiornare solo i giorni in cui i dati sono stati modificati. Questa opzione
presuppone l'esistenza di una colonna di questo tipo (usata in genere per operazioni di controllo) nel
sistema di origine. Il valore massimo di questa colonna viene valutato per ciascuno dei periodi
dell'intervallo incrementale. Se i dati non sono stati modificati dall'ultimo aggiornamento, non è
necessario aggiornare il periodo. Nell'esempio, questo potrebbe ridurre ulteriormente i giorni aggiornati
in modo incrementale da 10 a forse 2.

TIP
La progettazione corrente richiede che la colonna utilizzata per rilevare le modifiche ai dati sia persistente e
memorizzata nella cache in memoria. È possibile prendere in considerazione una delle tecniche seguenti per ridurre
la cardinalità e l'utilizzo della memoria:
Rendere persistente solo il valore massimo di questa colonna al momento dell'aggiornamento, ad esempio
usando una Power Query predefinita.
Ridurre la precisione a un livello accettabile in base ai requisiti di frequenza di aggiornamento.

Aggiorna solo periodi completi: Imagine l'aggiornamento è pianificato per l'esecuzione alle 4:00 ogni
giorno. Se i dati vengono visualizzati nel sistema di origine durante le prime quattro ore del giorno,
potrebbe non essere necessario conto di tali dati. Alcune metriche aziendali, ad esempio i barili al giorno
nel settore del gas e del greggio, non sono pratiche o ragionevoli da fare in base a giorni parziali.
Un altro esempio in cui solo l'aggiornamento di periodi completi è appropriato è l'aggiornamento dei
dati di un sistema finanziario. Si supponga di avere un sistema finanziario in cui i dati per il mese
precedente vengono approvati il dodicesimo giorno del mese. È possibile impostare l'intervallo
incrementale su un mese e pianificare l'aggiornamento per l'esecuzione il 12° giorno del mese. Se questa
opzione è selezionata, il sistema a refreshrà i dati di gennaio (il periodo mensile completo più recente) il
12 febbraio.

NOTE
L'aggiornamento incrementale del flusso di dati determina le date in base alla logica seguente: se è pianificato un
aggiornamento, l'aggiornamento incrementale per i flussi di dati usa il fuso orario definito nei criteri di aggiornamento. Se
non esiste alcuna pianificazione per l'aggiornamento, l'aggiornamento incrementale usa l'ora del computer che esegue
l'aggiornamento.

Dopo aver configurato l'aggiornamento incrementale, il flusso di dati modifica automaticamente la query per
includere il filtro in base alla data. È possibile modificare la query generata automaticamente usando l'editor
avanzato in Power Query per ottimizzare o personalizzare l'aggiornamento. Per altre informazioni
sull'aggiornamento incrementale e sul suo funzionamento, vedere le sezioni seguenti.

Aggiornamento incrementale ed entità collegate e entità calcolate


Per le entità collegate, l'aggiornamento incrementale aggiorna l'entità di origine. Poiché le entità collegate sono
semplicemente un puntatore all'entità originale, l'aggiornamento incrementale non ha alcun impatto sull'entità
collegata. Quando l'entità di origine viene aggiornata in base ai criteri di aggiornamento definiti, qualsiasi entità
collegata deve presupporre che i dati nell'origine siano aggiornati.
Le entità calcolate sono basate su query in esecuzione su un archivio dati, che può essere un altro flusso di dati.
Di conseguenza, le entità calcolate si comportano allo stesso modo delle entità collegate.
Poiché le entità calcolate e le entità collegate si comportano in modo analogo, i requisiti e i passaggi di
configurazione sono gli stessi per entrambi. Una differenza è che per le entità calcolate, in alcune configurazioni
l'aggiornamento incrementale non può essere eseguito in modo ottimizzato a causa della modalità di
compilazione delle partizioni.

Passaggio dall'aggiornamento incrementale a quello completo


I flussi di dati supportano la modifica dei criteri di aggiornamento tra aggiornamento incrementale e completo.
Quando si verifica una modifica in entrambe le direzioni (da completa a incrementale o incrementale a
completa), la modifica influisce sul flusso di dati dopo l'aggiornamento successivo.
Quando si sposta un flusso di dati da aggiornamento completo a incrementale, la nuova logica di
aggiornamento aggiorna il flusso di dati aderendo alla finestra di aggiornamento e incrementandosi come
definito nelle impostazioni di aggiornamento incrementale.
Quando si sposta un flusso di dati dall'aggiornamento incrementale all'aggiornamento completo, tutti i dati
accumulati nell'aggiornamento incrementale vengono sovrascritti dai criteri definiti nell'aggiornamento
completo. È necessario approvare questa operazione.

Supporto del fuso orario nell'aggiornamento incrementale


L'aggiornamento incrementale del flusso di dati dipende dal momento in cui viene eseguito. Il filtro della query
dipende dal giorno in cui viene eseguita.
Per supportare tali dipendenze e per garantire la coerenza dei dati, l'aggiornamento incrementale per i flussi di
dati implementa l'euristica seguente per gli scenari di tipo aggiorna ora:
Nel caso in cui nel sistema sia definito un aggiornamento pianificato, l'aggiornamento incrementale usa
le impostazioni del fuso orario della sezione relativa all'aggiornamento pianificato. Ciò garantisce che
qualsiasi fuso orario in cui si trova la persona che aggiorna il flusso di dati sia sempre coerente con la
definizione del sistema.
Se non è definito alcun aggiornamento pianificato, i flussi di dati usano il fuso orario del computer
dell'utente che esegue l'aggiornamento.
L'aggiornamento incrementale può essere richiamato anche tramite le API. In questo caso, la chiamata API può
contenere un'impostazione del fuso orario usata nell'aggiornamento. L'uso delle API può essere utile a scopo di
test e convalida.

Dettagli di implementazione dell'aggiornamento incrementale


I flussi di dati usano il partizionamento per l'aggiornamento incrementale. Quando gli endpoint XMLA per
Power BI Premium sono disponibili, le partizioni diventano visibili. L'aggiornamento incrementale nei flussi di
dati mantiene il numero minimo di partizioni per soddisfare i requisiti dei criteri di aggiornamento. Le partizioni
non più disponibili vengono eliminate, mantenendo una finestra in sequenza. Le partizioni vengono unite in
base alle esigenze, riducendo il numero totale di partizioni necessarie. Ciò migliora la compressione e, in alcuni
casi, può migliorare le prestazioni delle query.
Gli esempi in questa sezione condividono i criteri di aggiornamento seguenti:
Archivia le righe degli ultimi: 1 trimestre
Aggiorna le righe degli ultimi: 10 giorni
Rileva modifiche ai dati = False
Aggiorna solo giorni completi = True
Unire le partizioni
In questo esempio le partizioni giornaliere vengono unite automaticamente al livello del mese dopo che non
sono più nell'intervallo incrementale. Le partizioni nell'intervallo incrementale devono essere mantenute con
granularità giornaliera per consentire l'aggiornamento solo dei giorni specificati. L'operazione di
aggiornamento con data di esecuzione 11/12/2016 unisce i giorni nel mese di novembre, poiché si trovano di
fuori dell'intervallo incrementale.

Eliminare le partizioni obsolete


Le partizioni obsolete che non rientrano nell'intervallo totale vengono rimosse. L'operazione di aggiornamento
con Data di esecuzione 2/01/2017 elimina la partizione per il terzo trimestre del 2016 perché non rientra
nell'intervallo totale.
Recupero da errori prolungati
Questo esempio consente di simulare in che modo il sistema viene ripristinato correttamente da errori
prolungati. Si supponga che l'aggiornamento non venga eseguito correttamente perché le credenziali
dell'origine dati sono scadute e che il problema richieda 13 giorni per essere risolto. L'intervallo incrementale è
solo di 10 giorni.
La successiva operazione di aggiornamento con esito positivo, con data di esecuzione 15/1/2017, necessita di
riempire i 13 giorni mancanti e li aggiorna. Deve anche aggiornare i nove giorni precedenti perché non sono
stati aggiornati in base alla normale pianificazione. In altre parole, l'intervallo incrementale è salito da 10 a 22
giorni.
L'operazione di aggiornamento successiva, con data di esecuzione 16/1/2017, consente di unire i giorni di
dicembre e i mesi del 4° trimestre 2016.

Aggiornamento incrementale del flusso di dati e set di dati


L'aggiornamento incrementale del flusso di dati e l'aggiornamento incrementale del set di dati sono progettati
per funzionare congiuntamente. È accettabile e supportato avere un'entità che aggiorna in modo incrementale
in un flusso di dati, completamente caricata in un set di dati o un'entità completamente caricata in un flusso di
dati caricato in modo incrementale in un set di dati.
Entrambi gli approcci funzionano in base alle definizioni specificate nelle impostazioni di aggiornamento. Altre
informazioni: Aggiornamento incrementale in Power BI Premium

Considerazioni e limitazioni
L'aggiornamento incrementale Microsoft Power Platform flussi di dati è supportato solo nei flussi di dati con un
account Azure Data Lake Archiviazione, non nei flussi di dati con Dataverse come destinazione.
Vedi anche
Questo articolo ha illustrato l'aggiornamento incrementale per i flussi di dati. Di seguito sono riportati altri
articoli che potrebbero essere utili:
Preparazione dei dati self-service in Power BI
Creazione di entità calcolate nei flussi di dati
Connessione alle origini dati per i flussi di dati
Collegare entità tra flussi di dati
Creare e usare flussi di dati in Power BI
Uso di flussi di dati con origini dati locali
Risorse per sviluppatori per i flussi di dati Power BI
Per altre informazioni su Power Query e sull'aggiornamento pianificato, è possibile leggere questi articoli:
Panoramica delle query in Power BI Desktop
Configurazione dell'aggiornamento pianificato
Per altre informazioni sui Common Data Model, è possibile leggere il relativo articolo di panoramica:
Panoramica del modello CDM (Common Data Model)
Connessione alle origini dati per i flussi di dati
07/12/2021 • 4 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Con Microsoft Power BI e Power Platform flussi di dati, è possibile connettersi a molte origini dati diverse per
creare nuovi flussi di dati o aggiungere nuove entità a un flusso di dati esistente.
Questo articolo descrive come creare flussi di dati usando queste origini dati. Per una panoramica su come
creare e usare flussi di dati, vedere Creazione di un flusso di dati per il servizio Power BI e Creare e usare flussi
di dati in Power Apps.

Creare un flusso di dati da un'origine dati


Per creare un flusso di dati da un'origine dati, è prima necessario connettersi ai dati.
Servizio Power BI
Power Apps

Per connettersi ai dati in Power BI:


1. Aprire un'area di lavoro.
2. Selezionare Nuovo .
3. Selezionare Flusso di dati dal menu a discesa.
4. In Definisci nuove tabelle selezionare Aggiungi nuove tabelle .

Origini dati per i flussi di dati


Dopo aver creato il flusso di dati dallo strumento di creazione del flusso di dati, verrà visualizzata la finestra di
dialogo Scegli origine dati.

Le origini dati per i flussi di dati sono organizzate nelle categorie seguenti, visualizzate come schede nella
finestra di dialogo Scegli origine dati :
Tutte le categorie
File
Database
Power Platform
Azure
Servizi online
Altro
Per un elenco di tutte le origini dati supportate in Power Query, vedere Connettori in Power Query.

Connettersi a un'origine dati


Per connettersi a un'origine dati, selezionarla. Questa sezione usa un esempio per illustrare il funzionamento del
processo, ma ogni connessione dati per i flussi di dati è simile nel processo. Connettori diversi potrebbero
richiedere credenziali specifiche o altre informazioni, ma il flusso è simile. In questo esempio il SQL Ser ver
database viene selezionato nella categoria Connessione dati database.

Viene visualizzata una finestra di connessione per la connessione dati selezionata. Se sono richieste credenziali,
sarà necessario specificarle. L'immagine seguente mostra un server e un database immessi per connettersi a un
SQL Server database.
Dopo aver specificato l'URL del server o le informazioni di connessione alla risorsa, immettere le credenziali da
usare per l'accesso ai dati. Potrebbe anche essere necessario immettere il nome di un gateway dati locale.
Selezionare quindi Avanti .
Power Query Online avvia e stabilisce la connessione all'origine dati. Presenta quindi le tabelle disponibili di tale
origine dati nella finestra Strumento di navigazione.

È possibile selezionare tabelle e dati da caricare selezionando la casella di controllo accanto a ognuna nel
riquadro sinistro. Per trasformare i dati scelti, selezionare Trasforma dati nella parte inferiore della finestra
Strumento di navigazione. Verrà Power Query finestra di dialogo Online in cui è possibile modificare le query
ed eseguire qualsiasi altra trasformazione desiderata per i dati selezionati.
Connessione a origini dati aggiuntive
Sono disponibili connettori dati aggiuntivi che non vengono visualizzati nell'Power BI utente dei flussi di dati, ma
sono supportati con alcuni passaggi aggiuntivi.
È possibile seguire questa procedura per creare una connessione a un connettore che non viene visualizzata
nell'interfaccia utente:
1. Aprire Power BI Desktop e quindi selezionare Ottieni dati .
2. Aprire editor di Power Query in Power BI Desktop, fare clic con il pulsante destro del mouse sulla query
pertinente e quindi scegliere Editor avanzato , come illustrato nell'immagine seguente. Da qui è
possibile copiare lo script M visualizzato nella finestra Editor avanzato.

3. Aprire il Power BI dati e quindi selezionare Ottieni dati per una query vuota.
4. Incollare la query copiata nella query vuota per il flusso di dati.

Lo script si connette quindi all'origine dati specificata.


Nell'elenco seguente vengono illustrati i connettori che è possibile usare attualmente per copiare e incollare la
query M in una query vuota:
SAP Business Warehouse
Azure Analysis Services
Adobe Analytics
ODBC
OLE DB
Cartella
Cartella di SharePoint Online
Cartella di SharePoint
Hadoop Distributed File System
Azure HDInsight (HDFS)
File Hadoop Distributed File System
Informix (beta)

Passaggi successivi
Questo articolo ha illustrato le origini dati che è possibile usare per connettersi ai flussi di dati. Gli articoli
seguenti descrivono più in dettaglio gli scenari di utilizzo comuni per i flussi di dati:
Preparazione dei dati self-service in Power BI
Uso dell'aggiornamento incrementale con i flussi di dati
Creazione di entità calcolate nei flussi di dati
Collegare entità tra flussi di dati
Per informazioni sui singoli Power Query connettori, passare all'elenco di riferimento dei connettori di Power
Query eselezionare il connettore su cui si vogliono ottenere altre informazioni.
Altre informazioni sui flussi di dati e sulle informazioni correlate sono disponibili negli articoli seguenti:
Creare e usare flussi di dati in Power BI
Uso di flussi di dati con origini dati locali
Risorse per sviluppatori per i flussi di dati Power BI
Integrazione di flussi di dati e Azure Data Lake (anteprima)
Per altre informazioni su Power Query e sull'aggiornamento pianificato, è possibile leggere questi articoli:
Panoramica delle query in Power BI Desktop
Configurazione dell'aggiornamento pianificato
Per altre informazioni sui Common Data Model, è possibile leggere il relativo articolo di panoramica:
Panoramica del modello CDM (Common Data Model)
Quali licenze sono necessarie per usare i flussi di
dati?
07/12/2021 • 5 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

I flussi di dati possono essere creati in portali diversi, ad esempio Power BI e Power Apps, e possono essere di
tipo analitico o standard. Inoltre, alcune funzionalità del flusso di dati sono disponibili solo come Premium
funzionalità. Considerando l'ampia gamma di prodotti che possono usare flussi di dati e la disponibilità delle
funzionalità in ogni tipo di prodotto o flusso di dati, è importante conoscere le opzioni di licenza necessarie per
usare i flussi di dati.

Creazione di flussi di dati in Power BI di lavoro


Se si vogliono creare flussi di dati nelle Power BI, è necessario avere una licenza Power BI Pro pagamento. Una
Power BI licenza gratuita non consente di creare flussi di dati. A seconda delle funzionalità usate, è necessaria
una capacità Power BI Premium o incorporata.
Un Power BI Pro account è disponibile su base mensile per l'utente. Sono disponibili più opzioni per le capacità
Premium o Embedded.

Creazione di flussi di dati in Microsoft Power Platform virtuali


Per creare flussi di dati nell'ambiente Microsoft Power Platform è necessaria una licenza Power Apps (per utente
o per app).
Se si vogliono creare flussi di dati analitici che archiviano dati nell'account Azure Data Lake Archiviazione Gen2
dell'organizzazione, l'utente o l'amministratore dovrà accedere a una sottoscrizione di Azure e a un account
Azure Data Lake Archiviazione Gen2.

Premium funzionalità
Alcune delle funzionalità del flusso di dati sono limitate alle licenze Premium. Se si vuole usare il motore di
calcolo avanzato per velocizzare le prestazioni delle query del flusso di dati rispetto alle entità calcolate o avere
l'opzione di connessione DirectQuery al flusso di dati, è necessario avere capacità Power BI P1 o A3 o superiori.
Le funzionalità di intelligenza artificiale Power BI, l'entità collegata e l'entità calcolata sono tutte funzioni
Premium che non sono disponibili con un account Power BI Pro cliente.

Funzionalità
La tabella seguente contiene un elenco di funzionalità e la licenza necessaria per la loro disponibilità.
F UN Z IO N A L ITÀ P O W ER B I P O W ER A P P S

Archiviare i dati in tabelle Dataverse N/D Per piano di app


(flusso di dati standard) Piano per utente

Archiviare i dati in Azure Data Lake Power BI Pro Sì, uso di flussi di dati analitici
Archiviazione (flusso di dati analitici) Power BI Premium

Archiviare i dati in Azure Data Lake Power BI Pro Per piano di app
Archiviazione (flusso di dati analitici, Power BI Premium Piano per utente
bring your own Azure Data Lake
Archiviazione)

Motore di calcolo avanzato (in Power BI Premium N/D


esecuzione Power BI Premium
capacità/esecuzione parallela delle
trasformazioni)

Connessione DirectQuery al flusso di Power BI Premium N/D


dati

Funzionalità di intelligenza artificiale in Power BI Premium N/D


Power BI

Entità collegate Power BI Premium Sì, uso di flussi di dati analitici

Entità calcolate (trasformazioni in Power BI Premium Sì, uso di flussi di dati analitici
archiviazione con M)

Pianifica aggiornamenti Sì Sì

Creazione di flussi di dati con Power Sì Sì


Query Online

Gestione dei flussi di dati Power BI Power Apps

Nuovi connettori Sì Sì

Schema standardizzato, supporto Sì Sì


predefinito per Common Data Model

Connettore dati flussi di dati in Power Sì Sì, uso di flussi di dati analitici
BI Desktop

Aggiornamento incrementale del Power BI Premium Sì, uso di flussi di dati analitici con
flusso di dati piano per utente

Limitazioni per ogni licenza


La tabella precedente mostra le funzionalità che ogni licenza offrirà. Le sezioni seguenti forniscono informazioni
dettagliate su alcune limitazioni di ogni licenza.
Power Apps licenze
Se si usa una licenza Power Apps per creare flussi di dati, non esiste alcuna limitazione al numero di flussi di dati
ed entità che è possibile creare. Esiste tuttavia una limitazione delle dimensioni del servizio Dataverse che è
possibile usare.
Il Power Apps piano per app copre fino a una capacità di database di 50 MB. Il Power Apps piano per utente
consente di avere un database di capacità di 250 MB.
Power BI Pro
Power BI Pro offre la possibilità di creare flussi di dati analitici, ma non di usare alcuna funzionalità Premium.
Con un account Power BI Pro, non è possibile usare entità collegate o calcolate, non è possibile usare le
funzionalità di intelligenza artificiale in Power BI e non è possibile usare DirectQuery per connettersi al flusso di
dati. Lo spazio di archiviazione per i flussi di dati è limitato allo spazio lasciato nell'account Power BI Pro, che è
un subset di 10 GB di archiviazione per tutti i Power BI contenuti.
Power BI Premium
Se si usa Power BI Premium (licenza basata sulla capacità), è possibile usare tutte le funzionalità di intelligenza
artificiale in Power BI, le entità calcolate e le entità collegate, con la possibilità di avere una connessione
DirectQuery al flusso di dati ed è possibile usare il motore di calcolo avanzato. Tuttavia, il flusso di dati creato
con una licenza di capacità Premium usa solo l'istanza interna di Azure Data Lake Archiviazione e non sarà
accessibile da altre piattaforme, ad eccezione Power BI se stessa. Non è possibile creare flussi di dati esterni solo
con una licenza Power BI Premium; è necessario avere anche una sottoscrizione di Azure per Azure Data Lake
Archiviazione.
Uso dell'account Azure Data Lake Archiviazione dell'organizzazione per l'archiviazione dei flussi di dati
Per creare flussi di dati che archiviano i dati nell'account Azure Data Lake Archiviazione dell'organizzazione, oltre
alle licenze del prodotto precedenti, è necessario avere una sottoscrizione di Azure. La quantità di spazio di
archiviazione che può essere usata non è limitata dal flusso di dati o dal prodotto in cui è stato creato.

Passaggio successivo
Per altre informazioni sui concetti illustrati in questo articolo, seguire uno dei collegamenti seguenti.
Prezzi
Prezzi di Power BI
Power Apps prezzi
Prezzi di Azure Data Lake Archiviazione Gen 2
Funzionalità
Entità calcolate
Entità collegate
Funzionalità di intelligenza artificiale Power BI flussi di dati
Flussi di dati standard e analitici
Motore di calcolo avanzato
Come eseguire la migrazione di query Power Query
nel desktop (Power BI e Excel) ai flussi di dati
07/12/2021 • 3 minutes to read

Se sono già presenti query in Power Query, in Power BI Desktop o in Excel, è possibile eseguire la migrazione
delle query in flussi di dati. Il processo di migrazione è semplice e semplice. In questo articolo si apprenderanno
i passaggi per eseguire questa operazione.
Per informazioni su come creare un flusso di dati in Microsoft Power Platform, vedere Creare e usare flussi di
dati in Power Platform. Per informazioni su come creare un flusso di dati in Power BI, vedere Creazione e uso di
flussi didati in Power BI .

Migrazione delle query dal desktop


Per eseguire la migrazione di query Power Query negli strumenti desktop:
1. Aprire editor di Power Query:
Nella Power BI Desktop Home selezionare Trasforma dati.

Nella Excel Dati selezionare Get Data > Launch editor di Power Quer y .
2. Copiare le query:
Se le query sono organizzate in cartelle, denominate gruppi in Power Query:
a. Nel riquadro Quer y premere CTRL mentre si selezionano le cartelle di cui si vuole eseguire la
migrazione al flusso di dati.
b. Premere CTRL+C.

Se non si dispone di cartelle:


a. Nel riquadro Quer y premere CTRL mentre si selezionano le query di cui si vuole eseguire la
migrazione.
b. Premere CTRL+C.

3. Incollare le query copiate in un flusso di dati:


a. Creare un flusso di dati, se non è già presente.

b. Aprire il flusso di dati editor di Power Query e nel riquadro Quer y selezionare CTRL+V per
incollare le cartelle o le query copiate.
L'immagine seguente mostra un esempio di cartelle copiate correttamente.

4. Connessione il gateway dati locale.


Se l'origine dati è un'origine locale, è necessario eseguire un passaggio aggiuntivo. Esempi di origini
locali possono essere file Excel in una cartella condivisa in un dominio locale o un database SQL Server
ospitato in un server locale.
Un flusso di dati, come servizio basato sul cloud, richiede che il gateway dati locale si connetta all'origine
dati locale. È necessario installare e configurare il gateway per il sistema di origine e quindi aggiungere
l'origine dati per il sistema. Dopo aver completato questi passaggi, è possibile selezionare il gateway dati
locale quando si crea l'entità nel flusso di dati.
Il gateway non è necessario per le origini dati che risiedono nel cloud, ad esempio un database SQL
Azure.
5. Configurare la connessione all'origine dati selezionando Configura connessione e immettendo le
credenziali o qualsiasi altro elemento necessario per connettersi all'origine dati in questa fase.

6. Verificare la connessione:
Se tutti i passaggi sono stati evasi correttamente, verrà visualizzata un'anteprima dei dati nel editor di
Power Query.

Alcune Power Query Desktop richiedono un gateway in Power Query


Online
Alcune funzioni potrebbero richiedere un gateway, anche se l'origine non si trova in locale. Tra queste sono
presenti funzioni come Web.BrowserContents e Web.Page . In questo caso, è possibile che venga visualizzato un
messaggio di errore che indica quale funzione specifica non è supportata. La figura seguente mostra un
esempio di uno di questi scenari.

Se si verifica uno scenario come questo, sono disponibili due opzioni. È possibile configurare il gateway per
l'origine dati oppure aggiornare la query nel editor di Power Query per il flusso di dati usando un set di
passaggi supportati senza la necessità del gateway.

Aggiornare le entità del flusso di dati


Dopo aver migrato le query al flusso di dati, è necessario aggiornare il flusso di dati per ottenere i dati caricati in
queste entità. È possibile aggiornare manualmente un flusso di dati o configurare un aggiornamento automatico
in base alla pianificazione scelta.

Ottenere dati da Power Query Desktop


È ora possibile ottenere dati dalle entità del flusso di dati in Power BI Desktop usando il flusso di dati di Power
Platform o i connettori Dataverse (a seconda del tipo di flusso di dati in uso, analitico o standard). Altre
informazioni: Connessione ai dati creati Power Platform flussi di dati in Power BI Desktop
Uso di un gateway dati locale nei Power Platform
dati locali
07/12/2021 • 5 minutes to read

Installare un gateway dati locale per trasferire i dati in modo rapido e sicuro tra un flusso di dati di Power
Platform e un'origine dati non presente nel cloud, ad esempio un database SQL Server locale o un sito
SharePoint locale. È possibile visualizzare tutti i gateway per cui si dispone di autorizzazioni amministrative e
gestire le autorizzazioni e le connessioni per tali gateway.
Con un gateway è possibile connettersi ai dati locali tramite queste connessioni:
SharePoint
SQL Server
Oracle
Informix
File System
DB2

Prerequisiti
Servizio Power BI
Un account del servizio Power BI. Non se ne ha uno? Iscriversi gratuitamente per 60 giorni.
Autorizzazioni amministrative per un gateway. Queste autorizzazioni vengono fornite per impostazione
predefinita per i gateway installati. Gli amministratori possono concedere ad altri utenti le autorizzazioni
per i gateway.
Power Apps
Un Power Apps account. Non se ne ha uno? Iscriversi gratuitamente per 30 giorni.
Autorizzazioni amministrative per un gateway. Queste autorizzazioni vengono fornite per impostazione
predefinita per i gateway installati. Gli amministratori possono concedere ad altri utenti le autorizzazioni
per i gateway.
Una licenza che supporta l'accesso ai dati locali usando un gateway locale. Altre informazioni:
"Connessione ai dati" della tabella "Explore Power Apps plans" (Esplorare i piani di Power Apps) nella
pagina Power Apps prezzi.
È possibile creare e usare gateway e connessioni locali sono nell'ambiente predefinito dell'utente. Altre
informazioni: Uso degli ambienti e di Microsoft Power Apps.

Installare un gateway
È possibile installare un gateway dati locale direttamente dal servizio online.
Installare un gateway dal Power BI servizio
Per installare un gateway da Power BI servizio:
1. Selezionare il pulsante download nell'angolo superiore destro del Power BI e scegliere Gateway dati.
2. Installare il gateway usando le istruzioni fornite in Installare un gateway dati locale.
Installare un gateway da Power Apps
Per installare un gateway da Power Apps:
1. Nel riquadro di spostamento sinistro powerapps.comselezionare > Gateway dati.
2. Selezionare Nuovo gateway.

3. Nella sezione Gateway dati locale selezionare Scarica.


4. Installare il gateway usando le istruzioni fornite in Installare un gateway dati locale.
Usare un'origine dati locale in un flusso di dati
1. Per istruzioni su come creare un nuovo flusso di dati, vedere Creare un flusso di dati da un'origine dati.
2. Selezionare un'origine dati locale dall'elenco delle origini dati.

3. Specificare i dettagli di connessione per il gateway aziendale che verrà usato per accedere ai dati locali. È
necessario selezionare il gateway stesso e fornire le credenziali per il gateway selezionato. Nell'elenco
vengono visualizzati solo i gateway di cui si è amministratore.

È possibile modificare il gateway aziendale usato per un determinato flusso di dati e modificare il gateway
assegnato a tutte le query usando lo strumento di creazione del flusso di dati.

NOTE
Il flusso di dati tenterà di trovare o creare le origini dati necessarie usando il nuovo gateway. In caso contrario, non sarà
possibile modificare il gateway fino a quando non saranno disponibili tutti i flussi di dati necessari dal gateway selezionato.
Visualizzare e gestire le autorizzazioni dei gateway
Power BI del gateway di servizio
1. Selezionare il pulsante di configurazione nell'angolo superiore destro del servizio Power BI, scegliere
Gestisci gateway e quindi selezionare il gateway desiderato.

2. Per aggiungere un utente al gateway, selezionare la tabella Amministratori e immettere l'indirizzo di


posta elettronica dell'utente che si vuole aggiungere come amministratore. L'uso di gateway nei flussi di
dati richiede l'autorizzazione di amministratore per il gateway. Gli amministratori hanno il controllo
completo del gateway, tra cui l'aggiunta di utenti, l'impostazione delle autorizzazioni, la creazione di
connessioni a tutte le origini dati disponibili e l'eliminazione del gateway.
Power Apps del gateway
1. Nel riquadro di spostamento sinistro powerapps.comselezionare Gateway e quindi selezionare il
gateway desiderato.
2. Per aggiungere un utente a un gateway, selezionare Utenti , specificare un utente o un gruppo e quindi
specificare un livello di autorizzazione. La creazione di nuove origini dati con un gateway nei flussi di dati
richiede l'autorizzazione di amministratore per il gateway. Gli amministratori hanno il controllo completo
del gateway, tra cui l'aggiunta di utenti, l'impostazione delle autorizzazioni, la creazione di connessioni a
tutte le origini dati disponibili e l'eliminazione del gateway.

Visualizzare e gestire le connessioni dei gateway


Power BI gateway del servizio
1. Selezionare il pulsante di configurazione nell'angolo superiore destro del servizio Power BI, scegliere
Gestisci gateway e quindi selezionare il gateway desiderato.
2. Eseguire l'azione desiderata:
Per visualizzare i dettagli e modificare le impostazioni, selezionare Gateway Cluster Impostazioni .
Per aggiungere utenti come amministratori del gateway, selezionare Amministratori.
Per aggiungere un'origine dati al gateway, selezionare Aggiungi origine dati, immettere un nome per
l'origine dati e scegliere il tipo di origine dati in Origine dati Impostazioni e quindi immettere
l'indirizzo di posta elettronica della persona che userà l'origine dati.
Per eliminare un gateway, selezionare i puntini di sospensione a destra del nome del gateway e quindi
selezionare Rimuovi.
Power Apps gateway di rete
1. Nella barra di spostamento sinistra powerapps.com selezionare Gateway e quindi scegliere il gateway
desiderato.
2. Eseguire l'azione desiderata:
Per visualizzare i dettagli, modificare le impostazioni o eliminare un gateway, selezionare
Connessioni e quindi selezionare una connessione.
Per condividere una connessione, selezionare Condividi e quindi aggiungere o rimuovere utenti.

NOTE
È possibile condividere solo alcuni tipi di connessioni, ad esempio una SQL Server connessione. Per altre
informazioni, vedere Condividere risorse di app canvas in Power Apps.
Per altre informazioni su come gestire una connessione, vedere Gestire le connessioni di app canvas in
Power Apps.

Limitazioni
Esistono alcune limitazioni note quando si usano gateway e flussi di dati aziendali.
Ogni flusso di dati può usare un solo gateway. Di conseguenza, tutte le query devono essere configurate
usando lo stesso gateway.
La modifica del gateway influisce sull'intero flusso di dati.
Se sono necessari più gateway, la procedura consigliata consiste nel creare diversi flussi di dati (uno per
ogni gateway) e usare le funzionalità di calcolo o di riferimento alla tabella per unificare i dati.
I flussi di dati sono supportati solo con i gateway aziendali. I gateway personali non saranno disponibili
per la selezione negli elenchi a discesa e nelle schermate delle impostazioni.
La creazione di nuove origini dati con un gateway nei flussi di dati è supportata solo per gli utenti con
autorizzazioni di amministratore. I livelli can use e Can use + share permissions non sono attualmente
supportati.

Risoluzione dei problemi


Quando si tenta di usare un'origine dati locale per pubblicare un flusso di dati, potrebbe verificarsi l'errore
MashupException seguente:

AzureDataLakeStorage failed to get the response:


'The underlying connection was closed: An unexpected error occurred on a send.'

Questo errore si verifica in genere perché si sta tentando di connettersi a un endpoint di Azure Data Lake
Archiviazione tramite un proxy, ma non sono state configurate correttamente le impostazioni proxy per il
gateway dati locale. Per altre informazioni su come configurare queste impostazioni proxy, vedere Configurare
le impostazioni proxy per il gateway dati locale.
Per altre informazioni sulla risoluzione dei problemi relativi ai gateway o sulla configurazione del servizio
gateway per la rete, vedere la documentazione del gateway dati locale.
Passaggi successivi
Creare e usare flussi di dati in Power Apps
Aggiungere dati a una tabella in Microsoft Dataverse usando Power Query
Connettere Azure Data Lake Storage Gen2 per l'archiviazione dei flussi di dati
Uso dell'output Microsoft Power Platform flussi di
dati da altre Power Query esperienze
07/12/2021 • 2 minutes to read

È possibile usare l'output Microsoft Power Platform flussi di dati dall'esperienza Power Query in altri prodotti.
Ad esempio, in Power BI Desktop o anche in un altro flusso di dati è possibile ottenere dati — — dall'output di
un flusso di dati. In questo articolo si apprenderà come eseguire questa operazione.

Ottenere dati dai flussi di dati in Power BI


Se si usa Power BI per l'analisi dei dati, è possibile ottenere dati da flussi di dati Power Platform o Power BI di
dati scegliendo tali origini dati.

Quando si ottengono dati da un flusso di dati, i dati vengono importati nel set Power BI dati. Il set di dati deve
quindi essere aggiornato. È possibile scegliere se eseguire un aggiornamento una sola volta o un
aggiornamento automatico in base a una pianificazione specificata. Gli aggiornamenti pianificati per il set di dati
possono essere configurati in Power BI.
DirectQuery da flussi di dati
Power BI flussi di dati supportano anche una connessione DirectQuery. Se le dimensioni dei dati sono così
grandi da non voler importare tutti i dati nel set di dati Power BI, è possibile creare una connessione
DirectQuery. DirectQuery non copia i dati nel set di Power BI dati. Le tabelle nel set di dati Power BI che
ottengono i dati da un flusso di dati basato su DirectQuery non necessitano di un aggiornamento pianificato,
perché i dati verranno recuperati in tempo reale dal flusso di dati.
Per usare DirectQuery per i flussi di dati, è necessario abilitare il motore di calcolo nella capacità di Power BI
Premium e quindi aggiornare il flusso di dati prima che possa essere utilizzato in modalità DirectQuery. Per altre
informazioni, vedere l'Power BI DirectQuery dei flussi di dati.

I flussi di dati possono ottenere dati da altri flussi di dati


Se si desidera riutilizzare i dati creati da un flusso di dati in un altro flusso di dati, è possibile usare il connettore
del flusso di dati nell'esperienza dell'editor di Power Query quando si crea il nuovo flusso di dati.

Quando si riceveranno dati dall'output di un altro flusso di dati, verrà creata un'entità collegata. Le entità
collegate consentono di rendere disponibili i dati creati in un flusso di dati upstream in un flusso di dati
downstream, senza copiare i dati nel flusso di dati downstream. Poiché le entità collegate sono solo puntatori a
entità create in altri flussi di dati, vengono mantenute aggiornate dalla logica di aggiornamento del flusso di dati
upstream. Se entrambi i flussi di dati si trovano nella stessa area di lavoro o nello stesso ambiente, tali flussi di
dati verranno aggiornati insieme per mantenere sempre aggiornati i dati in entrambi i flussi di dati. Altre
informazioni: Collegare entità tra flussi di dati

Separazione della trasformazione dei dati dall'utilizzo dei dati


Quando si usa l'output di un flusso di dati in altri flussi di dati o set di dati, è possibile creare un'astrazione tra il
livello di trasformazione dei dati e il resto del modello di dati. Questa astrazione è importante perché crea
un'architettura multi-ruolo, in cui il cliente Power Query può concentrarsi sulla compilazione delle
trasformazioni dei dati e i modellatori di dati possono concentrarsi sulla modellazione dei dati.

Passaggi successivi
Gli articoli seguenti forniscono altri dettagli sugli articoli correlati.
Creazione e uso di flussi di dati in Power BI
Collegare entità tra flussi di dati in Power BI
Connettersi ai dati creati da flussi di dati di Power BI in Power BI Desktop (versione beta)
Creare e usare flussi di dati in Power Platform
Collegare entità tra flussi di dati (Power Platform)
Creazione di entità calcolate nei flussi di dati
07/12/2021 • 4 minutes to read

È possibile eseguire calcoli in archivio quando si usano i flussi di dati con una sottoscrizione di Power BI
Premium. In questo modo è possibile eseguire calcoli sui flussi di dati esistenti e restituire risultati che
consentono di concentrarsi sulla creazione e sull'analisi dei report.

Per eseguire i calcoli in archivio, è prima di tutto necessario creare il flusso di dati e inserire i dati nell'archivio
del flusso di dati di Power BI. Dopo aver creato un flusso di dati che contiene dati, è possibile creare entità
calcolate, ovvero entità che eseguono calcoli nell'archiviazione.
Ci sono due modi per connettere i dati del flusso di dati a Power BI:
Usando la creazione self-service di un flusso di dati
Usando un flusso di dati esterno
Le sezioni seguenti descrivono come creare entità calcolate sui dati del flusso di dati.

Come creare entità calcolate


Dopo aver creato un flusso di dati con un elenco di entità, è possibile eseguire calcoli su tali entità.
Nello strumento di creazione del flusso di dati nel Power BI selezionare Modifica entità. Fare quindi clic con il
pulsante destro del mouse sull'entità che si vuole usare come base per l'entità calcolata e su cui si vogliono
eseguire calcoli. Scegliere Riferimento dal menu di scelta rapida.
Perché l'entità sia idonea come entità calcolata, è necessario selezionare Abilita caricamento, come illustrato
nell'immagine seguente. Fare clic con il pulsante destro del mouse sull'entità per visualizzare questo menu di
scelta rapida.
Selezionando Abilita caricamento si crea una nuova entità la cui origine è l'entità a cui si fa riferimento. L'icona
cambia in icona calcolata, come illustrato nell'immagine seguente.

Qualsiasi trasformazione eseguita su questa entità appena creata verrà eseguita sui dati già presenti nell'Power
BI del flusso di dati. Ciò significa che la query non verrà eseguita sull'origine dati esterna da cui sono stati
importati i dati(ad esempio, il database SQL da cui sono stati estratti i dati).
Casi d'uso di esempio
Quale tipo di trasformazioni è possibile eseguire con le entità calcolate? Qualsiasi trasformazione specificata in
genere tramite l'interfaccia utente di trasformazione in Power BI o nell'editor M è supportata durante
l'esecuzione del calcolo in archiviazione.
Si consideri l'esempio seguente. Si dispone di un'entità Account che contiene i dati non elaborati per tutti i clienti
della sottoscrizione di Dynamics 365. Sono inoltre disponibili dati non elaborati di ServiceCalls dal centro
servizi, con i dati delle chiamate di supporto eseguite dai diversi account in ogni giorno dell'anno.
Imagine si vuole arricchire l'entità Account con i dati di ServiceCalls.
Prima di tutto, è necessario aggregare i dati di ServiceCalls per calcolare il numero di chiamate al supporto
tecnico per ogni account nell'anno precedente.

Successivamente, si unirà l'entità Account all'entità ServiceCallsAggregated per calcolare la tabella Account
arricchita.

È quindi possibile visualizzare i risultati, visualizzati come EnrichedAccount nell'immagine seguente.


A questo punto, la trasformazione viene eseguita sui dati nel flusso di dati che si trova nella sottoscrizione Power
BI Premium, non — sui dati di origine.

Considerazioni e limitazioni
È importante notare che se si rimuove l'area di lavoro Power BI Premium capacità, il flusso di dati associato non
verrà più aggiornato.
Quando si lavora con flussi di dati creati in modo specifico nell'account Azure Data Lake Archiviazione di
un'organizzazione, le entità collegate e le entità calcolate funzionano correttamente solo quando le entità
risiedono nello stesso account di archiviazione. Altre informazioni: Connessione Azure Data Lake Archiviazione
Gen2 per l'archiviazione del flusso di dati
Le entità collegate sono disponibili solo per i flussi di dati creati in Power BI e Power Apps. Quando si eseguono
calcoli su dati uniti da origini dati locali e cloud, è consigliabile creare una nuova entità per eseguire tali calcoli.
Ciò offre un'esperienza migliore rispetto all'uso di un'entità esistente per i calcoli, ad esempio un'entità che
esegue anche query sui dati da entrambe le origini ed esegue trasformazioni nell'archiviazione.

Vedi anche
Scenari di entità calcolate e casi d'uso
Questo articolo descrive le entità calcolate e i flussi di dati. Di seguito sono riportati altri articoli che potrebbero
essere utili:
Preparazione dei dati self-service in Power BI
Uso dell'aggiornamento incrementale con i flussi di dati
Connessione alle origini dati per i flussi di dati
Collegare entità tra flussi di dati
I collegamenti seguenti forniscono informazioni aggiuntive sui flussi di dati in Power BI e altre risorse:
Creare e usare flussi di dati in Power BI
Uso di flussi di dati con origini dati locali
Risorse per sviluppatori per i flussi di dati Power BI
Configurare le impostazioni del flusso di dati dell'area di lavoro (anteprima)
Aggiungere una cartella CDM a Power BI come flusso di dati (anteprima)
Connettere Azure Data Lake Storage Gen2 per l'archiviazione dei flussi di dati (anteprima)
Per altre informazioni su Power Query e sull'aggiornamento pianificato, è possibile leggere questi articoli:
Panoramica delle query in Power BI Desktop
Configurazione dell'aggiornamento pianificato
Per altre informazioni sui Common Data Model, è possibile leggere l'articolo di panoramica:
Common Data Model (CDM)
Collegare entità tra flussi di dati
07/12/2021 • 6 minutes to read

Con i flussi di dati in Microsoft Power Platform, è possibile avere una singola origine di archiviazione dati
aziendale in cui i business analyst possono preparare e gestire i dati una sola volta e quindi riutilizzarli tra app di
analisi diverse nell'organizzazione.
Quando si collegano entità tra flussi di dati, è possibile riutilizzare le entità che sono già state inserite, pulite e
trasformate da flussi di dati di proprietà di altri utenti, senza la necessità di gestire i dati. Le entità collegate
puntano semplicemente alle entità in altri flussi di dati e non copiano o duplicano i dati.
Le entità collegate sono di sola lettura, quindi se si vogliono creare trasformazioni per un'entità collegata, è
necessario creare una nuova entità calcolata con un riferimento all'entità collegata.

Disponibilità delle entità collegate


La disponibilità delle entità collegate varia a seconda che si utilizzino flussi di dati Power BI o Power Apps. Le
sezioni seguenti descrivono i dettagli per ognuno di essi.
Entità collegate in Power BI
Per essere aggiornate, le entità collegate richiedono una Power BI Premium sottoscrizione. Le entità collegate
sono disponibili in qualsiasi flusso di dati in un'area di lavoro ospitata Power BI Premium capacità. Non sono
previsti limiti per il flusso di dati di origine.
Le entità collegate funzionano correttamente solo nelle nuove Power BI di lavoro e, analogamente, tutti i flussi di
dati collegati devono trovarsi in nuove aree di lavoro. Altre informazioni: Creare le nuove aree di lavoro in Power
BI

NOTE
Le entità variano a seconda che si tratta di entità standard o di entità calcolate. Le entità standard (spesso denominate
semplicemente entità) eseguono query su un'origine dati esterna, ad esempio un database SQL. Le entità calcolate
richiedono Premium di archiviazione Power BI ed eseguire le trasformazioni sui dati già presenti Power BI archiviazione.
Se il flusso di dati non si trova in un'area di lavoro della capacità di Premium, è comunque possibile fare riferimento a una
singola query o combinare due o più query, purché le trasformazioni non siano definite come trasformazioni — —
nell'archiviazione. Tali riferimenti vengono considerati entità standard. A tale scopo, disattivare l'opzione Abilita
caricamento per le query a cui si fa riferimento per impedire che i dati vengano materializzati e inseriti nell'archiviazione.
Da qui è possibile fare riferimento a tali query Enable load = false e impostare Enable load (Abilita caricamento) su On
solo per le query risultanti da materializzare.

Entità collegate in Power Apps


Le entità collegate sono disponibili sia Power Apps piano 1 che nel piano 2.

Come collegare entità tra flussi di dati


Esistono diversi modi per collegare le entità tra i flussi di dati. Per collegare le entità in Power BI, è necessario
accedere con le credenziali Power BI utente.
È possibile selezionare Ottieni dati dallo strumento di creazione del flusso di dati, che consente di visualizzare
una finestra di dialogo per la selezione delle categorie e di ogni origine dati. Selezionare quindi il connettore
Power Platform flussi di dati.
Viene visualizzata una finestra di connessione per la connessione dati selezionata. Se sono richieste credenziali,
sarà necessario specificarle.
In Power BI è possibile selezionare Aggiungi entità collegate dallo strumento di creazione del flusso di dati.

È anche possibile selezionare Aggiungi entità collegate dal menu Aggiungi entità nel Power BI servizio.
Viene visualizzata una finestra Strumento di navigazione a cui è possibile scegliere un set di entità a cui è
possibile connettersi. La finestra visualizza le entità per cui si hanno le autorizzazioni per tutte le aree di lavoro e
gli ambienti dell'organizzazione.
Dopo aver selezionato le entità collegate, queste vengono visualizzate nell'elenco delle entità per il flusso di dati
nello strumento di creazione, con un'icona speciale che le identifica come entità collegate.
È anche possibile visualizzare il flusso di dati di origine dalle impostazioni del flusso di dati dell'entità collegata.

Logica di aggiornamento delle entità collegate


La logica di aggiornamento delle entità collegate varia leggermente a seconda che si Power BI o Power Apps,
come descritto nelle sezioni seguenti.
Aggiornare la logica in Power BI
La logica di aggiornamento predefinita delle entità collegate dipende dal fatto che il flusso di dati di origine si
trova nello stesso Power BI lavoro del flusso di dati di destinazione. Le sezioni seguenti descrivono il
comportamento di entrambi gli scenari.
Collegamenti tra aree di lavoro: l'aggiornamento per i collegamenti da entità in aree di lavoro
diverse si comporta come un collegamento a un'origine dati esterna. Quando il flusso di dati viene
aggiornato, accetta i dati più recenti per l'entità dal flusso di dati di origine. Se il flusso di dati di origine
viene aggiornato, non influisce automaticamente sui dati nel flusso di dati di destinazione.
Collegamenti nella stessa area di lavoro: quando si verifica l'aggiornamento dei dati per un flusso di
dati di origine, tale evento attiva automaticamente un processo di aggiornamento per le entità dipendenti
in tutti i flussi di dati di destinazione nella stessa area di lavoro, incluse le entità calcolate basate su di
esse. Tutte le altre entità nel flusso di dati di destinazione vengono aggiornate in base alla pianificazione
del flusso di dati. Le entità che dipendono da più di un'origine aggiornano i dati ogni volta che una delle
relative origini viene aggiornata correttamente.

NOTE
Viene eseguito il commit dell'intero processo di aggiornamento contemporaneamente. Per questo problema, se
l'aggiornamento dei dati per il flusso di dati di destinazione ha esito negativo, anche l'aggiornamento dei dati per il
flusso di dati di origine ha esito negativo.

Aggiornare la logica in Power Apps


La logica di aggiornamento delle entità collegate in Power Apps si comporta come un'origine dati esterna.
Quando il flusso di dati viene aggiornato, accetta i dati più recenti per l'entità dal flusso di dati di origine. Se il
flusso di dati di origine viene aggiornato, non influisce automaticamente sui dati nel flusso di dati di
destinazione.
Autorizzazioni per la visualizzazione di report dai flussi di dati
Quando si crea un report Power BI che include dati basati su un flusso di dati, è possibile visualizzare tutte le
entità collegate solo quando si ha accesso al flusso di dati di origine.

Limitazioni e considerazioni
Esistono alcune limitazioni da tenere presenti quando si lavora con le entità collegate:
Un altro flusso di dati può fare riferimento a un'entità. Tale entità di riferimento può anche fare riferimento ad
altri flussi di dati e così via, fino a 5 volte.
Le dipendenze cicliche delle entità collegate non sono consentite.
Il flusso di dati deve essere in una nuova area Power BI lavoro o in un Power Apps di lavoro.
Un'entità collegata non può essere unita a un'entità normale che ottiene i dati da un'origine dati locale.
Quando si usano parametri M per risolvere le entità collegate, se il flusso di dati di origine viene aggiornato,
non influisce automaticamente sui dati nel flusso di dati di destinazione.

Passaggi successivi
Gli articoli seguenti possono essere utili quando si creano o si lavora con i flussi di dati:
Preparazione dei dati self-service in Power BI
Uso dell'aggiornamento incrementale con i flussi di dati
Creazione di entità calcolate nei flussi di dati
Connessione alle origini dati per i flussi di dati
Gli articoli seguenti forniscono altre informazioni sui flussi di dati e sui Power BI:
Creare e usare flussi di dati in Power BI
Uso delle entità calcolate in Power BI Premium
Uso di flussi di dati con origini dati locali
Risorse per sviluppatori per i flussi di dati Power BI
Per altre informazioni su Power Query e sull'aggiornamento pianificato, è possibile leggere questi articoli:
Panoramica delle query in Power BI Desktop
Configurazione dell'aggiornamento pianificato
Per altre informazioni sui Common Data Model, è possibile leggere l'articolo di panoramica:
Panoramica del modello CDM (Common Data Model)
Connettere Azure Data Lake Storage Gen2 per
l'archiviazione dei flussi di dati
07/12/2021 • 6 minutes to read

È possibile configurare i flussi di dati per archiviare i dati nell'account Azure Data Lake Archiviazione Gen2
dell'organizzazione. Questo articolo descrive i passaggi generali necessari a tale scopo, oltre a presentare linee
guida e procedure consigliate.

IMPORTANT
La funzionalità Flusso di dati con tabelle analitiche usa il servizio Azure Synapse Link for Dataverse, che può offrire diversi
livelli di conformità, privacy, sicurezza e impegno per la posizione dei dati. Per altre informazioni su Azure Synapse per
Dataverse, vedere l'articolo del blog.

La configurazione dei flussi di dati per archiviare le definizioni e i file di dati nell'data lake, ad esempio:
Azure Data Lake Archiviazione Gen2 offre una struttura di archiviazione estremamente scalabile per i dati.
I dati del flusso di dati e i file di definizione possono essere sfruttati dagli sviluppatori del reparto IT per
sfruttare i servizi di intelligenza artificiale e dati di Azure, come illustrato negli esempi GitHub dei servizi dati
di Azure.
Consente agli sviluppatori dell'organizzazione di integrare i dati dei flussi di dati in applicazioni interne e
soluzioni line-of-business, usando risorse per sviluppatori per flussi di dati e Azure.

Requisiti
Per usare Azure Data Lake Storage Gen2 per i flussi di dati, è necessario quanto segue:
Un Power Apps ambiente. Qualsiasi Power Apps consente di creare flussi di dati con Azure Data Lake
Archiviazione Gen2 come destinazione. È necessario essere autorizzati nell'ambiente come creatore.
Una sottoscrizione di Azure. È necessaria una sottoscrizione di Azure per usare Azure Data Lake Archiviazione
Gen2.
Un gruppo di risorse. Usare un gruppo di risorse già esistente o crearne uno nuovo.
Un account di archiviazione di Azure. Per l'account di archiviazione deve essere abilitata la funzionalità Data
Lake Archiviazione Gen2.

TIP
Se non si ha una sottoscrizione di Azure, creare un account di valutazione gratuito prima di iniziare.

Preparare Azure Data Lake Archiviazione Gen2 per Power Platform di


dati
Prima di configurare l'ambiente con un account Azure Data Lake Archiviazione Gen2, è necessario creare e
configurare un account di archiviazione. Ecco i requisiti per i flussi Power Platform dati:
1. L'account di archiviazione deve essere creato nello stesso tenant Azure Active Directory tenant del Power
Apps tenant.
2. È consigliabile creare l'account di archiviazione nella stessa area Power Apps ambiente in cui si prevede di
usarlo. Per determinare dove si trova Power Apps ambiente, contattare l'amministratore dell'ambiente.
3. Per l'account di archiviazione deve essere abilitata la funzionalità Spazio dei nomi gerarchico.
4. È necessario disporre di un ruolo Proprietario nell'account di archiviazione.
Le sezioni seguenti illustrano i passaggi necessari per configurare l'account Azure Data Lake Archiviazione Gen2.

Creare l'account di archiviazione


Seguire la procedura descritta in Creare un account di archiviazione di Azure Data Lake Archiviazione Gen2.
1. Assicurarsi di selezionare la stessa area dell'ambiente e impostare l'archiviazione su StorageV2 (utilizzo
generico v2).
2. Assicurarsi di abilitare la funzionalità dello spazio dei nomi gerarchico.
3. È consigliabile impostare l'impostazione di replica su Archiviazione con ridondanza geografica e accesso in
lettura (RA-GRS).

Connessione Azure Data Lake Archiviazione Gen2 per Power Apps


Dopo aver configurato l'account Azure Data Lake Archiviazione Gen2 nel portale di Azure, è possibile
connetterlo a un flusso di dati specifico o a un ambiente Power Apps dati. La connessione del lake a un ambiente
consente ad altri autori e amministratori dell'ambiente di creare flussi di dati che archiviano i dati nel lake
dell'organizzazione.
Per connettere l'account Azure Data Lake Archiviazione Gen2 al flusso di dati, seguire questa procedura:
1. Accedere a Power Appse verificare l'ambiente in cui si è in uso. Il commutatore di ambiente si trova sul
lato destro dell'intestazione.
2. Nel riquadro di spostamento sinistro selezionare la freccia giù accanto a Dati .

3. Nell'elenco visualizzato selezionare Flussi di dati e quindi sulla barra dei comandi selezionare Nuovo
flusso di dati .
4. Selezionare le tabelle analitiche desiderate. Queste tabelle indicano i dati da archiviare nell'account Azure
Data Lake Store Gen2 dell'organizzazione.

Selezionare l'account di archiviazione da usare per l'archiviazione del


flusso di dati
Se un account di archiviazione non è ancora stato associato all'ambiente, viene visualizzata la finestra di dialogo
Collega a data lake archiviazione. È necessario accedere e trovare il data lake creato nei passaggi precedenti. In
questo esempio non viene data lake all'ambiente e quindi viene richiesto di aggiungerne uno.
1. Selezionare l'account di archiviazione.
Viene visualizzata la schermata Seleziona Archiviazione account.
2. Selezionare l'ID sottoscrizione dell'account di archiviazione.
3. Selezionare il nome del gruppo di risorse in cui è stato creato l'account di archiviazione.
4. Immettere il nome Archiviazione account.
5. Selezionare Save (Salva).
Al termine di questi passaggi, l'account Azure Data Lake Archiviazione Gen2 viene connesso ai flussi di dati
Power Platform ed è possibile continuare a creare un flusso di dati.

Considerazioni e limitazioni
Quando si usa l'archiviazione dei flussi di dati è necessario tenere presenti alcune considerazioni e limitazioni:
Il collegamento di un account Azure Data Lake Store Gen2 per l'archiviazione del flusso di dati non è
supportato nell'ambiente predefinito.
Dopo aver configurato un percorso di archiviazione del flusso di dati per un flusso di dati, non può essere
modificato.
Per impostazione predefinita, qualsiasi membro dell'ambiente può accedere ai dati del flusso di dati usando
Power Platform Connettore flussi di dati. Tuttavia, solo i proprietari di un flusso di dati possono accedere ai
file direttamente in Azure Data Lake Archiviazione Gen2. Per autorizzare più utenti ad accedere ai dati dei
flussi di dati direttamente nel lake, è necessario autorizzarli nella cartella CDM del flusso di dati nel data lake
o nel data lake stesso.
Quando un flusso di dati viene eliminato, viene eliminata anche la relativa cartella CDM nel lake.

IMPORTANT
Non è consigliabile modificare i file creati dai flussi di dati nel lake dell'organizzazione o aggiungere file alla cartella CDM
di un flusso di dati. La modifica dei file potrebbe danneggiare i flussi di dati o modificarne il comportamento e non è
supportata. Power Platform flussi di dati concede solo l'accesso in lettura ai file creati nel lake. Se si autorizzano altri utenti
o servizi al file system usato Power Platform flussi di dati, concedere loro solo l'accesso in lettura ai file o alle cartelle in tale
file system.

Informativa sulla privacy


Abilitando la creazione di flussi di dati con tabelle analitiche nell'organizzazione, tramite il servizio Azure
Synapse Link for Dataverse, i dettagli sull'account di archiviazione di Azure Data Lake, ad esempio il nome
dell'account di archiviazione, verranno inviati e archiviati nel servizio collegamento Azure Synapse per
dataverse, che attualmente si trova al di fuori del limite di conformità di PowerApps e può impiegare misure di
privacy e sicurezza minori o diverse rispetto a quelle in genere in PowerApps. Si noti che è possibile rimuovere
l'associazione data lake in qualsiasi momento per interrompere l'uso di questa funzionalità e i dettagli
dell'account di archiviazione di Azure Data Lake verranno rimossi dal servizio Azure Synapse Link for Dataverse.
Altre informazioni su Azure Synapse per Dataverse sono disponibili in questo articolo.

Domande frequenti
Cosa succede se in precedenza sono stati creati flussi di dati in Azure Data Lake Archiviazione Gen2
dell'organizzazione e si vuole modificare la posizione di archiviazione?
Non è possibile modificare il percorso di archiviazione di un flusso di dati dopo la creazione.
Quando è possibile modificare il percorso di archiviazione del flusso di dati di un ambiente?
La modifica del percorso di archiviazione del flusso di dati dell'ambiente non è attualmente supportata.

Passaggi successivi
Questo articolo ha fornito indicazioni su come connettere un account Azure Data Lake Archiviazione Gen2 per
l'archiviazione dei flussi di dati.
Per altre informazioni sui flussi di dati, Common Data Model e Azure Data Lake Archiviazione Gen2, vedere gli
articoli seguenti:
Preparazione dei dati self-service con flussi di dati
Creazione e uso di flussi di dati in Power Apps
Aggiungere dati a una tabella in Microsoft Dataverse
Per altre informazioni sull'archiviazione di Azure, vedere questo articolo:
Guida alla sicurezza di Archiviazione di Azure
Per altre informazioni sul Common Data Model, vedere gli articoli seguenti:
Panoramica del modello CDM (Common Data Model)
Common Data Model cartelle
Definizione del file del modello CDM
È possibile porre domande nellaPower Apps Community .
Qual è la struttura di archiviazione per i flussi di dati
analitici?
07/12/2021 • 4 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

I flussi di dati analitici archiviano sia i dati che i metadati in Azure Data Lake Archiviazione. I flussi di dati
sfruttano una struttura standard per archiviare e descrivere i dati creati nel lake, denominato Common Data
Model cartelle. In questo articolo si apprenderanno altre informazioni sullo standard di archiviazione che i flussi
di dati usano in background.

Archiviazione una struttura per un flusso di dati analitici


Se il flusso di dati è standard,i dati vengono archiviati in Dataverse. Dataverse è simile a un sistema di database.
ha il concetto di tabelle, viste e così via. Dataverse è un'opzione di archiviazione dei dati strutturata usata dai
flussi di dati standard.
Tuttavia, quando il flusso di dati è analitico,i dati vengono archiviati in Azure Data Lake Archiviazione. I dati e i
metadati di un flusso di dati vengono archiviati in una Common Data Model dati. Poiché in un account di
archiviazione possono essere archiviati più flussi di dati, è stata introdotta una gerarchia di cartelle e
sottocartelle per facilitare l'organizzazione dei dati. A seconda del prodotto in cui è stato creato il flusso di dati,
le cartelle e le sottocartelle possono rappresentare aree di lavoro (o ambienti) e quindi la cartella Common Data
Model dati. All'interno della Common Data Model, vengono archiviati sia lo schema che i dati delle entità del
flusso di dati. Questa struttura segue gli standard definiti per Common Data Model.
Qual è la struttura Common Data Model di archiviazione?
Common Data Model è una struttura di metadati definita per garantire conformità e coerenza per l'uso dei dati
in più piattaforme. Common Data Model non è l'archiviazione dei dati, ma il modo in cui i dati vengono
archiviati e definiti.
Common Data Model cartelle definiscono come archiviare lo schema di un'entità e i relativi dati. In Azure Data
Lake Archiviazione i dati sono organizzati in cartelle. Le cartelle possono rappresentare un'area di lavoro o un
ambiente. In queste cartelle vengono create sottocartelle per ogni flusso di dati.

Contenuto di una cartella del flusso di dati


Ogni cartella del flusso di dati contiene una sottocartella per ogni entità e un file di metadati denominato
model.json .
File di metadati: model.json
Il model.json file è la definizione dei metadati del flusso di dati. Questo è l'unico file che contiene tutti i metadati
del flusso di dati. Include un elenco di entità, le colonne e i relativi tipi di dati in ogni entità, la relazione tra entità
e così via. È possibile esportare facilmente questo file da un flusso di dati, anche se non si ha accesso alla
Common Data Model di cartelle.

È possibile usare questo file JSON per eseguire la migrazione (o importare) il flusso di dati in un'altra area di
lavoro o ambiente.

Per informazioni esattamente sul file di metadati model.json incluso, passare al file di metadati (model.json)
perCommon Data Model .
File di dati
Oltre al file di metadati, la cartella del flusso di dati include altre sottocartelle. Un flusso di dati archivia i dati per
ogni entità in una sottocartella con il nome dell'entità. I dati per un'entità possono essere suddivisi in più
partizioni di dati, archiviati in formato CSV.

Come visualizzare o accedere Common Data Model cartelle


Se si usano flussi di dati che usano l'archiviazione fornita dal prodotto in cui sono stati creati, non sarà possibile
accedere direttamente a tali cartelle. In questi casi, il recupero dei dati dai flussi di dati richiede l'uso del
connettore di flussi di dati Microsoft Power Platform disponibile nei prodotti Power BI service, Power Apps e
Dynamics 35 Customer Insights o in Power BI Desktop.

Per informazioni sul funzionamento dei flussi di dati e dell'integrazione interna di Data Lake Archiviazione,
vedere Flussi di dati e Integrazione di Azure Data Lake (anteprima).
Se l'organizzazione ha abilitato i flussi di dati per sfruttare il proprio account Data Lake Archiviazione ed è stata
selezionata come destinazione di caricamento per i flussi di dati, è comunque possibile ottenere dati dal flusso di
dati usando il connettore del flusso di dati Power Platform, come accennato in precedenza. Tuttavia, è anche
possibile accedere alla cartella Common Data Model del flusso di dati direttamente attraverso il lake, anche
all'esterno Power Platform strumenti e servizi. L'accesso al lake è possibile tramite portale di Azure, Microsoft
Azure Storage Explorer o qualsiasi altro servizio o esperienza che supporti Azure Data Lake Archiviazione. Altre
informazioni: Connessione Azure Data Lake Archiviazione Gen2 per l'archiviazione dei flussi di dati

Passaggi successivi
Usare il Common Data Model per ottimizzare Azure Data Lake Archiviazione Gen2
File di metadati (model.json) per l'Common Data Model
Aggiungere una cartella CDM a Power BI come flusso di dati (anteprima)
Connettere Azure Data Lake Storage Gen2 per l'archiviazione dei flussi di dati
Flussi di dati e integrazione di Azure Data Lake (anteprima)
Configurare le impostazioni del flusso di dati dell'area di lavoro (anteprima)
Opzioni di archiviazione dei flussi di dati
07/12/2021 • 3 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

I flussi di dati standard caricano sempre i dati nelle tabelle Dataverse in un ambiente. I flussi di dati analitici
caricano sempre i dati negli account Archiviazione Azure Data Lake. Per entrambi i tipi di flusso di dati, non è
necessario effettuare il provisioning o gestire l'archiviazione. L'archiviazione del flusso di dati, per impostazione
predefinita, viene fornita e gestita dai prodotti in cui viene creato il flusso di dati.
I flussi di dati analitici consentono un'opzione di archiviazione aggiuntiva: l'account azure data lake
Archiviazione dell'organizzazione. Questa opzione consente l'accesso ai dati creati da un flusso di dati
direttamente tramite le interfacce Archiviazione Azure Data Lake. Fornire un account di archiviazione
personalizzato per i flussi di dati analitici consente ad altre applicazioni di Azure o line-of-business di sfruttare i
dati connettendosi direttamente al lake.

Flussi di dati che usano l'archiviazione incorporata


Per impostazione predefinita, i flussi di dati analitici useranno il data lake Archiviazione; ad esempio quando si
crea un flusso di dati in Power BI o Power Apps. L'accesso all'output di questo tipo di flusso di dati è possibile
solo tramite il connettore Microsoft Power Platform flussi di dati in Power BI Desktop o da altri flussi di dati.

Flussi di dati che usano l'archiviazione fornita dal cliente


Prima di creare un flusso di dati che usa l'account Data Lake Archiviazione dell'organizzazione, è necessario
collegare l'ambiente o l'area di lavoro in cui è stato creato il flusso di dati all'account Archiviazione Data Lake. A
seconda del flusso di dati del prodotto in uso (flussi di dati Power BI o Power Platform), le impostazioni per la
connessione a una sottoscrizione di Data Lake Archiviazione esterna sono collegate in posizioni diverse.
Collegamento di Power BI all'istanza di Azure Data Lake dell'organizzazione Archiviazione
Per configurare Power BI flussi di dati per archiviare i dati nel Data Lake Archiviazione dell'organizzazione, è
necessario seguire la procedura descritta in Connessione Azure Data Lake Archiviazione Gen2 per
l'archiviazione dei flussi di dati nel portale di amministrazione di Power BI.

Collegamento di un Power Platform ambiente a Azure Data Lake dell'organizzazione Archiviazione


Per configurare i flussi di dati creati in Power Apps per archiviare i dati in Azure Data Lake Archiviazione
dell'organizzazione, seguire la procedura descritta in Connessione Azure Data Lake Archiviazione Gen2 per
l'archiviazione dei flussi di dati in Power Apps.
Limitazioni note
Dopo la creazione di un flusso di dati, la relativa posizione di archiviazione non può essere modificata.
Le funzionalità delle entità collegate e calcolate sono disponibili solo quando entrambi i flussi di dati sono
nello stesso account di archiviazione.

Motore di calcolo avanzato


In Power BI, oltre al motore del flusso di dati standard, è disponibile un motore di calcolo avanzato per i flussi di
dati creati nelle aree di lavoro Power BI Premium dati. È possibile configurare questa impostazione nel portale
Power BI di amministrazione, nelle impostazioni Premium capacità. Il motore di calcolo avanzato è disponibile
nelle capacità Premium P1 o A3 e versioni successive. Il motore di calcolo avanzato riduce il tempo di
aggiornamento necessario per i passaggi di estrazione, trasformazione, caricamento (ETL) a esecuzione lunga su
entità calcolate, ad esempio join, distinct, filtri e raggruppamenti per. Offre anche la possibilità di eseguire
DirectQuery sulle entità del set Power BI set di dati. Altre informazioni: Motore di calcolo avanzato

Passaggi successivi
Gli articoli seguenti forniscono altre informazioni utili.
Connessione Azure Data Lake Archiviazione Gen2 per l'archiviazione dei flussi di dati (Power BI flussi di dati)
Connessione Azure Data Lake Archiviazione Gen2 per l'archiviazione dei flussi di dati (Power Platform flussi
di dati)-->
Creazione di entità calcolate nei flussi di dati
Motore di calcolo avanzato
Informazioni sulle differenze tra flussi di dati standard e analitici
Scenari di entità calcolate e casi d'uso
07/12/2021 • 5 minutes to read

L'uso di entità calcolate in un flusso di dati offre vantaggi. Questo articolo descrive i casi d'uso per le entità
calcolate e descrive come funzionano in background.

Che cos'è un'entità calcolata?


Un'entità rappresenta l'output dei dati di una query creata in un flusso di dati, dopo l'aggiornamento del flusso
di dati. Rappresenta i dati di un'origine e, facoltativamente, le trasformazioni applicate. In alcuni casi, può essere
necessario creare nuove entità che sono una funzione di un'entità inserita in precedenza.
Sebbene sia possibile ripetere le query che hanno creato un'entità e applicarvi nuove trasformazioni, questo
approccio presenta svantaggi: i dati vengono inseriti due volte e il carico sull'origine dati è raddoppiato.
Le entità calcolate risolvono entrambi i problemi. Le entità calcolate sono simili ad altre entità in quanto
ottengono dati da un'origine ed è possibile applicare altre trasformazioni per crearle. Ma i dati provengono dal
flusso di dati di archiviazione usato e non dall'origine dati originale. In altri, sono stati creati in precedenza da un
flusso di dati e quindi riutilizzati.
Le entità calcolate possono essere create facendo riferimento a un'entità nello stesso flusso di dati o facendo
riferimento a un'entità creata in un flusso di dati diverso.

Perché usare un'entità calcolata?


L'esecuzione di tutti i passaggi di trasformazione in un'entità può essere lenta. Questo rallentamento dell'origine
dati può essere lento per molti motivi oppure potrebbe essere necessario replicare le trasformazioni eseguite in
due o — più query. Potrebbe essere vantaggioso inserire prima i dati dall'origine e quindi riutilizzarli in una o
più entità. In questi casi, è possibile scegliere di creare due entità: una che ottiene i dati dall'origine dati e un'altra
un'entità calcolata che applica trasformazioni aggiuntive ai dati già scritti nel data lake usato da un flusso di —
— dati. Ciò può migliorare le prestazioni e la riutilizzabilità dei dati, risparmiando tempo e risorse.
Ad esempio, se due entità condividono anche una parte della logica di trasformazione, senza un'entità calcolata
la trasformazione dovrà essere eseguita due volte.
Tuttavia, se si usa un'entità calcolata, la parte comune (condivisa) della trasformazione verrà elaborata una sola
volta e archiviata in Azure Data Lake Archiviazione. Le trasformazioni rimanenti verranno quindi elaborate
dall'output della trasformazione comune. In generale, questa elaborazione è molto più veloce.

Un'entità calcolata fornisce un'unica posizione come codice sorgente per la trasformazione e velocizza la
trasformazione perché deve essere eseguita una sola volta anziché più volte. Anche il carico sull'origine dati è
ridotto.

Scenario di esempio per l'uso di un'entità calcolata


Se si compila una tabella aggregata in Power BI per velocizzare il modello di dati, è possibile compilare la tabella
aggregata facendo riferimento alla tabella originale e applicando trasformazioni aggiuntive. Con questo
approccio non è necessario replicare la trasformazione dall'origine ,ovvero la parte della tabella originale.
Ad esempio, nella figura seguente viene illustrata un'entità Orders.
Usando un riferimento da questa entità, è possibile compilare un'entità calcolata.

Immagine che illustra come creare un'entità calcolata dall'entità Orders. Fare prima clic con il pulsante destro del
mouse sull'entità Orders nel riquadro Query, selezionare l'opzione Riferimento dal menu a discesa, che crea
l'entità calcolata, rinominata in Orders aggregated.
L'entità calcolata può avere altre trasformazioni. Ad esempio, è possibile usare Group By per aggregare i dati a
livello di cliente.

Ciò significa che l'entità Orders Aggregated oserà nuovamente i dati dall'entità Orders e non dall'origine dati.
Poiché alcune delle trasformazioni che devono essere eseguite sono già state eseguite nell'entità Orders, le
prestazioni sono migliori e la trasformazione dei dati è più veloce.

Entità calcolata in altri flussi di dati


È anche possibile creare un'entità calcolata in altri flussi di dati. Può essere creato ottenendo dati da un flusso di
dati con il connettore Microsoft Power Platform flusso di dati.

Image enfatizza il connettore Power Platform flussi di dati dalla finestra dell'origine dati choos di Power Query,
con una descrizione che indica che un'entità del flusso di dati può essere compilata in base ai dati di un'altra
entità del flusso di dati, che è già persistente nell'archiviazione.
Il concetto dell'entità calcolata è rendere persistente una tabella nell'archiviazione e altre tabelle da essa
derivate, in modo da ridurre il tempo di lettura dall'origine dati e condividere alcune delle trasformazioni
comuni. A tale scopo, è possibile ottenere dati da altri flussi di dati tramite il connettore del flusso di dati o fare
riferimento a un'altra query nello stesso flusso di dati.

Entità calcolata: con trasformazioni o senza?


Ora che le entità calcolate sono ottimali per migliorare le prestazioni della trasformazione dei dati, è
consigliabile chiedersi se le trasformazioni devono sempre essere rinviate all'entità calcolata o se devono essere
applicate all'entità di origine. In altri, i dati devono essere sempre inseriti in un'unica entità e quindi trasformati
in un'entità calcolata? Quali sono i vantaggi e i contro?
Caricare i dati senza trasformazione per i file di testo/CSV
Quando un'origine dati non supporta la funzionalità di ripiegamento delle query (ad esempio file di testo/CSV),
l'applicazione delle trasformazioni durante il recupero dei dati dall'origine, soprattutto se i volumi di dati sono di
grandi dimensioni, è molto vantaggioso. L'entità di origine deve caricare solo i dati dal file di testo/CSV senza
applicare alcuna trasformazione. Le entità calcolate possono quindi ottenere dati dall'entità di origine ed
eseguire la trasformazione sui dati inseriti.
Si potrebbe chiedere qual è il valore della creazione di un'entità di origine che inserisce solo i dati? Tale entità
può comunque essere utile, perché se i dati dell'origine vengono usati in più entità, riduce il carico sull'origine
dati. Inoltre, i dati possono ora essere riutilizzati da altri utenti e flussi di dati. Le entità calcolate sono
particolarmente utili negli scenari in cui il volume di dati è di grandi dimensioni o quando si accede a un'origine
dati tramite un gateway dati locale, perché riducono il traffico dal gateway e il carico sulle origini dati dietro di
esse.
Eseguire alcune delle trasformazioni comuni per una tabella SQL dati
Se l'origine dati supporta la funzionalità di ripiegamento delle query, è utile eseguire alcune delle trasformazioni
nell'entità di origine perché la query verrà ripiegata nell'origine dati e solo i dati trasformati verranno recuperati
da essa. In questo modo si migliorano le prestazioni complessive. Il set di trasformazioni che saranno comuni
nelle entità calcolate downstream deve essere applicato nell'entità di origine, in modo da poterle ripiegare
nell'origine. Altre trasformazioni che si applicano solo alle entità downstream devono essere eseguite in entità
calcolate.
Procedure consigliate per la progettazione e lo
sviluppo di flussi di dati complessi
07/12/2021 • 5 minutes to read

Se il flusso di dati in fase di sviluppo è sempre più grande e complesso, ecco alcune operazioni che è possibile
eseguire per migliorare la progettazione originale.

Suddividerlo in più flussi di dati


Non eseguire tutte le operazione in un flusso di dati. Non solo un singolo flusso di dati complesso rende più
lungo il processo di trasformazione dei dati, ma rende anche più difficile comprendere e riutilizzare il flusso di
dati. È possibile suddividere il flusso di dati in più flussi di dati separando le entità in flussi di dati diversi o
persino un'entità in più flussi di dati. È possibile usare il concetto di entità calcolata o collegata per compilare
parte della trasformazione in un flusso di dati e riutilizzarla in altri flussi di dati.

Suddividere i flussi di dati della trasformazione dei dati da flussi di dati


di staging/estrazione
La presenza di alcuni flussi di dati solo per l'estrazione di dati (ovvero i flussi di dati di staging)e altri solo per la
trasformazione dei dati è utile non solo per la creazione di un'architettura a più livelli, ma anche per ridurre la
complessità dei flussi di dati. Alcuni passaggi estraggono i dati dall'origine dati, ad esempio ottenere dati,
navigazione e modifiche al tipo di dati. Separando i flussi di dati di staging e i flussi di dati di trasformazione, i
flussi di dati sono più semplici da sviluppare.

Immagine che mostra i dati estratti da un'origine dati nei flussi di dati di staging, in cui le enities vengono
archiviate in Dataverse o In Azure Data Lake Storage, quindi i dati vengono spostati nei flussi di dati di
trasformazione in cui i dati vengono trasformati e convertiti nella struttura data warehouse e quindi i dati
vengono spostati nel set di dati.
Usare funzioni personalizzate
Le funzioni personalizzate sono utili negli scenari in cui è necessario eseguire un certo numero di passaggi per
diverse query provenienti da origini diverse. Le funzioni personalizzate possono essere sviluppate tramite
l'interfaccia grafica in editor di Power Query o usando uno script M. Le funzioni possono essere riutilizzate in un
flusso di dati in tutte le entità necessarie.
La presenza di una funzione personalizzata consente di avere una sola versione del codice sorgente, quindi non
è necessario duplicare il codice. Di conseguenza, la gestione della logica Power Query trasformazione e
dell'intero flusso di dati sarà molto più semplice. Per altre informazioni, vedere il post di blog seguente: Funzioni
personalizzate rese più semplici in Power BI Desktop.

Inserire query in cartelle


L'uso di cartelle per le query consente di raggruppare le query correlate. Quando si sviluppa il flusso di dati,
dedicare un po' più tempo per disporre le query in cartelle che hanno senso. Usando questo approccio, è
possibile trovare le query più facilmente in futuro e la gestione del codice sarà molto più semplice.

Usare entità calcolate


Le entità calcolate non solo rendono il flusso di dati più comprensibile, ma offrono anche prestazioni migliori.
Quando si usa un'entità calcolata, le altre entità a cui vi si fa riferimento stanno ottenendo dati da un'entità "già
elaborata e archiviata". La trasformazione sarà molto più semplice e veloce.

Sfruttare i vantaggi del motore di calcolo avanzato


Per i flussi di dati sviluppati Power BI portale di amministrazione, assicurarsi di usare il motore di calcolo
avanzato eseguendo prima join e trasformazioni di filtro in un'entità calcolata prima di eseguire altri tipi di
trasformazioni.

Suddividere molti passaggi in più query


È difficile tenere traccia di un numero elevato di passaggi in un'entità. È invece consigliabile suddividere un
numero elevato di passaggi in più entità. È possibile usare Abilita caricamento per altre query e disabilitarle
se si tratta di query intermedie e caricare solo l'entità finale tramite il flusso di dati. Quando sono presenti più
query con passaggi più piccoli in ognuna, è più semplice usare il diagramma delle dipendenze e tenere traccia di
ogni query per un'analisi più approfondita, anziché approfondire centinaia di passaggi in una query.

Aggiungere proprietà per query e passaggi


La documentazione è la chiave per avere codice facile da gestire. In Power Query, è possibile aggiungere
proprietà alle entità e anche ai passaggi. Il testo aggiunto nelle proprietà verrà visualizzato come descrizione
comando quando si passa il mouse su tale query o passaggio. Questa documentazione consente di mantenere il
modello in futuro. Con un'occhiata a una tabella o a un passaggio, è possibile comprendere cosa accade qui,
anziché ripassare e ricordare ciò che è stato fatto in questo passaggio.

Assicurarsi che la capacità si trova nella stessa area


I flussi di dati non supportano attualmente più paesi o aree geografiche. La capacità Premium deve essere nella
stessa area del tenant di Power BI.

Separare le origini locali dalle origini cloud


È consigliabile creare un flusso di dati separato per ogni tipo di origine, ad esempio locale, cloud, SQL Server,
Spark e Dynamics 365. La separazione dei flussi di dati per tipo di origine facilita la risoluzione rapida dei
problemi ed evita limiti interni quando si aggiornano i flussi di dati.

Separare i flussi di dati in base all'aggiornamento pianificato


necessario per le entità
Se si dispone di una tabella delle transazioni di vendita che viene aggiornata nel sistema di origine ogni ora e si
dispone di una tabella di mapping dei prodotti che viene aggiornata ogni settimana, suddividere questi due in
due flussi di dati con pianificazioni di aggiornamento dati diverse.

Evitare di pianificare l'aggiornamento per le entità collegate nella


stessa area di lavoro
Se si viene regolarmente bloccati dai flussi di dati che contengono entità collegate, potrebbe essere causato da
un flusso di dati dipendente corrispondente nella stessa area di lavoro bloccata durante l'aggiornamento del
flusso di dati. Tale blocco garantisce l'accuratezza delle transazioni e garantisce che entrambi i flussi di dati siano
aggiornati correttamente, ma può impedire la modifica.
Se si configura una pianificazione separata per il flusso di dati collegato, i flussi di dati possono essere
aggiornati inutilmente e impedire la modifica del flusso di dati. Esistono due raccomandazioni per evitare questo
problema:
Non impostare una pianificazione di aggiornamento per un flusso di dati collegato nella stessa area di lavoro
del flusso di dati di origine.
Se si vuole configurare una pianificazione dell'aggiornamento separatamente e si vuole evitare il
comportamento di blocco, spostare il flusso di dati in un'area di lavoro separata.
Procedure consigliate per il riutilizzo dei flussi di
dati tra ambienti e aree di lavoro
07/12/2021 • 4 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Questo articolo illustra una raccolta di procedure consigliate per riutilizzare i flussi di dati in modo efficace ed
efficiente. Leggere questo articolo per evitare problemi di progettazione e potenziali problemi di prestazioni
durante lo sviluppo di flussi di dati per il riutilizzo.

Separare i flussi di dati di trasformazione dei dati dai flussi di dati di


staging/estrazione
Se un flusso di dati esegue tutte le azioni, è difficile riutilizzare le entità in altri flussi di dati o per altri scopi. I
flussi di dati migliori da riutilizzare sono i flussi di dati che eno solo alcune azioni. La creazione di flussi di dati
specializzati in un'attività specifica è uno dei modi migliori per riutilizzarli. Se si dispone di un set di flussi di dati
da usare come flussi di dati di staging,l'unica azione da eseguire è estrarre i dati così come sono dal sistema di
origine. Questi flussi di dati possono essere riutilizzati in più altri flussi di dati.
Se si dispone di flussi di dati di trasformazione dei dati, è possibile suddividerli in flussi di dati che esercitino
trasformazioni comuni. Ogni flusso di dati può eseguire solo alcune azioni. Queste poche azioni per flusso di
dati assicurano che l'output di tale flusso di dati sia riutilizzabile da altri flussi di dati.
Immagine con dati estratti da un'origine dati in flussi di dati di staging, in cui le entità vengono archiviate in
Dataverse o Azure Data Lake Storage, i dati vengono spostati in flussi di dati di trasformazione in cui i dati
vengono trasformati e convertiti nella struttura data warehouse e quindi caricati in un set di dati Power BI.

Usare più aree di lavoro


Ogni area di lavoro (o ambiente) è disponibile solo per i membri di tale area di lavoro. Se si compilano tutti i
flussi di dati in un'unica area di lavoro, si riduce al minimo il riutilizzo dei flussi di dati. È possibile avere alcune
aree di lavoro generiche per i flussi di dati che elaborano entità a livello aziendale. È anche possibile avere
un'area di lavoro per i flussi di dati per elaborare le entità in più reparti. È anche possibile avere alcune aree di
lavoro per i flussi di dati da usare solo in reparti specifici.

Impostare i livelli di accesso corretti nelle aree di lavoro


Per concedere l'accesso ai flussi di dati in altre aree di lavoro per l'uso dell'output di un flusso di dati in un'area
di lavoro, è sufficiente concedere loro l'accesso Visualizza nell'area di lavoro. Per altre informazioni su altri ruoli
in un'area Power BI lavoro, passare a Ruoli nelle nuove aree di lavoro.

Approvazione del flusso di dati in Power BI


Possono essere presenti molti flussi di dati creati in un'organizzazione tenant e può essere difficile per gli utenti
sapere quale flusso di dati è più affidabile. Gli autori di un flusso di dati o gli utenti che hanno accesso in
modifica possono approvare il flusso di dati a tre livelli: nessuna approvazione, innalzamento di livello o
certificazione.
Questi livelli di approvazione consentono agli utenti di trovare flussi di dati affidabili in modo più semplice e
rapido. Il flusso di dati con un livello di approvazione superiore viene visualizzato per primo. L Power BI
amministratore può delegare ad altri utenti la possibilità di approvare i flussi di dati a livello certificato. Altre
informazioni: Endorsement - Promoting and certifying Power BI content (Approvazione - Promozione e Power BI
contenuto)

Separare le entità in più flussi di dati


È possibile avere più entità in un flusso di dati. Uno dei motivi per cui è possibile suddividere le entità in più
flussi di dati è quello appreso in precedenza in questo articolo sulla separazione dei flussi di dati di inserimento
e trasformazione dei dati. Un altro motivo utile per avere entità in più flussi di dati è quando si vuole una
pianificazione dell'aggiornamento diversa rispetto ad altre tabelle.
Nell'esempio illustrato nell'immagine seguente, la tabella sales deve essere aggiornata ogni quattro ore. La
tabella data deve essere aggiornata solo una volta al giorno per mantenere aggiornato il record di data corrente.
Una tabella di mapping dei prodotti deve essere aggiornata solo una volta alla settimana. Se tutte queste tabelle
sono presenti in un flusso di dati, è disponibile una sola opzione di aggiornamento per tutte. Tuttavia, se queste
tabelle vengono suddivise in più flussi di dati, è possibile pianificare l'aggiornamento di ogni flusso di dati
separatamente.

Candidati di tabella validi per le entità del flusso di dati


Quando si sviluppano soluzioni Power Query negli strumenti desktop, ci si potrebbe chiedere: quali di queste
tabelle sono candidati validi per lo spostamento in un flusso di dati? Le tabelle migliori da spostare nel flusso di
dati sono quelle che devono essere usate in più di una soluzione o in più ambienti o servizi. Ad esempio, la
tabella Date illustrata nell'immagine seguente deve essere usata in due file Power BI separati. Anziché duplicare
la tabella in ogni file, è possibile compilare la tabella in un flusso di dati come entità e riutilizzarla in tali Power BI
file.
Procedure consigliate per la creazione di un
modello dimensionale tramite flussi di dati
07/12/2021 • 5 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

La progettazione di un modello dimensionale è una delle attività più comuni che è possibile eseguire con un
flusso di dati. Questo articolo illustra alcune delle procedure consigliate per la creazione di un modello
dimensionale usando un flusso di dati.

Flussi di dati di staging


Uno dei punti chiave di qualsiasi sistema di integrazione dei dati è ridurre il numero di operazioni di lettura dal
sistema operativo di origine. Nell'architettura di integrazione dei dati tradizionale questa riduzione viene
eseguita creando un nuovo database denominato database di staging. Lo scopo del database di gestione
temporanea è caricare i dati così come sono dall'origine dati nel database di staging in base a una pianificazione
regolare.
Il resto dell'integrazione dei dati userà quindi il database di gestione temporanea come origine per ulteriori
trasformazioni e convertirlo nella struttura del modello dimensionale.
È consigliabile seguire lo stesso approccio usando i flussi di dati. Creare un set di flussi di dati responsabili del
semplice caricamento dei dati così come sono dal sistema di origine (e solo per le tabelle necessarie). Il risultato
viene quindi archiviato nella struttura di archiviazione del flusso di dati (Azure Data Lake Archiviazione o
Dataverse). Questa modifica garantisce che l'operazione di lettura dal sistema di origine sia minima.
Successivamente, è possibile creare altri flussi di dati che origineno i dati dai flussi di dati di staging. I vantaggi
di questo approccio includono:
Riduzione del numero di operazioni di lettura dal sistema di origine e riduzione del carico sul sistema di
origine.
Riduzione del carico sui gateway dati se viene usata un'origine dati locale.
Avere una copia intermedia dei dati a scopo di riconciliazione, nel caso in cui i dati del sistema di origine
cambino.
Rendere i flussi di dati della trasformazione indipendenti dall'origine.
Immagine che sottolinea i flussi di dati di staging e l'archiviazione di staging e mostra i dati a cui accede l'origine
dati dal flusso di dati di staging e le entità archiviate in Cadavers o Azure Data Lake Archiviazione. Le entità
vengono quindi visualizzate come trasformate insieme ad altri flussi di dati, che vengono quindi inviati come
query.

Flussi di dati di trasformazione


Dopo aver separato i flussi di dati di trasformazione dai flussi di dati di staging, la trasformazione sarà
indipendente dall'origine. Questa separazione è utile se si esegue la migrazione del sistema di origine a un
nuovo sistema. In questo caso è necessario solo modificare i flussi di dati di staging. È probabile che i flussi di
dati di trasformazione funzionino senza problemi, perché vengono provenienti solo dai flussi di dati di staging.
Questa separazione è utile anche nel caso in cui la connessione al sistema di origine sia lenta. Il flusso di dati
della trasformazione non dovrà attendere molto tempo per ottenere i record provenienti da una connessione
lenta dal sistema di origine. Il flusso di dati di staging ha già eseguito questa parte e i dati saranno pronti per il
livello di trasformazione.
Architettura a più livelli
Un'architettura a più livelli è un'architettura in cui si eseguono azioni in livelli separati. I flussi di dati di staging e
trasformazione possono essere due livelli di un'architettura di flussi di dati a più livelli. Il tentativo di eseguire
azioni nei livelli garantisce la manutenzione minima necessaria. Quando si vuole modificare un elemento, è
sufficiente modificarlo nel livello in cui si trova. Tutti gli altri livelli dovrebbero continuare a funzionare
correttamente.
L'immagine seguente illustra un'architettura a più livelli per i flussi di dati in cui le relative entità vengono quindi
usate nei set Power BI dati.

Usare un'entità calcolata il più possibile


Quando si usa il risultato di un flusso di dati in un altro flusso di dati, si usa il concetto di entità calcolata, ovvero
il recupero di dati da un'entità "già elaborata e archiviata". La stessa cosa può verificarsi all'interno di un flusso
di dati. Quando si fa riferimento a un'entità da un'altra entità, è possibile usare l'entità calcolata. Ciò è utile
quando si dispone di un set di trasformazioni che devono essere eseguite in più entità, denominate
trasformazioni comuni.

Nell'immagine precedente l'entità calcolata ottiene i dati direttamente dall'origine. Tuttavia, nell'architettura dei
flussi di dati di staging e trasformazione, è probabile che le entità calcolate siano provenienti dai flussi di dati di
staging.

Creare uno schema star


Il modello dimensionale migliore è un modello con schema a stella con dimensioni e tabelle dei fatti progettate
in modo da ridurre al minimo la quantità di tempo per eseguire query sui dati dal modello e semplifica la
comprensione per il visualizzatore dati.
Non è ideale portare i dati nello stesso layout del sistema operativo in un sistema BI. Le tabelle dati devono
essere rimodellate. Alcune tabelle devono assumere la forma di una tabella delle dimensioni, che mantiene le
informazioni descrittive. Alcune tabelle devono assumere la forma di una tabella dei fatti, per mantenere i dati
aggregabili. Il layout migliore per le tabelle dei fatti e le tabelle delle dimensioni da formare è uno schema star.
Altre informazioni: Comprendere lo schema star e l'importanza per Power BI

<a name="use -a-unique -key-value -for-dimensions">Usare un valore di chiave univoca per le dimensioni
Quando si compilano tabelle delle dimensioni, assicurarsi di avere una chiave per ognuna. Questa chiave
garantisce che non siano presenti relazioni molti-a-molti (o, in altre parole, "deboli") tra le dimensioni. È
possibile creare la chiave applicando una trasformazione per assicurarsi che una colonna o una combinazione di
colonne restituirà righe univoche nella dimensione. Tale combinazione di colonne può quindi essere
contrassegnata come chiave nell'entità nel flusso di dati.

Eseguire un aggiornamento incrementale per tabelle dei fatti di grandi dimensioni


Le tabelle dei fatti sono sempre le tabelle più grandi nel modello dimensionale. È consigliabile ridurre il numero
di righe trasferite per queste tabelle. Se si dispone di una tabella dei fatti di dimensioni molto grandi, assicurarsi
di usare l'aggiornamento incrementale per tale entità. È possibile eseguire un aggiornamento incrementale nel
set Power BI dati e anche nelle entità del flusso di dati.
È possibile usare l'aggiornamento incrementale per aggiornare solo una parte dei dati, la parte che è stata
modificata. Sono disponibili più opzioni per scegliere quale parte dei dati aggiornare e quale parte rendere
persistente. Altre informazioni: Uso dell'aggiornamento incrementale con Power BI di dati

Riferimento per la creazione di dimensioni e tabelle dei fatti


Nel sistema di origine è spesso presente una tabella utilizzata per la generazione di tabelle dei fatti e delle
dimensioni nel data warehouse. Queste tabelle sono candidati validi per le entità calcolate e anche per i flussi di
dati intermedi. La parte comune del processo, ad esempio la pulizia dei dati e la rimozione di righe e colonne
aggiuntive, — può essere eseguita una sola — volta. Utilizzando un riferimento dall'output di tali azioni, è
possibile produrre le tabelle delle dimensioni e dei fatti. Questo approccio userà l'entità calcolata per le
trasformazioni comuni.
Migliorare le prestazioni e la riutilizzabilità
separando l'inserimento dei dati dai flussi di dati di
trasformazione dei dati
07/12/2021 • 2 minutes to read

Una delle procedure consigliate per le implementazioni dei flussi di dati è la separazione delle responsabilità dei
flussi di dati in due livelli: inserimento dei dati e trasformazione dei dati. Questo modello è particolarmente utile
quando si gestiscono più query di origini dati più lente in un flusso di dati o più flussi di dati che esere query
sulle stesse origini dati. Invece di ottenere dati da un'origine dati lenta più volte per ogni query, il processo di
inserimento dei dati può essere eseguito una sola volta e la trasformazione può essere eseguita su tale
processo. Questo articolo illustra il processo.

Origine dati locale


In molti scenari, l'origine dati locale è un'origine dati lenta. Soprattutto considerando che il gateway esiste come
livello intermedio tra il flusso di dati e l'origine dati.

L'uso di flussi di dati analitici per l'inserimento dei dati riduce al minimo il processo di recuperare dati
dall'origine e si concentra sul caricamento dei dati in Azure Data Lake Archiviazione. Dopo l'archiviazione, è
possibile creare altri flussi di dati che sfruttano l'output del flusso di dati di inserimento. Il motore del flusso di
dati può leggere i dati ed eseguire le trasformazioni direttamente dal data lake, senza contattare l'origine dati o
il gateway originale.
Origine dati lenta
Lo stesso processo è valido quando un'origine dati è lenta. Alcune delle origini dati SaaS (Software as a Service)
vengono eseguite lentamente a causa delle limitazioni delle chiamate API.

Separazione dei flussi di dati di inserimento e trasformazione dei dati


La separazione tra l'inserimento e la trasformazione dei dati a due livelli è utile negli scenari in cui — l'origine —
dati è lenta. Consente di ridurre al minimo l'interazione con l'origine dati.
Questa separazione non è utile solo a causa del miglioramento delle prestazioni, ma anche per gli scenari in cui
è stata eseguita la migrazione di un sistema di origine dati legacy precedente a un nuovo sistema. In questi casi,
è necessario modificare solo i flussi di dati di inserimento dati. I flussi di dati della trasformazione dei dati
rimangono invariati per questo tipo di modifica.
Riutilizzo in altri strumenti e servizi
La separazione dei flussi di dati di inserimento dati dai flussi di dati di trasformazione dei dati è utile in molti
scenari. Un altro scenario del caso d'uso per questo modello è quando si vogliono usare questi dati in altri
strumenti e servizi. A questo scopo, è meglio usare flussi di dati analitici e usare il proprio data lake
Archiviazione come motore di archiviazione. Altre informazioni: Flussi di dati analitici

Ottimizzare il flusso di dati di inserimento dati


È consigliabile ottimizzare il flusso di dati di inserimento dei dati quando possibile. Ad esempio, se tutti i dati
dell'origine non sono necessari e l'origine dati supporta la funzionalità di folding delle query, è possibile filtrare i
dati e ottenere solo un subset obbligatorio. Per altre informazioni sul ripiegamento delle query, vedere Power
Query query folding.

Creare i flussi di dati di inserimento dati come flussi di dati analitici


Provare a creare flussi di dati di inserimento dati come flussi di dati analitici. Ciò consente in particolare ad altri
servizi e applicazioni di usare questi dati. In questo modo è anche più semplice per i flussi di dati della
trasformazione dei dati ottenere i dati dal flusso di dati di inserimento analitico. Per altre informazioni, vedere
Flussi di dati analitici.
Uso dell'output di Microsoft Power Platform di dati
da altri carichi di lavoro di dati di Azure
07/12/2021 • 2 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

A seconda dello spazio di archiviazione per l'output Microsoft Power Platform flussi di dati, è possibile usare tale
output in altri servizi di Azure.

Vantaggi dell'uso dell'output dei Power Platform dati


Usando Power Platform flussi di dati, è possibile modificare la forma, pulire e preparare i dati per ulteriori analisi
e consumo. Esistono molti altri servizi dati di Azure che funzionano con i dati come input e forniscono azioni.
Azure Machine Learning possibile utilizzare l'output dei flussi di dati e usarlo per gli scenari di Machine
Learning, ad esempio l'analisi predittiva.
Azure Data Factory possibile ottenere l'output dei flussi di dati su una scala molto più ampia, in
combinazione con i dati provenienti da origini Big Data, per soluzioni avanzate di integrazione dei dati.
Azure Databricks possibile utilizzare l'output dei flussi di dati per gli algoritmi data science applicati e
un'ulteriore intelligenza artificiale con la scalabilità dei Big Data nel back-end Apache Spark dati.
Altri servizi dati di Azure possono usare l'output Power Platform flussi di dati per eseguire altre azioni su
questi dati.

Flussi di dati con Azure Data Lake Archiviazione


Se è stata connessa un'archiviazione esterna di Azure Data Lake Archiviazione ai flussi di dati di Power Platform,
è possibile connettersi usando qualsiasi servizio di Azure con Azure Data Lake Archiviazione come origine, ad
esempio Azure Machine Learning, Azure Data Factory, Azure Databricks e Azure Analysis Services.
In uno di questi servizi usare Azure Data Lake Archiviazione come origine. Sarà possibile immettere i dettagli
dell'archiviazione e connettersi ai dati in essa presenti. I dati vengono archiviati in formato CSV ed è leggibile
tramite uno di questi strumenti e servizi. Lo screenshot seguente mostra come Azure Data Lake Archiviazione
sia un'opzione di origine per Azure Data Factory.
Flussi di dati con Dataverse
Se si usano flussi di dati standard che archiviano i dati in Dataverse, è comunque possibile connettersi a
Dataverse da molti servizi di Azure. L'immagine seguente mostra che in Azure Data Factory, l'output di un flusso
di dati da Dataverse può essere usato come origine.

Flussi di dati con Azure Data Lake Archiviazione


Quando si usa l'archiviazione data lake interna fornita da flussi di dati Power Platform, tale archiviazione è
limitata esclusivamente agli strumenti di Power Platform e non è accessibile da altri carichi di lavoro di dati di
Azure.
Mapping di campi con relazioni nei flussi di dati
standard
07/12/2021 • 3 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Nel flusso di dati standard è possibile eseguire facilmente il mapping dei campi dalla query del flusso di dati alle
tabelle Dataverse. Tuttavia, se la tabella Dataverse include campi di ricerca o relazione, è necessario considerare
in modo aggiuntivo per assicurarsi che questo processo funzioni.

Qual è la relazione e perché è necessaria?


Se si ha familiarità con lo sviluppo di database, si ha familiarità con il concetto di relazione tra tabelle. Tuttavia,
molti utenti di Microsoft Power Platform servizi non vengono da tale background. Ci si potrebbe chiedere che
cos'è la relazione o perché è necessario creare una relazione tra tabelle.
Le tabelle e le relative relazioni sono concetti fondamentali della progettazione di un database. Per altre
informazioni sulle relazioni, vedere questo articolo. Tuttavia, questo argomento verrà illustrato in modo generale
qui.
Si vuole archiviare le informazioni sui clienti e i relativi dettagli, inclusa l'area, in Dataverse. È possibile
mantenere tutti gli elementi in un'unica tabella. La tabella può essere denominata Customers e può contenere
campi, ad esempio CustomerID, Name, Birthdate e Region. Si supponga ora di avere un'altra tabella che contiene
anche le informazioni dell'archivio. Questa tabella può contenere campi, ad esempio ID dello Store, Name e
Region. Come si può vedere, l'area viene ripetuta in entrambe le tabelle. Non esiste un'unica posizione in cui è
possibile ottenere tutte le aree. alcuni dati dell'area si trova nella tabella Customers e altri nella tabella Stores. Se
si compila un'applicazione o un report da queste informazioni, è sempre necessario combinare le informazioni
delle due aree in un'unica.
La procedura di progettazione del database consiste nel creare una tabella per Region in scenari come quello
descritto in precedenza. Questa tabella Region contiene un ID area, un nome e altre informazioni sull'area. Le
altre due tabelle (Customers e Stores) avranno collegamenti a questa tabella usando un campo (che può essere
ID area se l'ID è presente in entrambe le tabelle o Nome se è sufficientemente univoco per determinare un'area).
Ciò significa che è presente una relazione tra la tabella Stores e Customers e la tabella Region.

In Dataverse esistono diversi modi per creare una relazione. Un modo è creare una tabella e quindi creare un
campo in una tabella che sia una relazione (o ricerca) con un'altra tabella, come descritto nella sezione
successiva.

Che cosa sono i campi di ricerca o di relazione?


In Dataverse è possibile definire un campo come campo di ricerca che punta a un'altra tabella.

Nell'immagine precedente il campo Region è un campo di ricerca in un'altra tabella denominata Region Lookup.
Per altre informazioni sui diversi tipi di relazioni, vedere Creare una relazione tra tabelle.

Quando il mapping dei campi non mostra i campi della relazione


Se è stato creato un campo di ricerca in una tabella che punta a un'altra tabella, tale campo potrebbe non essere
visualizzato nel mapping del flusso di dati. Ciò è dovuto al fatto che entrambe le entità coinvolte nella
relazione richiedono un campo Chiave. Questa procedura consigliata assicura quindi che il campo sia mappabile
nei mapping di tabella del flusso di dati.

Impostazione del campo Chiave nella tabella


Per impostare il campo chiave nella tabella, passare alla scheda Chiavi e aggiungere una chiave a un campo con
valori univoci.

Dopo aver impostato il campo chiave, è possibile visualizzare il campo nel mapping del flusso di dati.

Limitazioni note
Il mapping ai campi di ricerca polimorfica non è attualmente supportato.
Il mapping a un campo di ricerca multi-livello, una ricerca che punta al campo di ricerca di un'altra tabella,
non è attualmente supportato.
Considerazioni sul mapping dei campi per i flussi di
dati standard
07/12/2021 • 2 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Quando si creano flussi di dati che scrivono l'output in Dataverse, è possibile seguire alcune linee guida e
procedure consigliate per ottenere il risultato migliore. In questo articolo vengono trattate alcune di queste
procedure consigliate.

Impostare il campo chiave nell'entità


La presenza di una colonna chiave primaria nell'entità consente di evitare duplicati nelle righe di dati. Una
colonna chiave primaria è una colonna univoca e deterministica di una riga di dati nell'entità. Se, ad esempio, in
una tabella Orders l'ID ordine è la colonna chiave primaria, non dovrebbero essere presenti due righe con lo
stesso ID ordine. Inoltre, un ID ordine, ad esempio un ordine con ID 345, deve rappresentare solo una riga
nell'entità.
Per scegliere la colonna chiave per l'entità in Dataverse dal flusso di dati, è necessario impostare la chiave
alternativa.
L'immagine seguente illustra come scegliere la colonna chiave da popolata dall'origine quando si crea una
nuova entità nel flusso di dati.

Il campo del nome primario visualizzato nel mapping dei campi è per un campo etichetta. Questo campo non
deve essere univoco. Il campo usato nell'entità per controllare la duplicazione sarà il campo impostato nel
campo Chiave alternativa.
La presenza di una chiave primaria nell'entità garantisce che anche se sono presenti righe di dati duplicate con
lo stesso valore nel campo mappato alla chiave primaria, le voci duplicate non verranno caricate nell'entità e
l'entità avrà sempre una qualità elevata dei dati. La disponibilità di un'entità con un'elevata qualità dei dati è
essenziale per la creazione di soluzioni di creazione di report basate sull'entità.
Campo del nome primario
Il campo del nome primario è un campo di visualizzazione usato in Dataverse. Questo campo viene usato nelle
visualizzazioni predefinite per visualizzare il contenuto dell'entità in altre applicazioni. Questo campo non è il
campo chiave primaria e non deve essere considerato come tale. Questo campo può avere duplicati, perché è un
campo di visualizzazione. La procedura consigliata, tuttavia, consiste nell'usare un campo concatenato per
eseguire il mapping al campo del nome primario, in modo che il nome sia completamente esplicativo.
Il campo chiave alternativo viene usato come chiave primaria.

Quali sono i candidati per il campo chiave?


Il campo chiave è un valore univoco che rappresenta una riga univoca nell'entità. È importante avere questo
campo perché consente di evitare di avere record duplicati nell'entità. Questo campo può derivare da tre origini:
Chiave primaria nel sistema di origine,ad esempio OrderID nell'esempio precedente.
Campo concatenato creato tramite Power Query trasformazioni nel flusso di dati.

Combinazione di campi da selezionare nell'opzione Chiave alternativa. Una combinazione di campi


usati come campo chiave è detta anche chiave composta.

Rimuovere le righe che non esistono più


Se si vuole che i dati nell'entità siano sempre sincronizzati con i dati del sistema di origine, scegliere l'opzione
Elimina righe che non esistono più nell'output della quer y. Tenere tuttavia presente che questa opzione
rallenta il flusso di dati perché è necessario un confronto di righe basato sulla chiave primaria (chiave alternativa
nel mapping dei campi del flusso di dati) per eseguire questa azione.
Se questa opzione è selezionata, se nell'entità è presente una riga di dati che non esiste nell'output della query
dell'aggiornamento del flusso di dati successivo, tale riga verrà rimossa dall'entità.
Ruoli di sicurezza e livelli di autorizzazione nei flussi
di dati standard
07/12/2021 • 2 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Se un utente del team ha creato un flusso di dati e vuole condividerlo con altri membri del team, come
funziona? Quali sono i ruoli e le opzioni del livello di autorizzazione disponibili? Questo articolo illustra i ruoli e i
livelli di autorizzazione correlati ai flussi di dati standard.

Accesso all'ambiente
Un flusso di dati standard archivia i dati in Dataverse. Dataverse si trova in un ambiente. Prima di accedere ai
dati archiviati in Dataverse e anche ai flussi di dati, è necessario avere accesso all'ambiente.

Ruoli
Sono disponibili più ruoli usati per configurare il livello di sicurezza per i flussi di dati standard. La tabella
seguente descrive ogni ruolo, insieme al livello di autorizzazione associato a tale ruolo.

RUO LO DI SIC UREZ Z A P RIVIL EGI DESC RIZ IO N E

Autore dell'ambiente Creare flussi di dati Obbligatorio per creare qualsiasi flusso
di dati. I flussi di dati standard
richiedono ruoli aggiuntivi a seconda
delle autorizzazioni per le tabelle di
Dataverse

Utente principiante Scrivere in entità non personalizzate Ha tutti i diritti per lavorare con le
entità non personalizzate

Addetto personalizzazione sistema Creare entità personalizzate Le entità personalizzate create


dall'utente saranno visibili solo a
questo utente

Membri dell'ambiente Ottenere dati dai flussi di dati Ogni membro dell'ambiente può
ottenere dati dai flussi di dati in tale
ambiente

La sicurezza a livello di riga non è supportata


La versione corrente dei flussi di dati standard non supporta la sicurezza a livello di riga.
Se non si è mai sentito parlare di sicurezza a livello di riga, ecco una rapida introduzione. Se sono disponibili
utenti con livelli di accesso diversi alla stessa tabella, è possibile filtrare i dati a livello di riga. Ad esempio, nella
tabella Orders potrebbe essere presente una colonna SalesTerritory e potrebbe essere necessario filtrare i dati in
modo che gli utenti della California potrebbero visualizzare solo i record della tabella Orders appartenente alla
California. Ciò è possibile tramite la sicurezza a livello di riga.

Passaggi per assegnare i ruoli


I passaggi della procedura seguente derivano da Configurare la sicurezza utente per le risorse in un ambiente.
Verificare che l'utente a cui si vuole assegnare un ruolo di sicurezza sia presente nell'ambiente. In caso contrario,
aggiungere l'utente all'ambiente. È possibile assegnare un ruolo di sicurezza come parte del processo di
aggiunta dell'utente. Altre informazioni: Aggiungere utenti a un ambiente
In generale, un ruolo di sicurezza può essere assegnato solo agli utenti con stato Abilitato. Tuttavia, se è
necessario assegnare un ruolo di sicurezza agli utenti con stato Disabilitato, è possibile abilitare
allowRoleAssignmentOnDisabledUsers in OrgDBOrgSettings.
Per aggiungere un ruolo di sicurezza a un utente già presente in un ambiente:
1. Accedere al interfaccia di amministrazione di Power Platform.
2. Selezionare Ambienti > [selezionare un ambiente] >Impostazioni Utenti > e autorizzazioni >
Utenti .
3. Selezionare Manage users in Dynamics 365 (Gestisci utenti in Dynamics 365).

4. Selezionare l'utente dall'elenco di utenti nell'ambiente e quindi selezionare Gestisci ruoli.

5. Assegnare uno o più ruoli di sicurezza all'utente.

6. SelezionareOK .
Sincronizzare l Excel'origine dati con Dataverse
usando un flusso di dati
07/12/2021 • 3 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Uno degli scenari comuni che si verificano quando si integrano i dati in Dataverse è mantenerlo sincronizzato
con l'origine. Usando il flusso di dati standard, è possibile caricare i dati in Dataverse. Questo articolo illustra
come mantenere i dati sincronizzati con il sistema di origine.

Importanza della colonna chiave


Se si usa un sistema di base di dati relazionali come origine, in genere sono presenti colonne chiave nelle tabelle
e i dati sono in un formato corretto da caricare in Dataverse. Tuttavia, i dati dei file Excel non sono sempre così
puliti. Spesso è presente un file Excel con fogli di dati senza colonne chiave. In Considerazioni sul mapping dei
campi per i flussi di dati standardè possibile vedere che se è presente una colonna chiave nell'origine, può
essere facilmente usata come chiave alternativa nel mapping dei campi del flusso di dati.

La presenza di una colonna chiave è importante per la tabella in Dataverse. La colonna chiave è l'identificatore di
riga. questa colonna contiene valori univoci in ogni riga. La presenza di una colonna chiave consente di evitare
righe duplicate e consente anche di sincronizzare i dati con il sistema di origine. Se una riga viene rimossa dal
sistema di origine, la presenza di una colonna chiave è utile per trovarla e rimuoverla anche da Dataverse.

Creazione di una colonna chiave


Se nell'origine dati non è presente una colonna chiave (Excel, file di testo o altre origini), è possibile generarne
una usando il metodo seguente:
1. Pulire i dati.
Il primo passaggio per creare la colonna chiave consiste nel rimuovere tutte le righe non necessarie,
pulire i dati, rimuovere le righe vuote e rimuovere eventuali duplicati possibili.
2. Aggiungere una colonna di indice.
Dopo aver pulito i dati, il passaggio successivo consiste nell'assegnare una colonna chiave. A questo
scopo, è possibile usare Aggiungi colonna indice dalla scheda Aggiungi colonna .
Quando si aggiunge la colonna dell'indice, sono disponibili alcune opzioni per personalizzarla, ad esempio
personalizzazioni sul numero iniziale o sul numero di valori da passare ogni volta. Il valore iniziale predefinito è
zero e incrementa un valore ogni volta.

Usare la colonna chiave come chiave alternativa


Dopo aver creato le colonne chiave, è possibile assegnare il mapping dei campi del flusso di dati alla chiave
alternativa.

L'impostazione è semplice, è sufficiente impostare la chiave alternativa. Tuttavia, se si dispone di più file o
tabelle, è necessario prendere in considerazione un altro passaggio.
Se sono presenti più file
Se è presente un solo file Excel (o foglio o tabella), i passaggi della procedura precedente sono sufficienti per
impostare la chiave alternativa. Tuttavia, se si dispone di più file (o fogli o tabelle) con la stessa struttura (ma con
dati diversi), è necessario accodarli insieme.
Se si stanno ottenendo dati da più file Excel, l'opzione Combina file di Power Query accoderà automaticamente
tutti i dati e l'output sarà simile all'immagine seguente.
Come illustrato nell'immagine precedente, oltre al risultato di accodamento, Power Query anche la colonna
Source.Name, che contiene il nome del file. Il valore index in ogni file potrebbe essere univoco, ma non è
univoco in più file. Tuttavia, la combinazione della colonna Index e della colonna Source.Name è una
combinazione univoca. Scegliere una chiave alternativa composta per questo scenario.

Eliminare le righe che non esistono più nell'output della query


L'ultimo passaggio consiste nel selezionare elimina le righe che non esistono più nell'output della
quer y. Questa opzione confronta i dati nella tabella Dataverse con i dati provenienti dall'origine in base alla
chiave alternativa (che potrebbe essere una chiave composta) e rimuove le righe che non esistono più. Di
conseguenza, i dati in Dataverse verranno sempre sincronizzati con l'origine dati.
Aggiungere dati a una tabella in Microsoft
Dataverse usando Power Query
07/12/2021 • 2 minutes to read

In questa procedura si creerà una tabella in Dataverse e si riempirà la tabella con i dati di un feed OData usando
Power Query. È possibile usare le stesse tecniche per integrare i dati delle origini online e locali seguenti:
SQL Server
Salesforce
IBM DB2
Access
Excel
API Web
Feed OData
File di testo
È anche possibile filtrare, trasformare e combinare i dati prima di caricarli in una tabella nuova o esistente.
Se non si ha una licenza per Power Apps, è possibile registrarsi gratuitamente.

Prerequisiti
Prima di iniziare a seguire questo articolo:
Passare a un ambiente in cui è possibile creare tabelle.
È necessario disporre di un Power Apps per piano utente o Power Apps per piano di app.

Specificare i dati di origine


1. Accedere a Power Apps.
2. Nel riquadro di spostamento selezionare Dati per espanderlo e quindi selezionare Tabelle .

3. Nel menu di comando selezionare Ottieni dati .


4. Nell'elenco delle origini dati selezionare OData .

5. In Impostazioni connessione digitare o incollare l'URL e quindi selezionare Avanti :


https://services.odata.org/V4/Northwind/Northwind.svc/

6. Nell'elenco delle tabelle selezionare la casella di controllo Clienti e quindi selezionare Trasforma dati .

7. (facoltativo) Modificare lo schema in base alle proprie esigenze scegliendo le colonne da includere,
modificando la tabella, aggiungendo un indice o una colonna condizionale o apportando altre modifiche.
8. Nell'angolo inferiore destro selezionare Avanti.

Specificare la tabella di destinazione


1. In Impostazioni di caricamento selezionare Carica nella nuova tabella .

È possibile assegnare alla nuova tabella un nome o un nome visualizzato diverso, ma lasciare i valori
predefiniti per seguire esattamente questa esercitazione.
2. Nell'elenco Colonna nome primario univoco selezionare ContactName e quindi selezionare
Avanti.
È possibile specificare una colonna con nome primario diversa, eseguire il mapping di una colonna
diversa nella tabella di origine a ogni colonna della tabella che si sta creando o a entrambe. È anche
possibile specificare se le colonne Di testo nell'output della query devono essere create come testo su più
righe o Single-Line testo nel dataverse. Per seguire questa esercitazione, lasciare il mapping delle colonne
predefinito.
3. Selezionare Aggiorna manualmente per Power Query - Aggiorna Impostazioni e quindi selezionare
Crea .
4. In Dati (vicino al bordo sinistro) selezionare Tabelle per visualizzare l'elenco delle tabelle nel database.
La tabella Customers creata da un feed OData viene visualizzata come tabella personalizzata.

WARNING
Se si usa Power Query per aggiungere dati a una tabella esistente, tutti i dati in tale tabella verranno sovrascritti.

Se si seleziona Carica nella tabella esistente , è possibile specificare una tabella in cui aggiungere dati dalla
tabella Customers. È possibile, ad esempio, aggiungere i dati alla tabella Account con cui viene fornito
Dataverse. In Mapping colonne è possibile specificare ulteriormente che i dati nella colonna ContactName
della tabella Customers devono essere aggiunti alla colonna Nome della tabella Account.
Se viene visualizzato un messaggio di errore sulle autorizzazioni, contattare l'amministratore.
Come Microsoft Power Platform tra flussi di dati e
Azure Data Factory flussi di dati wrangling
07/12/2021 • 2 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

Microsoft Power Platform flussi di dati e Azure Data Factory di dati sono spesso considerati come operazioni
uguali: estrazione dei dati dai sistemi di origine, trasformazione dei dati e caricamento dei dati trasformati in una
destinazione. Tuttavia, esistono differenze in questi due tipi di flussi di dati ed è possibile avere una soluzione
implementata che funziona con una combinazione di queste tecnologie. Questo articolo descrive questa
relazione in modo più dettagliato.

Flussi di dati Power Platform


Power Platform flussi di dati sono servizi di trasformazione dei dati potenziati dal motore Power Query e
ospitati nel cloud. Questi flussi di dati ottengono dati da origini dati diverse e, dopo aver applicato le
trasformazioni, archiviarli in Dataverse o in Azure Data Lake Archiviazione.

Data Factory flussi di dati wrangling


Data Factory è un servizio ETL (Extract, Transform, Load) basato sul cloud che supporta molte origini e
destinazioni diverse. In questa tecnologia sono disponibili due tipi di flussi di dati: mapping dei flussi di dati e
wrangling dei flussi di dati. I flussi di dati Wrangling sono potenziati dal motore Power Query per la
trasformazione dei dati.

Che cosa hanno in comune?


Power Platform flussi di dati e Data Factory flussi di dati wrangling sono entrambi utili per ottenere dati da una
o più origini, applicare trasformazioni ai dati usando Power Query e caricare i dati trasformati in destinazioni.
Inoltre:
Entrambi sono potenziati usando la trasformazione Power Query dati.
Entrambe sono tecnologie basate sul cloud.

Qual è la differenza?
Il punto principale è conoscere le differenze, perché è quindi possibile pensare agli scenari in cui si vuole usare
uno o l'altro.

DATA FA C TO RY F L USSI DI DAT I


F UN Z IO N A L ITÀ F L USSI DI DAT I P O W ER P L AT F O RM W RA N GL IN G

Destinazioni Dataverse o Azure Data Lake Molte destinazioni (vedere l'elenco qui)
Archiviazione

Power Query trasformazione Tutte Power Query sono supportate È supportato un set limitato di funzioni
(vedere l'elenco qui)

Origini Sono supportate molte origini Solo alcune origini (vedere l'elenco qui)

Scalabilità Dipende dalla capacità Premium e Altamente scalabile


dall'uso del motore di calcolo avanzato

Quale utente è adatto a quale tipo di flusso di dati?


Gli sviluppatori di applicazioni per cittadini o gli analisti dei dati dei cittadini con dati da piccola a media scala da
integrare e trasformare sono più pratici Power Platform flussi di dati. L'elevato numero di trasformazioni
disponibili, la possibilità di lavorare con esse senza avere conoscenze per gli sviluppatori e il fatto che i flussi di
dati possano essere creati, monitorati e modificati in Power BI o Power Platform sono tutti motivi che rendono i
flussi di dati Power Platform una soluzione di integrazione dei dati ottimale per questo tipo — di sviluppatore.
Se si è uno sviluppatore di dati che si occupa di Big Data e set di dati di grandi dimensioni, con un numero
elevato di righe da inserire ogni volta, i flussi di dati Data Factory wrangling sono uno strumento migliore per il
processo. Il flusso di dati Wrangling converte M generato dall'Power Query Online Mashup Editor in codice
Spark per l'esecuzione su scala cloud. L'uso del portale di Azure per creare, monitorare e modificare flussi di dati
wrangling richiede una curva di apprendimento più elevata rispetto all'esperienza Power Platform flussi di dati. I
flussi di dati Wrangling sono più adatti per questo tipo di destinatari.
Power Automate per il connettore flussi di dati
07/12/2021 • 2 minutes to read

I flussi di dati Power Automate connettore possono:


Attivare un flusso al termine di un aggiornamento del flusso di dati.
Intervenire per avviare un aggiornamento del flusso di dati.
Questa sezione illustra alcuni casi d'uso con le esercitazioni fornite per facilitare l'avvio rapido dell'uso di questo
connettore:
Inviare notifiche:
Quando lo stato di aggiornamento di un flusso di dati cambia, inviare una notifica tramite posta elettronica.
Quando un flusso di dati ha esito positivo o negativo, inviare una notifica tramite posta elettronica.
Quando lo stato di aggiornamento di un flusso di dati cambia, inviare una Teams notifica.
Aprire i ticket di supporto:
Quando un aggiornamento del flusso di dati non riesce, inviare un messaggio alla coda di bus di servizio
Azure per aprire un ticket di supporto.
Aggiornare i flussi di dati e i set di dati in sequenza:
Quando si seleziona un pulsante, avviare un aggiornamento del flusso di dati.
Quando un aggiornamento del flusso di dati analitici ha esito positivo, avviare un aggiornamento del flusso
di dati standard.
Quando un aggiornamento del flusso di dati ha esito positivo, avviare un aggiornamento Power BI set di dati.
Quando un file in SharePoint viene aggiornato, avviare un aggiornamento del flusso di dati.
Salvare i metadati di aggiornamento del flusso di dati e creare un dashboard di monitoraggio dei flussi di dati:
Al termine di un aggiornamento del flusso di dati, salvare i metadati in una tabella Dataverse
Al termine di un aggiornamento del flusso di dati, salvare i metadati in Excel online
Al termine di un aggiornamento del flusso di dati, salvare i metadati in un set Power BI di dati di streaming
Inviare una notifica al completamento di un
aggiornamento del flusso di dati
07/12/2021 • 2 minutes to read

Al termine dell'aggiornamento del flusso di dati, l'utente o altri utenti che gestiscono o dipendono dal flusso di
dati potrebbero voler ricevere una notifica per avvisare l'utente dello stato di aggiornamento del flusso di dati.
In questo modo, si sa che i dati sono aggiornati ed è possibile iniziare a ottenere nuove informazioni dettagliate.
Un altro scenario comune seguito da questa esercitazione è la notifica in caso di errore di un flusso di dati. Una
notifica consente di avviare l'analisi del problema e avvisare gli utenti che dipendono dai dati aggiornati
correttamente.
Per configurare una notifica Power Automate che verrà inviata quando un flusso di dati ha esito negativo:
1. Passare a Power Automate.
2. Selezionare Crea > flusso cloud automatizzato .
3. Immettere un nome di flusso e quindi cercare il connettore "Al termine dell'aggiornamento di un flusso di
dati". Selezionare questo connettore nell'elenco e quindi selezionare Crea .
4. Personalizzare il connettore. Immettere le informazioni seguenti nel flusso di dati:
Tipo di gruppo: selezionare Ambiente durante la connessione a Power Apps e All'area di lavoro
durante la connessione a Power BI.
Gruppo: selezionare l'Power Apps o l'area Power BI in cui si trova il flusso di dati.
Flusso di dati: selezionare il flusso di dati in base al nome.
5. Selezionare Nuovo passaggio per aggiungere un'azione al flusso.
6. Cercare il connettore Condizione e quindi selezionarlo.
7. Personalizzare il connettore Condizione. Immettere le informazioni seguenti:
a. Nella prima cella aggiungere Stato aggiornamento dal connettore del flusso di dati.
b. Lasciare la seconda cella uguale a .
c. Nella terza cella immettere False .

8. Nella sezione Se sì selezionare Aggiungi un'azione.


9. Cercare il connettore "Invia una notifica di posta elettronica (V3)" e quindi selezionarlo.
10. Immettere l'indirizzo di posta elettronica e le informazioni sull'oggetto.
11. All'interno del corpo del messaggio di posta elettronica selezionare il campo accanto a Corpo e usare
Contenuto dinamico per aggiungere informazioni sul flusso di dati al contenuto del messaggio di posta
elettronica.
Aprire un ticket in caso di aggiornamento del flusso
di dati non riuscito
07/12/2021 • 2 minutes to read

Quando l'aggiornamento del flusso di dati viene completato o richiede più tempo del previsto, è consigliabile
che il team di supporto analiti l'analisi. Con questa esercitazione è possibile aprire automaticamente un ticket di
supporto, creare un messaggio in una coda o in un bus di servizio oppure aggiungere un elemento a Azure
DevOps per inviare una notifica al team di supporto.
In questa esercitazione si userà Azure bus di servizio. Per istruzioni su come configurare un'istanza di Azure bus
di servizio creare una coda, vedere Usare portale di Azure per creare uno spazio dei nomi bus di servizio e una
coda.
Per creare automaticamente una coda in Azure bus di servizio:
1. Passare a Power Automate.
2. Selezionare Crea > flusso cloud automatizzato.
3. Immettere un nome per il flusso e quindi cercare il connettore "Al termine dell'aggiornamento di un
flusso di dati". Selezionare questo connettore nell'elenco e quindi selezionare Crea.
4. Personalizzare il connettore. Immettere le informazioni seguenti sul flusso di dati:
Tipo di gruppo: selezionare Ambiente quando ci si connette a Power Apps e all'area di lavoro
quando ci si connette Power BI.
Gruppo: selezionare l'ambiente Power Apps o l'Power BI di lavoro in cui si trova il flusso di dati.
Flusso di dati: selezionare il flusso di dati in base al nome.
5. Selezionare Nuovo passaggio per aggiungere un'azione al flusso.
6. Cercare il connettore Condizione e quindi selezionarlo.
7. Personalizzare il connettore Condizione. Immettere le informazioni seguenti:
a. Nella prima cella aggiungere Stato aggiornamento dal connettore del flusso di dati.
b. Lasciare la seconda cella uguale a .
c. Nella terza cella immettere False .
8. Nella sezione Se sì selezionare Aggiungi un'azione.
9. Cercare il connettore "Send message" (Invia messaggio) bus di servizio e quindi selezionarlo.
10. Immettere un Nome connessione per questo messaggio. In Stringa di connessione immettere la
stringa di connessione generata durante la creazione dello spazio dei nomi bus di servizio dati.
Selezionare quindi Crea .
11. Aggiungere informazioni sul flusso di dati al contenuto del messaggio selezionando il campo accanto a
Contenuto , quindi selezionare il contenuto dinamico da Contenuto dinamico .
Attivare flussi di dati e set di dati Power BI in
sequenza
07/12/2021 • 2 minutes to read

Esistono due scenari comuni in cui è possibile usare questo connettore per attivare più flussi di dati e Power BI
set di dati in sequenza.
Attivare l'aggiornamento di un flusso di dati standard dopo il completamento di un aggiornamento del
flusso di dati analitico.
Se un singolo flusso di dati esegue ogni azione, è difficile riutilizzare le entità in altri flussi di dati o per
altri scopi. I flussi di dati migliori da riutilizzare sono i flussi di dati che eserezionano solo alcune azioni,
specializzata in un'attività specifica. Se si dispone di un set di flussi di dati come flussi di dati di staging e
l'unica azione è estrarre i dati "così come sono" dal sistema di origine, questi flussi di dati possono essere
riutilizzati in più altri flussi di dati. Altre informazioni: Procedure consigliate per il riutilizzo dei flussi di
dati tra ambienti e aree di lavoro
Attivare l'aggiornamento di un Power BI di dati quando un aggiornamento del flusso di dati viene
completato correttamente.
Per assicurarsi che il dashboard sia aggiornato dopo l'aggiornamento dei dati da parte di un flusso di
dati, è possibile usare il connettore per attivare l'aggiornamento di un set di dati Power BI dopo
l'aggiornamento corretto del flusso di dati.
Questa esercitazione illustra il primo scenario.
Per attivare i flussi di dati in sequenza:
1. Passare a Power Automate.
2. Selezionare Crea > flusso cloud automatizzato .
3. Immettere un nome di flusso e quindi cercare il connettore "Al termine dell'aggiornamento di un flusso di
dati". Selezionare questo connettore nell'elenco e quindi selezionare Crea .
4. Personalizzare il connettore. Immettere le informazioni seguenti nel flusso di dati:
Tipo di gruppo: selezionare Ambiente durante la connessione a Power Apps e All'area di lavoro
durante la connessione a Power BI.
Gruppo: selezionare l'Power Apps o l'area Power BI in cui si trova il flusso di dati.
Flusso di dati: selezionare il flusso di dati in base al nome.
5. Selezionare Nuovo passaggio per aggiungere un'azione al flusso.
6. Cercare il connettore Condizione e quindi selezionarlo.
7. Personalizzare il connettore Condizione. Immettere le informazioni seguenti:
a. Nella prima cella aggiungere Stato aggiornamento dal connettore del flusso di dati.
b. Lasciare la seconda cella uguale a .
c. Nella terza cella immettere Success .
8. Nella sezione Se sì selezionare Aggiungi un'azione.
9. Cercare il connettore "Aggiorna un flusso di dati" e quindi selezionarlo.
10. Personalizzare il connettore:
Tipo di gruppo: selezionare Ambiente durante la connessione a Power Apps e All'area di lavoro
durante la connessione a Power BI.
Gruppo: selezionare l'Power Apps o l'area Power BI in cui si trova il flusso di dati.
Flusso di dati: selezionare il flusso di dati in base al nome.
Caricare i dati in una tabella Dataverse e compilare
un report di monitoraggio dei flussi di dati con
Power BI
07/12/2021 • 2 minutes to read

Questa esercitazione illustra come caricare dati in una tabella Dataverse per creare un report di monitoraggio
dei flussi di dati in Power BI.

È possibile usare questo dashboard per monitorare la durata e il numero di errori dei flussi di dati. Con questo
dashboard è possibile tenere traccia di eventuali problemi relativi alle prestazioni dei flussi di dati e condividere i
dati con altri utenti.
In primo luogo, si creerà una nuova tabella Dataverse che archivia tutti i metadati dell'esecuzione del flusso di
dati. Per ogni aggiornamento di un flusso di dati, viene aggiunto un record a questa tabella. È anche possibile
archiviare i metadati per più esecuzioni di flussi di dati nella stessa tabella. Dopo aver creato la tabella, si
connetterà il file Power BI alla tabella Dataverse.

Prerequisiti
Power BI Desktop.
Ambiente Dataverse con autorizzazioni per creare nuove tabelle personalizzate.
Una Premium Power Automate licenza .
Un Power BI di dati o Power Platform flusso di dati.

Scaricare il file con estensione pbit


Per prima cosa, scaricare il file con estensione pbit diDataverse.

Creare una nuova tabella in Dataverse


1. Passare al portale Power Apps .
2. Nel riquadro di spostamento a sinistra espandere Dati , selezionare Tabelle e quindi Nuova tabella .

3. Nel riquadro Nuova tabella:


a. Immettere Monitoraggio flussi di dati in Nome visualizzato .
b. In Primar y Name Column (Colonna nome primario) immettere Dataflow name (Nome flusso
di dati) in Display name (Nome visualizzato).
c. Selezionare Crea .
4. Selezionare Aggiungi colonna per ripetere l'aggiunta di colonne per i valori seguenti:
Nome visualizzato:"Stato aggiornamento", Tipo di dati : Testo, Obbligatorio : Obbligatorio.
Nome visualizzato:"Tipo di aggiornamento", Tipo di dati : Testo, Obbligatorio : Obbligatorio.
Nome visualizzato:"Ora di inizio", Tipo di dati : Data e ora, Obbligatorio : Obbligatorio.
Nome visualizzato:"Ora di fine", Tipo di dati : Data e ora, Obbligatorio : Obbligatorio.
Creare un flusso di dati
Se non ne è già presente uno, creare un flusso di dati. È possibile creare un flusso di dati Power BI flussi di dati o
Power Apps flussi di dati.

Creare un flusso Power Automate dati


1. Passare a Power Automate.
2. Selezionare Crea > flusso cloud automatizzato .
3. Immettere un nome di flusso e quindi cercare il connettore "Al termine dell'aggiornamento di un flusso di
dati". Selezionare questo connettore nell'elenco e quindi selezionare Crea .
4. Personalizzare il connettore. Immettere le informazioni seguenti nel flusso di dati:
Tipo di gruppo: selezionare Ambiente durante la connessione a Power Apps e All'area di lavoro
durante la connessione a Power BI.
Gruppo: selezionare l'Power Apps o l'area Power BI in cui si trova il flusso di dati.
Flusso di dati: selezionare il flusso di dati in base al nome.
5. Selezionare Nuovo passaggio per aggiungere un'azione al flusso.
6. Cercare il connettore "Aggiungi una nuova riga" da Dataverse e quindi selezionarlo.
7. In Aggiungi una nuova riga selezionare Scegliere una tabella e quindi scegliere Monitoraggio flussi di
dati dall'elenco.
8. Per ogni campo obbligatorio è necessario aggiungere un valore dinamico. Questo valore è l'output dei
metadati del flusso di dati eseguito.
a. Selezionare il campo accanto a Dataflow Name (Nome flusso di dati) e quindi Selezionare
Dataflow Name (Nome flusso di dati) dal contenuto dinamico.

b. Ripetere questo processo per tutti i campi obbligatori.


9. Salvare il flusso.

Creare un Power BI report


1. Aprire il file .pbit .
2. Connessione all'entità Dataverse Dataflows Monitoring .
In questo dashboard, per ogni flusso di dati nell'intervallo di tempo specificato, è possibile monitorare:
Durata del flusso di dati
Numero di flussi di dati
Conteggio degli errori del flusso di dati
L'ID univoco per ogni flusso di dati viene generato da un'unione tra il nome del flusso di dati e l'ora di inizio del
flusso di dati.
Caricare i dati in Excel Online e creare un report di
monitoraggio dei flussi di dati con Power BI
07/12/2021 • 2 minutes to read

Questa esercitazione illustra come usare un file Excel e il connettore flussi di dati in Power Automate per creare
un report di monitoraggio dei flussi di dati in Power BI.

Prima di tutto, scaricare il file Excel e salvarlo in OneDrive for Business o SharePoint. Si creerà quindi un
connettore Power Automate che carica i metadati dal flusso di dati nel file Excel in OneDrive for Business o
SharePoint. Infine, si connetterà un file Power BI al file Excel per visualizzare i metadati e avviare il monitoraggio
dei flussi di dati.
È possibile usare questo dashboard per monitorare la durata dell'aggiornamento e il numero di errori dei flussi
di dati. Con questo dashboard è possibile tenere traccia di eventuali problemi relativi alle prestazioni dei flussi di
dati e condividere i dati con altri utenti.

Prerequisiti
Microsoft Excel
Power BI Desktop.
Una Premium Power Automate licenza
OneDrive for Business.
Oggetto Power BI flusso di dati o Power Platform flusso di dati.

Scaricare il file con estensione pbit


Prima di tutto, scaricare il file con estensione pbit.

Scaricare il file Excel e salvarlo in OneDrive


Scaricare quindi il file.xlsx e salvarlo in un percorso in OneDrive for Business o SharePoint

Creare un flusso di dati


Se non è già presente, creare un flusso di dati. È possibile creare un flusso di dati Power BI flussi di dati o Power
Apps flussi di dati.

Creare un flusso in Power Automate


1. Passare a Power Automate.
2. Selezionare Crea > flusso cloud automatizzato.
3. Immettere un nome per il flusso e quindi cercare il connettore "Al termine dell'aggiornamento di un
flusso di dati". Selezionare questo connettore nell'elenco e quindi selezionare Crea.
4. Personalizzare il connettore. Immettere le informazioni seguenti sul flusso di dati:
Tipo di gruppo: selezionare Ambiente quando ci si connette a Power Apps e all'area di lavoro
quando ci si connette Power BI.
Gruppo: selezionare l'ambiente Power Apps o l'Power BI di lavoro in cui si trova il flusso di dati.
Flusso di dati: selezionare il flusso di dati in base al nome.
5. Selezionare Nuovo passaggio per aggiungere un'azione al flusso.
6. Cercare il connettore "Aggiungi una riga in una tabella" da Excel Online (Business) e quindi selezionarlo.
7. Personalizzare il connettore. Immettere il percorso del file Excel e la tabella specifica in cui vengono
caricati i dati.
Percorso: selezionare il percorso del file Excel in OneDrive for Business o SharePoint.
Raccolta documenti: selezionare la raccolta del file Excel file.
File : selezionare il percorso del file Excel file.
Tabella: selezionare "Dataflow_monitoring".
8. Aggiungere valori dinamici ai campi obbligatori.
Per ogni campo obbligatorio, è necessario aggiungere un valore dinamico. Questo valore è l'output dei
metadati dell'esecuzione del flusso di dati.
a. Selezionare il campo accanto a dataflowname_name .
b. Selezionare Dataflow Name (Nome flusso di dati) nella casella Dynamic content context
(Contesto contenuto dinamico).

c. Ripetere questo processo per tutti i campi obbligatori.


9. Salvare il flusso.

Creare un Power BI report


1. Aprire il file .pbit .
2. Connessione al file Excel.
In questo dashboard, per ogni flusso di dati nell'intervallo di tempo specificato, è possibile monitorare:
Durata del flusso di dati
Conteggio del flusso di dati
Conteggio degli errori del flusso di dati
L'uniqueID per ogni flusso di dati viene generato da un merge tra il nome del flusso di dati e l'ora di inizio del
flusso di dati.
Caricare i dati in un set Power BI flusso di dati e
compilare un report di monitoraggio dei flussi di
dati con Power BI
07/12/2021 • 3 minutes to read

Questa esercitazione illustra come caricare dati in un set di Power BI di streaming per creare un report di
monitoraggio dei flussi di dati in Power BI.

In primo luogo, si creerà un nuovo set di dati di streaming in Power BI. Questo set di dati raccoglie tutti i
metadati dall'esecuzione del flusso di dati e per ogni aggiornamento di un flusso di dati viene aggiunto un
record a questo set di dati. È possibile eseguire più flussi di dati tutti nello stesso set di dati. Infine, è possibile
compilare un report Power BI sui dati per visualizzare i metadati e iniziare a monitorare i flussi di dati.
È possibile usare questo dashboard per monitorare la durata e il numero di errori dei flussi di dati. Con questo
dashboard è possibile tenere traccia di eventuali problemi relativi alle prestazioni dei flussi di dati e condividere i
dati con altri utenti.

Prerequisiti
Una Power BI Pro licenza .
Una Premium Power Automate licenza
Un Power BI di dati o Power Platform flusso di dati.

Creare un nuovo set di dati di streaming in Power BI


1. Passare a Power BI.
2. Aprire un'area di lavoro.
3. Nell'area di lavoro selezionare Nuovo set di dati di > streaming .

4. In Nuovo set di dati di streaming selezionare il riquadro API e quindi selezionare Avanti.
5. Nel nuovo riquadro attivare l'analisi dei dati storici.
6. Immettere i valori seguenti e quindi selezionare Crea .
Nome set di dati: "Monitoraggio del flusso di dati".
Valore:"Nome flusso di dati", Tipo di dati : Testo.
Valore:"ID flusso di dati", Tipo di dati : Testo.
Valore:"Stato aggiornamento", Tipo di dati : Testo.
Valore:"Tipo di aggiornamento", Tipo di dati : Testo.
Valore:"Ora di inizio", Tipo di dati : Data e ora.
Valore:"Ora di fine", Tipo di dati : Data e ora.
Creare un flusso di dati
Se non è già disponibile, creare un flusso di dati. È possibile creare un flusso di dati Power BI flussi di dati o
Power Apps flussi di dati.

Creare un flusso in Power Automate


1. Passare a Power Automate.
2. Selezionare Crea > flusso cloud automatizzato .
3. Immettere un nome di flusso e quindi cercare il connettore "Al termine dell'aggiornamento di un flusso di
dati". Selezionare questo connettore nell'elenco e quindi selezionare Crea .
4. Personalizzare il connettore. Immettere le informazioni seguenti nel flusso di dati:
Tipo di gruppo: selezionare Ambiente durante la connessione a Power Apps e All'area di lavoro
durante la connessione a Power BI.
Gruppo: selezionare l'Power Apps o l'area Power BI in cui si trova il flusso di dati.
Flusso di dati: selezionare il flusso di dati in base al nome.
5. Selezionare il nuovo passaggio per aggiungere un'azione al flusso.
6. Cercare il connettore "Aggiungi righe a un set di dati" Power BI e quindi selezionarlo.
7. Personalizzare il connettore. Immettere le informazioni seguenti:
ID area di lavoro: selezionare l'Power BI di lavoro che contiene il set di dati di streaming.
Set di dati: selezionare il set di dati di streaming Monitoraggio del flusso di dati creato in
precedenza in Creare un nuovo set di dati di streaming in Power BI.
Tabella : selezionare RealTimeData .

8. Aggiungere valori dinamici ai campi obbligatori.


Per ogni campo obbligatorio è necessario aggiungere un valore dinamico. Questo valore è l'output dei
metadati dell'esecuzione del flusso di dati.
a. Selezionare il campo accanto a Nome flusso di dati e quindi selezionare il pulsante lampo.
b. Selezionare Dataflow Name (Nome flusso di dati) nella casella Dynamic content context
(Contesto contenuto dinamico).
c. Ripetere questo processo per tutti i campi obbligatori.
9. Salvare il flusso.

Creare un Power BI report


1. Passare a Power BI.
2. Passare al set di dati di streaming (in questo esempio, nell'area di lavoro DocTestWorkspace, dal set di
dati Monitoraggio flusso di dati selezionare Crea repor t ).
3. Creare un report personalizzato su questi dati.
Risoluzione dei problemi relativi ai flussi di dati:
creazione di flussi di dati
07/12/2021 • 2 minutes to read

Questo articolo illustra alcuni degli errori e dei problemi più comuni che possono verificarsi quando si vuole
creare un flusso di dati e come risolverli.

Non è possibile creare un flusso di dati nell'area di lavoro personale


Questo problema si verifica quando si tenta di creare un flusso di dati nell'area di lavoro personale in Power
BI.

Motivo:
La creazione di flussi di dati nell'area di lavoro personale non è supportata.
Risoluzione:
Creare i flussi di dati nelle aree di lavoro dell'organizzazione. Per informazioni su come creare un'area di lavoro
aziendale, vedere Creare le nuove aree di lavoro in Power BI.

Non è possibile creare un flusso di dati in un'area di lavoro aziendale


in cui si hanno diritti di sola lettura
Se si è membri di un'area di lavoro dell'organizzazione e non è ancora possibile creare un flusso di dati, il
problema potrebbe essere dovuto ai diritti di accesso in tale area di lavoro.
Motivo:
Non si hanno diritti di modifica nell'area di lavoro.
Risoluzione:
Chiedere agli amministratori o ai membri dell'area di lavoro di assegnare un ruolo amministratore, membro o
collaboratore.

Non è possibile creare un flusso di dati in un'area di lavoro in cui si


hanno diritti di modifica
Questo problema si verifica quando si è in un'area di lavoro dell'organizzazione creata o un altro utente ha
creato e si ha accesso come amministratore, membro o collaboratore. Si vuole creare un flusso di dati in questo
scenario, ma non è possibile.
Motivo:
L'accesso alla creazione del flusso di dati è stato disabilitato dall Power BI amministratore.
Risoluzione:
Chiedere all'Power BI tenant di abilitare l'accesso seguendo questa procedura:
1. Nel menu Impostazioni nel servizio Power BI, selezionare Por tale di amministrazione.
2. Nel riquadro sinistro selezionare Impostazioni tenant e nella sezione Impostazioni del flusso di dati
attivare l'interruttore per Abilitato. Selezionare quindi Applica .

Vengono visualizzati solo opzioni limitate quando si crea un flusso di


dati
Quando si crea un flusso di dati, a volte non vengono visualizzare tutte le opzioni disponibili. Ad esempio, è
possibile visualizzare solo le opzioni illustrate nell'immagine seguente.
Tuttavia, sono effettivamente disponibili altre opzioni, come illustrato nell'immagine seguente.
Motivo:
Si sta creando il flusso di dati in una versione precedente dell'area Power BI lavoro, denominata V1.
Risoluzione:
Aggiornare l Power BI area di lavoro alla nuova versione (v2). Altre informazioni: Aggiornare le aree di lavoro
classiche alle nuove aree di lavoro in Power BI
Risoluzione dei problemi relativi al flusso di dati:
Ottenere dati da un flusso di dati
07/12/2021 • 2 minutes to read

NOTE
Valido il 2020 novembre:
Common Data Service è stato rinominato in Microsoft dataverse. Altre informazioni
Una terminologia in Microsoft dataverse è stata aggiornata. Ad esempio, l' entità è ora Table e Field è ora Column.
Altre informazioni
Questo articolo verrà aggiornato a breve per riflettere la terminologia più recente.

È possibile che sia stato creato un flusso di dati, ma che sia stato difficile ottenere dati da esso (usando Power
Query in Power BI Desktop o da altri flussi di dati). Questo articolo illustra alcuni dei problemi più comuni
relativi al recupero di dati da un flusso di dati.

Errore: questa tabella è vuota


Si supponga di ottenere dati da un flusso di dati (in Power BI Desktop o in un altro flusso di dati) e di avere
accesso a tale flusso di dati. A volte, tuttavia, quando si ottengono dati da un flusso di dati nella situazione
precedente, nella finestra Strumento di navigazione viene visualizzato un messaggio che indica che la tabella è
vuota.
Motivo:
I dati non sono stati caricati nella tabella.
Risoluzione:
Negli strumenti desktop, ad esempio Power Query in Excel e Power Query in Power BI Desktop, il caricamento
dei dati nelle tabelle avviene automaticamente (a meno che non venga disabilitato). Questo comportamento è
leggermente diverso in Power Query nei flussi di dati. Nelle entità del flusso di dati i dati non verranno caricati a
meno che non vengano aggiornati.
È necessario configurare un aggiornamento pianificato per un flusso di dati oppure, se si vuole avere un solo
aggiornamento, usare — — l'opzione di aggiornamento manuale.

Dopo l'aggiornamento di un flusso di dati, i dati nelle entità saranno visibili nella finestra Strumento di
navigazione di altri strumenti e servizi.
Altre informazioni: Aggiornamento di un flusso di dati in Power BI e Impostazione della frequenza di
aggiornamento in Power Apps

Il Microsoft Power Platform non è elencato


In alcuni casi, è Microsoft Power Platform un flusso di dati creato e aggiornato, ma non è comunque possibile
accedervi tramite il comando Ottieni dati. Ciò potrebbe essere dovuto al fatto che l'account che sta tentando di
accedere al flusso di dati non ha accesso. Tuttavia, se l'account ha accesso al flusso di dati, un altro motivo
potrebbe essere il tipo di flusso di dati a cui si accede.
È possibile che venga visualizzato il messaggio di errore "È stata raggiunta la fine del buffer" o
"DataFormat.Error: È stata raggiunta la fine del buffer".

Motivo:
In un'operazione Get data from a dataflow è possibile usare solo flussi di dati analitici.
Risoluzione:
Se è stato creato un flusso di dati che archivia i dati in Dataverse, un flusso di dati standard non può essere
visualizzato usando — l'operazione Get data from a dataflow (Ottieni dati da — un flusso di dati). Tuttavia, è
possibile usare Get data from Dataverse per accedervi. In alternativa, è possibile creare un flusso di dati
analitici e quindi accedervi usando Ottenere dati da un flusso di dati.

Non è possibile stabilire una connessione DirectQuery al flusso di dati


Se si intende usare il flusso di dati come origine DirectQuery, potrebbe essere necessario abilitarlo per primo.
Motivo:
Le impostazioni avanzate del motore di calcolo sono disabilitate.
Risoluzione:
Abilitare il motore di calcoloavanzato e quindi sarà possibile connettersi al flusso di dati usando DirectQuery.
Risoluzione dei problemi del flusso di dati:
connessione all'origine dati
07/12/2021 • 2 minutes to read

Quando si crea un flusso di dati, a volte viene visualizzato un errore di connessione all'origine dati. Questo
errore può essere causato dal gateway, dalle credenziali o da altri motivi. Questo articolo illustra gli errori e i
problemi di connessione più comuni e la relativa risoluzione.

Errore: è necessario un gateway dati locale per connettersi


Questo problema può verificarsi quando si sposta una query da Power Query negli strumenti desktop a Power
Query nel flusso di dati e viene visualizzato l'errore "È necessario un gateway dati locale per connettersi".

Motivo:
Quando l'entità nel flusso di dati ottiene dati da un'origine dati locale, è necessario un gateway per la
connessione, ma il gateway non è stato selezionato.
Risoluzione:
Selezionare Selezionare il gateway. Se il gateway non è ancora stato configurato, vedere Installare un
gateway dati locale.

Errore: Specificare la modalità di connessione


Questo problema si verifica quando si è connessi a un'origine dati, ma non sono ancora state impostate le
credenziali o i dettagli della connessione. Può verificarsi quando si esegue la migrazione di query in un flusso di
dati.
Motivo:
I dettagli della connessione non sono configurati correttamente.
Risoluzione:
Selezionare Configura connessione. Configurare le credenziali e i dettagli della connessione.

Expression.Error: Il modulo denominato 'xyz' è stato disabilitato in


questo contesto
In alcuni casi, quando si esegue la migrazione delle query dal Power Query degli strumenti desktop al flusso di
dati, viene visualizzato un errore che indica che un modulo è disabilitato in questo contesto. Un esempio di
questa situazione è quando la query usa funzioni come Web.Page o Web.BrowserContents .

Motivo:
I moduli disabilitati sono correlati a funzioni che richiedono una connessione gateway dati locale per funzionare.
Anche se la funzione riceve dati da una pagina Web, a causa di alcuni requisiti di conformità alla sicurezza, deve
passare attraverso una connessione gateway.
Risoluzione:
Per prima cosa, installare e configurare un gateway locale. Aggiungere quindi un'origine dati Web per l'URL
Web a cui ci si connette.
Dopo aver aggiunto l'origine dati Web, è possibile selezionare il gateway nel flusso di dati in Opzioni Project >
opzioni .

Potrebbe essere richiesto di configurare le credenziali. Dopo aver configurato correttamente il gateway e le
credenziali, i moduli non verranno più disabilitati."
Tasti di scelta rapida in Power Query
07/12/2021 • 2 minutes to read

I tasti di scelta rapida offrono un modo rapido per spostarsi e consentire agli utenti di lavorare in modo più
efficiente. Per gli utenti con mobilità o disabilità di visione, i tasti di scelta rapida possono essere più semplici
rispetto all'uso del touchscreen e sono un'alternativa essenziale all'uso del mouse. La tabella di questo articolo
elenca tutti i collegamenti disponibili in Power Query Online.
Quando si usa Editor di query in Power Query Online, è possibile premere CTRL+? oppure passare al pulsante
Tasti di scelta rapida nella scheda Guida per visualizzare l'elenco dei tasti di scelta rapida.

Editor di query
A Z IO N E TA STO DI SC ELTA RA P IDA

Get Data CTRL+ALT+D

Immetti i dati CTRL+ALT+T

Aggiungere una colonna personalizzata CTRL+ALT+C

Scegliere la colonna CTRL+K

Vai alla colonna CTRL+G

Aggiungi colonna da esempi CTRL+E

Query vuota CTRL+M

Editor avanzato CTRL+MAIUSC+M

Aggiorna ALT+F5

Anteprima dati
A Z IO N E TA STO DI SC ELTA RA P IDA

Copiare celle/righe/colonne CTRL+C

Selezionare tutte le celle CTRL+A

Selezione colonna CTRL+SPAZIO

Q u a n d o l o st a t o a t t i v o è su l l ' i n t e st a z i o n e d i c o l o n n a

A Z IO N E TA STO DI SC ELTA RA P IDA

Menu di filtro ALT+FRECCIA GIÙ


A Z IO N E TA STO DI SC ELTA RA P IDA

Menu Cambia tipo di colonna CTRL+FRECCIA GIÙ

Spostare lo stato attivo sull'intestazione di colonna a sinistra CTRL+freccia SINISTRA

Spostare lo stato attivo sull'intestazione di colonna a destra CTRL+freccia DESTRA

Selezionare la prima colonna Home page

Selezionare l'ultima colonna Fine

Q u a n d o l o st a t o a t t i v o è su l l a c e l l a

A Z IO N E TA STO DI SC ELTA RA P IDA

Selezionare la prima cella della riga Home page

Selezionare l'ultima cella della riga Fine

Selezionare la prima cella della colonna ALT+HOME

Selezionare l'ultima cella della colonna ALT+FINE

Selezionare la prima cella della prima riga CTRL+HOME

Selezionare l'ultima cella dell'ultima riga CTRL+FINE

Selezionare la cella di una pagina verso l'alto Su di una pagina

Selezionare la cella di una pagina verso il basso Giù di una pagina

Griglia modificabile (immettere dati/tabella vuota)


A Z IO N E TA STO DI SC ELTA RA P IDA

Copiare celle/righe/colonne CTRL+C

Incollare celle/righe/colonne CTRL+V

Salvare i dati immessi CTRL+INVIO

Mostra suggerimenti (se disponibile) CTRL+SPAZIO

Editor di testo su più righe (query vuota/editor avanzato)


A Z IO N E TA STO DI SC ELTA RA P IDA

Attivare/disattivare il comportamento delle schede CTRL+M

Vista Diagramma
A Z IO N E TA STO DI SC ELTA RA P IDA

Espandere la query selezionata CTRL+freccia DESTRA

Comprimere la query selezionata CTRL+freccia SINISTRA

Spostare lo stato attivo dal livello di query al livello di ALT+FRECCIA GIÙ


passaggio

Spostare lo stato attivo dal livello di passaggio al livello di ESC


query

Espandere tutte le query CTRL+MAIUSC+tasto freccia DESTRA

Comprimere tutte le query CTRL+MAIUSC+freccia SINISTRA

Inserire un nuovo passaggio usando +pulsante (dopo il CTRL+ALT+N


passaggio selezionato)

Evidenziare le query correlate CTRL + ALT + R

Selezionare tutte le query CTRL+A

Copiare query CTRL+C

Incollare query CTRL+V

Riquadro Query
A Z IO N E TA STO DI SC ELTA RA P IDA

Selezionare tutte le query CTRL+A

Copiare query CTRL+C

Incollare query CTRL+V

Selezionare più query consecutive CTRL+freccia SU e CTRL+freccia GIÙ


Procedure consigliate per l'uso di Power Query
07/12/2021 • 11 minutes to read

Questo articolo contiene alcuni suggerimenti e consigli per ottenere il massimo dall'esperienza data wrangling
in Power Query.

Scegliere il connettore giusto


Power Query offre un numero elevato di connettori dati. Questi connettori spaziano da origini dati come file TXT,
CSV e Excel a database come Microsoft SQL Server e servizi SaaS diffusi come Microsoft Dynamics 365 e
Salesforce. Se l'origine dati non è elencata nella finestra Ottieni dati, è sempre possibile usare il connettore
ODBC o OLEDB per connettersi all'origine dati.
L'uso del connettore migliore per l'attività offre l'esperienza e le prestazioni migliori. Ad esempio, l'uso del
connettore SQL Server anziché del connettore ODBC per la connessione a un database di SQL Server non solo
offre un'esperienza Di dati molto migliore SQL Server, ma offre anche funzionalità che consentono di migliorare
l'esperienza e le prestazioni, ad esempio la visualizzazione delle query. Per altre informazioni sulla funzione di
folding della query, Power Query query folding.
Ogni connettore dati segue un'esperienza standard, come illustrato in Recupero dei dati. Questa esperienza
standardizzata ha una fase denominata Anteprima dati. In questa fase viene visualizzata una finestra semplice
per selezionare i dati che si vuole ottenere dall'origine dati, se il connettore lo consente, e una semplice
anteprima dei dati. È anche possibile selezionare più set di dati dall'origine dati tramite la finestra Strumento di
navigazione, come illustrato nell'immagine seguente.
NOTE
Per visualizzare l'elenco completo dei connettori disponibili in Power Query, vedere Connettori in Power Query.

Filtrare in anticipo
È sempre consigliabile filtrare i dati nelle prime fasi della query o il prima possibile. Alcuni connettori sfruttano i
filtri tramite la funzionalità di folding della query, come descritto in Power Query query folding. È anche
consigliabile filtrare i dati non rilevanti per il caso specifico. In questo modo sarà possibile concentrarsi meglio
sull'attività da eseguire visualizzando solo i dati rilevanti nella sezione di anteprima dei dati.
È possibile usare il menu filtro automatico che visualizza un elenco distinto dei valori trovati nella colonna per
selezionare i valori da mantenere o filtrare. È anche possibile usare la barra di ricerca per trovare i valori nella
colonna.

È anche possibile sfruttare i filtri specifici del tipo, ad esempio In the previous per una colonna date, datetime o
even date timezone.
Questi filtri specifici del tipo consentono di creare un filtro dinamico che recupererà sempre i dati del precedente
x numero di secondi, minuti, ore, giorni, settimane, mesi, trimestri o anni, come illustrato nell'immagine
seguente.

NOTE
Per altre informazioni sul filtro dei dati in base ai valori di una colonna, vedere Filtrare in base ai valori.

Eseguire operazioni costose per ultime


Alcune operazioni richiedono la lettura dell'origine dati completa per restituire i risultati e pertanto l'anteprima
nel editor di Power Query. Ad esempio, se si esegue un ordinamento, è possibile che le prime righe ordinate
siano alla fine dei dati di origine. Pertanto, per restituire i risultati, l'operazione di ordinamento deve prima
leggere tutte le righe.
Altre operazioni, ad esempio i filtri, non devono leggere tutti i dati prima di restituire risultati. Al contrario,
operano sui dati in un modo definito "streaming". I dati vengono trasmessi da e i risultati vengono restituiti
lungo il percorso. Nell'editor di Power Query queste operazioni devono solo leggere una parte sufficiente dei
dati di origine per popolare l'anteprima.
Quando possibile, eseguire prima queste operazioni di streaming ed eseguire le operazioni più costose per
ultime. Ciò consente di ridurre al minimo il tempo di attesa dell'anteprima per il rendering ogni volta che si
aggiunge un nuovo passaggio alla query.

Lavorare temporaneamente su un subset di dati


Se l'aggiunta di nuovi passaggi alla query nel editor di Power Query è lenta, è consigliabile eseguire prima di
tutto un'operazione "Mantieni le prime righe" e limitare il numero di righe su cui si sta lavorando. Dopo aver
aggiunto tutti i passaggi necessari, rimuovere il passaggio "Mantieni le prime righe".

Usare i tipi di dati corretti


Alcune funzionalità di Power Query sono contestuali al tipo di dati della colonna selezionata. Ad esempio,
quando si seleziona una colonna data, saranno disponibili le opzioni disponibili nel gruppo di colonne Data e
ora del menu Aggiungi colonna. Se tuttavia per la colonna non è impostato un tipo di dati, queste opzioni
saranno disattivate.

Una situazione simile si verifica per i filtri specifici del tipo, perché sono specifici di determinati tipi di dati. Se per
la colonna non è definito il tipo di dati corretto, questi filtri specifici del tipo non saranno disponibili.
È fondamentale usare sempre i tipi di dati corretti per le colonne. Quando si lavora con origini dati strutturate,
ad esempio i database, le informazioni sul tipo di dati verranno derivate dallo schema della tabella presente nel
database. Tuttavia, per le origini dati non strutturate, ad esempio i file TXT e CSV, è importante impostare i tipi di
dati corretti per le colonne provenienti da tale origine dati. Per impostazione predefinita, Power Query
rilevamento automatico dei tipi di dati per le origini dati non strutturate. Per altre informazioni su questa
funzionalità e su come può essere utile, vedere Tipi di dati.

NOTE
Per altre informazioni sull'importanza dei tipi di dati e su come lavorare con essi, vedere Tipi di dati.

Esplorare i dati
Prima di iniziare a preparare i dati e aggiungere nuovi passaggi di trasformazione, è consigliabile abilitare gli
strumenti di profilatura dei dati di Power Query per individuare facilmente le informazioni sui dati.
Questi strumenti di profilatura dei dati consentono di comprendere meglio i dati. Gli strumenti offrono piccole
visualizzazioni che mostrano le informazioni in base alle colonne, ad esempio:
Qualità delle colonne — Fornisce un piccolo grafico a barre e tre indicatori con la rappresentazione del
numero di valori nella colonna che rientrano nelle categorie di valori validi, di errore o vuoti.
Distribuzione delle colonne — Fornisce un set di oggetti visivi sotto i nomi delle colonne che illustrano la
frequenza e la distribuzione dei valori in ognuna delle colonne.
Profilo colonna — Fornisce una visualizzazione più completa della colonna e delle statistiche associate.
È anche possibile interagire con queste funzionalità, che consentono di preparare i dati.

NOTE
Per altre informazioni sugli strumenti di profilatura dei dati, vedere Strumenti di profilatura dati.

Documentare il lavoro
È consigliabile documentare le query rinominando o aggiungendo una descrizione ai passaggi, alle query o ai
gruppi in base alle esigenze.
Anche Power Query crea automaticamente un nome di passaggio nel riquadro dei passaggi applicati, è anche
possibile rinominare i passaggi o aggiungere una descrizione a uno di essi.

NOTE
Per altre informazioni su tutte le funzionalità e i componenti disponibili nel riquadro dei passaggi applicati, vedere Uso
dell'elenco Passaggi applicati.

Adottare un approccio modulare


È possibile creare una singola query contenente tutte le trasformazioni e i calcoli che potrebbero essere
necessari. Tuttavia, se la query contiene un numero elevato di passaggi, potrebbe essere consigliabile
suddividere la query in più query, in cui una query fa riferimento a quella successiva. L'obiettivo di questo
approccio è semplificare e separare le fasi di trasformazione in parti più piccole in modo che siano più facili da
comprendere.
Si supponga, ad esempio, di avere una query con i nove passaggi illustrati nell'immagine seguente.

È possibile suddividere questa query in due nel passaggio della tabella Merge with Prices . In questo modo
è più facile comprendere i passaggi applicati alla query di vendita prima dell'unione. Per eseguire questa
operazione, fare clic con il pulsante destro del mouse sul passaggio della tabella Merge with Prices e
selezionare l'opzione Estrai precedente.

Verrà quindi visualizzata una finestra di dialogo per assegnare un nome alla nuova query. In questo modo la
query verrà suddivisa in due query. Una query avrà tutte le query prima dell'unione. L'altra query avrà un
passaggio iniziale che farà riferimento alla nuova query e al resto dei passaggi della query originale dal
passaggio Merge con la tabella Prices verso il basso.

È anche possibile sfruttare l'uso dei riferimenti alle query nel modo più adatto. È tuttavia una buona idea
mantenere le query a un livello che a prima vista non sembra osare con così tanti passaggi.

NOTE
Per altre informazioni sui riferimenti alle query, vedere Informazioni sul riquadro delle query.

Creare i gruppi
Un ottimo modo per organizzare il lavoro è sfruttare l'uso dei gruppi nel riquadro delle query.
L'unico scopo dei gruppi è quello di mantenere il lavoro organizzato fungendo da cartelle per le query. Se
necessario, è possibile creare gruppi all'interno dei gruppi. Lo spostamento di query tra gruppi è semplice come
il trascinamento della selezione.
Provare a assegnare ai gruppi un nome significativo che sia sensato per l'utente e per il caso specifico.

NOTE
Per altre informazioni su tutte le funzionalità e i componenti disponibili disponibili nel riquadro delle query, vedere
Informazioni sul riquadro delle query.

Query a prova di futuro


Assicurarsi di creare una query che non presenti problemi durante un aggiornamento futuro è una priorità
assoluta. Sono disponibili diverse funzionalità in Power Query rendere la query resiliente alle modifiche e in
grado di eseguire l'aggiornamento anche quando alcuni componenti dell'origine dati cambiano.
È consigliabile definire l'ambito della query in base alle attività da eseguire e alle relative attività in termini di
struttura, layout, nomi di colonna, tipi di dati e qualsiasi altro componente che si consideri rilevante per l'ambito.
Di seguito sono riportati alcuni esempi di trasformazioni che consentono di rendere la query resiliente alle
modifiche:
Se la query include un numero dinamico di righe con dati, ma un numero fisso di righe che fungono da
piè di pagina da rimuovere, è possibile usare la funzionalità Rimuovi righe in basso.

NOTE
Per altre informazioni sul filtro dei dati in base alla posizione di riga, vedere Filtrare una tabella in base alla
posizione di riga.

Se la query ha un numero dinamico di colonne, ma è necessario selezionare solo colonne specifiche dal
set di dati, è possibile usare la funzionalità Scegli colonne.
NOTE
Per altre informazioni sulla scelta o la rimozione di colonne, vedere Scegliere o rimuovere colonne.

Se la query ha un numero dinamico di colonne ed è necessario eseguire il unpivot solo di un subset delle
colonne, è possibile usare la funzionalità UnPivot solo colonne selezionate.

NOTE
Per altre informazioni sulle opzioni per l'unpivot delle colonne, vedere UnPivot columns.

Se la query include un passaggio che modifica il tipo di dati di una colonna, ma alcune celle generano
errori perché i valori non sono conformi al tipo di dati desiderato, è possibile rimuovere le righe che
hanno restituito valori di errore.

NOTE
Per altre informazioni sull'uso e sulla gestione degli errori, vedere Gestione degli errori.

Usare i parametri
La creazione di query dinamiche e flessibili è una procedura consigliata. I parametri Power Query consentono di
rendere le query più dinamiche e flessibili. Un parametro consente di archiviare e gestire facilmente un valore
che può essere riutilizzato in molti modi diversi. Ma viene usato più comunemente in due scenari:
Argomento passaggio — È possibile usare un parametro come argomento di più trasformazioni
guidate dall'interfaccia utente.

Argomento della funzione personalizzata — È possibile creare una nuova funzione da una query e
fare riferimento ai parametri come argomenti della funzione personalizzata.
I vantaggi principali della creazione e dell'uso dei parametri sono:
Visualizzazione centralizzata di tutti i parametri tramite la finestra Gestisci parametri.
Riutilizzabilità del parametro in più passaggi o query.
Semplifica e semplifica la creazione di funzioni personalizzate.
È anche possibile usare i parametri in alcuni argomenti dei connettori dati. Ad esempio, è possibile creare un
parametro per il nome del server durante la connessione al database SQL Server database. È quindi possibile
usare tale parametro nella finestra di dialogo SQL Server database.
Se si modifica il percorso del server, è necessario aggiornare il parametro per il nome del server e le query
verranno aggiornate.

NOTE
Per altre informazioni sulla creazione e sull'uso dei parametri, vedere Uso dei parametri.

Creare funzioni riutilizzabili


Se ci si trova in una situazione in cui è necessario applicare lo stesso set di trasformazioni a query o valori
diversi, la creazione di una funzione personalizzata Power Query che può essere riutilizzata tutte le volte che è
necessario potrebbe essere utile. Una Power Query funzione personalizzata è un mapping da un set di valori di
input a un singolo valore di output e viene creata da funzioni e operatori M nativi.
Ad esempio, si supponga di avere più query o valori che richiedono lo stesso set di trasformazioni. È possibile
creare una funzione personalizzata che in un secondo momento può essere richiamata sulle query o i valori di
propria scelta. Questa funzione personalizzata consente di risparmiare tempo e di gestire il set di trasformazioni
in una posizione centrale, che è possibile modificare in qualsiasi momento.
Power Query funzioni personalizzate possono essere create da query e parametri esistenti. Si supponga, ad
esempio, di avere diversi codici come stringa di testo e di voler creare una funzione che decodifica tali valori.

Si inizia con un parametro con un valore che funge da esempio.


Da tale parametro viene creata una nuova query in cui applicare le trasformazioni necessarie. In questo caso, si
vuole dividere il codice PTY-CM1090-L AX in più componenti:
Origin = PTY
Destinazione = LAX
Airline = CM
FlightID = 1090

È quindi possibile trasformare la query in una funzione facendo clic con il pulsante destro del mouse sulla query
e scegliendo Crea funzione . Infine, è possibile richiamare la funzione personalizzata in qualsiasi query o valore,
come illustrato nell'immagine seguente.
Dopo alcune altre trasformazioni, è possibile vedere che è stato raggiunto l'output desiderato e si è sfruttata la
logica per una trasformazione di questo tipo da una funzione personalizzata.

NOTE
Per altre informazioni su come creare e usare funzioni personalizzate in Power Query dall'articolo Funzioni personalizzate.
Power Query feedback
07/12/2021 • 2 minutes to read

Questo articolo descrive come ottenere supporto o inviare commenti e suggerimenti per Power Query.
Per Power Quer y connettori, passare a Feedback e supporto per Power Query connettori.
Per Power Quer y documentazione, è possibile inviare commenti e suggerimenti tramite il collegamento
Invia e visualizza commenti e suggerimenti per - Questa pagina nella parte inferiore di ogni articolo.

Supporto e risoluzione dei problemi


Se si verifica un problema con Power Query, usare i canali di supporto dedicati per il prodotto Power Query in
uso. Ad esempio, per Power BI, visitare la pagina Power BI supporto tecnico.
È anche possibile usare una delle risorse della community seguenti:
Power Query su Microsoft Q&A
Community forum per il prodotto in uso Power Query in. Ad esempio, per Power BI, questo forum sarà il
Power BI Community
Power Query risorse del sito Web

Invio di commenti e suggerimenti


Per inviare commenti e suggerimenti Power Query, inviare il feedback al forum "Ideas" per il prodotto Power
Query in uso. Ad esempio, per Power BI, visitare il forum Power BI ideas. Se ne hai uno, puoi anche inviare
commenti e suggerimenti direttamente al tuo account Microsoft contatto.
Riduzione della query di Power Query
07/12/2021 • 5 minutes to read

Questo articolo è destinato ai modeler di dati che sviluppano modelli in Power Pivot o Power BI Desktop.
Descrive qual è la Power Query della query e il motivo per cui è importante nelle progettazioni del modello di
dati. Questo articolo descrive anche le origini dati e le trasformazioni che possono ottenere la ripiegatura delle
query e come determinare che le query Power Query possono essere ripiegate, indipendentemente dal fatto che
siano completamente o parzialmente.
La funzionalità di ripiegamento delle query consente a una query Power Query generare una singola istruzione
di query per recuperare e trasformare i dati di origine. Il Power Query mashup si impegna per ottenere la
folding delle query quando possibile per motivi di efficienza.
La riduzione della query è un argomento importante per la modellazione dei dati per diversi motivi:
Impor tare tabelle del modello: L'aggiornamento dei dati avviene in modo efficiente per le tabelle del
modello di importazione (Power Pivot o Power BI Desktop), in termini di utilizzo delle risorse e durata
dell'aggiornamento.
Tabelle DirectQuer y e Modalità di archiviazione doppia: Ogni tabella directquery e doppia modalità di
archiviazione (solo Power BI) deve essere basata su una query Power Query che può essere ripiegata.
Aggiornamento incrementale: L'aggiornamento incrementale dei Power BI sarà efficiente, in termini di
utilizzo delle risorse e durata dell'aggiornamento. La finestra di configurazione Power BI aggiornamento
incrementale segnalerà infatti un avviso nel caso in cui non sia possibile ottenere la ripiega delle query per
la tabella. Se non è possibile raggiungerlo, l'obiettivo dell'aggiornamento incrementale viene raggiunto. Il
motore Mashup dovrà quindi recuperare tutte le righe di origine e poi applicare i filtri per determinare le
modifiche incrementali.
La riduzione della query può verificarsi per un'intera query di Power Query o per un subset dei passaggi.
Quando non è possibile ottenere la ripiego delle query, parzialmente o completamente, il motore Power Query
mashup deve compensare elaborando le trasformazioni dei dati. Questo processo può comportare il recupero
dei risultati delle query di origine, che per set di dati di grandi dimensioni è molto intensivo e lento.
È consigliabile cercare di raggiungere l'efficienza nelle progettazioni del modello assicurando che la folding delle
query si verifichi ogni volta che è possibile.

Origini che supportano la funzionalità di ripiegamento


La maggior parte delle origini dati che prevede il concetto di linguaggio di query supporta la riduzione della
query. Queste origini dati possono includere i database relazionali, i feed OData (inclusi gli elenchi di
SharePoint), Exchange e Active Directory. Origini dati quali file flat, BLOB e Web, tuttavia, in genere non la
supportano.

Trasformazioni che possono ottenere il folding


Le trasformazioni di origini dati relazionali che supportano la riduzione della query sono quelle che possono
essere scritte come una singola istruzione SELECT. Un'istruzione SELECT può essere costruita con clausole
WHERE, GROUP BY e JOIN appropriate. Può inoltre contenere espressioni di colonna (calcoli) che usano funzioni
predefinite comuni supportate dai database SQL.
In genere, l'elenco seguente descrive le trasformazioni che possono essere ripiegate su query.
Rimozione di colonne.
Ridenominazione delle colonne (alias di colonna SELECT).
Filtro di righe, con valori statici o Power Query parametri (predicati della clausola WHERE).
Raggruppamento e riepilogo (clausola GROUP BY).
Espansione di colonne di record (colonne chiave esterna di origine) per ottenere un join di due tabelle di
origine (clausola JOIN).
Unione non fuzzy di query fold-able basate sulla stessa origine (clausola JOIN).
Aggiunta di query fold-able basate sulla stessa origine (operatore UNION ALL).
Aggiunta di colonne personalizzate con logica semplice (SELECT espressioni colonna). La logica semplice
implica operazioni non complicate, possibilmente includendo l'uso di funzioni M che hanno funzioni
equivalenti nell'origine dati SQL, ad esempio funzioni matematiche o di manipolazione del testo. Ad
esempio, le espressioni seguenti restituiscono il componente anno del valore della colonna OrderDate
(per restituire un valore numerico).

Date.Year([OrderDate])

Pivot e unpivot (operatori PIVOT e UNPIVOT).

Trasformazioni che impediscono la ripiegamento


In genere, l'elenco seguente descrive le trasformazioni che impediscono la visualizzazione delle query. Questo
elenco non deve essere un elenco completo.
Unione di query basate su origini diverse.
Aggiunta di query (unione) basate su origini diverse.
Aggiunta di colonne personalizzate con logica complessa. La logica complessa implica l'uso di funzioni M
che non hanno funzioni equivalenti nell'origine dati. Ad esempio, le espressioni seguenti formattano il
valore della colonna OrderDate (per restituire un valore di testo).

Date.ToText([OrderDate], "yyyy")

Aggiunta di colonne di indice.


Modifica del tipo di dati di una colonna.
Si noti che quando una query Power Query include più origini dati, l'incompatibilità dei livelli di privacy
dell'origine dati può impedire l'esecuzione della riduzione della query. Per altre informazioni, vedere l'articolo
Power BI Desktop livelli di privacy.

Determinare quando è possibile la riduzione della query


Nella finestra editor di Power Query è possibile determinare quando è possibile Power Query una query. Nel
riquadro Quer y Impostazioni, quando si fa clic con il pulsante destro del mouse sull'ultimo passaggio
applicato, se l'opzione Visualizza query nativa è abilitata (non disattivata), l'intera query può essere ripiegata.
NOTE
L'opzione Visualizza quer y nativa è disponibile solo per determinati database relazionali/SQL connettori di
generazione. Non funziona per i connettori basati su OData, ad esempio, anche se si sta verificando un'operazione di
ripiegamento nel back-end. La funzionalità Diagnostica query è il modo migliore per vedere cosa si è verificato per i
connettori non SQL (anche se i passaggi che si ripiegano non sono esplicitamente indicati, è sufficiente visualizzare l'URL
risultante — generato).

Per visualizzare la query ripiegata, selezionare l'opzione Visualizza quer y nativa. Verrà quindi visualizzata la
query nativa che verrà Power Query per l'origine dati.
Se l'opzione Visualizza quer y nativa non è abilitata (disattivata), è evidente che non tutti i passaggi della
query possono essere ripiegati. Tuttavia, potrebbe significare che è comunque possibile ridurre un subset di
passaggi. A partire dall'ultimo passaggio, è possibile controllare ogni passaggio per verificare se l'opzione
Visualizza quer y nativa è abilitata. In tal caso, si è appreso dove, nella sequenza di passaggi, non è più
possibile ottenere la folding delle query.

Passaggi successivi
Per altre informazioni sul ripiegamento delle query e sugli articoli correlati, vedere le risorse seguenti:
Indicazioni sulle procedure consigliate per la visualizzazione delle query
Usare modelli compositi in Power BI Desktop
Aggiornamento incrementale in Power BI Premium
Uso di Table.View per implementare la riduzione della query
Come funziona la corrispondenza fuzzy in Power
Query?
07/12/2021 • 3 minutes to read

Power Query funzionalità quali l'unione fuzzy,i valori del clustere il raggruppamento fuzzy usano gli stessi
meccanismi per funzionare come corrispondenza fuzzy.
Questo articolo illustra molti scenari che illustrano come sfruttare le opzioni disponibili per la corrispondenza
fuzzy con l'obiettivo di rendere "fuzzy" chiaro.

Modificare la soglia di somiglianza


Lo scenario migliore per l'applicazione dell'algoritmo di corrispondenza fuzzy è quando tutte le stringhe di testo
in una colonna contengono solo le stringhe che devono essere confrontate e non componenti aggiuntivi. Ad
esempio, il Apples confronto con produce punteggi di 4ppl3s somiglianza più elevati rispetto al confronto
Apples con My favorite fruit, by far, is Apples. I simply love them! .

Questo perché la parola nella seconda stringa è solo una piccola parte dell'intera stringa di testo che Apples
restituisce un punteggio di somiglianza inferiore.
Esaminare il set di dati seguente costituito dalle risposte di un sondaggio con una sola domanda "Qual è il tuo
frutto preferito?".

F RUT TA

Mirtilli

I mirtilli sono semplicemente i migliori

Fragole

Strawberries = <3

Mele

'sples

4ppl3s

Banane

fav fruit is bananas

Bonaparte

Il mio frutto preferito, di gran lunga, è Apples. Semplicemente li amo!

Il sondaggio ha fornito una singola casella di testo per immettere il valore e senza convalida.
A questo punto si ha l'attività di clustering dei valori. A tale scopo, caricare la tabella precedente di frutta in
Power Query, selezionare la colonna e quindi selezionare l'opzione che legge Valori cluster nel menu Aggiungi
colonna nella barra multifunzione.

Verrà visualizzata la finestra di dialogo Valori cluster in cui è possibile specificare il nome della nuova
colonna. Assegnare a questa nuova colonna il nome Cluster e selezionare OK.

Per impostazione predefinita, Power Query una soglia di somiglianza pari a 0,8 (o 80%) e il risultato
dell'operazione precedente restituisce la tabella seguente con una nuova colonna Cluster:
Anche se il clustering è stato eseguito, non vengono restituiti i risultati previsti per tutte le righe. La riga numero
due (2) ha ancora il valore , ma deve essere raggruppata in cluster in e accade qualcosa di simile alle stringhe di
testo Blue berries are simply the best Blueberries , e Strawberries = <3 fav fruit is bananas
My favorite fruit, by far, is Apples. I simply love them! .

Si vuole determinare la causa di questo clustering. A tale scopo, è possibile fare doppio clic sul passaggio Valori
cluster per tornare alla finestra Valori cluster. All'interno di questa finestra espandere il testo che legge le
opzioni del cluster Fuzzy e abilitare l'opzione Mostra punteggi di somiglianza come illustrato nell'immagine
seguente e fare clic sul pulsante OK:

Se si abilita l'opzione Mostra punteggi di somiglianza, nella tabella verrà visualizzata una nuova colonna che
mostra esattamente il punteggio di somiglianza tra il cluster definito e il valore originale.
A un'analisi più a più a Power Query possibile trovare altri valori entro la soglia di somiglianza per le stringhe di
testo Blue berries are simply the best Strawberries = <3 , , e fav fruit is bananas
My favorite fruit, by far, is Apples. I simply love them! .

È possibile tornare alla finestra di dialogo Valori cluster ancora una volta facendo doppio clic sul passaggio
Valori cluster e modificando la soglia di somiglianza da 0,8 a 0,6, come illustrato nell'immagine seguente:

Questa modifica consente di avvicinarsi al risultato che si sta cercando, ad eccezione della stringa di testo
My favorite fruit, by far, is Apples. I simply love them! . Questo perché modificando il valore della soglia di
somiglianza da 0,8 a 0,6 Power Query è ora possibile usare i valori con un punteggio di somiglianza che iniziano
da 0,6 fino a 1.
NOTE
Power Query usa sempre il valore più vicino alla soglia per definire i cluster. La soglia definisce il limite inferiore del
punteggio di somiglianza accettabile per creare assegnare il valore a un cluster.

È possibile riprovare modificando il punteggio di somiglianza da 0,6 a un numero inferiore fino a ottenere i
risultati previsti. In questo caso, modificare il punteggio di somiglianza su 0,5, che restituisce il risultato esatto
previsto con la stringa di testo ora assegnata al cluster, come illustrato nell'immagine
My favorite fruit, by far, is Apples. I simply love them! Apples successiva:

NOTE
Attualmente solo la funzionalità Valori cluster in Power Query Online fornirà una nuova colonna con il punteggio di
somiglianza.
Dietro le quinte del firewall per la privacy dei dati
07/12/2021 • 14 minutes to read

Se si è usato Power Query per un periodo di tempo, è probabile che sia stato riscontrato. In questo caso, quando
improvvisamente si verifica un errore che non può essere corretto da nessuna quantità di ricerca online,
modifica delle query o bashing della tastiera. Un errore simile al seguente:
Formula.Firewall: Query 'Query1' (step 'Source') references other queries or steps, so it may not directly
access a data source. Please rebuild this data combination.

O forse:
Formula.Firewall: Query 'Query1' (step 'Source') is accessing data sources that have privacy levels which
cannot be used together. Please rebuild this data combination.

Questi errori sono il risultato del Firewall sulla privacy dei dati di Power Query (noto anche come Firewall), che a
volte può sembrare che esista esclusivamente per frustrare gli analisti dei dati in tutto il Formula.Firewall
mondo. Che ci si creda o meno, tuttavia, il firewall ha uno scopo importante. In questo articolo verrà illustrato
come funziona meglio. Grazie a una maggiore comprensione, si spera di poter diagnosticare e correggere
meglio gli errori del firewall in futuro.

Che cos'è?
Lo scopo del Firewall sulla privacy dei dati è semplice: esiste per impedire Power Query perdita involontaria di
dati tra le origini.
Perché è necessario? Voglio dire, si potrebbe sicuramente creare una M che passerebbe un SQL valore a un feed
OData. Ma si tratta di una perdita intenzionale di dati. L'autore del mashup saprebbe (o almeno dovrebbe)
eseguire questa operazione. Perché quindi la necessità di protezione da perdite di dati non intenzionali?
La risposta? Pieghevole.

Pieghevole?
La folding è un termine che si riferisce alla conversione di espressioni in M (ad esempio filtri, ridenominazioni,
join e così via) in operazioni su un'origine dati non elaborata (ad esempio SQL, OData e così via). Una parte
notevole della potenza di Power Query deriva dal fatto che PQ può convertire le operazioni eseguite da un
utente tramite la relativa interfaccia utente in linguaggi di origine dati SQL complessi o in altri linguaggi di
origine dati back-end, senza che l'utente abbia bisogno di conoscere queste lingue. Gli utenti ottengono il
vantaggio in termini di prestazioni delle operazioni sulle origini dati native, con la facilità d'uso di un'interfaccia
utente in cui tutte le origini dati possono essere trasformate usando un set comune di comandi.
Come parte del folding, PQ può talvolta determinare che il modo più efficiente per eseguire un determinato
mashup è quello di prendere dati da un'origine e passarlo a un'altra. Ad esempio, se si unisce un file CSV di
piccole dimensioni a una tabella SQL di grandi dimensioni, probabilmente non si vuole che PQ levi il file CSV,
levi l'intera tabella SQL e quindi li uni insieme nel computer locale. È probabile che PQ inline i dati CSV in
un'istruzione SQL e chiedere al database SQL di eseguire il join.
Questo è il modo in cui può verificarsi una perdita di dati non intenzionale.
Imagine se si univano dati SQL che includevano i numeri di previdenza sociale dei dipendenti con i risultati di un
feed OData esterno e improvvisamente si è scoperto che i numeri di previdenza sociale di SQL venivano inviati
al servizio OData. Brutte notizie, giusto?
Questo è il tipo di scenario che il firewall ha lo scopo di evitare.

Come funziona?
Il firewall esiste per impedire l'invio involontario di dati provenienti da un'origine a un'altra origine. Abbastanza
semplice.
In che modo viene quindi eseguita questa missione?
A tale scopo, suddividere le query M in un elemento denominato partizioni e quindi rispettare la regola
seguente:
Una partizione può accedere a origini dati compatibili o fare riferimento ad altre partizioni, ma non a
entrambe.
Semplice... ma confondere. Che cos'è una partizione? Cosa rende due origini dati "compatibili"? E perché il
firewall deve occuparsi se una partizione vuole accedere a un'origine dati e fare riferimento a una partizione?
Si esamini la regola precedente un elemento alla volta.
Che cos'è una partizione?
Al livello più semplice, una partizione è solo una raccolta di uno o più passaggi di query. La partizione più
granulare possibile (almeno nell'implementazione corrente) è un singolo passaggio. Le partizioni più grandi
possono talvolta includere più query. Altre informazioni più avanti.
Se non si ha familiarità con i passaggi, è possibile visualizzarli a destra della finestra editor di Power Query dopo
aver selezionato una query nel riquadro Passaggi applicati. I passaggi tengono traccia di tutto ciò che è stato
fatto per trasformare i dati nella forma finale.
Partizioni che fanno riferimento ad altre partizioni
Quando una query viene valutata con firewall attivato, il firewall divide la query e tutte le relative dipendenze in
partizioni, ovvero gruppi di passaggi. Ogni volta che una partizione fa riferimento a un elemento in un'altra
partizione, il firewall sostituisce il riferimento con una chiamata a una funzione speciale denominata
Value.Firewall . In altre parole, il firewall non consente alle partizioni di accedere a vicenda in modo casuale.
Tutti i riferimenti vengono modificati per passare attraverso il firewall. Si pensi al firewall come a un gatekeeper.
Una partizione che fa riferimento a un'altra partizione deve ottenere l'autorizzazione del firewall a tale scopo e il
firewall controlla se i dati a cui si fa riferimento saranno consentiti o meno nella partizione.
Tutto questo può sembrare piuttosto astratto, quindi si esamini un esempio.
Si supponga di avere una query denominata Employees, che esegue il pull di alcuni dati da un database SQL
database. Si supponga di avere anche un'altra query (EmployeesReference), che fa semplicemente riferimento a
Employees.

shared Employees = let


Source = Sql.Database(…),
EmployeesTable = …
in
EmployeesTable;

shared EmployeesReference = let


Source = Employees
in
Source;

Queste query verranno suddivise in due partizioni: una per la query Employees e una per la query
EmployeesReference (che farà riferimento alla partizione Employees). Quando vengono valutate con il firewall
attivato, queste query verranno riscritte in questo modo:
shared Employees = let
Source = Sql.Database(…),
EmployeesTable = …
in
EmployeesTable;

shared EmployeesReference = let


Source = Value.Firewall("Section1/Employees")
in
Source;

Si noti che il semplice riferimento alla query Employees è stato sostituito da una chiamata a , a cui viene fornito
il Value.Firewall nome completo della query Employees.
Quando employeesReference viene valutato, la chiamata a viene intercettata dal firewall, che ora ha la possibilità
di controllare se (e come) i dati richiesti passano alla Value.Firewall("Section1/Employees") partizione
EmployeesReference. Può eseguire un numero qualsiasi di operazioni: negare la richiesta, eseguire il buffer dei
dati richiesti (impedendo che si verifichi un'ulteriore ripiegamento nell'origine dati originale) e così via.
Questo è il modo in cui il firewall mantiene il controllo sul flusso dei dati tra le partizioni.
Partizioni che accedono direttamente alle origini dati
Si supponiamo di definire una query Query1 con un solo passaggio (si noti che questa query a passaggio
singolo corrisponderà a una partizione del firewall) e che questo singolo passaggio accede a due origini dati:
una tabella di database SQL e un file CSV. In che modo il firewall si occupa di questo problema, poiché non
esiste alcun riferimento alla partizione e quindi nessuna chiamata a Value.Firewall per intercettarlo?
Esaminare la regola indicata in precedenza:
Una partizione può accedere a origini dati compatibili o fare riferimento ad altre partizioni, ma non a
entrambe.
Per consentire l'esecuzione della query a partizione singola ma a due origini dati, le due origini dati devono
essere "compatibili". In altre parole, deve essere possibile condividere i dati tra di essi. In termini di interfaccia
Power Query, ciò significa che i livelli di privacy delle origini dati SQL e CSV devono essere entrambi pubblici o
entrambi essere aziendali. Se entrambi sono contrassegnati come Privati o se uno è contrassegnato come
Pubblico e uno è contrassegnato come Aziendale o è contrassegnato con un'altra combinazione di livelli di
privacy, non è sicuro che entrambi siano valutati nella stessa partizione. In questo modo si verificherebbe una
perdita di dati non sicura (a causa della ripiegamento) e il firewall non avrebbe alcun modo per impedirlo.
Cosa accade se si tenta di accedere a origini dati incompatibili nella stessa partizione?
Formula.Firewall: Query 'Query1' (step 'Source') is accessing data sources that have privacy levels which
cannot be used together. Please rebuild this data combination.

Si spera ora di comprendere meglio uno dei messaggi di errore elencati all'inizio di questo articolo.
Si noti che questo requisito di compatibilità si applica solo all'interno di una determinata partizione. Se una
partizione fa riferimento ad altre partizioni, le origini dati delle partizioni a cui si fa riferimento non devono
essere compatibili tra loro. Ciò è dovuto al fatto che il firewall può bufferare i dati, impedendo qualsiasi ulteriore
ripiegamento sull'origine dati originale. I dati verranno caricati in memoria e trattati come se provenivano da
nessuna parte.
Perché non eseguire entrambe le operazioni?
Si supponiamo di definire una query con un solo passaggio (che corrisponderà di nuovo a una partizione) che
accede ad altre due query, ovvero altre due partizioni. Cosa succede se si vuole, nello stesso passaggio, anche
accedere direttamente a un database SQL database? Perché una partizione non può fare riferimento ad altre
partizioni e accedere direttamente a origini dati compatibili?
Come si è visto in precedenza, quando una partizione fa riferimento a un'altra partizione, il firewall funge da
gatekeeper per tutti i dati che fluivano nella partizione. A tale scopo, deve essere in grado di controllare i dati
consentiti. Se sono presenti origini dati a cui si accede all'interno della partizione, nonché dati che fluiranno da
altre partizioni, perde la possibilità di essere il gatekeeper, poiché i dati che fluivano in potrebbero essere persi in
una delle origini dati a cui si accede internamente senza che ne sia a conoscenza. Il firewall impedisce quindi a
una partizione che accede ad altre partizioni di accedere direttamente alle origini dati.
Cosa accade quindi se una partizione prova a fare riferimento ad altre partizioni e ad accedere direttamente alle
origini dati?
Formula.Firewall: Query 'Query1' (step 'Source') references other queries or steps, so it may not directly
access a data source. Please rebuild this data combination.

Si spera ora di comprendere meglio l'altro messaggio di errore elencato all'inizio di questo articolo.
Partizioni approfondite
Come si può immaginare dalle informazioni precedenti, il modo in cui le query vengono partizionate è
estremamente importante. Se sono presenti alcuni passaggi che fanno riferimento ad altre query e altri
passaggi che accedono alle origini dati, è ora possibile riconoscere che il disegno dei limiti di partizione in
determinate posizioni causerà errori del firewall, mentre il disegno in altre posizioni consentirà l'esecuzione
della query.
In che modo le query vengono partizionate esattamente?
Questa sezione è probabilmente la più importante per comprendere il motivo per cui vengono visualizzati gli
errori del firewall, nonché per capire come risolverli (laddove possibile).
Ecco un riepilogo di alto livello della logica di partizionamento.
Partizionamento iniziale
Crea una partizione per ogni passaggio in ogni query
Fase statica
Questa fase non dipende dai risultati della valutazione. Si basa invece sulla struttura delle query.
Rimozione dei parametri
Taglia le partizioni parameter-esque, cio? qualsiasi partizione che:
Non fa riferimento ad altre partizioni
Non contiene chiamate di funzione
Non è ciclico(ovvero non fa riferimento a se stesso)
Si noti che la "rimozione" di una partizione la include in modo efficace in qualsiasi altra
partizione che la fa riferimento.
Il trimming delle partizioni dei parametri consente il funzionamento dei riferimenti ai parametri
usati nelle chiamate di funzione dell'origine dati (ad esempio , ) anziché generare errori di tipo
"la partizione non può fare riferimento a origini dati e altri Web.Contents(myUrl) passaggi".
Raggruppamento (statico)
Le partizioni vengono unite, mantenendo la separazione tra:
Partizioni in query diverse
Partizioni che fanno riferimento ad altre partizioni rispetto a quelle che non lo fanno
Fase dinamica
Questa fase dipende dai risultati della valutazione, incluse le informazioni sulle origini dati accessibili
da varie partizioni.
Taglio
Taglia le partizioni che soddisfano tutti i requisiti seguenti:
Non accede ad alcuna origine dati
Non fa riferimento ad alcuna partizione che accede alle origini dati
Non è ciclico
Raggruppamento (dinamico)
Ora che le partizioni non necessarie sono state rimosse, provare a creare partizioni di origine il
più grandi possibili.
Unire tutte le partizioni con le partizioni di input se ognuno dei relativi input:
Fa parte della stessa query
Non fa riferimento ad altre partizioni
Fa riferimento solo alla partizione corrente
Non è il risultato (ovvero il passaggio finale) di una query
Non è ciclico

Cosa significa tutto questo?


Verrà ora illustrato un esempio per illustrare il funzionamento della logica complessa illustrata in precedenza.
Ecco uno scenario di esempio. Si tratta di un'unione piuttosto semplice di un file di testo (Contatti) con un
database SQL (Employees), in cui il server SQL è un parametro (DbServer).
Le tre query
Ecco il codice M per le tre query usate in questo esempio.

shared DbServer = "montegoref6" meta [IsParameterQuery=true, Type="Text", IsParameterQueryRequired=true];

shared Contacts = let

Source = Csv.Document(File.Contents("C:\contacts.txt"),[Delimiter=" ", Columns=15, Encoding=1252,


QuoteStyle=QuoteStyle.None]),

#"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),

#"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"ContactID", Int64.Type},


{"NameStyle", type logical}, {"Title", type text}, {"FirstName", type text}, {"MiddleName", type text},
{"LastName", type text}, {"Suffix", type text}, {"EmailAddress", type text}, {"EmailPromotion", Int64.Type},
{"Phone", type text}, {"PasswordHash", type text}, {"PasswordSalt", type text}, {"AdditionalContactInfo",
type text}, {"rowguid", type text}, {"ModifiedDate", type datetime}})

in

#"Changed Type";
shared Employees = let

Source = Sql.Databases(DbServer),

AdventureWorks = Source{[Name="AdventureWorks"]}[Data],

HumanResources_Employee = AdventureWorks{[Schema="HumanResources",Item="Employee"]}[Data],

#"Removed Columns" = Table.RemoveColumns(HumanResources_Employee,{"HumanResources.Employee(EmployeeID)",


"HumanResources.Employee(ManagerID)", "HumanResources.EmployeeAddress",
"HumanResources.EmployeeDepartmentHistory", "HumanResources.EmployeePayHistory",
"HumanResources.JobCandidate", "Person.Contact", "Purchasing.PurchaseOrderHeader", "Sales.SalesPerson"}),

#"Merged Queries" = Table.NestedJoin(#"Removed Columns",{"ContactID"},Contacts,


{"ContactID"},"Contacts",JoinKind.LeftOuter),

#"Expanded Contacts" = Table.ExpandTableColumn(#"Merged Queries", "Contacts", {"EmailAddress"},


{"EmailAddress"})

in

#"Expanded Contacts";

Ecco una visualizzazione di livello superiore, che mostra le dipendenze.

Partizionare
Ingrandiamo un po' e includiamo i passaggi nell'immagine e iniziamo a scorrere la logica di partizionamento.
Ecco un diagramma delle tre query, che mostra le partizioni del firewall iniziali in verde. Si noti che ogni
passaggio inizia nella propria partizione.

Successivamente, si tagliano le partizioni dei parametri. Di conseguenza, DbServer viene incluso in modo
implicito nella partizione di origine.
A questo punto si esegue il raggruppamento statico. In questo modo viene mantenuta la separazione tra le
partizioni in query separate (si noti ad esempio che gli ultimi due passaggi di Employees non vengono
raggruppati con i passaggi di Contacts), nonché tra le partizioni che fanno riferimento ad altre partizioni (ad
esempio, gli ultimi due passaggi di Employees) e quelle che non lo fanno (ad esempio, i primi tre passaggi di
Employees).

A questo punto si entra nella fase dinamica. In questa fase vengono valutate le partizioni statiche precedenti. Le
partizioni che non accedono ad alcuna origine dati vengono tagliate. Le partizioni vengono quindi raggruppate
per creare partizioni di origine il più grandi possibili. In questo scenario di esempio, tuttavia, tutte le partizioni
rimanenti accedono alle origini dati e non è possibile eseguire altri raggruppamenti. Le partizioni nell'esempio
non cambieranno pertanto durante questa fase.
Finiamo di fingere
A scopo illustrativo, tuttavia, si esamini cosa accadrebbe se la query Contacts, anziché proveniente da un file di
testo, fosse hard-coded in M (ad esempio tramite la finestra di dialogo Immetti dati).
In questo caso, la query Contacts non accede ad alcuna origine dati. Di conseguenza, verrebbe tagliato durante
la prima parte della fase dinamica.
Con la partizione Contacts rimossa, gli ultimi due passaggi di Employees non fareranno più riferimento ad
alcuna partizione tranne quella contenente i primi tre passaggi di Employees. Di conseguenza, le due partizioni
verrebbero raggruppate.
La partizione risultante sarà simile alla seguente.
Esempio: Passaggio di dati da un'origine dati a un'altra
Ok, una spiegazione astratta sufficiente. Si esamini uno scenario comune in cui è probabile che si verifichi un
errore del firewall e i passaggi per risolverlo.
Imagine cercare il nome di una società dal servizio Northwind OData e quindi usare il nome della società per
eseguire una ricerca Bing ricerca.
Creare prima di tutto una query Company per recuperare il nome della società.

let
Source = OData.Feed("https://services.odata.org/V4/Northwind/Northwind.svc/", null,
[Implementation="2.0"]),
Customers_table = Source{[Name="Customers",Signature="table"]}[Data],
CHOPS = Customers_table{[CustomerID="CHOPS"]}[CompanyName]
in
CHOPS

Successivamente, si crea una query di ricerca che fa riferimento a Company e la passa a Bing.

let
Source = Text.FromBinary(Web.Contents("https://www.bing.com/search?q=" & Company))
in
Source

A questo punto si hanno problemi. La valutazione della ricerca genera un errore del firewall.
Formula.Firewall: Query 'Search' (step 'Source') references other queries or steps, so it may not directly
access a data source. Please rebuild this data combination.

Questo perché il passaggio Origine della ricerca fa riferimento a un'origine dati (bing.com) e fa anche
riferimento a un'altra query/partizione (Company ). Viola la regola indicata in precedenza ("una partizione può
accedere a origini dati compatibili o fare riferimento ad altre partizioni, ma non a entrambe).
Cosa fare? Un'opzione è disabilitare completamente il firewall (tramite l'opzione Privacy etichettata Ignora i
livelli di privacy e potenzialmente migliorare le prestazioni ). Ma cosa succede se si vuole lasciare il
firewall abilitato?
Per risolvere l'errore senza disabilitare il firewall, è possibile combinare Company e Search in una singola query,
come la seguente:

let
Source = OData.Feed("https://services.odata.org/V4/Northwind/Northwind.svc/", null,
[Implementation="2.0"]),
Customers_table = Source{[Name="Customers",Signature="table"]}[Data],
CHOPS = Customers_table{[CustomerID="CHOPS"]}[CompanyName],
Search = Text.FromBinary(Web.Contents("https://www.bing.com/search?q=" & CHOPS))
in
Search

Tutto è ora in corso all'interno di una singola partizione. Supponendo che i livelli di privacy per le due origini
dati siano compatibili, il firewall dovrebbe ora essere soddisfatto e non si otterrà più un errore.

Si tratta di un ritorno a capo


Anche se in questo argomento si può dire molto di più, questo articolo introduttivo è già sufficientemente
lungo. Si spera che il firewall sia più comprensibile e possa essere utile per comprendere e correggere gli errori
del firewall in futuro.
Diagnostica query
07/12/2021 • 11 minutes to read

Diagnostica query consente di comprendere meglio le Power Query in fase di creazione e di aggiornamento in
Power BI Desktop. Anche se questa funzionalità verrà espansa in futuro, inclusa la possibilità di usarla durante
gli aggiornamenti completi, in questo momento è possibile usarla per comprendere il tipo di query che si sta
emettendo, i rallentamenti che potrebbero verificarsi durante la creazione dell'aggiornamento e il tipo di eventi
in background in corso.
Per usare Diagnostica query, passare alla scheda Strumenti nella barra editor di Power Query barra
multifunzione.

Per impostazione predefinita, Diagnostica query potrebbe richiedere diritti amministrativi per l'esecuzione (a
seconda dei criteri IT). Se non si riesce a eseguire Diagnostica query, aprire la pagina delle opzioni Power BI e
nella scheda Diagnostica selezionare Abilita in Editor di quer y (non richiede l'esecuzione come
amministratore). Questa selezione vincola l'utente dalla possibilità di tracciare la diagnostica quando si esegue
un aggiornamento completo in Power BI anziché nell'editor di Power Query, ma consente comunque di usarla
durante l'anteprima, la creazione e così via.
Ogni volta che si avvia la diagnostica, Power Query inizia a tracciare le valutazioni causate. La valutazione che la
maggior parte degli utenti pensa è quando si preme aggiorna o quando si recuperano i dati per la prima volta,
ma esistono molte azioni che possono causare valutazioni, a seconda del connettore. Ad esempio, con il
connettore SQL, quando si recupera un elenco di valori da filtrare, viene anche avviata una valutazione, ma non
viene associata a una query utente, rappresentata nella — diagnostica. Altre query generate dal sistema
possono includere lo strumento di navigazione o l'esperienza di ottenere dati.
Quando si preme Diagnose Step (Diagnostica passaggio), Power Query esegue una valutazione speciale solo
del passaggio che si sta esaminando. Mostra quindi la diagnostica per tale passaggio, senza visualizzare la
diagnostica per gli altri passaggi della query. In questo modo è molto più semplice ottenere una visione più
stretta di un problema.
È importante che, se si registrano tutte le tracce da Avvia diagnostica, premere Arresta diagnostica. L'arresto
della diagnostica consente al motore di raccogliere le tracce registrate e analizzarle nell'output corretto. Senza
questo passaggio si perderanno le tracce.

Tipi di diagnostica
Attualmente sono disponibili tre tipi di diagnostica, uno dei quali con due livelli di dettaglio.
Il primo di questi dati di diagnostica è la diagnostica primaria, che ha una visualizzazione dettagliata e una
visualizzazione riepilogata. La visualizzazione riepilogata ha lo scopo di offrire informazioni immediate sulla
posizione in cui viene impiegato il tempo nella query. La visualizzazione dettagliata è molto più approfondita,
riga per riga ed è, in generale, necessaria solo per una diagnosi grave da parte degli utenti esperti.
Per questa vista, alcune funzionalità, ad esempio la colonna Query origine dati, sono attualmente disponibili solo
per determinati connettori. Stiamo lavorando per estendere l'ampiezza di questa copertura in futuro.
Le partizioni per la privacy dei dati offrono una migliore comprensione delle partizioni logiche usate per la
privacy dei dati.

NOTE
Power Query possibile eseguire valutazioni che potrebbero non essere state attivate direttamente. Alcune di queste
valutazioni vengono eseguite per recuperare i metadati in modo da ottimizzare al meglio le query o per offrire
un'esperienza utente migliore, ad esempio il recupero dell'elenco di valori distinti all'interno di una colonna visualizzata
nell'esperienza Filtro righe. Altri potrebbero essere correlati al modo in cui un connettore gestisce le valutazioni parallele.
Allo stesso tempo, se nella diagnostica delle query vengono ripetute le query che non si ritiene più sensato, è possibile
contattare i normali canali di supporto per inviare commenti e suggerimenti su come migliorare il — prodotto.

Visualizzazione riepilogata e dettagliata


La diagnostica delle query offre due visualizzazioni: riepilogata e dettagliata. La visualizzazione riepilogata
"comprime" più operazioni correlate in una singola operazione. In questo processo vengono combinati i dettagli
raccolti da ogni operazione e vengono sommate le durate esclusive. Nessuna informazione viene persa come
parte di questo processo.
La visualizzazione riepilogata offre una panoramica di ciò che si è verificato durante una valutazione per una
facile revisione di alto livello. Se è necessario un'ulteriore suddivisione per un'operazione specifica, l'utente può
esaminare l'ID gruppo e visualizzare le operazioni corrispondenti raggruppate nella visualizzazione dettagli.

Spiegazione di più valutazioni


Durante l'aggiornamento nell'editor Power Query, è necessario eseguire molte cose dietro le quinte per provare
a offrire un'esperienza utente fluente. Ad esempio, quando si aggiorna l'anteprima, l'analizzatore eseguirà il
passaggio finale di ogni query specificata. In background, tuttavia, esegue in sequenza n-1 passaggi, n-2,
passaggi e così via, in modo che, se si torna indietro, i passaggi sono già disponibili.
Per garantire prestazioni più elevate, attualmente viene eseguita una parte della memorizzazione nella cache in
modo che non sia necessario rieseguire tutte le parti del piano di query finale quando vengono ripresi i
passaggi. Anche se questa memorizzazione nella cache è utile per la normale creazione, significa che non
sempre si otterrà una corretta informazione di confronto dei passaggi a causa di valutazioni successive che
estrarrà i dati memorizzati nella cache.

Schema di diagnostica
Id
Quando si analizzano i risultati di una registrazione, è importante filtrare la sessione di registrazione in base
all'ID, in modo che le colonne come Exclusive Duration % (% durata esclusiva) hanno senso.
Id è un identificatore composto. È costituito da due numeri uno — prima del punto e uno dopo. Il primo numero
è lo stesso per tutte le valutazioni risultanti da una singola azione dell'utente. In altre parole, se si preme
aggiorna due volte, saranno presenti due numeri diversi che portano il punto, uno per ogni attività utente
eseguita. Questa numerazione è sequenziale per una determinata registrazione diagnostica.
Il secondo numero rappresenta una valutazione da parte del motore. Questo numero è sequenziale per la
durata del processo in cui la valutazione viene accodata. Se si eseguono più sessioni di registrazione diagnostica,
si può vedere che questo numero continua ad aumentare nelle diverse sessioni.
Per riepilogare, se si avvia la registrazione, si preme una sola volta la valutazione e si arresta la registrazione,
nella diagnostica sarà presente un certo numero di ID. Ma poiché è stata eseguita una sola azione, saranno tutte
1.1, 1.2, 1.3 e così via.
La combinazione di activityId e evaluationId, separati dal punto, fornisce un identificatore univoco per una
valutazione di una singola sessione di registrazione.
Query
Nome della query nel riquadro sinistro dell'editor Power Query dati.
Passaggio
Nome del passaggio nel riquadro di destra dell'editor di Power Query. Elementi come gli elenchi a discesa dei
filtri in genere si associano al passaggio in base al cui filtro si sta filtrando, anche se non si aggiorna il passaggio.
Category
Categoria dell'operazione.
Tipo di origine dati
Ciò indica il tipo di origine dati a cui si sta accedendo, ad esempio SQL o Oracle.
Operazione
Operazione effettiva eseguita. Questa operazione può includere il lavoro dell'analizzatore, l'apertura di
connessioni, l'invio di query all'origine dati e molto altro ancora.
Ora di Inizio
Ora di inizio dell'operazione.
Ora fine
Ora di fine dell'operazione.
Durata esclusiva (%)
La colonna Durata esclusiva di un evento è la quantità di tempo in cui l'evento è stato attivo. Questo valore è in
contrasto con il valore "duration" che risulta dalla sottrazione dei valori nella colonna Ora di inizio e ora di fine di
un evento. Questo valore di "durata" rappresenta il tempo totale trascorso tra l'inizio e la fine di un evento, che
può includere gli orari in cui l'evento era sospeso o inattivo e un altro evento utilizzava risorse.
La % di durata esclusiva aggiunge circa il 100% all'interno di una determinata valutazione, come rappresentato
dalla colonna Id. Ad esempio, se si filtrano le righe con ID 1.x, le percentuali di Durata esclusiva verranno
sommate a circa il 100%. Ciò non si verifica se si sommano i valori exclusive duration % di tutte le righe in una
determinata tabella di diagnostica.
Durata esclusiva
Tempo assoluto, anziché %, della durata esclusiva. La durata totale (ovvero durata esclusiva + tempo in cui
l'evento era inattivo) di una valutazione può essere calcolata in uno dei due modi seguenti:
Trovare l'operazione denominata "Evaluation". La differenza tra l'ora – di inizio dell'ora di fine determina
la durata totale di un evento.
Sottrae l'ora di inizio minima di tutte le operazioni in un evento dall'ora di fine massima. Si noti che nei
casi in cui le informazioni raccolte per un evento non tengano conto della durata totale, viene generata
un'operazione denominata "Gap di traccia" per tenere conto di questo intervallo di tempo.
Risorsa
Risorsa a cui si accede per i dati. Il formato esatto di questa risorsa dipende dall'origine dati.
Query origine dati
Power Query esegue un'attività denominata Folding, ovvero l'azione di eseguire il maggior numero possibile di
parti della query sull'origine dati back-end. In modalità Direct Query (over Power Query), dove abilitata,
verranno eseguite solo le trasformazioni che vengono rilevate. In modalità di importazione, le trasformazioni
che non possono essere rilevate verranno invece eseguite in locale.
La colonna Query origine dati consente di visualizzare la query o la richiesta/risposta HTTP inviata sull'origine
dati back-end. Quando si crea la query nell'editor, verranno generate molte query sull'origine dati. Alcune di
queste sono l'effettiva query finale dell'origine dati per il rendering dell'anteprima, mentre altre possono essere
per la profilatura dei dati, gli elenchi a discesa dei filtri, le informazioni sui join, il recupero di metadati per gli
schemi e qualsiasi altro numero di altre query di piccole dimensioni.
In generale, non è necessario preoccuparsi del numero di query sull'origine dati generate, a meno che non vi
siano motivi specifici per cui preoccuparsi. È invece necessario assicurarsi che venga recuperato il contenuto
appropriato. Questa colonna può essere utile anche per determinare se la Power Query è stata completamente
coniata.
Informazioni aggiuntive
I connettori recuperano molte informazioni. La maggior parte di questi elementi è invasa e non è adatta a una
gerarchia di colonne standard. Queste informazioni vengono inserite in un record nella colonna informazioni
aggiuntive. Anche le informazioni registrate dai connettori personalizzati vengono visualizzate qui.
Row Count
Numero di righe restituite da una query sull'origine dati. Non abilitato in tutti i connettori.
Lunghezza del contenuto
Lunghezza del contenuto restituita dalle richieste HTTP, come comunemente definito. Questa opzione non è
abilitata in tutti i connettori e non sarà accurata per i connettori che recuperano le richieste in blocchi.
Query utente
Valore booleano che indica se si tratta di una query eseguita dall'utente e presente nel riquadro a sinistra o se è
stata generata da un'altra azione dell'utente. Altre azioni dell'utente possono includere elementi come la
selezione del filtro o l'uso dello strumento di navigazione nell'esperienza di ottenere i dati.
Percorso
Path rappresenta la route relativa dell'operazione quando viene visualizzata come parte di un albero di intervalli
per tutte le operazioni all'interno di una singola valutazione. Nella parte superiore (radice) dell'albero è presente
una singola operazione denominata Evaluation con percorso "0". L'ora di inizio di questa valutazione
corrisponde all'inizio di questa valutazione nel suo complesso. L'ora di fine di questa valutazione indica quando
è terminata l'intera valutazione. Questa operazione di primo livello ha una durata esclusiva di 0, perché l'unico
scopo è fungere da radice dell'albero.
Altre operazioni si dirama dalla radice. Ad esempio, un'operazione potrebbe avere "0/1/5" come percorso.
Questo percorso viene riconosciuto come:
0: radice dell'albero
1: padre dell'operazione corrente
5: indice dell'operazione corrente
L'operazione "0/1/5" potrebbe avere un nodo figlio, nel qual caso il percorso ha il formato "0/1/5/8", con 8 che
rappresenta l'indice dell'elemento figlio.
ID gruppo
La combinazione di due o più operazioni non si verificherà se causa una perdita di dettagli. Il raggruppamento è
progettato per approssimare i "comandi" eseguiti durante la valutazione. Nella visualizzazione dettagliata più
operazioni condividono un ID gruppo, corrispondente ai gruppi aggregati nella visualizzazione Riepilogo.
Come per la maggior parte delle colonne, l'ID gruppo è rilevante solo all'interno di una valutazione specifica,
come filtrato dalla colonna Id.

Schema delle partizioni per la privacy dei dati


Id
Uguale all'ID per gli altri risultati di diagnostica delle query. La parte intera rappresenta un singolo ID attività,
mentre la parte frazionaria rappresenta una singola valutazione.
Partition Key (Chiave partizione )
Corrisponde alla query o al passaggio usato come partizione del firewall.
Gruppo di firewall
Categorizzazione che spiega perché questa partizione deve essere valutata separatamente, inclusi i dettagli sul
livello di privacy della partizione.
Risorse a cui si accede
Elenco di percorsi di risorse per tutte le risorse a cui accede questa partizione e che in generale identifica in
modo univoco un'origine dati.
Input della partizione
Elenco di chiavi di partizione da cui dipende la partizione corrente (questo elenco può essere usato per creare
un grafico).
Expression
Espressione valutata all'inizio della query o del passaggio della partizione. In diversi casi, coincide con la
query/passaggio.
Ora di Inizio
Ora di inizio della valutazione per questa partizione.
Ora fine
Ora di fine della valutazione per questa partizione.
Durata
Valore derivato dall'ora di fine meno l'ora di inizio.
Durata esclusiva
Se si presuppone che le partizioni siano eseguite in un singolo thread, la durata esclusiva è la durata "reale" che
può essere attribuita a questa partizione.
% durata esclusiva
Durata esclusiva come percentuale.
Diagnostica
Questa colonna viene visualizzata solo quando viene acquisita anche la diagnostica delle query "Aggregated" o
"Detailed", consentendo all'utente di corrispondere tra i due output di diagnostica.

Schema dei contatori delle prestazioni


Quando si eseguono contatori delle prestazioni, ogni mezzo secondo Power Query snapshot dell'utilizzo delle
risorse. Questo snapshot non è utile per le query molto veloci, ma può essere utile per le query che usano molte
più risorse.
% di tempo processore
Percentuale di tempo impiegato dai processori nella query. Questa percentuale può raggiungere un valore
superiore al 100% a causa di più processori.
Tempo totale processore
Durata totale del tempo processore impiegato per la query.
Byte di dati I/O al secondo
Velocità effettiva dei dati ricevuti dall'origine dati, espressa in byte al secondo.
Commit (byte )
Quantità di memoria virtuale riservata dalla valutazione.
Working set (byte )
Quantità di memoria riservata dalla valutazione.

Altre letture
Come registrare la diagnostica in vari casi d'uso
Altre informazioni sulla lettura e la visualizzazione delle tracce registrate
Come comprendere quali operazioni di query si stanno rilevando usando Diagnostica query
Registrazione della diagnostica delle query in Power
BI
07/12/2021 • 6 minutes to read

Quando si crea in Power Query, il flusso di lavoro di base è la connessione a un'origine dati, l'applicazione di
alcune trasformazioni, l'aggiornamento potenziale dei dati nell'editor Power Query e il caricamento nel modello
Power BI. Una volta nel modello Power BI, è possibile aggiornarlo di volta in volta in Power BI Desktop (se si usa
Desktop per visualizzare l'analisi), a parte eventuali aggiornamenti nel servizio.
Anche se è possibile ottenere un risultato simile alla fine di un flusso di lavoro di creazione, aggiornamento
nell'editor o aggiornamento in Power BI appropriato, valutazioni molto diverse vengono eseguite dal software
per le diverse esperienze utente fornite. È importante sapere cosa aspettarsi quando si esegue la diagnostica
delle query in questi diversi flussi di lavoro, in modo da non sorprendersi dei dati di diagnostica molto diversi.
Per avviare Diagnostica query, passare alla scheda "Strumenti" nella barra editor di Power Query barra
multifunzione. Qui vengono presentate alcune opzioni diverse.

Sono disponibili due opzioni principali, 'Diagnose Step' e 'Start Diagnostics' (abbinate a 'Stop Diagnostics'). Il
primo consente di ottenere informazioni su una query fino a un passaggio selezionato ed è particolarmente
utile per comprendere quali operazioni vengono eseguite in locale o in remoto in una query. Quest'ultimo offre
informazioni più dettagliate su un'ampia gamma di altri casi, illustrati di seguito.

Specifiche del connettore


È importante ricordare che non è possibile coprire tutte le diverse permutazioni di ciò che si noterà in
Diagnostica query. Esistono molti elementi che possono cambiare esattamente ciò che si vede nei risultati:
Connettore
Trasformazioni applicate
Sistema in esecuzione
Configurazione di rete
Opzioni di configurazione avanzate
Configurazione ODBC
Per una copertura più ampia, questa documentazione sarà incentrata su Diagnostica query della tabella
Northwind Customers, sia su SQL che su OData. Le note OData usano l'endpoint pubblico disponibile nel sito
Web OData.org, mentre è necessario fornire un server SQL manualmente. Molte origini dati differiranno in
modo significativo da queste e nel tempo verrà aggiunta la documentazione specifica del connettore.

Avviare/arrestare la diagnostica
"Avvia diagnostica" e "Arresta diagnostica" sono più applicabili rispetto a "Passaggio di diagnosi", ma offrono
anche molte più informazioni che è necessario ordinare. Ad esempio, l'avvio della diagnostica, l'aggiornamento
di un'anteprima e quindi l'arresto offrono informazioni equivalenti all'esecuzione di Diagnose Step in ogni
passaggio (a causa del funzionamento di Power Query nell'editor per aggiornare ogni passaggio in modo
indipendente).
Per avviare la registrazione, fare clic su "Avvia diagnostica", eseguire le valutazioni desiderate (creazione,
aggiornamento in anteprima, aggiornamento completo) e quindi fare clic su "Arresta diagnostica".
Creazione
La differenza principale del flusso di lavoro di creazione è che genererà in genere più valutazioni singole rispetto
ad altri flussi di lavoro. Come illustrato nell'articolo primario Diagnostica query, questi sono il risultato del
popolamento di varie interfacce utente, ad esempio gli elenchi a discesa dello strumento di navigazione o del
filtro.
Verrà illustrato un esempio. In questo esempio viene utilizzato il connettore OData, ma durante la revisione
dell'output verrà esaminata anche la versione SQL dello stesso database. Per entrambe le origini dati, ci si
connetterà all'origine dati tramite "Nuova origine", "Origini recenti" o "Ottieni dati". Per la SQL è necessario
inserire le credenziali per il server, ma per l'endpoint OData pubblico è possibile inserire l'endpoint collegato in
precedenza.

Dopo aver scelto l'autenticazione, selezionare la tabella "Customers" dal servizio OData.
Verrà mostrata la tabella Customers nell'interfaccia Power Query. Si noti che si vuole conoscere il numero di
rappresentanti di vendita presenti in paesi diversi. In primo luogo, fare clic con il pulsante destro del mouse su
"Sales Representative" nella colonna "Contact Title" (Titolo contatto), posizionare il puntatore del mouse su "Filtri
di testo" e selezionare "Uguale a".

A questo punto, selezionare "Raggruppa per" dalla barra multifunzione ed eseguire un raggruppamento per
"Paese", con l'aggregazione "Count".
Questa operazione dovrebbe presentare gli stessi dati visualizzati di seguito.

Tornare infine alla scheda "Strumenti" della barra multifunzione e fare clic su "Arresta diagnostica". La traccia
verrà interrotta e il file di diagnostica verrà compilato automaticamente e sul lato sinistro verranno visualizzate
le tabelle di riepilogo e dettagliate.
Se si traccia un'intera sessione di creazione, in genere si prevede di vedere qualcosa di simile a una valutazione
della query di origine, quindi le valutazioni correlate allo strumento di spostamento pertinente, quindi almeno
una query emessa per ogni passaggio applicato (con potenzialmente più a seconda delle azioni UX esatte
eseguite). In alcuni connettori si verificano valutazioni parallele per motivi di prestazioni che producono set di
dati molto simili.
Aggiorna anteprima
Al termine della trasformazione dei dati, è presente una sequenza di passaggi in una query. Quando si preme
"Anteprima aggiornamento" o "Aggiorna tutto" nell'editor Power Query, non verrà visualizzato un solo
passaggio nella diagnostica delle query. Il motivo è che l'aggiornamento nel editor di Power Query aggiorna in
modo esplicito la query che termina con l'ultimo passaggio applicato, quindi esegue nuovamente i passaggi
applicati e aggiorna la query fino a quel punto, fino all'origine.
Ciò significa che se nella query sono presenti cinque passaggi, tra cui Origine e Strumento di navigazione, si
prevede di visualizzare cinque diverse valutazioni nella diagnostica. Il primo, cronologicamente, spesso (ma non
sempre) avrà il tempo più lungo. Ciò è dovuto a due diversi motivi:
Può potenzialmente memorizzare nella cache i dati di input che le query eseguono dopo di esso (che
rappresentano i passaggi precedenti nella query utente) possono accedere più velocemente in locale.
È possibile che siano state applicate trasformazioni che troncano significativamente la quantità di dati da
restituire.
Si noti che quando si parla di "Aggiorna tutto" si aggiornano tutte le query ed è necessario filtrare in base a
quelle a cui si è a cuore, come ci si potrebbe aspettare.
Aggiornamento completo
Diagnostica query può essere usato per diagnosticare la cosiddetta "query finale" generata durante
l'aggiornamento in Power BI, anziché solo l'esperienza Power Query editor. A tale scopo, è prima necessario
caricare i dati nel modello una sola volta. Se si prevede di eseguire questa operazione, assicurarsi di tenere
presente che se si preme "Chiudi e applica" la finestra dell'editor verrà chiusa (interrompendo la traccia), quindi
è necessario eseguire questa operazione al secondo aggiornamento oppure fare clic sull'icona a discesa in
"Chiudi e applica" e premere "Applica".

In entrambi i modi, assicurarsi di premere "Avvia diagnostica" nella sezione Diagnostica della scheda
"Strumenti" nell'editor. Dopo aver eseguito questa operazione, aggiornare il modello o anche solo la tabella a cui
si è a cuore.

Al termine del caricamento dei dati nel modello, premere "Arresta" diagnostica.
È possibile prevedere una combinazione di metadati e query di dati. Le chiamate ai metadati afferrano le
informazioni che è possibile ottenere sull'origine dati. Il recupero dei dati riguarda l'accesso all'origine dati,
l'emissione della query dell'origine dati predefinita finale con operazioni di tipo folded down e quindi
l'esecuzione delle valutazioni mancanti in locale.
È importante notare che, solo perché nella diagnostica viene visualizzata una risorsa (database, endpoint Web e
così via) o una query sull'origine dati, non significa necessariamente che sta eseguendo necessariamente
un'attività di rete. Power Query recuperare queste informazioni dalla cache. Negli aggiornamenti futuri si
indicherà se le informazioni vengono recuperate o meno dalla cache per semplificare la diagnosi.

Passaggio di diagnosi
'Diagnose Step' è più utile per ottenere informazioni dettagliate sulle valutazioni eseguite fino a un singolo
passaggio, che consente di identificare, fino a tale passaggio, le prestazioni e le parti della query eseguite in
locale o in remoto.
Se si è usato 'Diagnose Step' nella query creata in precedenza, si scoprirà che restituisce solo 10 righe e, se si
osserva l'ultima riga con una query sull'origine dati, è possibile ottenere un'idea piuttosto chiara di quale sarà la
query finale generata nell'origine dati. In questo caso, è possibile vedere che il rappresentante di vendita è stato
filtrato in remoto, ma il raggruppamento (in base al processo di eliminazione) si è verificato in locale.

Se si avvia e si arresta la diagnostica e si aggiorna la stessa query, si ottengono 40 righe a causa del fatto che,
come accennato in precedenza, Power Query sta ricevendo informazioni su ogni passaggio, non solo sul
passaggio finale. Questo rende più difficile quando si sta cercando di ottenere informazioni dettagliate su una
particolare parte della query.

Altre letture
Introduzione alla funzionalità
Altre informazioni sulla lettura e la visualizzazione delle tracce registrate
Come comprendere le operazioni di query che si stanno ripiegando usando Diagnostica query
Visualizzazione e interpretazione della diagnostica
delle query in Power BI
07/12/2021 • 4 minutes to read

Introduzione
Dopo aver registrato la diagnostica che si vuole usare, il passaggio successivo consiste nel comprendere le
informazioni che pronunciano.
È utile avere una buona conoscenza del significato esatto di ogni colonna nello schema di diagnostica delle
query, cosa che non verrà ripetuta in questa breve esercitazione. Di seguito è presente una descrizione completa.
In generale, quando si compilano visualizzazioni, è meglio usare la tabella dettagliata completa perché,
indipendentemente dal numero di righe, è probabile che si consideri una rappresentazione del tempo impiegato
in risorse diverse o della query nativa generata.
Come accennato nell'articolo sulla registrazione della diagnostica, sto lavorando con le tracce OData e SQL per
la stessa tabella (o quasi), ovvero la tabella Customers di Northwind. In particolare, mi concentrerò sulla
domanda comune dei clienti, nonché su uno dei set di tracce più facili da interpretare: l'aggiornamento
completo del modello di dati.

Compilazione delle visualizzazioni


Quando si passa attraverso le tracce, è possibile valutarle in molti modi. In questo articolo verrà illustrata una
suddivisione di due visualizzazioni, una per visualizzare i dettagli più importanti e l'altra per esaminare con
facilità i contributi temporistici di vari fattori. Per la prima visualizzazione viene usata una tabella. È possibile
selezionare tutti i campi che si desidera, ma quelli consigliati per un'occhiata semplice e di alto livello a ciò che
sta succedendo sono:
Id
Start Time
Query
Step
Query origine dati
Durata esclusiva (%)
Conteggio righe
Categoria
Query utente
Percorso
Per la seconda visualizzazione, una scelta è usare un istogramma in pila. Nel parametro 'Axis' potrebbe essere
necessario usare 'Id' o'Step'. Se si sta esaminando l'aggiornamento, perché non ha nulla a che fare con i
passaggi nell'editor stesso, è probabile che si voglia semplicemente esaminare 'ID'. Per il parametro 'Legend' è
necessario impostare 'Category' o 'Operation' (a seconda della granularità desiderata). Per 'Value', impostare
'Exclusive Duration' (e assicurarsi che non sia %, in modo da ottenere il valore della durata non elaborata). Infine,
per la descrizione comando, impostare 'Earliest Start Time'.
Dopo aver compilato la visualizzazione, assicurarsi di eseguire l'ordinamento in base all'ora di inizio meno
recente, in modo da visualizzare l'ordine in cui si verificano le cose.
Anche se le esigenze esatte possono variare, questa combinazione di grafici è un buon punto di partenza per la
ricerca di molti file di diagnostica e per diversi scopi.

Interpretazione delle visualizzazioni


Come accennato in precedenza, è possibile provare a rispondere a molte domande con la diagnostica delle
query, ma le due che si vedono più spesso si chiedono come viene impiegato il tempo e si chiede qual è la query
inviata all'origine.
Chiedere come viene impiegato il tempo è semplice e sarà molto simile per la maggior parte dei connettori. Un
avviso con la diagnostica delle query, come accennato altrove, è che verranno visualizzati funzionalità
drasticamente diverse a seconda del connettore. Ad esempio, molti connettori basati su ODBC non hanno una
registrazione accurata della query inviata al sistema back-end effettivo, perché Power Query visualizza solo ciò
che invia al driver ODBC.
Per vedere come viene impiegato il tempo, è sufficiente esaminare le visualizzazioni create in precedenza.
Ora, poiché i valori di tempo per le query di esempio in uso sono così piccoli, se si vuole usare il modo in cui
Power BI segnala l'ora è meglio convertire la colonna Durata esclusiva in "Secondi" nell'editor di Power Query.
Una volta fatto questo, è possibile esaminare il grafico e avere un'idea abbastanza discreta del tempo dedicato.
Per i risultati di OData, si vede nell'immagine che la maggior parte del tempo impiegato è stata recuperando i
dati dall'origine. Se si fa clic sull'elemento "Origine dati" nella legenda, verranno mostrate tutte le diverse
operazioni correlate all'invio di una query all'origine dati.
Se si eseguono tutte le stesse operazioni e si compilano visualizzazioni simili, ma con le tracce SQL anziché
quelle ODATA, è possibile vedere come vengono confrontate le due origini dati.

Se si fa clic sulla tabella Origine dati, ad esempio con la diagnostica ODATA, è possibile vedere che la prima
valutazione (2.3 in questa immagine) genera query sui metadati, con la seconda valutazione che recupera
effettivamente i dati a cui si è a cuore. Poiché in questo caso vengono recuperati pochissimi dati, il recupero dei
dati richiede molto poco tempo (meno di un decimo di secondo per l'esecuzione dell'intera seconda valutazione,
con meno di un ventesimo di secondo per il recupero dei dati), ma questo non sarà vero in tutti i casi.
Come sopra, è possibile fare clic sulla categoria "Origine dati" nella legenda per visualizzare le query generate.
Scavo nei dati
Ricerca dei percorsi
Quando si esamina questo aspetto, se sembra che il tempo dedicato sia strano, ad esempio nella query OData è
possibile che sia presente una query sull'origine dati con il valore seguente:

https://services.odata.org/V4/Northwind/Northwind.svc/Customers?
$filter=ContactTitle%20eq%20%27Sales%20Representative%27&$select=CustomerID%2CCountry HTTP/1.1
Content-Type:
application/json;odata.metadata=minimal;q=1.0,application/json;odata=minimalmetadata;q=0.9,application/atoms
vc+xml;q=0.8,application/atom+xml;q=0.8,application/xml;q=0.7,text/plain;q=0.7

<Content placeholder>

Response:
Content-Type:
application/json;odata.metadata=minimal;q=1.0,application/json;odata=minimalmetadata;q=0.9,application/atoms
vc+xml;q=0.8,application/atom+xml;q=0.8,application/xml;q=0.7,text/plain;q=0.7
Content-Length: 435

<Content placeholder>

Questa query sull'origine dati è associata a un'operazione che occupa solo l'1% della durata esclusiva. Nel
frattempo, ce ne è uno molto simile:
Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales
Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales
Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

Questa query sull'origine dati è associata a un'operazione che occupa quasi il 75% della durata esclusiva. Se si
attiva path ,si scopre che quest'ultimo è in realtà un elemento figlio del primo. Ciò significa che la prima query
ha sostanzialmente aggiunto pochissimo tempo di per sé, con il recupero effettivo dei dati monitorato dalla
query "interna".
Si tratta di valori estremi, ma sono entro i limiti di ciò che potrebbe essere visto.
Informazioni sulla riduzione con diagnostica query
07/12/2021 • 2 minutes to read

Uno dei motivi più comuni per usare Diagnostica query è avere una migliore comprensione delle operazioni di
cui Power Query ha eseguito il push da parte dell'origine dati back-end, nota anche come "folding". Se si vuole
vedere quale query è stata coniata, è possibile esaminare qual è la query più specifica, o query, che viene inviata
all'origine dati back-end. È possibile esaminare questo aspetto sia per ODATA che per SQL.
L'operazione descritta nell'articolo registrazione diagnostica esegue essenzialmente quattro operazioni:
Si connette all'origine dati
Afferra la tabella dei clienti
Filtra il ruolo CUSTOMER ID (ID cliente) in "Sales Representative"
Gruppi per 'Paese'
Poiché il connettore ODATA attualmente non supporta la folding di COUNT() per l'endpoint e poiché anche
questo endpoint è leggermente limitato nelle operazioni, non è previsto che il passaggio finale si ripeta. D'altra
parte, il filtro è relativamente semplice. Questo è esattamente ciò che si vede se si osserva la query più specifica
emessa in precedenza:

Request:
GET https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales
Representative'&$select=CustomerID%2CCountry HTTP/1.1

Response:
https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$filter=ContactTitle eq 'Sales
Representative'&$select=CustomerID%2CCountry
HTTP/1.1 200 OK

Si può vedere che si sta filtrando la tabella per ContactTitle equamente "Sales Representative" e vengono
restituite solo due colonne, Customer ID e Country. Il paese, naturalmente, è necessario per l'operazione di
raggruppamento, che poiché non viene eseguita dall'endpoint ODATA deve essere eseguita in locale. È possibile
concludere quali sono le parti che vengono escludono in questo caso.
Analogamente, se si osserva la query specifica e finale generata nella diagnostica SQL, si può osservare
qualcosa di leggermente diverso:

count(1) as [Count]
from
(
select [_].[Country]
from [dbo].[Customers] as [_]
where [_].[ContactTitle] = 'Sales Representative' and [_].[ContactTitle] is not null
) as [rows]
group by [Country]

Qui è possibile vedere che Power Query una sottoselezione in cui ContactTitle viene filtrato in base a "Sales
Representative" e quindi raggruppa per Paese in questa sottoselezione. Tutte le operazioni sono rilevate.
Con La diagnostica delle query è possibile esaminare il tipo di operazioni che si sono verificate. In futuro, ci
auguriamo di semplificare l'uso di questa funzionalità.
Perché la query viene eseguita più volte?
07/12/2021 • 5 minutes to read

Quando si esegue l'aggiornamento in Power Query, c'è molto da fare dietro le quinte per provare a offrire
un'esperienza utente uniforme ed eseguire le query in modo efficiente e sicuro. Tuttavia, in alcuni casi è possibile
notare che più richieste di origine dati vengono attivate Power Query quando i dati vengono aggiornati. A volte
queste richieste sono normali, ma altre volte possono essere evitate.

Quando si verificano più richieste


Le sezioni seguenti descrivono alcune istanze in cui Power Query inviare più richieste a un'origine dati.
Progettazione del connettore
I connettori possono effettuare più chiamate a un'origine dati per vari motivi, tra cui metadati, memorizzazione
nella cache dei risultati, impaginazione e così via. Questo comportamento è normale ed è progettato per
funzionare in questo modo.
Più query che fanno riferimento a una singola origine dati
Possono verificarsi più richieste alla stessa origine dati se più query estrae da tale origine dati. Queste richieste
possono verificarsi anche in un caso in cui una sola query fa riferimento all'origine dati. Se a tale query viene
fatto riferimento da una o più altre query, ogni query insieme a tutte le query da cui dipende viene — —
valutata in modo indipendente.
In un ambiente desktop, un singolo aggiornamento di tutte le tabelle nel modello di dati viene eseguito usando
una singola cache condivisa. Caching possibile ridurre la probabilità di più richieste alla stessa origine dati,
poiché una query può trarre vantaggio dal fatto che la stessa richiesta è già stata eseguita e memorizzata nella
cache per una query diversa. Anche in questo caso, tuttavia, è possibile ottenere più richieste perché l'origine
dati non è memorizzata nella cache (ad esempio, file CSV locali), la richiesta all'origine dati è diversa da una
richiesta già memorizzata nella cache a causa di operazioni downstream (che possono modificare la
visualizzazione), la cache è troppo piccola (cosa relativamente improbabile) o perché le query vengono eseguite
approssimativamente nello stesso momento.
In un ambiente cloud ogni query viene aggiornata usando una cache separata, quindi una query non può trarre
vantaggio dalla stessa richiesta già memorizzata nella cache per una query diversa.
Riduzione
A Power Query il livello di ripiegamento del database può generare più richieste a un'origine dati, in base alle
operazioni eseguite a valle. In questi casi, è possibile evitare più richieste usando Table.Buffer . Altre
informazioni: Buffer della tabella
Caricamento nel modello Power BI Desktop
In Power BI Desktop, Analysis Services (AS) aggiorna i dati usando due valutazioni: una per recuperare lo
schema che AS esegue richiedendo zero righe e una per recuperare — — i dati. Se il calcolo dello schema a riga
zero richiede il recupero dei dati, è possibile che si verifichino richieste di origine dati duplicate.
Analisi della privacy dei dati
La privacy dei dati esegue le proprie valutazioni di ogni query per determinare se le query sono sicure da
eseguire insieme. Questa valutazione può talvolta causare più richieste a un'origine dati. Un segno rivelatore che
una determinata richiesta proviene dall'analisi della privacy dei dati è che avrà una condizione "TOP 1000"
(anche se non tutte le origini dati supportano tale condizione). In generale, la disabilitazione della privacy dei
dati presupponendo che sia accettabile eliminerebbe — "TOP 1000" o altre richieste relative alla privacy dei dati
durante — l'aggiornamento. Altre informazioni: Disabilitare il firewall sulla privacy dei dati
Download di dati in background (noti anche come "analisi in background")
Analogamente alle valutazioni eseguite per la privacy dei dati, per impostazione predefinita l'editor di Power
Query scarica un'anteprima delle prime 1000 righe di ogni passaggio della query. Il download di queste righe
consente di assicurarsi che l'anteprima dei dati sia pronta per la visualizzazione non appena viene selezionato
un passaggio, ma può anche causare richieste di origini dati duplicate. Altre informazioni: Disabilitare l'analisi in
background
Attività in background Power Query editor varie
Diverse attività Power Query in background dell'editor possono anche attivare richieste di origine dati
aggiuntive(ad esempio, analisi di ripiegamento dei passaggi, profilatura delle colonne, aggiornamento
automatico dell'anteprima di 1000 righe che Power Query attiva dopo il caricamento dei risultati in Excel e così
via).

Isolamento di più query


È possibile isolare istanze di più query disattivando parti specifiche del processo di query per isolare la
posizione di arrivo delle richieste duplicate. Ad esempio, se si avvia:
Nell'editor Power Query
Con il firewall disabilitato
Con l'analisi in background disabilitata
Con la profilatura delle colonne e qualsiasi altra attività in background disabilitata
[Facoltativo] Eseguire un'operazione Table.Buffer

In questo esempio sarà disponibile una sola valutazione M che si verifica quando si aggiorna l'anteprima dell
Power Query dell'editor. Se le richieste duplicate si verificano a questo punto, sono in qualche modo intrinseche
nel modo in cui viene eseguita la query. In caso contrario, e se si abilitano le impostazioni precedenti una alla
volta, è possibile osservare a quale punto iniziano a verificarsi le richieste duplicate.
Le sezioni seguenti descrivono questi passaggi in modo più dettagliato.
Configurare l Power Query editor
Non è necessario riconnettersi o ricreare la query, è sufficiente aprire la query da testare nell'editor Power
Query dati. È possibile duplicare la query nell'editor se non si vuole creare confusione con la query esistente.
Disabilitare il firewall sulla privacy dei dati
Il passaggio successivo consiste nel disabilitare il firewall sulla privacy dei dati. Questo passaggio presuppone
che non si sia interessati alla perdita di dati tra le origini, quindi la disabilitazione del firewall sulla privacy dei
dati può essere eseguita usando le impostazioni Ignora sempre il livello di privacy descritte nell'opzione Imposta
combinazione rapida in Excel o l'impostazione Ignora i livelli di privacy e potenzialmente migliorare le
prestazioni descritte nei livelli di privacy di Power BI Desktop in Power BI Desktop.
Assicurarsi di annullare questo passaggio prima di riprendere il normale test.
Disabilitare l'analisi in background
Il passaggio successivo consiste nel disabilitare l'analisi in background. L'analisi in background è controllata
dall'impostazione Consenti il download dell'anteprima dei dati in background descritta in Disabilitare Power
Query'aggiornamento in background per Power BI. È anche possibile disabilitare questa opzione in Excel.
Memorizzazione nel buffer della tabella
Facoltativamente, è anche possibile usare per forzare la lettura di tutti i dati, che Table.Buffer simula ciò che
accade durante un caricamento. Da usare Table.Buffer nell'editor Power Query:
1. Nella barra Power Query della formula dell'editor di codice selezionare il pulsante fx per aggiungere un
nuovo passaggio.

2. Nella barra della formula racchiudere il nome del passaggio precedente con Table.Buffer( <previous step
name goes here> ). Ad esempio, se il passaggio precedente è stato denominato Source , la barra della
formula visualizza = Source . Modificare il passaggio nella barra della formula per pronunciare
= Table.Buffer(Source) .
Altre informazioni: Table.Buffer
Eseguire il test
Per eseguire il test, eseguire un aggiornamento nell'editor Power Query test.
Indicatori di ripiegamento dei passaggi
07/12/2021 • 4 minutes to read

NOTE
Prima di leggere questo articolo, è consigliabile leggere La Power Query query per comprendere meglio il funzionamento
della Power Query.

Gli indicatori di ripiegamento dei passaggi consentono di comprendere i passaggi che si ripiegano o meno.
Usando gli indicatori di ripiegamento dei passaggi, quando si apporta una modifica che interrompe la folding,
diventa ovvio. In questo modo è possibile risolvere più facilmente i problemi rapidamente, evitare problemi di
prestazioni e ottenere informazioni più dettagliate sulle query. Nella maggior parte dei casi, i passaggi verranno
o meno ripiegati. Esistono molti casi in cui il risultato non è così ovvio, descritto nella sezione indicatori di
diagnostica dei passaggi (dinamica, opaca e sconosciuta) più avanti in questo articolo.

NOTE
La funzionalità degli indicatori di ripiegamento dei passaggi è disponibile solo per Power Query Online.

Interpretazione della diagnostica dei passaggi


Quando si esamina la diagnostica dei passaggi, la cosa più importante da comprendere è che lo stato di
diagnostica non è sequenziale. In altre parole, l'indicatore per tale passaggio descrive se la query nel suo
complesso, fino a quel punto, si ripiega o meno. Se si dispone di un indicatore che indica che la query non si
ripiega, seguita da un indicatore che indica che si ripiega, significa che ogni passaggio fino a quel punto viene
ripiegato.
È possibile vedere un esempio di questo tipo anche con una semplice query su un'SQL origine.
Usando il database di esempio AdventureWorks, connettersi alla tabella Products e caricare i dati. Questa
operazione tramite l'esperienza di navigazione offrirà la query seguente:

let
Source = Sql.Database("ServerName", "AdventureWorks"),
Navigation = Source{[Schema = "Production", Item = "Product"]}[Data]
in
Navigation

Se si osserva come questo viene visualizzato negli indicatori di ripiegamento dei passaggi, è possibile vedere
che il primo passaggio non si riduce, il secondo passaggio è inconcludente e il terzo passaggio si riduce.

È possibile vedere che i passaggi iniziali non si ripiegano, ma il passaggio finale generato quando si caricano i
dati inizialmente si ripiega. La modalità di gestione dei primi passaggi (Origine e talvolta altri passaggi di
spostamento) dipende dal connettore. Con SQL, ad esempio, viene gestito come valore della tabella del
catalogo, che non viene ripiegato. Tuttavia, non appena si selezionano i dati per il connettore, lo farà.
Al contrario, questo può anche significare che la query si ripiega fino a un punto e quindi smette di essere
ripiegata. A differenza del caso in cui si dispone di un indicatore di ripiegamento per il passaggio, che mostra
che tutto si ripiega quando si ha un indicatore di non ripiegamento, non significa che tutto non si ripieghi.
Significa invece che "non tutto" si ripiega. In genere, tutto fino all'ultimo indicatore di ripiegamento verrà
ripiegato, con più operazioni che si verificano dopo.
Modificando l'esempio dall'esempio precedente, è possibile assegnare una trasformazione che non si ripieghi
mai, in maiuscolo per ogni parola.

let
Source = Sql.Database("ServerName", "AdventureWorks"),
Navigation = Source{[Schema = "Production", Item = "Product"]}[Data],
#"Capitalized each word" = Table.TransformColumns(Navigation, {{"Name", each Text.Proper(_), type text}})
in
#"Capitalized each word"

Negli indicatori di ripiegamento dei passaggi si può vedere che sono presenti gli stessi indicatori indicati in
precedenza, ad eccezione del fatto che il passaggio finale non si ripiega. Tutti gli elementi fino a questo
passaggio finale verranno eseguiti nell'origine dati, mentre il passaggio finale verrà eseguito in locale.

Indicatori di diagnostica dei passaggi


Gli indicatori di folding delle istruzioni usano un piano di query sottostante e richiedono che sia in grado di
ottenere informazioni sulla query per segnalarla. Attualmente il piano di query supporta solo le tabelle, pertanto
alcuni casi (elenchi, record, primitive) non verranno restituiti come folding o meno. Analogamente, le tabelle
costanti verranno segnalate come opache.

IN DIC ATO RE IC O N A DESC RIZ IO N E

Riduzione L'indicatore di folding indica che la


query fino a questo passaggio verrà
valutata dall'origine dati.

Non ripiega L'indicatore di non ripiegamento indica


che parte della query fino a questo
passaggio verrà valutata all'esterno
dell'origine dati. È possibile
confrontarlo con l'ultimo indicatore di
ripiegamento, se presente, per
verificare se è possibile ridisporre la
query in modo che sia più
performante.
IN DIC ATO RE IC O N A DESC RIZ IO N E

Potrebbe essere ripiegato Gli indicatori di espansione potrebbero


non essere comuni. Ciò significa che
una query "potrebbe" essere ripiegata.
Indicano che la folding/not folding
verrà determinata in fase di
esecuzione, durante il pull dei risultati
dalla query e che il piano di query è
dinamico. Questi verranno
probabilmente visualizzati solo con
connessioni ODBC o OData.

Opaco Gli indicatori opachi indicano che il


piano di query risultante è
inconcludente per qualche motivo.
Indica in genere che è presente una
tabella "costante" vera o che tale
trasformazione o connettore non è
supportato dagli indicatori e dallo
strumento del piano di query.

Unknown Gli indicatori sconosciuti


rappresentano un'assenza di piano di
query, a causa di un errore o di un
tentativo di eseguire la valutazione del
piano di query su un elemento diverso
da una tabella, ad esempio un record,
un elenco o una primitiva.

Analisi di esempio
È possibile visualizzare un esempio connettendosi alla tabella Products in Adventure Works (SQL). Il carico
iniziale, simile al precedente, sarà simile al seguente:

L'aggiunta di altri passaggi che si ripiegeranno estenderà la linea verde. Questo perché anche questo passaggio
si ripiega.

Se si aggiunge un passaggio che non si ripiega, verrà visualizzato un indicatore, ad esempio, l'opzione
Maiuscole/minuscole per ogni parola non verrà mai ripiegata. Si può vedere che l'indicatore cambia,
dimostrando che a questo punto è stato interrotto il folding. Come accennato in precedenza, i passaggi
precedenti verranno comunque ripiegati.
L'aggiunta di altri passaggi a valle che dipendono dalla capitalizzazione di ogni passaggio continuerà a non
essere ripiegata.

Tuttavia, se si rimuove la colonna a cui è stata applicata la maiuscola in modo che il piano di query ottimizzato
possa essere nuovamente ripiegato, si otterrà un risultato simile al seguente. anche se qualcosa di simile è
insolito. Questo mostra come non sia solo l'ordine dei passaggi, ma anche le trasformazioni effettive che si
applicano.
Piano di query per Power Query (anteprima)
07/12/2021 • 7 minutes to read

Il piano Power Query query è una funzionalità che offre una visualizzazione migliore della valutazione della
query. È utile per determinare il motivo per cui una determinata query potrebbe non essere in un determinato
passaggio.
Tramite un esempio pratico, questo articolo illustra il caso d'uso principale e i potenziali vantaggi dell'uso della
funzionalità del piano di query per esaminare i passaggi della query. Gli esempi usati in questo articolo sono
stati creati usando il database di esempio AdventureWorksLT per Azure SQL Server, che è possibile scaricare dai
database di esempio AdventureWorks.

NOTE
La funzionalità del piano di query Power Query è disponibile solo in Power Query Online.

Questo articolo è stato suddiviso in una serie di passaggi consigliati per interpretare il piano di query. Questi
passaggi sono:
1. Esaminare gli indicatori di folding dei passaggi.
2. Selezionare il passaggio della query per esaminare il relativo piano di query.
3. Implementare le modifiche alla query.
Usare la procedura seguente per creare la query nel proprio ambiente Power Query Online.
1. In Power Quer y - Scegliere l'origine dati selezionare Query vuota.
2. Sostituire lo script della query vuota con la query seguente.

let
Source = Sql.Database("servername", "database"),
Navigation = Source{[Schema = "Sales", Item = "SalesOrderHeader"]}[Data],
#"Removed other columns" = Table.SelectColumns(Navigation, {"SalesOrderID", "OrderDate",
"SalesOrderNumber", "PurchaseOrderNumber", "AccountNumber", "CustomerID", "TotalDue"}),
#"Filtered rows" = Table.SelectRows(#"Removed other columns", each [TotalDue] > 1000),
#"Kept bottom rows" = Table.LastN(#"Filtered rows", 5)
in
#"Kept bottom rows"

3. Modificare servername e con i nomi corretti per il proprio database ambiente.


4. (Facoltativo) Se si sta tentando di connettersi a un server e a un database per un ambiente locale,
assicurarsi di configurare un gateway per tale ambiente.
5. Selezionare Avanti .
6. Nel editor di Power Query selezionare Configura connessione e specificare le credenziali per l'origine
dati.

NOTE
Per altre informazioni sulla connessione a un SQL Server, vedere SQL Server database.

Dopo aver seguito questi passaggi, la query sarà simile a quella illustrata nell'immagine seguente.

Questa query si connette alla tabella SalesOrderHeader e seleziona alcune colonne degli ultimi cinque ordini
con un valore TotalDue superiore a 1000.

NOTE
Questo articolo usa un esempio semplificato per illustrare questa funzionalità, ma i concetti descritti in questo articolo si
applicano a tutte le query. Prima di leggere il piano di query, è consigliabile avere una buona conoscenza della
configurazione della query. Per altre informazioni sulla configurazione della query, vedere Nozioni di base sulla funzionalità
di folding della query.

1. Esaminare gli indicatori di folding dei passaggi


NOTE
Prima di leggere questa sezione, è consigliabile leggere l'articolo Indicatori di folding dei passaggi.

Il primo passaggio di questo processo consiste nell'esaminare la query e prestare particolare attenzione agli
indicatori di folding dei passaggi. L'obiettivo è esaminare i passaggi contrassegnati come non ripiegati. È quindi
possibile verificare se apportare modifiche alla query complessiva potrebbe determinare la completa
trasformazione.
Per questo esempio, l'unico passaggio che non può essere ripiegato è Mantenuto le righe più in basso, che è
facile da identificare tramite l'indicatore del passaggio non ripiegato. Questo passaggio è anche l'ultimo
passaggio della query.
L'obiettivo è ora esaminare questo passaggio e comprendere cosa viene ripiegato nell'origine dati e cosa non
può essere ripiegato.

2. Selezionare il passaggio della query per esaminarne il piano di


query
Il passaggio Righe in basso mantenute è stato identificato come un passaggio di interesse perché non viene
rilevato all'origine dati. Fare clic con il pulsante destro del mouse sul passaggio e selezionare l'opzione
Visualizza piano di query. Questa azione consente di visualizzare una nuova finestra di dialogo contenente un
diagramma per il piano di query del passaggio selezionato.
Power Query query tenta di ottimizzare la query sfruttando la valutazione differita e la sua folding, come
indicato in Nozioni di base sulla creazione di query. Questo piano di query rappresenta la conversione
ottimizzata della query M nella query nativa inviata all'origine dati. Include anche le trasformazioni eseguite dal
motore di Power Query. L'ordine in cui vengono visualizzati i nodi segue l'ordine della query a partire
dall'ultimo passaggio o output della query, rappresentato all'estrema sinistra del diagramma e in questo caso è
il nodo Table.LastN che rappresenta il passaggio Ultime righe mantenute.
Nella parte inferiore della finestra di dialogo è presente una barra con icone che consentono di ingrandire o
ridurre la visualizzazione del piano di query e altri pulsanti che consentono di gestire la visualizzazione. Per
l'immagine precedente, è stata usata l'opzione Adatta alla visualizzazione da questa barra per migliorare
l'gradibilità dei nodi.
NOTE
Il piano di query rappresenta il piano ottimizzato. Quando il motore sta valutando una query, tenta di convertire tutti gli
operatori in un'origine dati. In alcuni casi, potrebbe anche eseguire un riordinamento interno dei passaggi per ottimizzare
la riduzione. A questo scopo, i nodi o gli operatori rimasti in questo piano di query ottimizzato contengono in genere la
query sull'origine dati "ripiegata" e tutti gli operatori che non è stato possibile convertire e vengono valutati in locale.

Identificare i nodi ripiegati da altri nodi


È possibile identificare i nodi in questo diagramma come due gruppi:
Nodi folded: questo nodo può essere o Value.NativeQuery "origine dati", ad esempio Sql.Database . Questi
possono anche essere identificati con l'etichetta remota sotto il nome della funzione.
Nodi non ripiegati: altri operatori di tabella, ad esempio , e altre funzioni che Table.SelectRows non è stato
possibile Table.SelectColumns convertire. Queste possono essere identificate anche con le etichette Analisi
completa _ e _ Streaming .
L'immagine seguente mostra i nodi ripiegati all'interno del rettangolo rosso. Non è stato possibile ripiegare il
resto dei nodi sull'origine dati. È necessario esaminare il resto dei nodi perché l'obiettivo è tentare di fare in
modo che tali nodi rilevino l'origine dati.
È possibile selezionare Visualizza dettagli nella parte inferiore di alcuni nodi per visualizzare informazioni
estese. Ad esempio, i dettagli del nodo mostrano la query nativa Value.NativeQuery (in SQL) che verrà inviata
all'origine dati.

La query illustrata di seguito potrebbe non essere esattamente la stessa inviata all'origine dati, ma si tratta di
un'approssimazione buona. In questo caso, indica esattamente le colonne su cui verrà eseguita una query dalla
tabella SalesOrderHeader e quindi come filtra la tabella usando il campo TotalDue per ottenere solo le righe in
cui il valore di tale campo è maggiore di 1000. Il nodo accanto, Table.LastN,viene calcolato in locale dal motore
Power Query, perché non può essere ripiegato.

NOTE
Gli operatori potrebbero non corrispondere esattamente alle funzioni usate nello script della query.

Esaminare i nodi non ripiegati e prendere in considerazione le azioni per la trasformazione


A questo punto è stato determinato quali nodi non possono essere ripiegati e verranno valutati in locale. Questo
caso include solo Table.LastN il nodo , ma in altri scenari ne può avere molti altri.
L'obiettivo è applicare le modifiche alla query in modo che il passaggio possa essere ripiegato. Alcune delle
modifiche che è possibile implementare possono variare dalla ridisposizione dei passaggi all'applicazione di una
logica alternativa alla query più esplicita per l'origine dati. Ciò non significa che tutte le query e tutte le
operazioni siano ripiegabili applicando alcune modifiche. Tuttavia, è consigliabile determinare con una versione
di valutazione ed errore se la query può essere rilevata.
Poiché l'origine dati è un database SQL Server, se l'obiettivo è recuperare gli ultimi cinque ordini dalla tabella,
un'alternativa valida sarebbe sfruttare le clausole TOP e ORDER BY in SQL. Poiché non è presente alcuna clausola
BOTTOM SQL, la trasformazione in PowerQuery non può essere convertita Table.LastN in SQL. È possibile
rimuovere il Table.LastN passaggio e sostituirlo con:
Passaggio di ordinamento decrescente in base alla colonna SalesOrderID nella tabella, poiché questa
colonna determina quale ordine viene inserito per primo e quale è stato immesso per ultimo.
Selezionare le prime cinque righe dopo l'ordinamento della tabella. Questa trasformazione ha lo stesso
risultato di una trasformazione Mantenuta nelle prime righe ( Table.LastN ).

Questa alternativa equivale alla query originale. Anche se questa alternativa in teoria sembra valida, è
necessario apportare le modifiche per verificare se questa alternativa renderà il nodo completamente ripiegato
sull'origine dati.

3. Implementare modifiche alla query


Implementare l'alternativa illustrata nella sezione precedente:
1. Chiudere la finestra di dialogo del piano di query e tornare al editor di Power Query.
2. Rimuovere il passaggio Righe in basso mantenute.
3. Ordinare la colonna SalesOrderID in ordine decrescente.

4. Selezionare l'icona della tabella nell'angolo superiore sinistro della visualizzazione di anteprima dei dati e
selezionare l'opzione Mantieni le prime righe. Nella finestra di dialogo passare il numero cinque come
argomento e fare clic su OK.
Dopo aver implementato le modifiche, controllare di nuovo gli indicatori di ripiegamento del passaggio e
verificare se si sta fornendo un indicatore di ripiegamento.

A questo punto è possibile esaminare il piano di query dell'ultimo passaggio, che ora è Mantieni le prime
righe . Ora sono presenti solo nodi ripiegati. Selezionare Visualizza dettagli in per verificare quale query viene
inviata al Value.NativeQuery database.

Anche se questo articolo suggerisce l'alternativa da applicare, l'obiettivo principale è imparare a usare il piano di
query per esaminare la funzionalità di folding della query. Questo articolo offre anche visibilità su ciò che viene
inviato all'origine dati e su quali trasformazioni verranno eseguite in locale.
È possibile modificare il codice per verificare l'impatto che ha sulla query. Usando gli indicatori di ripiegamento
dei passaggi, è anche possibile avere un'idea migliore dei passaggi che impediscono la ripiega della query.
Utilizzo di parametri
07/12/2021 • 5 minutes to read

Un parametro consente di archiviare e gestire facilmente un valore che può essere riutilizzato.
I parametri offrono la flessibilità necessaria per modificare dinamicamente l'output delle query a seconda del
relativo valore e possono essere usati per:
Modifica dei valori degli argomenti per trasformazioni specifiche e funzioni dell'origine dati
Input nelle funzioni personalizzate
È possibile gestire facilmente i parametri all'interno della finestra Gestisci parametri. È possibile accedere alla
finestra Gestisci parametri selezionando l'opzione Gestisci parametri all'interno di Gestisci parametri nella
scheda Home.
Creazione di un parametro
Power Query offre due semplici modi per creare parametri:
Da una quer y esistente — È possibile fare clic con il pulsante destro del mouse su una query il cui
valore è una semplice costante non strutturata, ad esempio, ma non limitata a, una data, un testo o un
numero e selezionare Converti in parametro .

NOTE
È anche possibile convertire un parametro in una query facendo clic con il pulsante destro del mouse sul
parametro e quindi scegliendo Converti in quer y , come illustrato nell'immagine seguente.

Uso della finestra Gestisci parametri — È possibile selezionare l'opzione Nuovo parametro dal
menu a discesa Gestisci parametri nella scheda Home oppure avviare la finestra Gestisci parametri e
selezionare il pulsante Nuovo nella parte superiore per creare un parametro. È possibile compilare
questo modulo e selezionare OK per creare un nuovo parametro.
Dopo aver creato il parametro, è sempre possibile tornare alla finestra Gestisci parametri per modificare i
parametri in qualsiasi momento.

Proprietà parametro
Un parametro archivia un valore che può essere usato per le trasformazioni in Power Query. Oltre al nome del
parametro e al valore archiviato, include anche altre proprietà che forniscono metadati. Le proprietà di un
parametro sono le seguenti.
Nome — Specificare un nome per questo parametro che consenta di riconoscerlo e differenziarlo
facilmente dagli altri parametri che è possibile creare.
Descrizione — La descrizione viene visualizzata accanto al nome del parametro quando vengono
visualizzate le informazioni sui parametri, consentendo agli utenti che specificano il valore del parametro
di comprenderne lo scopo e la semantica.
Obbligatorio — La casella di controllo indica se gli utenti successivi possono specificare se è necessario
specificare un valore per il parametro .
Tipo — È consigliabile configurare sempre il tipo di dati del parametro. Per altre informazioni
sull'importanza dei tipi di dati, vedere l'articolo Tipi di dati.
Valori suggeriti — Fornisce all'utente suggerimenti per selezionare un valore per Valore corrente tra
le opzioni disponibili:
Qualsiasi valore — Il valore corrente può essere qualsiasi valore immesso manualmente.
Elenco di valori — Offre un'esperienza semplice simile a una tabella in modo da poter definire
un elenco di valori suggeriti che è possibile selezionare in un secondo momento per Valore
corrente. Quando questa opzione è selezionata, verrà resa disponibile una nuova opzione
denominata Valore predefinito. Da qui è possibile selezionare il valore predefinito per questo
parametro, che sarà il valore predefinito visualizzato all'utente quando fa riferimento al parametro.
Questo valore non corrisponde al valore corrente, ovvero il valore archiviato all'interno del
parametro e che può essere passato come argomento nelle trasformazioni. L'uso dell'elenco di
valori consentirà la visualizzazione di un menu a discesa nei campi Valore predefinito e Valore
corrente, in cui è possibile selezionare uno dei valori dall'elenco di valori suggerito.

NOTE
È comunque possibile digitare manualmente qualsiasi valore da passare al parametro . L'elenco di valori
suggeriti serve solo come suggerimenti semplici.

Quer y — Usa una query di elenco (una query il cui output è un elenco) per fornire l'elenco di
valori suggeriti che è possibile selezionare in un secondo momento per Valore corrente .
Valore corrente — Valore che verrà archiviato in questo parametro.

Dove usare i parametri


Un parametro può essere usato in molti modi diversi, ma viene usato più comunemente in due scenari:
Argomento passaggio — È possibile usare un parametro come argomento di più trasformazioni guidate
dall'interfaccia utente.
Argomento della funzione personalizzata — È possibile creare una nuova funzione da una query e fare
riferimento ai parametri come argomenti della funzione personalizzata.
Nelle sezioni successive verrà visualizzato un esempio per questi due scenari.
Argomento passaggio
Per abilitare questa funzionalità, passare prima alla scheda Visualizza nel editor di Power Query e abilitare
l'opzione Consenti sempre nel gruppo Parametri.

NOTE
Questa funzionalità non è attualmente disponibile in Power Query Online.

A scopo di esempio, è possibile visualizzare la query Orders seguente con i campi OrderID , Units e Margin .

È possibile creare un nuovo parametro con il nome Minimum Margin con tipo Numero decimale e Valore
corrente pari a 0,2, come illustrato nell'immagine successiva.
È possibile passare alla query Orders e nel campo Margin (Margine) selezionare l'opzione di filtro
Greater Than (Maggiore di).

Nella finestra Filtra righe verrà visualizzato un pulsante con un tipo di dati per il campo selezionato. È possibile
selezionare l'opzione Parametro dal menu a discesa per questo pulsante. Dalla selezione del campo accanto al
pulsante tipo di dati è possibile selezionare il parametro che si vuole passare a questo argomento. In questo
caso, è il parametro Minimum Margin.
Dopo aver selezionato OK, è possibile vedere che la tabella è stata filtrata usando il valore corrente per il
parametro.

Se si modifica il valore corrente del parametro Minimum Margin in modo che sia 0,3, è possibile vedere
immediatamente come viene aggiornata la query degli ordini e vengono visualizzate solo le righe in cui margin
è superiore al 30%.
TIP
Più trasformazioni in Power Query questa esperienza in cui è possibile selezionare il parametro da un elenco a discesa. È
quindi consigliabile cercarlo sempre e sfruttare i parametri che possono offrire.

Argomento della funzione personalizzata


Con Power Query, è possibile creare una funzione personalizzata da una query esistente con un semplice clic.
Dopo l'esempio precedente, è possibile fare clic con il pulsante destro del mouse sulla query Orders e scegliere
Crea funzione , che avvierà una nuova finestra Crea funzione. In questa finestra è possibile assegnare un
nome alla nuova funzione e indicare i parametri a cui si fa riferimento nella query. Questi parametri verranno
usati come parametri per la funzione personalizzata.

È possibile assegnare a questa nuova funzione il nome desiderato. A scopo dimostrativo, il nome di questa
nuova funzione sarà MyFunction . Dopo aver selezionato OK, nel riquadro Query verrà creato un nuovo
gruppo usando il nome della nuova funzione. In questo gruppo sono presenti i parametri usati per la funzione,
la query usata per creare la funzione e la funzione stessa.
È possibile testare questa nuova funzione immettendo un valore, ad esempio 0,4, nel campo sotto l'etichetta
Minimum Margin . Selezionare quindi il pulsante Richiama. Verrà creata una nuova query con il nome
Invoked Function , passando in effetti il valore 0,4 da usare come argomento per la funzione e fornendo solo le
righe in cui il margine è superiore al 40%.

Per altre informazioni su come creare funzioni personalizzate, vedere l'articolo Creazione di una funzione
personalizzata.
Gestione degli errori
07/12/2021 • 4 minutes to read

Analogamente a come Excel e il linguaggio DAX hanno una funzione, Power Query ha la propria sintassi per
IFERROR testare e rilevare gli errori.

Come indicato nell'articolo sulla gestione degli errori in Power Query, gli errori possono essere visualizzati a
livello di passaggio o di cella. Questo articolo illustra come rilevare e gestire gli errori in base alla logica
specifica.

NOTE
Per illustrare questo concetto, questo articolo userà una Excel di lavoro come origine dati. I concetti illustrati qui si
applicano a tutti i valori in Power Query e non solo a quelli provenienti da una cartella Excel lavoro.

Applicazione della logica condizionale in base agli errori


L'origine dati di esempio per questa dimostrazione è Excel cartella di lavoro con la tabella seguente:

Questa tabella di una Excel contiene Excel errori, ad esempio #NULL! , #REF! e #DIV/0! nella colonna Tariffa
standard. Quando si importa questa tabella nel editor di Power Query, l'immagine seguente mostra l'aspetto.

Si noti come gli errori della Excel cartella di lavoro vengono visualizzati con [Error] il valore in ognuna delle
celle.
In questo caso, l'obiettivo è creare una nuova colonna Tasso finale che userà i valori della colonna Tariffa
standard. Se sono presenti errori, verrà utilizzato il valore della colonna Frequenza speciale corrispondente.
Aggiungere una colonna personalizzata con la try sintassi otherwise e
Per creare una nuova colonna personalizzata, passare al menu Aggiungi colonna e selezionare Colonna
personalizzata. Nella finestra Colonna personalizzata immettere la formula
try [Standard Rate] otherwise [Special Rate] . Assegnare alla nuova colonna il nome Final Rate .
La formula precedente tenterà di valutare la colonna Frequenza standard e restituirà il relativo valore se non
vengono trovati errori. Se vengono rilevati errori nella colonna Frequenza standard , l'output sarà il valore
definito dopo l'istruzione , che in questo caso è otherwise la colonna Frequenza speciale .
Dopo aver aggiunto i tipi di dati corretti a tutte le colonne della tabella, l'immagine seguente mostra l'aspetto
della tabella finale.

Rilevamento di un errore con try e applicazione di logica


condizionale personalizzata
Usando la stessa origine dati di esempio della sezione precedente, il nuovo obiettivo è creare una nuova colonna
per la frequenza finale. Se il valore della tariffa standard esiste, verrà usato tale valore. In caso contrario,
verrà usato il valore della colonna Frequenza speciale, ad eccezione delle righe con qualsiasi #REF! errore.

NOTE
L'unico scopo dell'esclusione #REF! dell'errore è a scopo dimostrativo. Con i concetti illustrati in questo articolo, è
possibile scegliere come destinazione qualsiasi motivo di errore, messaggio o dettagli di propria scelta.

Quando si seleziona uno degli spazi vuoti accanto al valore di errore, viene visualizzato il riquadro dei dettagli
nella parte inferiore della schermata. Il riquadro dei dettagli contiene sia il motivo dell'errore, DataFormat.Error ,
sia il messaggio di Invalid cell value '#REF!' errore:

È possibile selezionare una sola cella alla volta, in modo da visualizzare in modo efficace solo i componenti di
errore di un valore di errore alla volta. In questa posizione si creerà una nuova colonna personalizzata e si userà
try l'espressione .

Aggiungere una colonna personalizzata con la try sintassi


Per creare una nuova colonna personalizzata, passare al menu Aggiungi colonna e selezionare Colonna
personalizzata. Nella finestra Colonna personalizzata immettere la formula try [Standard Rate] .
Assegnare alla nuova colonna il nome Tutti gli errori .
L'espressione converte i valori e gli errori in un valore di record che indica se l'espressione ha gestito o meno un
errore, nonché il valore appropriato o try try il record di errore.

È possibile espandere questa colonna appena creata con i valori dei record ed esaminare i campi disponibili da
espandere selezionando l'icona accanto all'intestazione di colonna.

Questa operazione esporrà tre nuovi campi:


Tutti gli errori.HasError — indica se il valore della colonna Frequenza standard contiene un errore.
Tutti gli errori.Value — Se il valore della colonna Frequenza standard non contiene errori, in questa
colonna verrà visualizzato il valore della colonna Frequenza standard . Per i valori con errori questo campo
non sarà disponibile e durante l'operazione di espansione questa colonna avrà null valori.
Tutti gli errori.Error — Se il valore della colonna Frequenza standard contiene un errore, in questa
colonna verrà visualizzato il record di errore per il valore della colonna Frequenza standard . Per i valori
senza errori, questo campo non sarà disponibile e durante l'operazione di espansione questa colonna avrà
null valori.
Per ulteriori indagini, è possibile espandere la colonna Tutti gli errori.Errore per ottenere i tre componenti
del record di errore:
Motivo dell'errore
Messaggio di errore
Dettagli dell'errore
Dopo l'operazione di espansione, il campo Tutti gli errori.Error.Message visualizza il messaggio di errore
specifico che indica esattamente Excel'errore di ogni cella. Il messaggio di errore è derivato dal campo
Messaggio di errore del record di errore.

Aggiungere una colonna condizionale


A questo punto, con ogni messaggio di errore in una nuova colonna, è possibile creare una nuova colonna
condizionale con il nome Final Rate e le clausole seguenti:
Se il valore nella colonna All Errors.Errors.Message è uguale a , l'output sarà il valore null della
colonna Standard Rate.
In caso contrario, se il valore nella colonna All Errors.Errors.Message è uguale a , l'output sarà il valore
Invalid cell value '#REF!'. della colonna Special Rate.
In caso contrario, null.
Dopo aver mantenendo solo le colonne Account , Standard Rate , Special Rate e Final Rate e aver aggiunto il
tipo di dati corretto per ogni colonna, l'immagine seguente mostra l'aspetto della tabella finale.

Altre risorse
Informazioni e uso degli errori in Power Query
Aggiungere una colonna personalizzata in Power Query
Aggiungere una colonna Condizionale in Power Query
Importare dati da un database usando una query di
database nativa
07/12/2021 • 4 minutes to read

Power Query offre la flessibilità necessaria per importare dati da un'ampia gamma di database supportati. Può
eseguire query di database native, risparmiando il tempo necessario per creare query usando l'Power Query
dati. Questa funzionalità è particolarmente utile per l'uso di query complesse già esistenti e che potrebbe non
essere utile o sapere come ricompilare usando l'interfaccia Power Query — dati.

NOTE
Una finalità delle query di database native è l'effetto non collaterale. Tuttavia, Power Query non garantisce che la query
non influisca sul database. Se si esegue una query di database nativa scritta da un altro utente, verrà richiesto di
assicurarsi di essere a conoscenza delle query che verranno valutate con le credenziali. Per altre informazioni, vedere
Sicurezza delle query native del database.

Power Query consente di specificare la query di database nativa in una casella di testo in Opzioni avanzate
durante la connessione a un database. Nell'esempio seguente si importerà dati da un database SQL Server
usando una query di database nativa immessa nella casella di testo SQL istruzione. La procedura è simile in
tutti gli altri database con query di database native Power Query supporta.
1. Connessione a un SQL Server database usando Power Query. Selezionare l'SQL Ser ver database nella
selezione del connettore.
2. Nella finestra SQL Ser ver popup del database:
a. Specificare il ser ver e il database da cui si desidera importare i dati usando una query di
database nativa.
b. In Opzioni avanzate selezionare il campo SQL istruzione e incollare o immettere la query del
database nativo, quindi selezionare OK.
3. Se questa è la prima volta che ci si connette a questo server, verrà visualizzata una richiesta di selezionare
la modalità di autenticazione per connettersi al database. Selezionare una modalità di autenticazione
appropriata e continuare.

NOTE
Se non si ha accesso all'origine dati (server e database), verrà visualizzato un prompt per richiedere l'accesso al
server e al database (se le informazioni sulla richiesta di accesso sono specificate nel Power BI per l'origine dati).

4. Se viene stabilita la connessione, i dati dei risultati vengono restituiti nel editor di Power Query.
Modellare i dati come si preferisce, quindi selezionare Applica & Chiudi per salvare le modifiche e
importare i dati.

Connettori che supportano query di database native


I connettori Power Query seguenti supportano le query di database native.

C O N N ET TO RE T IP O DI Q UERY DI DATA B A SE N AT IVO

Amazon Redshift Istruzione SQL

Database di Azure Analysis Services Query MDX o DAX

Database di Azure per PostgreSQL Istruzione SQL

Azure Cosmos DB Istruzione SQL

Azure SQL Data Warehouse Istruzione SQL

Database SQL di Azure Istruzione SQL


C O N N ET TO RE T IP O DI Q UERY DI DATA B A SE N AT IVO

DataWorld.Dataset dwSQL

Dataverse Istruzione SQL

Essbase Istruzione MDX

FHIR Ricerca FHIR

Database IBM DB2 Istruzione SQL

Database Informix IBM (Beta) Istruzione SQL

Database MySQL Istruzione SQL

ODBC Istruzione SQL

OLE DB Istruzione SQL

Database Oracle Istruzione SQL

PostgreSQL Istruzione SQL

Database SAP HANA Istruzione SQL

Snowflake Istruzione SQL

Database di SQL Server Analysis Services Query MDX o DAX

Database di SQL Server Istruzione SQL

TIBCO(R) Data Virtualization (Beta) Istruzione SQL

Vena (beta) Query modello (MQL)

Limitazioni e problemi
Prima di usare query di database native, è necessario tenere presenti le limitazioni e i problemi che possono
verificarsi.
Riduzione della query
La funzionalità di folding delle query durante l'uso di una query di database nativa è limitata solo al connettore
PostgreSQL. Nessun altro connettore supporta la funzionalità di folding delle query se si usa una query di
database nativa. Inoltre, per il funzionamento del folding nel connettore PostgreSQL, la query del database
nativo immessa deve funzionare come sottoquery.
Sicurezza delle query native del database
In alcuni casi, quando si tenta di usare una query creata da un altro utente o tramite la barra della formula o
Editor avanzato essenzialmente qualsiasi altro percorso all'esterno delle finestre di dialogo del connettore in cui
viene visualizzata la casella di input della query nativa, è possibile che venga visualizzato un messaggio che —
— indica:

Se viene visualizzato questo messaggio, selezionare Modifica autorizzazione . Questa selezione aprirà la
finestra di dialogo Quer y database nativo . Sarà possibile eseguire la query del database nativo o annullare
la query.

Per impostazione predefinita, se si esegue una query di database nativa all'esterno delle finestre di dialogo del
connettore, verrà richiesto ogni volta che si esegue un testo di query diverso per assicurarsi che il testo della
query che verrà eseguito venga approvato dall'utente.

NOTE
Le query di database native inserite nell'operazione get data non chiederà se si vuole eseguire o meno la query. Verranno
eseguiti.

È possibile disattivare i messaggi di sicurezza delle query del database nativo se la query del database nativo
viene eseguita in Power BI Desktop o Excel. Per disattivare i messaggi di sicurezza:
1. Se si usa Power BI Desktop, nella scheda File selezionare Opzioni e impostazioni > Opzioni .
Se si usa Excel, nella scheda Dati selezionare Ottieni dati > opzioni quer y .
2. In Impostazioni globali selezionare Sicurezza .
3. Deselezionare Richiedi l'approvazione dell'utente per le nuove quer y di database native.
4. Selezionare OK .
È anche possibile revocare l'approvazione di qualsiasi query di database nativa approvata in precedenza per una
determinata origine dati in Power BI Desktop o Excel. Per revocare l'approvazione:
1. Se si usa il Power BI Desktop, nella scheda File selezionare Opzioni e impostazioni > Impostazioni
origine dati .
Se si usa un Excel, nella scheda Dati selezionare > origine dati Impostazioni .
2. Nella finestra di dialogo Impostazioni origine dati selezionare Autorizzazioni globali. Selezionare
quindi l'origine dati contenente le query native del database di cui si vuole revocare l'approvazione.
3. Selezionare Modifica autorizzazioni .
4. Nella finestra di dialogo Modifica autorizzazioni in Query di database native selezionare Revoca
Approvazioni .
Creare flussi di dati della piattaforma Power
Microsoft da query in Microsoft Excel (anteprima)
07/12/2021 • 2 minutes to read

[Questo argomento è una versione preliminare della documentazione ed è soggetto a modifiche.]


È possibile creare flussi di dati Microsoft Power Platform da query nelle cartelle di lavoro di Microsoft Excel per
sfruttare i vantaggi dei flussi di dati basati sul cloud che aggiornano ed elaborano i dati a intervalli regolari
anziché eseguire manualmente queste operazioni in Excel.
Questo articolo illustra come esportare query da Excel in un modello di Power Query che può quindi essere
importato in un flusso di dati Power Platform per creare un flusso di dati.

NOTE
La funzionalità di anteprima per la creazione Power Query modelli di query è disponibile solo per i Office Insider. Per altre
informazioni sul programma Office Insider, vedere Office Insider.

Panoramica
L'uso di set di dati di grandi dimensioni o query a esecuzione lunga può essere complicato ogni volta che è
necessario attivare manualmente un aggiornamento dei dati in Excel perché a tale scopo sono necessarie risorse
dal computer ed è necessario attendere il completamento del calcolo per ottenere i dati più recenti. Lo
spostamento di queste operazioni sui dati in un flusso di dati di Power Platform è un modo efficace per liberare
le risorse del computer e avere i dati più recenti facilmente disponibili per l'uso in Excel.
A tale scopo, sono necessari solo due passaggi rapidi:
1. Esportazione di query in Excel in un modello Power Query dati
2. Creazione di Power Platform flusso di dati dal modello Power Query dati

Esportazione di query in Excel in un modello Power Query dati


Il primo passaggio consiste nel creare un modello Power Query con le query in Excel.
1. Avviare l'editor Power Query dati dalla scheda Dati > l'avvio > editor di Power Quer y .
2. Dopo Power Query caricamento, selezionare File Export Template > (Modello di espor tazione file).

3. Il modello richiede informazioni di base, ad esempio un nome e una descrizione, prima di poter essere
salvato localmente nel computer.
Creazione di Power Platform flusso di dati dal modello Power Query
dati
1. Accedere a Power Apps.
2. Nel riquadro di spostamento a sinistra selezionare Flussi > di dati .
3. Sulla barra degli strumenti selezionare Nuovo modello di impor tazione del flusso di > dati.

4. Selezionare il modello Power Query creato in precedenza. Il nome del flusso di dati verrà prepopolato
con il nome del modello specificato. Al termine della schermata di creazione del flusso di dati, selezionare
Avanti per visualizzare le query Excel nell'editor di query.
5. A questo punto, eseguire il normale processo di creazione e configurazione del flusso di dati in modo da
poter trasformare ulteriormente i dati, impostare pianificazioni degli aggiornamenti nel flusso di dati e
qualsiasi altra operazione possibile sul flusso di dati. Per altre informazioni su come configurare e creare
flussi di Power Platform, vedere Creare e usare flussi di dati.
Vedi anche
Creare e usare flussi di dati in Power Apps
Ottimizzare Power Query durante l'espansione di
colonne di tabella
07/12/2021 • 3 minutes to read

La semplicità e la facilità d'uso che consentono agli utenti Power BI di raccogliere rapidamente dati e generare
report interessanti e potenti per prendere decisioni aziendali intelligenti consente anche agli utenti di generare
facilmente query con prestazioni scarse. Ciò si verifica spesso quando sono presenti due tabelle correlate nel
modo in cui una chiave esterna mette in relazione SQL tabelle o SharePoint tabella. Per il record, questo
problema non è specifico di SQL o SharePoint e si verifica in molti scenari di estrazione dei dati back-end, in
particolare quando lo schema è fluido e personalizzabile. Non c'è nulla di intrinsecamente sbagliato
nell'archiviazione di dati in tabelle separate che condividono una chiave comune, in realtà si tratta di una rete
fondamentale per la progettazione — e la normalizzazione del database. Ma implica un modo migliore per
espandere la relazione.
Si consideri l'esempio seguente di un SharePoint di clienti.

E l'elenco di località seguente fa riferimento a .

Quando ci si connette per la prima volta all'elenco, il percorso viene visualizzato come record.
Questi dati di primo livello vengono raccolti tramite una singola chiamata HTTP all'API SharePoint (ignorando la
chiamata ai metadati), che è possibile visualizzare in qualsiasi debugger Web.

Quando si espande il record, vengono visualizzati i campi uniti in join dalla tabella secondaria.

Quando si espandono righe correlate da una tabella a un'altra, il comportamento predefinito di Power BI è
generare una chiamata a Table.ExpandTableColumn . È possibile visualizzare questo valore nel campo della
formula generato. Sfortunatamente, questo metodo genera una singola chiamata alla seconda tabella per ogni
riga della prima tabella.

In questo modo il numero di chiamate HTTP aumenta di una per ogni riga nell'elenco primario. Questo potrebbe
non sembrare molto nell'esempio precedente di cinque o sei righe, ma nei sistemi di produzione in cui gli
elenchi di SharePoint raggiungono centinaia di migliaia di righe, ciò può causare una riduzione significativa
dell'esperienza.
Quando le query raggiungono questo collo di bottiglia, la soluzione migliore è evitare il comportamento di
chiamata per riga usando un join di tabella classico. In questo modo si garantisce che sia presente una sola
chiamata per recuperare la seconda tabella e che il resto dell'espansione possa verificarsi in memoria usando la
chiave comune tra le due tabelle. La differenza di prestazioni può essere notevole in alcuni casi.
Per prima cosa, iniziare con la tabella originale, annotando la colonna che si vuole espandere e verificando di
avere l'ID dell'elemento in modo che sia possibile associarlo. In genere la chiave esterna viene denominata in
modo simile al nome visualizzato della colonna con l'ID aggiunto. In questo esempio è LocationId .
Caricare quindi la tabella secondaria, assicurando di includere l'ID , che è la chiave esterna. Fare clic con il
pulsante destro del mouse sul pannello Query per creare una nuova query.

Infine, unire le due tabelle usando i rispettivi nomi di colonna corrispondenti. È in genere possibile trovare
questo campo espandendo prima la colonna e quindi cercando le colonne corrispondenti nell'anteprima.

In questo esempio è possibile vedere che LocationId nell'elenco primario corrisponde a ID nell'elenco
secondario. L'interfaccia utente lo rinomina in Location.Id per rendere univoco il nome della colonna. A questo
punto è possibile usare queste informazioni per unire le tabelle.
Facendo clic con il pulsante destro del mouse sul pannello delle query e scegliendo Nuova query combina query
di merge come Nuovo , viene visualizzata un'interfaccia utente semplice che consente di > > combinare queste
due query.
Selezionare ogni tabella dall'elenco a discesa per visualizzare un'anteprima della query.

Dopo aver selezionato entrambe le tabelle, selezionare la colonna che unisce le tabelle in modo logico(in questo
esempio, è LocationId dalla tabella primaria e ID dalla tabella secondaria). La finestra di dialogo indica il
numero di righe corrispondenti usando la chiave esterna. È probabile che si voglia usare il tipo di join
predefinito (left outer) per questo tipo di dati.
Selezionare OK per visualizzare una nuova query, ovvero il risultato del join. L'espansione del record ora non
implica chiamate aggiuntive al back-end.

L'aggiornamento di questi dati comporta solo due chiamate SharePoint una per l'elenco primario e una per —
l'elenco secondario. Il join verrà eseguito in memoria, riducendo in modo significativo il numero di chiamate
SharePoint.
Questo approccio può essere usato per due tabelle in PowerQuery con una chiave esterna corrispondente.

NOTE
SharePoint elenchi utenti e tassonomia sono accessibili anche come tabelle e possono essere uniti esattamente come
descritto in precedenza, purché l'utente abbia privilegi adeguati per accedere a questi elenchi.
Abilitazione Microsoft Edge (Chromium) per
l'autenticazione OAuth in Power BI Desktop
07/12/2021 • 2 minutes to read

Se si usa l'autenticazione OAuth per connettersi ai dati, la finestra di dialogo OAuth in Power Query usa il
browser di controllo incorporato di Microsoft Internet Explorer 11. Tuttavia, alcuni servizi Web, ad esempio
QuickBooks Online, Salesforce Reports e Salesforce Objects, non supportano più Internet Explorer 11.

Versione di Power BI ottobre 2021


NOTE
Se si usa una versione precedente di Power BI, passare a dicembre 2020 Power BI versione.

A partire da ottobre 2021, Power BI Desktop ora usa Microsoft Edge WebView2,per impostazione predefinita,
per l'autenticazione OAuth per tutti i connettori. Tuttavia, è possibile modificare il comportamento predefinito
usando le variabili di ambiente.
Per disabilitare l'uso di WebView2 per connettori specifici, impostare con i nomi dei connettori da
PQ_ExtendEdgeChromiumOAuthDenyList disabilitare. Più connettori sono separati da punti e virgola.

setx PQ_ExtendEdgeChromiumOAuthDenyList MyExtension1;MyExtension2

Per disabilitare l'uso di WebView2, impostare PQ_DisableEdgeChromiumOAuth su true.

setx PQ_DisableEdgeChromiumOAuth true

Versione di Power BI dicembre 2020


A partire da dicembre 2020, Power BI Desktop usa Microsoft Edge WebView2 per l'autenticazione OAuth con
determinati connettori. Questi connettori sono:
GitHub
QuickBooks Online
Report di Salesforce
Oggetti Salesforce
Smartsheet
Twilio
Zendesk
Nel computer Power BI Desktop, è possibile ottenere il controllo WebView2 installando il nuovo browser Edge
(Chromium) (almeno beta) da o installando il pacchetto https://www.microsoftedgeinsider.com/download redist
WebView2.
Tutti gli altri connettori useranno la Internet Explorer 11 per impostazione predefinita, a meno che le
impostazioni non vengano sostituite usando variabili di ambiente.
Per abilitare WebView2 per tutti i connettori, impostare PQ_EdgeChromiumOAuthAllowListAll su true:

setx PQ_EdgeChromiumOAuthAllowListAll true

Per abilitare WebView2 per connettori specifici, impostare con i nomi dei connettori
PQ_ExtendEdgeChromiumOAuthAllowList da abilitare. Più connettori sono separati da punti e virgola.

setx PQ_ExtendEdgeChromiumOAuthAllowList MyExtension1;MyExtension2

Per disabilitare l'uso di WebView2, impostare PQ_DisableEdgeChromiumOAuth su true.

setx PQ_DisableEdgeChromiumOAuth true


Connettori in Power Query
07/12/2021 • 8 minutes to read

La tabella seguente contiene un elenco di tutti i connettori attualmente disponibili per Power Query. Per i
connettori che hanno una pagina di riferimento in questo documento viene indicato un collegamento sotto
l'icona e il nome del connettore.
Un segno di spunta indica che il connettore è attualmente supportato nel servizio elencato; una X indica che il
connettore non è attualmente supportato nel servizio elencato.
I connettori sono elencati in ordine alfabetico in tabelle separate per ogni lettera dell'alfabeto. Usare l'elenco In
questo articolo sul lato destro di questo articolo per passare a una delle tabelle in ordine alfabetico.

NOTE
La Excel nella tabella seguente indica tutti i connettori disponibili in almeno una versione di Excel. Tuttavia, non tutte Excel
supportano tutti questi connettori Power Query indicati. Per un elenco completo dei connettori Power Query supportati
da tutte le versioni di Excel, vedere Power Query origini dati nelle versioni Excel.

A
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Database di
Access
di Microsoft

Active
Director y
di Microsoft

Acter ys
(Beta)
Di Acterys
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Actian
(Beta)
Di Actian

Adobe
Analytics
di Microsoft

Amazon
Athena
By Amazon

Amazon
Redshift
di Microsoft

Anaplan
Di Anaplan

appFigures
(Beta)
di Microsoft

Asana
di Asana

Assemblare
le viste
Di Autodesk
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Cubi
AtScale
(Beta)
di Microsoft

Automazion
e
ovunque
Per
automazione
Ovunque

Automy
Data
Analytics
(Beta)
Di
ACEROYALTY

Database di
Azure
Analysis
Ser vices
di Microsoft

Archiviazion
e BLOB
di Azure
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Azure
CosmosDB
v1
(Beta)
di Microsoft

Azure
CosmosDB
v2
(Beta)
di Microsoft

Gestione
costi
di Azure

di Microsoft

Azure
Databricks
Di Databricks

Esplora dati
di Azure
(Beta)
di Microsoft

Azure Data
Lake
Storage
Gen1
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Azure Data
Lake
Archiviazion
e Gen2
(Beta)
di Microsoft

Azure
DevOps
(Beta)
di Microsoft

Azure
DevOps
Ser ver
(Beta)
di Microsoft

Azure
HDInsight
(HDFS)
di Microsoft

Azure
HDInsight
Spark
di Microsoft

Azure
Synapse
Analytics
(SQL DW)
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Azure
Synapse
Area di
lavoro
Analytics
(Beta)
di Microsoft

Database
SQL
Azure
di Microsoft

Archiviazion
e tabelle
di Azure
di Microsoft

Azure Time
Series
Insights
(Beta)
di Microsoft

B
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Connettore
BI
di Guidanz
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

BI360
di Solver
Global

Dati e
analisi di
Bloomberg
Di Bloomberg

BQE Core
(Beta)
Di BQE

C
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Cognite
Data Fusion
(Beta)
di Cognite

Cher well
(Beta)
Di Cherwell
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Common
Data
Ser vice
(legacy)
di Microsoft

D
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Data.World
-
Get Dataset
(Beta)
di Microsoft

Data
Vir tuality
(Beta)
di Data
Virtuality

Dataverse
di Microsoft

Condivision
e
differenziale
(Beta)
Di Databricks
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Denodo
di Denodo

Dremio
di Dremio

Dynamics
365
(online)
di Microsoft

Dynamics
365
Business
Central
di Microsoft

Dynamics
365
Business
Central
(locale)
di Microsoft

Dynamics
365
Customer
Insights
(Beta)
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Dynamics
NAV
di Microsoft

E
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

eWay-CRM
Di eWay-CRM

Emigo Data
Source
di Sagra

Entersoft
Business
Suite
(Beta)
di Entersoft

EQuiS
(beta)
Di EarthSoft

Essbase
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Exasol
di Exasol

Excel
di Microsoft

1 Disponibile nei flussi di dati per Microsoft Teams.

F
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

FactSet
Analytics
(Beta)
di By FactSet

FHIR
di Microsoft

Car tella
di Microsoft

G
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Github
(Beta)
di Microsoft

Google
Analytics
di Microsoft

Google
BigQuer y
di Microsoft

Fogli
Google
(Beta)
di Microsoft

H
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

File Hadoop
(HDFS)
di Microsoft

HDInsight
Interactive
Quer y
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

API
intelligente
PPM
esagonale
Di hexagon
PPM

Hive LL AP
di Microsoft

I
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Database
IBM DB2
di Microsoft

Database
Informix
IBM
(Beta)
di Microsoft

IBM
Netezza
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Impala
di Microsoft

Indexima
(Beta)
di Indexima

Industrial
App Store
di Intelligent
Plant

Information
Grid (Beta)
di Luminis

InterSystem
s
IRIS (Beta)
di
Intersystems

Intune Data
Warehouse
(Beta)
di Microsoft

J
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Jamf Pro
(Beta)
di Jamf

Jethro
(Beta)
di JethroData

JSON
di Microsoft

1 Disponibile nei flussi di dati per Microsoft Teams.

K
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Kognitwin
(Beta)
di Kongsberg

Kyligence
di Kyligence

L
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Linkar PICK
Style/MultiV
alue
Databases
(Beta)
di Kosday
Solutions

LinkedIn
Sales
Navigator
(Beta)
di Microsoft

M
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Marketo
(Beta)
di Microsoft

MarkLogic
di MarkLogic

MariaDB
Di MariaDB
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Microsoft
Azure
consumptio
n
Insights
(Beta)
(deprecato)
di Microsoft

Microsoft
Exchange
di Microsoft

Microsoft
Exchange
Online
di Microsoft

Microsoft
Graph
Security
(deprecato)
di Microsoft

MicroStrate
gy
for Power BI
di
MicroStrategy

Mixpanel
(Beta)
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Database
MySQL
di Microsoft

O
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Feed OData
di Microsoft

ODBC
di Microsoft

OLE DB
di Microsoft

Database
Oracle
di Microsoft

1 Disponibile nei flussi di dati per Microsoft Teams.

P
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Parquet
di Microsoft

Palantir
Foundr y
di Palantir

Paxata
di Paxata

2 2 1

PDF
di Microsoft

Planview
Enterprise
One - CTM
(Beta)
Di Planview

Planview
Enterprise
One - PRM
(Beta)
Di Planview

Database
PostgreSQL
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Flussi di
dati Power
BI
(Beta)
di Microsoft

Set di dati
Power BI
di Microsoft

Flussi di
dati
Power
Platform
di Microsoft

Product
Insights
(Beta)
di Microsoft

Projectplace
per Power
BI
(Beta)
Di Planview

Script
Python
di Microsoft

1 Disponibile nei flussi di dati per


Microsoft Teams.
2 Il connettore PDF non è supportato in Power BI Premium.
3 Il connettore Parquet non è supportato nella versione a 32 bit di Power BI Desktop.
Q
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

QubolePres
to Beta
di Qubole

Quickbooks
Online
(Beta)
di Microsoft

Quick Base
di Quick Base

R
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Script R
di Microsoft

Roamler
(Beta)
di Roamler

S
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Oggetti
Salesforce
di Microsoft

Repor t di
Salesforce
di Microsoft

SAP
Business
Ser ver
applicazioni
del
warehouse
di Microsoft

SAP
Business
Ser ver
messaggi
del
warehouse
di Microsoft

SAP HANA
database
di Microsoft

SIS-CC
SDMX
By SIS-CC
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

SharePoint
car tella
di Microsoft

SharePoint
elenco
di Microsoft

SharePoint
Online

di Microsoft

Shor tcuts
Business
Insights
(Beta)
di Shortcuts

SiteImprove
di
SiteImprove

Smar tsheet
di Microsoft

Fiocco
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

SoftOneBI
(Beta)
Di SoftOne

Solver
di BI360

Spark
di Microsoft

SparkPost
(Beta)
di Microsoft

Spigit (Beta)
Di Spigit

Starburst
Enterprise
(Beta)
Di Starburst
Data

Database di
SQL Ser ver
Analysis
Ser vices
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

SQL Ser ver


database
di Microsoft

SumTotal
(Beta)
Per SumTotal

Sur veyMon
key (Beta)
di
SurveyMonke
y

SweetIQ
(beta)
di Microsoft

Database
Sybase
di Microsoft

1 Disponibile nei flussi di dati per Microsoft Teams.

T
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

TeamDesk
(beta)
di ForeSoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Tenforce
(Smar t)List
di Tenforce

Database
Teradata
di Microsoft

Testo/CSV
di Microsoft

Dati
TIBCO(R)
Vir tualizzazi
one
(beta)
di TIBCO

Twilio (Beta)
di Microsoft

1 Disponibile nei flussi di dati per Microsoft Teams.

U
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Usercube
(Beta)
Per
utentecube

V
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Vena (beta)
di Vena

Ver tica
di Microsoft

Vessel
Insights
(Beta)
di Kongsberg

W
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Web
di Microsoft
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Webtrends
Analytics
(Beta)
di Microsoft

Witivio
(Beta)
di Witivio

Workforce
Dimensions
(Beta)
(deprecato)
di Kronos

Workplace
Analytics
(Beta)
di Microsoft

1 Disponibile nei flussi di dati per Microsoft Teams.

X
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

XML
di Microsoft

1 Disponibile nei flussi di dati per Microsoft Teams.

Z
C USTO M ER
P O W ER B I P O W ER A P P S IN SIGH T S
P O W ER B I ( F L USSI DI ( F L USSI DI ( F L USSI DI A N A LY SIS
C O N N ET TO RE EXC EL ( SET DI DAT I) DAT I) DAT I) DAT I) SERVIC ES

Zendesk
(Beta)
di Microsoft

Zoho
Creater
(Beta)
di Zoho

Zucchetti
HR
Infinity
(Beta)
di Zucchetti

Passaggi successivi
Origini dati di Power BI (set di dati)
Connettersi a origini dati per i flussi di dati di Power BI
Origini dati disponibili (Dynamics 365 Customer Insights)
Origini dati supportate in Azure Analysis Services
Database di Access
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Anonimo


Windows
Basic
Account dell'organizzazione

Documentazione di riferimento per le funzioni Access.Database

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Se ci si connette a un database di Access da Power Query Online, nel sistema che contiene il gateway dati locale
deve essere installata la versione a 64 bit del provider OLEDB di Access motore di database 2010.
Se si carica un database di Access in Power BI Desktop, le versioni del provider OLEDB di Access motore di
database 2010 e del Power BI Desktop in tale computer devono corrispondere, ovvero a 32 bit o a 64 bit. Per
altre informazioni, vedere Importare un database di Access Power BI Desktop.

Funzionalità supportate
Importa

Connessione a un database di Access da Power Query Desktop


Per stabilire la connessione da Power Query desktop:
1. Selezionare l'opzione Accedi al database nella selezione del connettore.
2. Cercare e selezionare il database di Access da caricare. Quindi selezionare Apri .
Se il database di Access è online, usare il connettore Web per connettersi al database.
3. In Strumento di navigazione selezionare le informazioni del database desiderate, quindi selezionare
Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Connessione a un database di Access da Power Query Online


Per stabilire la connessione da Power Query desktop:
1. Selezionare l'opzione Accedi al database nella selezione del connettore.
2. Nella finestra di dialogo Database di Access visualizzata specificare il percorso del database di Access.
3. Immettere il percorso del file o l'indirizzo URL del database di Access.
4. Selezionare il nome del gateway dati locale.

NOTE
È necessario selezionare un gateway dati locale per questo connettore, indipendentemente dal fatto che il
database di Access si trova nella rete locale o in un sito Web.

5. Selezionare il tipo di credenziali per la connessione al database di Access in Tipo di autenticazione .


6. Immettere le credenziali.
7. Selezionare Avanti per continuare.
8. In Strumento di navigazione selezionare i dati necessari e quindi selezionare Trasforma dati per
continuare a trasformare i dati in editor di Power Query.

Risoluzione dei problemi


Connessione file locale da Power Query Online
Quando si tenta di connettersi a un database di Access locale usando Power Query Online, è necessario
selezionare un gateway dati locale, anche se il database di Access è online.
Errore del gateway dati locale
Una versione a 64 bit del provider OLEDB di Access motore di database 2010 deve essere installata nel
computer gateway dati locale per poter caricare i file di database di Access. Se è già installata una versione a 64
bit di Microsoft Office nello stesso computer del gateway, il provider OLEDB di Access motore di database 2010
è già installato. In caso contrario, è possibile scaricare il driver dal percorso seguente:
https://www.microsoft.com/download/details.aspx?id=13255
Importare il database di Access Power BI Desktop
In alcuni casi, è possibile che venga visualizzato un errore quando si tenta di importare un file di database di
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered Access Power BI Desktop. Questo errore può essere
causato dall'uso di versioni di bit non corrispondenti di Power BI Desktop e del provider OLEDB di Access
motore di database 2010. Per altre informazioni su come correggere questa mancata corrispondenza, vedere
Risolvere i problemi relativi all'importazione di accessi e Excel .xls file in Power BI Desktop.
Adobe Analytics
07/12/2021 • 3 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI Desktop

Tipi di autenticazione supportati Account aziendale

Documentazione di riferimento delle funzioni AdobeAnalytics.Cubes

Prerequisiti
Prima di poter accedere ad Adobe Analytics, è necessario avere un account Adobe Analytics (nome
utente/password).

Funzionalità supportate
Importa

Connettersi ai dati di Adobe Analytics


Per connettersi ai dati di Adobe Analytics:
1. Selezionare Recupera dati nella scheda Home della barra multifunzione in Power BI Desktop.
Selezionare Ser vizi online nelle categorie a sinistra, selezionare Adobe Analytics e quindi selezionare
Connessione .
2. Se è la prima volta che si riceveranno dati tramite il connettore Adobe Analytics, verrà visualizzato un
avviso di terze parti. Selezionare Don't warn me again with this connector (Non avvisare di nuovo
con questo connettore) se non si vuole che questo messaggio sia visualizzato di nuovo e quindi
selezionare Continua.
3. Per accedere all'account Adobe Analytics, selezionare Accedi.

4. Nella finestra di Adobe Analytics visualizzata specificare le credenziali per accedere all'account Adobe
Analytics. È possibile specificare un nome utente ,che in genere è un indirizzo di posta elettronica, oppure
selezionare Continua con Google o Continua con Facebook .
Se è stato immesso un indirizzo di posta elettronica, selezionare Continua.
5. Immettere la password di Adobe Analytics e selezionare Continua.
6. Dopo aver eseguito l'accesso, selezionare Connessione .

Dopo aver stabilito la connessione, è possibile visualizzare in anteprima e selezionare più dimensioni e misure
all'interno della finestra di dialogo Strumento di navigazione per creare un singolo output tabulare.
È anche possibile specificare qualsiasi parametro di input facoltativo necessario per gli elementi selezionati. Per
altre informazioni su questi parametri, vedere Parametri di input facoltativi.
È possibile caricare la tabella selezionata, che porta l'intera tabella in Power BI Desktop, oppure è possibile
selezionare Trasforma dati per modificare la query, che apre editor di Power Query. È quindi possibile filtrare e
perfezionare il set di dati da usare e quindi caricare il set di dati perfezionato in Power BI Desktop.

Parametri di input facoltativi


Dopo aver selezionato i dati di Adobe Analytics da caricare o trasformare nella finestra di dialogo strumento di
navigazione di Power Query, è anche possibile limitare la quantità di dati selezionando un set di parametri di
input facoltativi.
Questi parametri di input sono:
Filtro Intervallo di date con un intervallo di report tra una data di inizio e — una data di fine impostata.
Segment filtra i dati in base a tutti i segmenti contenuti nei dati o solo — ai segmenti selezionati. Per
modificare l'elenco di segmenti, selezionare i puntini di sospensione a destra della casella di riepilogo
Segmento e quindi scegliere i segmenti desiderati. Per impostazione predefinita, tutti i segmenti sono
inclusi nei dati.

Top — consente di filtrare i dati in base agli elementi principali per la dimensione. È possibile immettere
un valore nella casella di testo In alto oppure selezionare i puntini di sospensione accanto alla casella di
testo per selezionare alcuni valori predefiniti. Per impostazione predefinita, vengono selezionati tutti gli
elementi.
La — dimensione filtra i dati in base alla dimensione selezionata. Tutte le dimensioni sono selezionate per
impostazione predefinita. I filtri delle dimensioni Adobe personalizzati non sono attualmente supportati
nell'interfaccia utente di Power Query, ma possono essere definiti manualmente come parametri M nella
query. Per altre informazioni, vedere Uso dei parametri di query in Power BI Desktop.
Limitazioni e problemi
È necessario tenere presenti le limitazioni e i problemi seguenti associati all'accesso ai dati di Adobe Analytics.
Adobe Analytics ha un limite predefinito di 50.000 righe restituite per ogni chiamata API.
Se il numero di chiamate API supera quattro al secondo, verrà generato un avviso. Se il numero supera
cinque al secondo, verrà restituito un messaggio di errore. Per altre informazioni su questi limiti e sui
messaggi associati, vedere Codici di errore dei servizi Web.
Il timeout della richiesta API adobe.io è attualmente di 60 secondi.
Il limite di frequenza predefinito per un'azienda Adobe Analytics è 120 richieste al minuto per utente (il
limite viene applicato come 12 richieste ogni 6 secondi).
L'importazione da Adobe Analytics verrà interrotta e verrà visualizzato un messaggio di errore ogni volta che il
connettore Adobe Analytics raggiunge uno dei limiti dell'API elencati in precedenza.
Quando si accede ai dati usando il connettore Adobe Analytics, seguire le linee guida fornite nell'intestazione
Procedure consigliate.
Per altre linee guida sull'accesso ai dati di Adobe Analytics, vedere Linee guida per l'utilizzo consigliate.

Passaggi successivi
È anche possibile trovare utili le informazioni di Adobe Analytics seguenti:
API di Adobe Analytics 1.4
API di creazione report di Adobe Analytics
Metriche
Elementi
Segmenti
GetReportSuites
Supporto di Adobe Analytics
Amazon Athena
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore è fornito da Amazon, il proprietario di questo connettore e un membro del programma
di certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo articolo o di modifiche da
apportare a questo articolo, visitare il sito Web Amazon e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Configurazione DSN


Account aziendale

Prerequisiti
Un account Amazon Web Services (AWS)
Autorizzazioni per l'uso di Athena
I clienti devono installare il driver ODBC di Amazon Athena prima di usare il connettore

Funzionalità supportate
Comando Importa
DirectQuery

Connessione ad Amazon Athena


Per connettersi ai dati di Athena:
1. Avviare Power BI Desktop.
2. Nella scheda Home selezionare Ottieni dati.
3. Nella casella di ricerca immettere Athena .
4. Selezionare Amazon Athena e quindi selezionare Connessione .
5. Nella pagina Amazon Athena connection (Connessione ad Amazon Athena) immettere le informazioni
seguenti:
Per DSN immettere il nome del DSN ODBC che si desidera utilizzare. Per istruzioni sulla
configurazione del DSN, vedere la documentazione del driver ODBC.
Per Modalità connettività dati scegliere una modalità appropriata per il caso d'uso, seguendo
queste linee guida generali:
Per i set di dati più piccoli, scegliere Impor ta. Quando si usa la modalità di importazione,
Power BI con Athena per importare il contenuto dell'intero set di dati da usare nelle
visualizzazioni.
Per set di dati più grandi, scegliere DirectQuer y. In modalità DirectQuery non viene scaricato
alcun dato nella workstation. Durante la creazione o l'interazione con una visualizzazione,
Microsoft Power BI interagisce con Athena per eseguire query in modo dinamico sull'origine
dati sottostante in modo da visualizzare sempre i dati correnti. Altre informazioni: Usare
DirectQuery in Power BI Desktop

6. Selezionare OK .
7. Quando viene richiesto di configurare l'autenticazione dell'origine dati, selezionare Usa configurazione
origine dati o Autenticazione AAD. Immettere le informazioni di accesso necessarie. Selezionare
Connetti .
Il catalogo dati, i database e le tabelle vengono visualizzati nella finestra di dialogo Strumento di
navigazione.

8. Nel riquadro Opzioni di visualizzazione selezionare la casella di controllo per il set di dati che si vuole
usare.
9. Se si vuole trasformare il set di dati prima di importarlo, passare alla parte inferiore della finestra di
dialogo e selezionare Trasforma dati. Questa selezione apre il editor di Power Query in modo che sia
possibile filtrare e perfezionare il set di dati che si vuole usare.
10. In caso contrario, selezionare Carica . Al termine del caricamento, è possibile creare visualizzazioni simili
a quella nell'immagine seguente. Se è stato selezionato DirectQuer y, Power BI esegue una query ad
Athena per la visualizzazione richiesta.
Amazon Redshift
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Dynamics 365 per Customer Insights

Tipi di autenticazione supportati Amazon Redshift


Basic
Account Microsoft
Account aziendale

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Un account Amazon Web Services (AWS)

Funzionalità supportate
Importa
DirectQuery (solo Power BI Desktop)
Advanced Options
Ruoli
Dimensioni dei batch

Connessione per Amazon Redshift dati da Power Query Desktop


Per connettersi ai Amazon Redshift dati:
1. Selezionare l Amazon Redshift'opzione dati nella selezione Ottieni dati.
2. In Ser ver immettere il nome del server in cui si trovano i dati. Come parte del campo Server, è anche
possibile specificare una porta nel formato seguente: ServerURL:Porta. In Database immettere il nome
del database Amazon Redshift cui si vuole accedere. In questo esempio, è il nome del server e il numero
di porta, è il nome del database e la modalità di connettività dati contoso.redshift.amazonaws.com:5439
dev è impostata su Impor ta .
È anche possibile scegliere alcune opzioni avanzate facoltative per la connessione. Altre informazioni:
Usare Connessione opzioni avanzate
Selezionare la modalità di connettività dei dati Impor ta o DirectQuer y.
Dopo aver compilato e selezionato tutte le opzioni necessarie, selezionare OK.
3. Se questa è la prima volta che ci si connette al database, immettere le credenziali nelle caselle Nome
utente e Password del tipo di Amazon Redshift autenticazione. Selezionare Connetti .

Altre informazioni: Autenticazione con un'origine dati


4. Dopo aver eseguito la connessione, viene visualizzata una finestra Strumento di navigazione che
mostra i dati disponibili nel server. Scegliere uno o più elementi da importare.
5. Dopo aver selezionato gli elementi desiderati, selezionare Carica per caricare i dati o Trasforma dati per
continuare a trasformare i dati in editor di Power Query.

Connessione per Amazon Redshift dati da Power Query Online


Per connettersi ai Amazon Redshift dati:
1. Selezionare l'Amazon Redshift nella pagina Power Query - Scegli origine dati.
2. In Ser ver immettere il nome del server in cui si trovano i dati. Come parte del campo Server, è anche
possibile specificare una porta nel formato seguente: ServerURL:Porta. In Database immettere il nome
del database Amazon Redshift cui si vuole accedere. In questo esempio è
contoso.redshift.amazonaws.com:5439 il nome del server e il numero di porta e il nome del dev database.
È anche possibile scegliere alcune opzioni avanzate facoltative per la connessione. Altre informazioni:
Usare Connessione opzioni avanzate
3. Se necessario, selezionare il gateway dati locale in Gateway dati .
4. Selezionare il tipo di autenticazione da usare in Tipo di autenticazione e quindi immettere le
credenziali.
5. Selezionare o deselezionare Usa connessione crittografata a seconda che si voglia o meno usare
una connessione crittografata.
6. Selezionare Avanti per continuare.
7. In Strumento di navigazione selezionare i dati necessari e quindi selezionare Trasforma dati . Questa
selezione apre il editor di Power Query in modo da poter filtrare e perfezionare il set di dati da usare.

Connessione le opzioni avanzate


Power Query fornisce un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.
La tabella seguente descrive tutte le opzioni avanzate che è possibile impostare in Power Query.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Ruolo Fornisce un nome di risorsa Amazon (ARN), che identifica in


modo univoco le risorse AWS.

Dimensioni dei batch Specifica il numero massimo di righe da recuperare


contemporaneamente dal server durante il recupero dei dati.
Un numero ridotto si traduce in più chiamate al server
quando si recupera un set di dati di grandi dimensioni. Un
numero elevato di righe può migliorare le prestazioni, ma
potrebbe causare un utilizzo elevato della memoria. Il valore
predefinito è 100 righe.
O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando una query di database nativa.

Abilitare Azure AD single Sign-On (SSO) per Amazon Redshift


È possibile Azure AD SSO tramite Power BI Service (cloud) e anche tramite il gateway dati locale. Per altre
informazioni sull'abilitazione Azure AD SSO per tutti i connettori, vedere Panoramica dell'accesso Single Sign-
On (SSO)per gateway dati locali in Power BI .
Azure AD Single Sign-On (SSO ) tramite Power BI servizio
Per configurare una nuova connessione nel Power BI:
1. In Power BI servizio selezionare Por tale di amministrazione dall'elenco delle impostazioni.

2. Abilitare l'opzione SSO di Redshift.


Azure AD Single Sign-On (SSO ) per Amazon Redshift con un gateway dati locale
Prima di poter abilitare Azure AD SSO per Amazon Redshift, è necessario abilitare Azure AD SSO per tutte le
origini dati che supportano l'accesso SSO Azure AD con un gateway dati locale:
1. In Power BI servizio selezionare Por tale di amministrazione dall'elenco delle impostazioni.

2. In Impostazioni tenant abilitare Azure AD Single-Sign (SSO) per il gateway .

Dopo aver abilitato l'Azure AD SSO per tutte le origini dati, abilitare l'accesso SSO Azure AD per Amazon
Redshift:
3. Abilitare anche l'opzione SSO di Redshift.
4. Selezionare Gestisci gateway nell'elenco delle impostazioni.

5. Selezionare un gateway e quindi scegliere Scegli origine dati .


6. Nella scheda Origine dati Impostazioni immettere un valore in Ruolo . Il parametro Role è
obbligatorio quando si usa AAD e deve essere specificato in Advanced Impostazioni .
Selezionare anche Use SSO via Azure AD for DirectQuery queries (Usa SSO tramite Azure AD per le
quer y DirectQuer y).
Anaplan
07/12/2021 • 2 minutes to read

NOTE
L'articolo sul connettore seguente viene fornito da Anaplan, il proprietario del connettore e membro del programma di
certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo articolo o di modifiche da
apportare a questo articolo, visitare il sito Web Di Anaplan e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Basic

Documentazione di riferimento per le funzioni -

Funzionalità supportate
Il connettore viene eseguito tramite le API di integrazione dati pubbliche di Anaplan e consente di caricare tutti i
modelli Anaplan (oltre a quelli archiviati) e le azioni di esportazione salvate in Power BI.

Connessione ad Anaplan da Power Query Desktop


Per connettersi ai dati Anaplan:
1. Selezionare Anaplan nell'elenco connettore dati specifico del prodotto e quindi selezionare
Connessione .
2. Nella schermata Anaplan Connector Configuration (Configurazione connettore Anaplan) immettere l'API
e gli URL di autenticazione:
**URL API Anaplan:**https://api.anaplan.com
**URL di autenticazione anaplan:**https://auth.anaplan.com
Dopo aver immesso l'API e l'URL di autenticazione, selezionare OK.
3. Accedere al connettore per verificare l'accesso a un'area di lavoro Anaplan.

Dopo aver completato l'operazione, selezionare Connessione .

Eseguire un'azione di esportazione


Il connettore Anaplan sfrutta le azioni di esportazione per scaricare dati dal modello Anaplan. Assicurarsi
innanzitutto di avere impostato un'azione di esportazione.
Quando si esegue un'azione di esportazione:
Sono supportate solo le esportazioni .csv e .txt file di output.
A ogni esecuzione dell'azione di esportazione, è necessario attendere dieci minuti per ripetere la stessa
azione di esportazione. Il tempo viene calcolato dal completamento di un'esecuzione dell'esportazione fino
all'inizio dell'esecuzione successiva dell'esportazione. L'attesa di 10 minuti non si applica a esportazioni
diverse.
Se l'azione di esportazione non viene visualizzata nel connettore Power BI, controllare il ruolo e le azioni di
esportazione nel modello.
Per eseguire un'azione di esportazione, usare la finestra di dialogo Strumento di navigazione per individuare
l'esportazione.
1. Cercare i modelli Anaplan per trovare e impostare l'esportazione. È anche possibile individuare il nome
del modello tramite il campo di ricerca.
2. Selezionare la casella accanto a Esegui ƒx'azione di espor tazione per selezionare l'esportazione.
Quando si seleziona l'ƒx Esegui azione di espor tazione, l'esecuzione dell'esportazione non viene
attivata. Questa selezione scarica invece l'ultima versione dei dati Anaplan esportati per l'anteprima.
Nel pannello di destra viene visualizzata un'anteprima. Se l'esportazione di Anaplan è impostata solo
su Admins, gli utenti del modello potrebbero visualizzare un'anteprima vuota, ma l'esportazione
verrà eseguita normalmente.
L'anteprima verrà visualizzata alla successiva impostazione di un'integrazione con la stessa
esportazione.
3. Selezionare Carica per attivare l'esecuzione dell'esportazione. Viene visualizzata la finestra di
dialogo Carica e vengono caricati i dati.

Risoluzione dei problemi


Se viene visualizzato un messaggio di errore correlato al connettore, provare prima di tutto a eseguire
l'aggiornamento.
Errore delle credenziali nello strumento di navigazione
Eseguire una delle operazioni seguenti:
Cancellare la cache Power BI (File , Opzioni , Cancella cache) e riavviare il connettore oppure
Selezionare Annulla e quindi Aggiorna (in alto a destra).
Se si riceve ancora un errore di credenziale dopo la cancellazione della cache, cancellare anche le origini recenti.
1. Selezionare Origini recenti

2. Selezionare Rimuovi dall'elenco

3. Stabilire nuovamente la connessione all'esportazione e aggiornare i dati.


Errore di credenziale nell'editor Power Query
Se si verifica un errore di credenziale nell'editor Power Query, selezionare Chiudi & Applica o Aggiorna
anteprima per aggiornare i dati.

I dati verranno aggiornati, risolvendo l'errore.

Power Query'espressione
Se si verifica un errore Power Query'espressione, selezionare Aggiorna anteprima per aggiornare i dati.

I dati verranno aggiornati, risolvendo l'errore.


Assemblare le viste
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore è fornito da Autodesk, il proprietario di questo connettore e un membro del
programma di certificazione microsoft Power Query Connector. In caso di domande relative al contenuto di questo
articolo o in caso di modifiche da apportare a questo articolo, visitare il sito Web Autodesk e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio GA

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Autodesk Account

Documentazione di riferimento delle funzioni -

Prerequisiti
Per usare il connettore Assemble Views, è necessario avere un account Autodesk con un nome utente e una
password ed essere un membro di almeno un progetto in Assemble.
È anche necessaria almeno una vista associata al progetto Assemble.

Funzionalità supportate
Importa

Connessione assemblare le visualizzazioni da Power Query Desktop


Per connettersi a Assemblare i dati:
1. Selezionare Assemble Views (Assembla visualizzazioni) dall'esperienza Get Data (Ottieni dati) nella
categoria Online Ser vices (Servizi online) e quindi selezionare Connessione .
2. In Assemble Views (Assembla visualizzazioni) immettere l'URL del sito per accedere. Ad esempio, usare
https://example.tr yassemble.com .
a. (Facoltativo) Selezionare una data da cui caricare i dati. Se si lascia vuota questa voce, i dati più recenti
vengono estratti ogni volta che si aggiorna.
b. Dopo aver immesso l'URL, selezionare OK per continuare.
3. Selezionare Accedi per accedere all'account Autodesk.

Dopo aver eseguito l'accesso, selezionare Connessione .


4. Nella finestra di dialogo Strumento di navigazione selezionare le viste assemblate che si desidera
caricare. Per ogni progetto è presente un singolo elemento per le immagini di visualizzazione
denominato [Your Project] View Thumbnails . Selezionare questa opzione se si desidera includere
immagini nel report. Selezionare Trasforma dati per continuare a Power Query.
5. In Power Query verrà visualizzata una singola colonna denominata Rows. Nell'intestazione della colonna
selezionare il pulsante con due frecce che puntano in direzioni opposte per espandere le righe.

a. Deselezionare Usa il nome della colonna originale come prefisso e selezionare OK per ogni query
di dati della vista selezionata.
b. Selezionare Chiudi & Applica per caricare i set di dati.
6. (Facoltativo) Se si è scelto di caricare le immagini, è necessario aggiornare la categoria Dati per il
campo dell'immagine.
a. Espandere la tabella [Your Project] View Thumbnails (Visualizza anteprime) e quindi
selezionare il campo Image (Immagine). Questa selezione apre la scheda Strumenti colonna.
b. Aprire l'elenco a discesa Categoria di dati e selezionare URL immagine. È ora possibile trascinare e
rilasciare il campo Immagine negli oggetti visivi del report.
Limitazioni e problemi noti
Le viste con più di 100.000 righe potrebbero non essere caricate a seconda del numero di campi inclusi
nella vista. Per evitare questa limitazione, è consigliabile suddividere le viste di grandi dimensioni in più
viste più piccole e aggiungere le query nel report o creare relazioni nel modello di dati.
La funzionalità delle immagini di visualizzazione supporta attualmente solo immagini con dimensioni
di anteprima a causa di una limitazione delle dimensioni delle righe in Power BI.
Automy Data Analytics (Beta)
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore è fornito da ACEROYALTY, il proprietario del connettore e un membro del programma
di certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo articolo o di modifiche da
apportare a questo articolo, visitare il sito Web ACEROYALTY e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI Desktop

Tipi di autenticazione supportati Token report automatico

Prerequisiti
Prima di poter accedere ad Automy Data Analytics, è necessario disporre di un token di report automy.

Funzionalità supportate
Importa

Connessione ai dati di Analisi dei dati di Automy


Per connettersi ai dati di Automy Data Analytics:
1. Selezionare Recupera dati nella scheda Home della barra multifunzione in Power BI Desktop.
Selezionare Online Ser vices nelle categorie a sinistra, selezionare Automy Data Analytics e quindi
selezionare Connessione .
2. Se è la prima volta che ci si connette al connettore Automy Data Analytics, verrà visualizzato un avviso di
terze parti. Selezionare Don't warn me again with this connector (Non avvisare di nuovo con questo
connettore) se non si vuole che questo messaggio sia visualizzato di nuovo e quindi selezionare
Continua.
3. Accedere al connettore con la chiave API per verificare l'accesso ad Automy.

Dopo aver completato l'operazione, selezionare Connessione .


4. Nella finestra Automy Data Analytics visualizzata selezionare i parametri corretti per preparare la
connessione. Selezionare il tipo di report e il tipo di dati, completare le informazioni sul token e quindi
selezionare OK.
NOTE
È possibile generare un token di autenticazione per i report usando l'opzione di configurazione in Automy.

5. Nella finestra di dialogo Strumento di navigazione selezionare le tabelle Automy desiderate. È quindi
possibile caricare o trasformare i dati.

Se si selezionano le funzioni, assicurarsi di selezionare Trasforma dati per poter aggiungere parametri
alle funzioni selezionate. Altre informazioni: Uso dei parametri

Limitazioni e problemi
Gli utenti devono essere a conoscenza delle limitazioni e dei problemi seguenti associati all'accesso ai dati di
Analisi dei dati di Automy.
Automy Data Analytics ha un limite predefinito di 100.000 righe restituite per ogni connessione.
Il limite di frequenza predefinito per un'azienda di analisi dei dati automy è di 120 richieste al minuto per
utente.
L'importazione da Automy Data Analytics verrà interrotta e verrà visualizzato un messaggio di errore ogni volta
che il connettore Automy Data Analytics raggiunge uno dei limiti elencati in precedenza.
Per altre linee guida sull'accesso ad Automy Data Analytics, contattare support@automy.global .
Errore delle credenziali nello strumento di navigazione
Se si verifica un errore di credenziale nello Strumento di navigazione, cancellare le impostazioni recenti
dell'origine dati.
1. In Power BI Desktop selezionare File > Data source settings (Impostazioni origine dati file).

2. Selezionare l'origine dati e quindi selezionare Cancella autorizzazioni . Stabilire di nuovo la


connessione alla navigazione.
Azure Cosmos DB v2 (Beta)
07/12/2021 • 6 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Chiave feed

NOTE
La versione del connettore azure Cosmos DB V2 è stata posticipata. È consigliabile continuare a usare il connettore Azure
Cosmos DB V1.

Prerequisiti
Un account azure Cosmos DB

Funzionalità supportate
Comando Importa
DirectQuery

Connettersi ad Azure Cosmos DB


Per connettersi ai dati di Azure Cosmos DB:
1. Avviare Power BI Desktop.
2. Nella scheda Home selezionare Ottieni dati.
3. Nella casella di ricerca immettere Cosmos DB v2.
4. Selezionare Azure Cosmos DB v2 e quindi selezionare Connessione .
5. Nella pagina di connessione di Azure Cosmos DB v2 immettere l'URI dell'account azure Cosmos DB
da usare per l'endpoint di Cosmos. Per Modalità connettività dati scegliere una modalità appropriata
per il caso d'uso, seguendo queste linee guida generali:
Per i set di dati più piccoli, scegliere Impor ta. Quando si usa la modalità di importazione, Power
BI con Cosmos DB per importare il contenuto dell'intero set di dati da usare nelle visualizzazioni.

NOTE
Per configurare correttamente la modalità di importazione, è necessario che entrambe le opzioni
avanzate Passdown avanzato e Modalità PBI siano impostate su 0. Altre informazioni: Connessione
opzioni avanzate

Per set di dati più grandi, scegliere DirectQuer y. In modalità DirectQuery non viene scaricato
alcun dato nella workstation. Durante la creazione o l'interazione con una visualizzazione,
Microsoft Power BI interagisce con Cosmos DB per eseguire query in modo dinamico sull'origine
dati sottostante in modo da visualizzare sempre i dati correnti. Altre informazioni: Usare
DirectQuery in Power BI Desktop

NOTE
Per configurare correttamente la modalità DirectQuer y, è necessario che entrambe le opzioni avanzate
Passdown avanzato e Modalità PBI siano impostate su 1. Altre informazioni: Connessione opzioni
avanzate
6. Selezionare OK .
7. Quando viene richiesto di configurare l'autenticazione dell'origine dati, immettere la chiave dell'account.
Selezionare Connetti .

Il catalogo dati, i database e le tabelle vengono visualizzati nella finestra di dialogo Strumento di
navigazione.

8. Nel riquadro Opzioni di visualizzazione selezionare la casella di controllo per il set di dati che si vuole
usare.
9. Se si vuole trasformare il set di dati prima di importarlo, passare alla parte inferiore della finestra di
dialogo e selezionare Trasforma dati. Questa selezione apre l'editor Power Query in modo che sia
possibile filtrare e perfezionare il set di dati da usare. È anche possibile ottimizzare le opzioni del
connettore modificando gli argomenti passati.
10. In caso contrario, selezionare Carica . Al termine del caricamento, è possibile creare visualizzazioni. Se è
stato selezionato DirectQuer y, Power BI esegue una query Cosmos database per la visualizzazione
richiesta.

Connessione l'uso di opzioni avanzate


Power Query Desktop offre un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.
La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Numero di tentativi Numero di tentativi se sono presenti codici restituiti HTTP


408 - Request Timeout di 412 - Precondition Failed ,
o 429 - Too Many Requests . Il numero predefinito di
tentativi è 5.

Passdown avanzato Provare a eseguire il pass-down quando possibile. Impostare


su 0 per false o 1 per true. Il valore predefinito è 1.

Modalità PBI Indica se il comportamento del driver ODBC è specifico per il


supporto del flusso PBI. Impostare su 0 per false o 1 per
true. Il valore predefinito è 1.

Tipo di protocollo Formato dei dati s scambiati con Cosmos database.


Impostare su 0 per il testo o su 1 per i dati binari. Il valore
predefinito è 1.
O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Flag che indica se lo schema della raccolta viene dichiarato in Altre informazioni: Schema in un documento
modo esplicito come documento

Nome del database contenente il documento dello schema, Altre informazioni: Schema in un documento
se specificato in modo esplicito

Nome della raccolta contenente il documento dello schema, Altre informazioni: Schema in un documento
se specificato in modo esplicito

Nome della proprietà JSON da usare nella ricerca del Altre informazioni: Schema in un documento
documento dello schema

Valore della proprietà JSON da usare nella ricerca del Altre informazioni: Schema in un documento
documento dello schema

Nome della proprietà JSON nel documento dello schema Altre informazioni: Schema in un documento
contenente lo schema della raccolta

Flag che indica se deve essere generato un errore se si tenta Rileva se la raccolta di destinazione ha un indice composto
di ordinare più colonne rispetto al limite dell'indice corrispondente alla sequenza ordinata di colonne. Il valore
composito predefinito è 1 (true).

Flag per indicare se l'esperienza di assistive experience deve Quando si rileva un errore nelle opzioni schema in un
essere inserita se non sono definiti indici compositi ottimali documento, richiedere se il codice JSON della definizione
per il passdown di ordinamento dell'indice composito verrà copiato negli Appunti. Il
contenuto degli Appunti può quindi essere incollato nella
definizione dell'indice composito nel portale Cosmos
DATABASE. Usare questa opzione nella fase di sviluppo. Il
valore predefinito è 0 (false).

Flag per indicare se tutti i campi nella clausola di Indica se tutti i campi nella clausola di ordinamento devono
ordinamento devono essere passati essere passati. In caso contrario, solo il campo ordinato in
base a in un report Power BI o il primo campo specificato in
M verrà passato come ottimizzazione. L'ordinamento
dipende dagli indici compositi definiti per la raccolta.
Attualmente i Cosmos database di database hanno un
massimo di otto indici compositi che possono essere definiti.
Il valore predefinito è 0 (false).

Versione dell'API Rest Imposta la versione dell'API REST da usare. I possibili valori
sono 2015-12-16 o 2018-12-31 . Il valore predefinito è
2018-12-31 . Questo valore può essere impostato solo in
una query avanzata.

Schema in un documento
NOTE
Attualmente, questa sezione contiene informazioni preliminari. Verranno aggiunte altre informazioni prima del rilascio
ufficiale del connettore.

Flag che indica se lo schema della raccolta viene dichiarato in modo esplicito come documento (valore
predefinito 0, ovvero nessun schema come documento)
Nome del database contenente il documento dello schema, se specificato in modo esplicito
Nome della raccolta contenente il documento dello schema, se specificato in modo esplicito
Nome della proprietà JSON da usare nella ricerca del documento dello schema
Valore della proprietà JSON da usare nella ricerca del documento dello schema
Nome della proprietà JSON nel documento dello schema contenente lo schema della raccolta

Istruzioni, limitazioni e problemi noti


È necessario tenere presenti le istruzioni, le limitazioni e i problemi noti seguenti associati all'accesso alla
versione corrente dei dati di Azure Cosmos DB v2.
Istruzioni
Quando si usa questo connettore in modalità di importazione, impostare sia Advanced Passdown che PBI
Mode su 0 (ADVANCED_PASSDOWN="0", PBI_MODE="0").
Non pubblicare report nel Power BI in cui è abilitata la modalità sviluppatore report
(REPORT_DEVELOPER_MODE_ON="1").
Usare le procedure consigliate seguenti quando si usano nuove raccolte di grandi dimensioni in modalità
DirectQuery:
Abilitare temporaneamente la modalità sviluppatore report ( REPORT_DEVELOPER_MODE_ON="1" ).
L'abilitazione di questa modalità consente l'individuazione del layout dei dati caricando un set di dati
molto piccolo Cosmos database.
Dopo aver preparato la raccolta con gli indici compositi necessari e aver determinato gli aspetti utili
della progettazione dei dati correlati alle forme dei dati, è possibile tornare alla modalità regolare ( ) e
avviare le attività di progettazione dei dati che hanno come destinazione i set di dati nella loro
REPORT_DEVELOPER_MODE_ON="0" interezza.

Limitazioni
I report devono essere filtrati in base alle chiavi di partizione definite nel contenitore Cosmos database
sottostante.
Se è necessario eseguire l'ordinamento in base a più colonne ( ), è necessario considerare che l'ordinamento
verrà delegato Cosmos DB, che non ordina in base ai campi che non fanno parte degli indici
FULL_SORTING_ON="1" compositi.
Per facilitare la creazione degli indici compositi necessari, durante la progettazione del report in PBI Desktop,
è necessario che sia abilitata la modalità sviluppatore report ( ), che richiede di copiare negli Appunti il testo
JSON che potrebbe essere incollato nel portale di database di Cosmos quando si specifica l'indice composito
della raccolta di database REPORT_DEVELOPER_MODE_ON="1" Cosmos.
Problemi noti in modalità DirectQuery
I report con più di otto colonne non funzioneranno in modalità DirectQuery.
Le funzioni di aggregazione non vengono passate. L'effetto è SQL le espressioni Passing Down COUNT, SUM
e così via, avranno esito negativo e non visualizzano un numero.
Database SQL di Azure
07/12/2021 • 3 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti supportati Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Windows (Power BI Desktop, Excel, Power Query Online con
gateway)
Database (Power BI Desktop, Excel)
Account Microsoft (tutti)
Basic (Power Query Online)

Documentazione di riferimento per le funzioni Sql.Database


Sql.Databases

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Per impostazione predefinita, Power BI un driver di OLE DB per il database SQL Azure. Tuttavia, per prestazioni
ottimali, è consigliabile che il cliente installi il SQL Server Native Client prima di usare il connettore di database
SQL Azure. SQL Server Native Client 11.0 e SQL Server Native Client 10.0 sono entrambi supportati nella
versione più recente.

Funzionalità supportate
Importa
DirectQuery (solo Power BI)
Advanced Options
Timeout del comando in minuti
Istruzione SQL nativa
Colonne di relazione
Esplora con gerarchia completa
SQL Server di failover
Connessione al database SQL Azure da Power Query Desktop
Per connettersi a un database SQL Azure da Power Query Desktop, seguire questa procedura:
1. Selezionare l'opzione SQL database di Azure nella selezione del connettore.
2. Nel SQL Ser ver database specificare il nome del server e del database (facoltativo).

3. Selezionare la modalità di connettività dei dati Impor ta o DirectQuer y.


4. Facoltativamente, è possibile selezionare e immettere opzioni avanzate che modificheranno la query di
connessione, ad esempio un timeout del comando o una query nativa (istruzione SQL comando). Per
informazioni: usare Connessione opzioni avanzate
5. Selezionare OK .
6. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione, immettere le
credenziali e selezionare il livello a cui applicare le impostazioni di autenticazione. Selezionare Connetti .

Per altre informazioni sui metodi di autenticazione, vedere Autenticazione con un'origine dati.

NOTE
Se la connessione non è crittografata, verrà visualizzato il messaggio seguente.
Selezionare OK per connettersi al database usando una connessione non crittografata oppure seguire le
istruzioni in Abilitare le connessioni crittografate al motore di database per configurare connessioni
crittografate al database di Azure SQL.
7. In Strumento di spostamento selezionare le informazioni del database desiderate, quindi selezionare
Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Connessione al database SQL Azure da Power Query Online


Per connettersi a un database SQL Azure da Power Query Online, seguire questa procedura:
1. Selezionare l'opzione SQL database di Azure nella selezione del connettore.
2. In Azure SQL database specificare il nome del server e del database.
È anche possibile selezionare e immettere opzioni avanzate che modificheranno la query di connessione,
ad esempio un timeout del comando o una query nativa (SQL istruzione). Altre informazioni: Usare
Connessione opzioni avanzate
3. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione e immettere
le credenziali.
4. Se necessario, selezionare il nome del gateway dati locale.
5. Se la connessione non è crittografata, deselezionare la casella di controllo Usa connessione
crittografata .
6. Selezionare Avanti per continuare.
7. In Strumento di navigazione selezionare i dati necessari e quindi selezionare Trasforma dati .

Connessione l'uso di opzioni avanzate


Sia Power Query Desktop che Power Query Online offrono un set di opzioni avanzate che è possibile
aggiungere alla query, se necessario.
La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop e Power
Query Online.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Timeout del comando in minuti Se la connessione dura più di 10 minuti (timeout


predefinito), è possibile immettere un altro valore in minuti
per mantenere la connessione aperta più a lungo. Questa
opzione è disponibile solo in Power Query Desktop.

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando una query di database nativa.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non vengono visualizzate.

Esplora con gerarchia completa Se selezionata, lo strumento di spostamento visualizza la


gerarchia completa delle tabelle nel database a cui ci si
connette. Se l'opzione è deselezionata, lo strumento di
spostamento visualizza solo le tabelle le cui colonne e righe
contengono dati.

Abilita il supporto per il failover di SQL Server Se selezionata, quando un nodo nel gruppo di failover di
Azure SQL non è disponibile, Power Query si sposta da tale
nodo a un altro quando si verifica il failover. Se l'opzione è
deselezionata, non si verifica alcun failover.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop o Avanti in
Power Query Online per connettersi al database di Azure SQL.

Risoluzione dei problemi


Colonne Always Encrypted
Power Query non supporta le colonne "Always Encrypted".
Azure Synapse Analytics (SQL DW)
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Windows (Power BI Desktop, Excel, servizio online con
gateway)
Database (Power BI Desktop, Excel)
Account Microsoft (tutti)
Basic (servizio online)

Documentazione di riferimento per le funzioni Sql.Database


Sql.Databases

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Per impostazione predefinita, Power BI un driver OLE DB per Azure Synapse Analytics (SQL DW). Tuttavia, per
prestazioni ottimali, è consigliabile che il cliente installi il SQL Server Native Client prima di usare il connettore
Azure Synapse Analytics (SQL DW). SQL Server Native Client 11.0 e SQL Server Native Client 10.0 sono
entrambi supportati nella versione più recente.

Funzionalità supportate
Importa
DirectQuery (solo Power BI)
Advanced Options
Timeout del comando in minuti
Istruzione SQL nativa
Colonne di relazione
Esplora con gerarchia completa
SQL Server di failover
Connessione da Azure Synapse Analytics (SQL DW) da Power Query
Desktop
Per stabilire la connessione da Power Query Desktop:
1. Selezionare l'Azure Synapse Analytics (SQL DW) nella selezione del connettore.
2. Nella finestra SQL Ser ver database visualizzata specificare il nome del server e del database
(facoltativo). In questo esempio è TestAzureSQLServer il nome del server e è il database
AdventureWorks2012 .

3. Selezionare la modalità di connettività dei dati Impor ta o DirectQuer y.


È anche possibile selezionare e immettere opzioni avanzate che modificheranno la query di connessione,
ad esempio un timeout del comando o una query nativa (SQL istruzione). Altre informazioni: Usare
Connessione opzioni avanzate
4. Selezionare OK .
5. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione, immettere le
credenziali e selezionare il livello a cui applicare le impostazioni di autenticazione. Selezionare Connetti .

Per altre informazioni sui metodi di autenticazione, vedere Autenticazione con un'origine dati.
NOTE
Se la connessione non è crittografata, verrà visualizzata la finestra di dialogo seguente.

Selezionare OK per connettersi al database usando una connessione non crittografata oppure seguire le
istruzioni in Abilitare le connessioni crittografate al motore di database per configurare connessioni
crittografate a Azure Synapse Analytics (SQL DW).
6. In Strumento di navigazione selezionare le informazioni del database desiderate, quindi selezionare
Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Connessione to Azure Synapse Analytics (SQL DW) da Power Query


Online
Per stabilire la connessione da Power Query Online:
1. Selezionare l'Azure Synapse Analytics (SQL DW) nella selezione del connettore.
2. Nella finestra Azure Synapse Analytics (SQL DW) visualizzata specificare il nome del server e del
database (facoltativo). In questo esempio è TestAzureSQLServer il nome del server e è il database
AdventureWorks2012 .
È anche possibile selezionare e immettere opzioni avanzate che modificheranno la query di connessione,
ad esempio un timeout del comando o una query nativa (SQL istruzione). Altre informazioni: Usare
Connessione opzioni avanzate
3. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione e immettere
le credenziali.
4. Se necessario, selezionare il nome del gateway dati locale.
5. Se la connessione non è crittografata, deselezionare la casella di controllo Usa connessione
crittografata .
6. Selezionare Avanti per continuare.
7. In Strumento di navigazione selezionare i dati necessari e quindi selezionare Trasforma dati .

Connessione le opzioni avanzate


Sia Power Query Desktop che Power Query Online offrono un set di opzioni avanzate che è possibile
aggiungere alla query, se necessario.
La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop e Power
Query Online.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Timeout del comando in minuti Se la connessione dura più di 10 minuti (timeout


predefinito), è possibile immettere un altro valore in minuti
per mantenere la connessione aperta più a lungo. Questa
opzione è disponibile solo in Power Query Desktop.

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando una query di database nativa.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non vengono visualizzate.

Esplora con gerarchia completa Se selezionata, lo strumento di spostamento visualizza la


gerarchia completa delle tabelle nel database a cui ci si
connette. Se l'opzione è deselezionata, lo strumento di
spostamento visualizza solo le tabelle le cui colonne e righe
contengono dati.

Abilita il supporto per il failover di SQL Server Se selezionata, quando un nodo nel gruppo di failover di
Azure SQL non è disponibile, Power Query si sposta da tale
nodo a un altro quando si verifica il failover. Se l'opzione è
deselezionata, non si verifica alcun failover.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop o Avanti in
Power Query Online per connettersi al database di Azure SQL.

Risoluzione dei problemi


Colonne Always Encrypted
Power Query non supporta le colonne "Always Encrypted".
Azure Synapse Analytics workspace (Beta)
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Revisione pubblica

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Account aziendale


Account di servizio

NOTE
Questo Azure Synapse Analytics dell'area di lavoro non sostituisce il connettore Azure Synapse Analytics (SQL DW).
Questo connettore rende più accessibile l'esplorazione dei dati nelle aree di lavoro di Synapse. Alcune funzionalità non
sono presenti in questo connettore, tra cui il supporto per le query native e DirectQuery.

NOTE
Questo connettore supporta l'accesso a tutti i dati nell'area di lavoro Synapse, incluse le tabelle Synapse Serverless,
Synapse su richiesta e Spark.

Prerequisiti
Prima di poter accedere alle aree di lavoro di Synapse, è necessario avere accesso a Azure Synapse Analytics
workspace.

Funzionalità supportate
Importa

Connessione dati dell'area di lavoro di Synapse da Power Query


Desktop
Per connettersi ai dati dell'area di lavoro Synapse:
1. Selezionare Recupera dati nella scheda Home della barra multifunzione in Power BI Desktop.
Selezionare Azure Synapse Analytics workspace (Beta) . Selezionare Connetti .
2. Per accedere all'account Synapse, selezionare Accedi.
3. Nella finestra Accedi con Microsoft visualizzata specificare le credenziali per accedere all'account
Synapse. Selezionare quindi Avanti .
4. Dopo aver eseguito l'accesso, selezionare Connessione .
Dopo aver stabilito la connessione, verrà visualizzato un elenco delle aree di lavoro a cui si ha accesso. Eseguire
il drill-through di aree di lavoro, database e tabelle.
È possibile caricare la tabella selezionata, che porta l'intera tabella Power BI Desktop, oppure è possibile
selezionare Trasforma dati per modificare la query, che viene aperta editor di Power Query. È quindi possibile
filtrare e perfezionare il set di dati da usare e quindi caricare il set di dati perfezionato in Power BI Desktop.

Risoluzione dei problemi


L'area di lavoro Synapse non è visualizzata nel connettore
Il connettore Synapse usa il controllo degli accessi in base al ruolo di Azure per trovare le aree di lavoro di
Synapse a cui si ha accesso.
Se l'accesso è definito solo nel controllo degli accessi in base al ruolo di Synapse,è possibile che l'area di lavoro
non venga visualizzata.
Assicurarsi che l'accesso sia definito dal controllo degli accessi in base al ruolo di Azure per assicurarsi che tutte
le aree di lavoro di Synapse siano visualizzate.
Dati e analisi di Bloomberg
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore viene fornito da Bloomberg, il proprietario del connettore e membro del programma di
certificazione microsoft Power Query Connector. In caso di domande relative al contenuto di questo articolo o di
modifiche che si desidera visualizzare, visitare il sito Web di Bloomberg e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Account aziendale

Prerequisiti
L'organizzazione deve sottoscrivere Bloomberg PORT Enterprise ed è necessario essere un utente di Bloomberg
Anywhere e avere un dispositivo di autenticazione biometrica Bloomberg (B-Unit).

Funzionalità supportate
Importa

Connessione dati e analisi di Bloomberg


Per connettersi a Dati e analisi di Bloomberg:
1. In Power BI Desktop selezionare Home > Ottieni dati .
2. Selezionare Altro dalle categorie a sinistra, selezionare Dati e analisi di Bloomberg e quindi selezionare
Connessione .
3. Se questa è la prima volta che ci si connette al connettore Dati e analisi di Bloomberg, verrà visualizzato
un avviso di terze parti. Selezionare Non avvisare di nuovo con questo connettore se non si vuole che
questo messaggio sia visualizzato di nuovo e quindi selezionare Continua.
4. Immettere una query BQL (Bloomberg Query Language) per specificare i dati da ottenere. Per altre
informazioni su BQL, contattare il rappresentante di Bloomberg Sales. Selezionare OK .

5. Per accedere all'account Bloomberg, selezionare Accedi.


6. Nella finestra visualizzata specificare le credenziali per accedere all'account Bloomberg. Se sono stati
immessi un indirizzo di posta elettronica e una password, selezionare Avanti.

7. Immettere il codice B-Unit e selezionare Accedi.


8. Dopo aver eseguito l'accesso, selezionare Connessione .

Dopo aver stabilito la connessione, i dati saranno disponibili per l'anteprima in Strumento di navigazione.
È possibile caricare la tabella selezionata oppure selezionare Trasforma dati per modificare la query, che viene
aperta editor di Power Query. È quindi possibile filtrare e perfezionare il set di dati da usare e quindi caricare il
set di dati perfezionato in Power BI Desktop.
BQE Core (Beta)
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore è fornito da BQE, il proprietario di questo connettore e un membro del programma di
certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo articolo o in caso di
modifiche che si desidera visualizzare, visitare il sito Web BQE e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati BQE Core Account

Documentazione di riferimento delle funzioni -

Prerequisiti
Per usare il connettore BQE Core Power BI, è necessario disporre di un account BQE Core con nome utente e
password.

Funzionalità supportate
Importa

Connessione a BQE Core da Power Query Desktop


Per connettersi ai dati di BQE Core:
1. Avviare Power BI Desktop e immettere l'esperienza Ottieni dati.
2. Nella categoria Altro selezionare BQEDataConnector e quindi selezionare Connessione .
3. Selezionare Accedi . Verrà richiesto di accedere a Core.

4. Nella schermata di accesso immettere l'indirizzo di posta elettronica e la password core. Selezionare
Accedi .
5. Verrà quindi richiesto di selezionare il file aziendale core.
a. Selezionare il file aziendale core che si vuole usare.
b. (Facoltativo) Se si seleziona Memorizza il consenso, la volta successiva che ci si connette a questo
file aziendale core non sarà necessario concedere nuovamente l'autorizzazione.
c. Selezionare Concedi autorizzazione.
6. Selezionare Connessione e quindi selezionare un modulo. Per informazioni di riferimento, vedere le
informazioni di riferimento sulle API nella documentazione dell'API Core.
7. Nello Strumento di navigazione selezionare le tabelle da caricare e quindi selezionare Trasforma dati per
trasformare i dati in Power Query.
Dataverse
07/12/2021 • 6 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Dynamics 365 per Customer Insights
Power Apps (flussi di dati)

Tipi di autenticazione Account aziendale

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
È necessario disporre di un ambiente Dataverse con autorizzazioni di creazione per accedere al portale e
autorizzazioni di lettura per accedere ai dati all'interno delle tabelle.
Per usare il connettore Dataverse, è necessario che l'impostazione dell'endpoint TDS sia abilitata
nell'ambiente. Altre informazioni: Gestire le impostazioni delle funzionalità
Per usare il connettore Dataverse, le porte TCP 1433 e/o 5558 devono essere aperte per la connessione. Se è
abilitata solo la porta 5558, è necessario aggiungere tale numero di porta all'URL dell'ambiente Dataverse, ad
esempio yourenvironmentid.crm.dynamics.com:5558. Altre informazioni: SQL Server problema di connessione
a causa di porte chiuse

Funzionalità supportate
URL server
Avanzato
Riordinare le colonne
Aggiungere una colonna di visualizzazione

Ricerca dell'URL dell'ambiente Dataverse


Aprire Power Apps. In alto a destra nella pagina Power Apps selezionare l'ambiente a cui ci si connette.
Selezionare icona impostazioni e quindi selezionare Impostazioni avanzate .
Nella nuova scheda del browser visualizzata copiare la radice dell'URL. Questo URL radice è l'URL univoco per
l'ambiente. L'URL sarà nel formato https:// <yourenvironmentid> .crm.dynamics.com/. Assicurarsi di
rimuovere https:// e l'url finale/dall'URL prima di incollarlo per connettersi all'ambiente.
Mantenere questo URL a portata di mano in modo da poterlo usare in un secondo momento, ad esempio
quando si creano Power BI report.

Connessione a Dataverse da Power BI Desktop


NOTE
Il connettore Power Query Dataverse è particolarmente adatto ai carichi di lavoro di analisi, non all'estrazione bulk dei
dati. Altre informazioni: Connessioni dataverse alternative

Per connettersi a Dataverse da Power BI Desktop:


1. Selezionare Ottieni dati dalla scheda Home.
2. Nella finestra di dialogo Ottieni dati selezionare Power Platform > Dataverse e quindi selezionare
Connessione .
3. Immettere l'URL dell'ambiente Dataverse dei dati da caricare. Usare il formato <yourenvironmentid>
.crm.dynamics.com. Assicurarsi di rimuovere il prefisso https:// e il / suffisso dall'URL prima di
immettere il nome in Dominio dell'ambiente . Altre informazioni: Ricerca dell'URL dell'ambiente
Dataverse

4. Selezionare una delle opzioni seguenti per la modalità connettività dati:


Impor ta: è consigliabile importare i dati in Power BI ove possibile. Con questa modalità, i dati
vengono memorizzati nella cache del Power BI e importati a intervalli pianificati.
DirectQuer y: si connette direttamente ai dati in Dataverse. Usare questa modalità per il recupero dei
dati in tempo reale. Questa modalità può anche applicare in modo più rigoroso il modello di sicurezza
Dataverse. Altre informazioni: Linee guida per il modello DirectQuery in Power BI Desktop
Dopo aver compilato le informazioni, selezionare OK.
5. Se questo tentativo è la prima volta che ci si connette a questo sito, selezionare Accedi e immettere le
credenziali. Selezionare Connetti .

6. In Strumento di navigazione selezionare i dati necessari, quindi caricare o trasformare i dati.

Connessione a Dataverse da Power Query Online


Per connettersi a Dataverse da Power Query Online:
1. Nella pagina Origini dati selezionare Common Data Ser vice (legacy).
2. Immettere l'indirizzo URL del server dei dati da caricare.

3. Se necessario, immettere un gateway dati locale se si usano dati locali. Ad esempio, se si desidera
combinare i dati di Dataverse e un database SQL Server locale.
4. Accedere all'account aziendale.
5. Dopo aver eseguito l'accesso, selezionare Avanti.
6. Nella pagina di spostamento selezionare i dati necessari e quindi selezionare Trasforma dati .

Limitazioni e problemi
Quando usare il connettore Common Data Service (legacy)
Dataverse è la sostituzione diretta del connettore Common Data Service. Tuttavia, in alcuni casi può essere
necessario scegliere il connettore Common Data Service (legacy) anziché il connettore Dataverse:
Se ci si connette ai dati usando Power Apps, sarà comunque necessario usare il connettore Common Data
Service (legacy).
Se si accede a set di dati di grandi dimensioni maggiori di 80 MB, sarà comunque necessario usare il
connettore Common Data Service (legacy).
Se si vuole eseguire il paging dei risultati della query e si vogliono compilare report che usano il tipo di dati
image, sarà comunque necessario usare il connettore Common Data Service (legacy).
Esistono anche alcuni tipi di dati TDS (Tabular Data Stream) supportati in OData quando si usa Common Data
Service (legacy) che non sono supportati in Dataverse. I tipi di dati supportati e non supportati sono elencati in
Differenze tra SQL dataverse e Transact-SQL (anteprima).
Tutte queste funzionalità verranno aggiunte al connettore Dataverse in futuro, in cui il connettore Common Data
Service (legacy) verrà deprecato.
Limiti relativi alle prestazioni e alla limitazione dei dati
Per informazioni sui limiti di prestazioni e limitazione per le connessioni Dataverse, vedere Limiti e allocazioni
delle richieste. Queste limitazioni si applicano sia al connettore Dataverse che al connettore feed OData quando
accedono allo stesso endpoint.
Frequenza di recupero delle tabelle
Come linea guida, la maggior parte delle tabelle predefinite verrà recuperata a una velocità di circa 500 righe al
secondo usando il connettore Dataverse. Prendere in considerazione questa frequenza quando si decide se
connettersi a Dataverse o esportare in data lake. Se sono necessarie velocità di recupero più veloci, è
consigliabile usare la funzionalità Esporta in data lake o l'endpoint TDS (Tabular Data Stream). Per altre
informazioni, vedere Connessioni alternative dataverse.
Connessioni dataverse alternative
Esistono diversi modi alternativi per estrarre e migrare i dati da Dataverse:
Usare il connettore OData per spostare i dati da e verso Dataverse. Per altre informazioni su come
eseguire la migrazione dei dati tra ambienti Dataverse usando il connettore OData dei flussi di dati,
vedere Eseguire la migrazione dei dati tra ambienti Dataverse usando il connettore OData dei flussi di
dati.
Usare la funzionalità Espor ta in data lake in Power Apps per estrarre dati da Dataverse in Azure Data
Lake Archiviazione, che può quindi essere usata per eseguire analisi. Per altre informazioni
sull'esportazione in data lake, vedere Esportazione di dati in Azure Data Lake è disponibile a livello
generale.
Usare l'endpoint del protocollo TDS (Tabular Data Stream) per accedere ai dati di sola lettura in Dataverse.
Per altre informazioni su questa funzionalità di anteprima e un video sul funzionamento, vedere Endpoint
del protocollo TDS (Tabular Data Stream) per Dataverse.

NOTE
Sia il connettore Dataverse che le API OData sono pensati per gestire scenari analitici in cui i volumi di dati sono
relativamente piccoli. L'approccio consigliato per l'estrazione bulk dei dati è "Esporta in Data Lake". L'endpoint TDS è
un'opzione migliore rispetto al connettore Dataverse e all'endpoint OData, ma è attualmente in anteprima.

SQL Server di connessione a causa di porte chiuse


Quando ci si connette con il connettore Dataverse, è possibile che si verifichi un errore Impossibile connettersi
che indica che si è verificato un errore di rete o specifico dell'istanza durante il tentativo di stabilire una
connessione SQL Server. Questo errore è probabilmente causato dal blocco delle porte TCP 1433 e 5558
durante la connessione. Per risolvere l'errore relativo alle porte bloccate, passare a Porte bloccate.
Uso di query di database native con Dataverse
È possibile connettersi a Dataverse usando un'istruzione di SQL personalizzata o una query di database nativa.
Anche se non è disponibile un'interfaccia utente per questa esperienza, è possibile immettere la query usando il
Power Query Editor avanzato. Per usare una query di database nativa, è necessario specificare un database
come origine.

Source = CommonDataService.Database([DATABASE URL])

Dopo aver definito un'origine del database, è possibile specificare una query nativa usando la funzione
Value.NativeQuery.
myQuery = Value.NativeQuery(Source, [QUERY], null, [EnableFolding=true])

Nel complesso, la query avrà un aspetto simile al seguente.

let
Source = CommonDataService.Database("[DATABASE]"),
myQuery = Value.NativeQuery(Source, "[QUERY]", null, [EnableFolding=true])
in
myQuery

Si noti che l'ortografia errata di un nome di colonna può comportare la visualizzazione di un messaggio di
errore sulla query in caso di folding anziché di colonna mancante.
Analizzare i dati in Azure Data Lake Archiviazione
Gen2 usando Power BI
07/12/2021 • 4 minutes to read

Questo articolo illustra come usare Power BI Desktop per analizzare e visualizzare i dati archiviati in un account
di archiviazione con uno spazio dei nomi gerarchico (Azure Data Lake Archiviazione Gen2).

Prerequisiti
Prima di iniziare questa esercitazione, sono necessari i prerequisiti seguenti:
Una sottoscrizione di Azure. Vedere Ottenere una versione di prova gratuita di Azure.
Account di archiviazione con uno spazio dei nomi gerarchico. Per crearne uno, seguire queste istruzioni.
Questo articolo presuppone che sia stato creato un account di archiviazione denominato myadlsg2 .
Per l'account di archiviazione viene concesso uno dei ruoli seguenti: Lettore dati BLOB, Collaboratore dati
BLOB o Proprietario dati BLOB.
Un file di dati di esempio denominato Drivers.txt che si trova nell'account di archiviazione. È possibile
scaricare questo esempio dal repository Git di Azure Data Lakee quindi caricare il file nell'account di
archiviazione.
Power BI Desktop . È possibile scaricare questo elemento dall' Area download Microsoft.

Creare un report in Power BI Desktop


1. Avviare Power BI Desktop sul computer.
2. Nella scheda Home della barra multifunzione selezionare Ottieni dati e quindi selezionare Altro.
3. Nella finestra di dialogo Ottieni dati selezionare Azure > Azure Data Lake Store Gen2 e quindi
selezionare Connessione .
4. Nella finestra di dialogo Azure Data Lake Archiviazione Gen2 è possibile specificare l'URL
dell'account, del file system o della sottocartella di Azure Data Lake Archiviazione Gen2 usando il formato
dell'endpoint del contenitore. Gli URL per Data Lake Archiviazione Gen2 hanno il modello seguente:
https://<accountname>.dfs.core.windows.net/<filesystemname>/<subfolder>

È anche possibile scegliere se usare la visualizzazione file system o la visualizzazione Common Data
Model cartella.
Selezionare OK per continuare.

5. Se è la prima volta che si usa questo indirizzo URL, verrà chiesto di selezionare il metodo di
autenticazione.
Se si seleziona il metodo dell'account aziendale, selezionare Accedi per accedere all'account di
archiviazione. Si verrà reindirizzati alla pagina di accesso dell'organizzazione. Seguire le istruzioni per
accedere all'account. Dopo aver eseguito l'accesso, selezionare Connetti .
Se si seleziona il metodo Chiave account, immettere la chiave dell'account e quindi selezionare
Connessione .

6. La finestra di dialogo successiva mostra tutti i file sotto l'URL specificato nel passaggio 4 precedente,
incluso il file caricato nell'account di archiviazione. Verificare le informazioni e quindi selezionare Carica .

7. Dopo aver caricato correttamente i dati in Power BI, nella scheda Campi verranno visualizzati i campi
seguenti.
Tuttavia, per visualizzare e analizzare i dati, è preferibile che i dati siano disponibili usando i campi
seguenti.

Nei passaggi successivi si aggiornerà la query per convertire i dati importati nel formato desiderato.
8. Nella scheda Home della barra multifunzione selezionare Modifica quer y .

9. Nella colonna Editor di quer y selezionare Binario nella colonna Contenuto . Il file verrà rilevato
automaticamente come CSV e verrà visualizzato un output come illustrato di seguito. I dati ora sono
disponibili in un formato che può essere usato per creare visualizzazioni.

10. Nella scheda Home della barra multifunzione selezionare Chiudi & Applica .
11. Dopo l'aggiornamento della query, la scheda Campi contiene i nuovi campi disponibili per la
visualizzazione.

12. È ora possibile creare un grafico a torta per rappresentare i driver in ogni città per un determinato paese.
Per eseguire questa operazione, effettuare le selezioni seguenti.
Nella scheda Visualizzazioni selezionare il simbolo per un grafico a torta.

In questo esempio le colonne da usare sono Column 4 (nome della città) e Column 7 (nome del paese).
Trascinare queste colonne dalla scheda Campi alla scheda Visualizzazioni, come illustrato di seguito.

Il grafico a torta dovrebbe ora essere simile a quello illustrato di seguito.


13. Se si seleziona un paese specifico dai filtri a livello di pagina, è possibile visualizzare il numero di
conducenti in ogni città del paese selezionato. Ad esempio, nella scheda Visualizzazioni selezionare
Brazil da Filtri a livello di pagina .

14. Il grafico a torta viene automaticamente aggiornato in modo da visualizzare i conducenti delle città del
Brasile.

15. Scegliere Salva dal menu File per salvare la visualizzazione come Power BI Desktop file.

Pubblicare report nel servizio Power BI


Dopo aver creato le visualizzazioni in Power BI Desktop, è possibile condividerle con altri utenti pubblicando le
visualizzazioni nel Power BI servizio. Per istruzioni sulla procedura, vedere Pubblicare da Power BI Desktop.

Risoluzione dei problemi


Attualmente, in Power Query Online, il connettore Azure Data Lake Archiviazione Gen2 supporta solo percorsi
con contenitore e non sottocartelle o file. Ad esempio, https:// .dfs.core.windows.net/ funzionerà, mentre https://
<accountname> <container> <accountname> .dfs.core.windows.net/ <container> / <filename> o
<accountname> https:// .dfs.core.windows.net/ <container> / <subfolder> avrà esito negativo.
Microsoft non supporta l'aggiornamento del flusso di dati o del set di dati usando l'autenticazione OAuth2
quando l'account Azure Data Lake Archiviazione Gen 2 (ADLS) si trova in un tenant diverso. Questa limitazione
si applica ad ADLS solo quando il metodo di autenticazione è OAuth2, cio' quando si tenta di connettersi a un
servizio ADLS tra tenant usando un account Azure AD locale. In questo caso, è consigliabile usare un metodo di
autenticazione diverso da OAuth2/AAD, ad esempio il metodo di autenticazione della chiave.
Dataverse
07/12/2021 • 6 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Dynamics 365 per Customer Insights
Power Apps (flussi di dati)

Tipi di autenticazione Account aziendale

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
È necessario disporre di un ambiente Dataverse con autorizzazioni di creazione per accedere al portale e
autorizzazioni di lettura per accedere ai dati all'interno delle tabelle.
Per usare il connettore Dataverse, è necessario che l'impostazione dell'endpoint TDS sia abilitata
nell'ambiente. Altre informazioni: Gestire le impostazioni delle funzionalità
Per usare il connettore Dataverse, le porte TCP 1433 e/o 5558 devono essere aperte per la connessione. Se è
abilitata solo la porta 5558, è necessario aggiungere tale numero di porta all'URL dell'ambiente Dataverse, ad
esempio yourenvironmentid.crm.dynamics.com:5558. Altre informazioni: SQL Server problema di connessione
a causa di porte chiuse

Funzionalità supportate
URL server
Avanzato
Riordinare le colonne
Aggiungere una colonna di visualizzazione

Ricerca dell'URL dell'ambiente Dataverse


Aprire Power Apps. In alto a destra nella pagina Power Apps selezionare l'ambiente a cui ci si connette.
Selezionare icona impostazioni e quindi selezionare Impostazioni avanzate .
Nella nuova scheda del browser visualizzata copiare la radice dell'URL. Questo URL radice è l'URL univoco per
l'ambiente. L'URL sarà nel formato https:// <yourenvironmentid> .crm.dynamics.com/. Assicurarsi di
rimuovere https:// e l'url finale/dall'URL prima di incollarlo per connettersi all'ambiente.
Mantenere questo URL a portata di mano in modo da poterlo usare in un secondo momento, ad esempio
quando si creano Power BI report.

Connessione a Dataverse da Power BI Desktop


NOTE
Il connettore Power Query Dataverse è particolarmente adatto ai carichi di lavoro di analisi, non all'estrazione bulk dei
dati. Altre informazioni: Connessioni dataverse alternative

Per connettersi a Dataverse da Power BI Desktop:


1. Selezionare Ottieni dati dalla scheda Home.
2. Nella finestra di dialogo Ottieni dati selezionare Power Platform > Dataverse e quindi selezionare
Connessione .
3. Immettere l'URL dell'ambiente Dataverse dei dati da caricare. Usare il formato <yourenvironmentid>
.crm.dynamics.com. Assicurarsi di rimuovere il prefisso https:// e il / suffisso dall'URL prima di
immettere il nome in Dominio dell'ambiente . Altre informazioni: Ricerca dell'URL dell'ambiente
Dataverse

4. Selezionare una delle opzioni seguenti per la modalità connettività dati:


Impor ta: è consigliabile importare i dati in Power BI ove possibile. Con questa modalità, i dati
vengono memorizzati nella cache del Power BI e importati a intervalli pianificati.
DirectQuer y: si connette direttamente ai dati in Dataverse. Usare questa modalità per il recupero dei
dati in tempo reale. Questa modalità può anche applicare in modo più rigoroso il modello di sicurezza
Dataverse. Altre informazioni: Linee guida per il modello DirectQuery in Power BI Desktop
Dopo aver compilato le informazioni, selezionare OK.
5. Se questo tentativo è la prima volta che ci si connette a questo sito, selezionare Accedi e immettere le
credenziali. Selezionare Connetti .

6. In Strumento di navigazione selezionare i dati necessari, quindi caricare o trasformare i dati.

Connessione a Dataverse da Power Query Online


Per connettersi a Dataverse da Power Query Online:
1. Nella pagina Origini dati selezionare Common Data Ser vice (legacy).
2. Immettere l'indirizzo URL del server dei dati da caricare.

3. Se necessario, immettere un gateway dati locale se si usano dati locali. Ad esempio, se si desidera
combinare i dati di Dataverse e un database SQL Server locale.
4. Accedere all'account aziendale.
5. Dopo aver eseguito l'accesso, selezionare Avanti.
6. Nella pagina di spostamento selezionare i dati necessari e quindi selezionare Trasforma dati .

Limitazioni e problemi
Quando usare il connettore Common Data Service (legacy)
Dataverse è la sostituzione diretta del connettore Common Data Service. Tuttavia, in alcuni casi può essere
necessario scegliere il connettore Common Data Service (legacy) anziché il connettore Dataverse:
Se ci si connette ai dati usando Power Apps, sarà comunque necessario usare il connettore Common Data
Service (legacy).
Se si accede a set di dati di grandi dimensioni maggiori di 80 MB, sarà comunque necessario usare il
connettore Common Data Service (legacy).
Se si vuole eseguire il paging dei risultati della query e si vogliono compilare report che usano il tipo di dati
image, sarà comunque necessario usare il connettore Common Data Service (legacy).
Esistono anche alcuni tipi di dati TDS (Tabular Data Stream) supportati in OData quando si usa Common Data
Service (legacy) che non sono supportati in Dataverse. I tipi di dati supportati e non supportati sono elencati in
Differenze tra SQL dataverse e Transact-SQL (anteprima).
Tutte queste funzionalità verranno aggiunte al connettore Dataverse in futuro, in cui il connettore Common Data
Service (legacy) verrà deprecato.
Limiti relativi alle prestazioni e alla limitazione dei dati
Per informazioni sui limiti di prestazioni e limitazione per le connessioni Dataverse, vedere Limiti e allocazioni
delle richieste. Queste limitazioni si applicano sia al connettore Dataverse che al connettore feed OData quando
accedono allo stesso endpoint.
Frequenza di recupero delle tabelle
Come linea guida, la maggior parte delle tabelle predefinite verrà recuperata a una velocità di circa 500 righe al
secondo usando il connettore Dataverse. Prendere in considerazione questa frequenza quando si decide se
connettersi a Dataverse o esportare in data lake. Se sono necessarie velocità di recupero più veloci, è
consigliabile usare la funzionalità Esporta in data lake o l'endpoint TDS (Tabular Data Stream). Per altre
informazioni, vedere Connessioni alternative dataverse.
Connessioni dataverse alternative
Esistono diversi modi alternativi per estrarre e migrare i dati da Dataverse:
Usare il connettore OData per spostare i dati da e verso Dataverse. Per altre informazioni su come
eseguire la migrazione dei dati tra ambienti Dataverse usando il connettore OData dei flussi di dati,
vedere Eseguire la migrazione dei dati tra ambienti Dataverse usando il connettore OData dei flussi di
dati.
Usare la funzionalità Espor ta in data lake in Power Apps per estrarre dati da Dataverse in Azure Data
Lake Archiviazione, che può quindi essere usata per eseguire analisi. Per altre informazioni
sull'esportazione in data lake, vedere Esportazione di dati in Azure Data Lake è disponibile a livello
generale.
Usare l'endpoint del protocollo TDS (Tabular Data Stream) per accedere ai dati di sola lettura in Dataverse.
Per altre informazioni su questa funzionalità di anteprima e un video sul funzionamento, vedere Endpoint
del protocollo TDS (Tabular Data Stream) per Dataverse.

NOTE
Sia il connettore Dataverse che le API OData sono pensati per gestire scenari analitici in cui i volumi di dati sono
relativamente piccoli. L'approccio consigliato per l'estrazione bulk dei dati è "Esporta in Data Lake". L'endpoint TDS è
un'opzione migliore rispetto al connettore Dataverse e all'endpoint OData, ma è attualmente in anteprima.

SQL Server di connessione a causa di porte chiuse


Quando ci si connette con il connettore Dataverse, è possibile che si verifichi un errore Impossibile connettersi
che indica che si è verificato un errore di rete o specifico dell'istanza durante il tentativo di stabilire una
connessione SQL Server. Questo errore è probabilmente causato dal blocco delle porte TCP 1433 e 5558
durante la connessione. Per risolvere l'errore relativo alle porte bloccate, passare a Porte bloccate.
Uso di query di database native con Dataverse
È possibile connettersi a Dataverse usando un'istruzione di SQL personalizzata o una query di database nativa.
Anche se non è disponibile un'interfaccia utente per questa esperienza, è possibile immettere la query usando il
Power Query Editor avanzato. Per usare una query di database nativa, è necessario specificare un database
come origine.

Source = CommonDataService.Database([DATABASE URL])

Dopo aver definito un'origine del database, è possibile specificare una query nativa usando la funzione
Value.NativeQuery.
myQuery = Value.NativeQuery(Source, [QUERY], null, [EnableFolding=true])

Nel complesso, la query avrà un aspetto simile al seguente.

let
Source = CommonDataService.Database("[DATABASE]"),
myQuery = Value.NativeQuery(Source, "[QUERY]", null, [EnableFolding=true])
in
myQuery

Si noti che l'ortografia errata di un nome di colonna può comportare la visualizzazione di un messaggio di
errore sulla query in caso di folding anziché di colonna mancante.
Condivisione differenziale (Beta)
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore è fornito da Databricks, il proprietario di questo connettore e un membro del
programma di certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo articolo o in
caso di modifiche che si desidera visualizzare, visitare il sito Web di Databricks e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Chiave (bearer token)

Prerequisiti
Se si usa Power BI Desktop è necessario installare la versione di novembre di Power BI Desktop o versione
successiva. Scaricare la versione più recente .
Il provider di dati invia un URL di attivazione da cui è possibile scaricare un file di credenziali che concede
l'accesso ai dati condivisi.
Dopo aver scaricato il file delle credenziali, aprirlo con un editor di testo per recuperare l'URL dell'endpoint e il
token.
Per informazioni dettagliate sulla condivisione differenziale, vedere Accedere ai dati condivisi con l'utente
usando la condivisione differenziale.

Funzionalità supportate
Importa

Connessione alla condivisione delta di Databricks in Power BI Desktop


Per connettersi a Databricks usando il connettore delta sharing, seguire questa procedura:
1. Aprire Power BI Desktop.
2. Passare al menu Get Data (Ottieni dati) e cercare Delta Sharing (Condivisione differenziale).
3. Selezionare il connettore e quindi selezionare Connessione .
4. Immettere l'URL dell'endpoint recuperato dal file di credenziali nel campo DELTA Sharing Server URL
(URL del server di condivisione differenziale).
5. Facoltativamente, nella scheda Opzioni avanzate è possibile impostare un limite di righe per il numero
massimo di righe che è possibile scaricare. Per impostazione predefinita, questa proprietà è impostata su
1 milione di righe.
6. Selezionare OK .
7. Nella finestra di dialogo Autenticazione immettere il token recuperato dal file di credenziali nel campo
Token di connessione.
8. Selezionare Connetti .

Limitazioni e considerazioni
Questa sezione descrive eventuali limitazioni o considerazioni relative al connettore delta sharing.
È necessario assicurarsi che i dati caricati con il connettore Delta Sharing si adattino alla memoria del computer.
A tale scopo, il connettore limita il numero di righe importate al limite di righe impostato dall'utente.
EQuis (beta)
07/12/2021 • 2 minutes to read

NOTE
L'articolo sul connettore seguente viene fornito da EarthSoft, il proprietario del connettore e membro del programma di
certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo articolo o di modifiche che si
desidera visualizzare, visitare il sito Web di EarthSoft e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Anteprima

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Basic


API Web (token API)
Account dell'organizzazione

Documentazione di riferimento per le funzioni -

Prerequisiti
Per usare il connettore EQuIS, è necessario avere un account utente valido in un sito EQuIS Enterprise (versione
7.0.0.19300 o successiva) che include una licenza API REST. L'account utente deve essere membro del ruolo API
REST. Per verificare la configurazione dell'account utente, passare alla scheda Ruoli nel profilo utente e
verificare di essere membri del ruolo API REST.

Funzionalità supportate
Importa

Connessione a EQuIS da Power BI Desktop


Per connettersi a un sito Enterprise EQuIS da Power BI Desktop, seguire questa procedura:
1. Selezionare il connettore EQuIS nell'elenco dei connettori, quindi selezionare Connessione .
2. Immettere l'URL del sito Enterprise EQuIS a cui ci si connette, quindi selezionare OK.
3. Selezionare il tipo di autenticazione appropriato:
Basic : immettere il nome utente e la password EQuIS per il sito EQuIS Enterprise specificato.
Token API: immettere un token API generato in EQuIS Enterprise (vedere Profilo utente).
Account aziendale: se il sito Enterprise EQuIS è configurato in modo appropriato, è possibile
eseguire l'autenticazione con Azure Active Directory
4. In Strumento di spostamento passare al set di dati o al report da caricare, quindi selezionare Carica o
Trasforma dati . Per altre informazioni sui set di dati disponibili, vedere Uso dei dati EQuIS.

Informazioni aggiuntive
Per prestazioni e funzionalità ottimali, EarthSoft consiglia di usare il connettore EQuIS con la build più
recente di EQuIS Enterprise.
Quando si usano report in un gruppo di strutture, gli utenti non amministratori devono disporre
dell'autorizzazione per tutte le strutture contenute nel gruppo di strutture.
Nello strumento di navigazione saranno disponibili solo i report "griglia".
Tutti i set di dati utilizzati dal connettore EQuIS useranno camelCase per i nomi di colonna.
La versione corrente del connettore EQuIS recupererà un set di dati in una singola richiesta ed è limitata a
1.048.576 righe in un singolo set di dati (questa limitazione potrebbe essere rimossa in una versione futura
del connettore).
Essbase
07/12/2021 • 17 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Basic (nome utente/password)

Documentazione di riferimento per le funzioni Essbase.Cubes

Prerequisiti
Nessuno

Funzionalità supportate
Importa
DirectQuery
Advanced Options
Timeout del comando in minuti
Server
Applicazione
Istruzione MDX

Connessione a Essbase da Power Query Desktop


Per connettersi a un server Essbase:
1. Selezionare l'opzione Essbase nell'esperienza Ottieni dati.
2. Immettere l'URL del server Oracle Essbase Hyperion. In genere, l'URL è simile a
http://[hostname]:[port number]/aps/XMLA . I componenti dell'URL sono:

(ad esempio, ) è il nome host o l'indirizzo IP del hostname yourservername.domain.com server


Oracle Hyperion Application Provider Service (piattaforma di strumenti analitici) per il sistema
interno.
(ad esempio, 19000) è il numero di porta su cui piattaforma di strumenti analitici server è in
port number ascolto per le richieste XMLA.

L'ultima parte dell'URL, ovvero /aps/XML A, fa distinzione tra maiuscole e minuscole e deve
essere specificata esattamente come illustrato.
Di seguito sono riportati alcuni URL di esempio:
http://apsserver.company.com:19000/aps/XMLA —Uso del nome host completo con la porta predefinita
19000.
http://hypserver01:13080/aps/XMLA—Uso di un nome host non completo e della porta 13080.
http://10.10.10.10/aps/XMLA —L'uso di un indirizzo IP e della porta 80 – è stato modificato rispetto al
valore predefinito 19000.
3. Selezionare la modalità di connettività dei dati Impor ta o DirectQuer y. Altre informazioni: Usare
DirectQuery in Power BI Desktop
Facoltativamente, immettere i valori nelle opzioni avanzate che si desidera utilizzare per modificare la
query di connessione. Altre informazioni: Usare Connessione opzioni avanzate
4. La prima volta che ci si connette a un'origine dati (identificata da ogni URL univoco), verrà richiesto di
immettere le credenziali dell'account. Immettere il nome utente e la password per la connessione.
Altre informazioni: Autenticazione con un'origine dati

5. In Strumento di navigazione selezionare i dati necessari. Selezionare quindi Trasforma dati per
trasformare i dati in editor di Power Query o Carica per caricare i dati in Power BI.
Connessione le opzioni avanzate
Power Query fornisce un set di opzioni avanzate che è possibile aggiungere alla query, se necessario. Nella
tabella seguente sono elencate tutte le opzioni avanzate che è possibile impostare in Power Query.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Timeout del comando in minuti Consente di impostare il tempo massimo di esecuzione di un


comando prima che Power BI la chiamata venga
abbandonata. Se viene raggiunto il timeout del comando,
Power BI altri due tentativi prima di abbandonare
completamente la chiamata. Questa impostazione è utile per
eseguire query su grandi quantità di dati. Il valore
predefinito del timeout del comando è 140 secondi.

Server Nome del server in cui deve essere eseguita l'istruzione MDX
facoltativa. Questo valore fa distinzione tra maiuscole e
minuscole.

Applicazione Nome dell'applicazione in cui deve essere eseguita


l'istruzione MDX facoltativa. Questo valore fa distinzione tra
maiuscole e minuscole.
O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Istruzione MDX Facoltativamente, fornisce un'istruzione MDX specifica al


server Oracle Essbase da eseguire. In genere, Power BI in
modo interattivo le misure e le dimensioni del cubo da
restituire. Tuttavia, specificando l'istruzione MDX, verranno
caricati i risultati di tale specifica istruzione MDX. Quando si
specifica l'istruzione MDX, è necessario specificare anche le
opzioni avanzate Server (ad esempio, ) e Applicazione (ad
esempio, ) per indicare dove deve essere eseguita
essbaseserver-1 Sample l'istruzione MDX. Inoltre, è
possibile usare solo l'istruzione MDX in combinazione con la
modalità di connettività dei dati impostata su Impor t .

In generale, l'MDX generato da SmartView o uno accettato


dall'amministratore di Essbase non è compatibile al 100%
con Power BI.

PowerBI richiede che le misure siano specificate su un asse 0


in una query MDX. Inoltre, la numerazione dei livelli viene
inversata in XMLA. Il livello meno granulare è il livello 0, 1 e
così via in XML, ma il contrario in Essbase è "direttamente".
Pertanto, se i numeri di livello vengono usati in modo
esplicito nella query MDX, è necessario regolarlo.

Uso dello strumento di spostamento origine dati durante


l'importazione dei dati
Quando la modalità connettività dati è impostata su Importa , lo strumento di spostamento origine dati
carica i server configurati per il server piattaforma di strumenti analitici specificato nell'URL. Espandendo un
nodo del server nell'albero vengono rivelate le applicazioni disponibili. Espandendo un nodo dell'applicazione
vengono rivelati i database disponibili (noti anche come cubi). L'espansione di un nodo di database visualizza le
misure e le dimensioni disponibili. La dimensione può essere ulteriormente espansa per visualizzare i livelli nella
gerarchia per ogni dimensione.
Scegliere una misura e tutti i livelli di dimensione (o specifici) selezionando la casella di controllo accanto al
nome. Nel riquadro a destra è disponibile un'anteprima dei dati. È possibile selezionare il pulsante Carica per
recuperare i dati associati alla selezione oppure selezionare il pulsante Trasforma dati per impostare altri filtri sui
dati prima di caricarlo in Power BI.

Differenze nella visualizzazione rispetto all'amministrazione di Essbase


Quando si espande una gerarchia di dimensioni nello strumento di navigazione, è possibile notare che ha un
aspetto diverso rispetto all'uso del pannello di controllo di Servizi di amministrazione di Essbase.
Ad esempio, l'immagine seguente mostra la gerarchia della dimensione Entity espansa dai servizi di
amministrazione di Essbase.
Nello strumento di Power Query, la stessa entità espansa è simile alla seguente:

Tenere presente che questo aspetto è una decisione stilistica e che non esistono differenze nei dati. I livelli nello
strumento Power Query navigazione corrispondono al livello gerarchico.
Nell'esempio precedente, il livello 1 contiene "R_ReportingUnits", "Input entità di rettifica" e "No_Entity". Il livello
2 contiene "R_Americas", "R_EMEA", "R_AsiaPacific", "1_ReportingUnits_Adjustment", "CALA_HFM_Input",
"CALA_Total" e così via.
Il motivo è che lo strumento di Power Query è limitato a 10.000 membri da visualizzare e possono essere
presenti milioni o miliardi di membri sotto una gerarchia. Anche nel caso di nessun limite di visualizzazione dei
membri (ad esempio con Power Query Online), la navigazione e la selezione di ogni singolo membro in un
formato albero con così tanti valori possibili diventa rapidamente noiosa e difficile da usare.
Pertanto, il raggruppamento dei livelli gerarchici semplifica la selezione degli elementi da importare e la
generazione di report successiva può usare i filtri solo per i membri che l'utente finale desidera.

Uso di Strumento di spostamento origine dati per DirectQuery


Quando si sceglie una modalità di connettività dei dati di DirectQuer y, lo strumento di navigazione
dell'origine dati carica i server configurati per il server piattaforma di strumenti analitici specificato nell'URL.
Espandendo un nodo del server nell'albero vengono rivelate le applicazioni disponibili. Espandendo un nodo
dell'applicazione vengono rivelati i database disponibili (noti anche come cubi).

Limitazioni note
Il connettore Essbase non supporta le gerarchie di misure. Tutte le misure vengono visualizzate allo stesso
livello. È comunque possibile selezionare tutte le misure necessarie. Il campo di ricerca può essere usato per
restringere le misure visualizzate se sono presenti un numero elevato di misure.

Considerazioni sulle prestazioni


L'interazione con Power BI in modalità DirectQuery è molto dinamica. Quando si seleziona una casella di
controllo per includere una misura o un livello di dimensione nella visualizzazione, Power BI Desktop genera una
query e la invia al server Oracle Essbase per ottenere i risultati. Power BI ottimizzato per memorizzare nella
cache tutte le query ripetute per migliorare le prestazioni. Tuttavia, se viene generata una nuova query, viene
inviata al server Oracle Essbase per produrre un nuovo risultato. A seconda del numero di misure selezionate,
dei livelli di dimensione e dei filtri applicati, la query potrebbe essere inviata più rapidamente di quanto il server
Oracle Essbase possa rispondere. Per migliorare le prestazioni e aumentare la velocità di risposta, considerare i
tre metodi seguenti per ottimizzare l'interazione con il server Oracle Essbase.

Opzioni di riduzione delle query


Esistono tre opzioni per ridurre il numero di query inviate. In Power BI Desktop selezionare la scheda File,
quindi opzioni e impostazioni > opzioni e quindi selezionare Riduzioni query nella sezione File corrente.

Se si seleziona l'opzione Disabilita evidenziazione/filtro incrociato per impostazione predefinita in Riduci


numero di quer y inviate da disabilita l'evidenziazione/filtro incrociato per impostazione predefinita. Se
disabilitata, gli elenchi di membri nel filtro non vengono aggiornati quando si filtrano i membri in altri livelli
della stessa dimensione. Se si seleziona l'opzione Selezioni filtro dei dati in Mostra un pulsante Applica e si
inviano query una sola volta per , viene visualizzato il pulsante Applica quando viene modificata una selezione
del filtro dei dati. Se si seleziona l'opzione Filtra selezioni in Mostra un pulsante Applica e si inviano query
una sola volta per la sezione , viene visualizzato il pulsante Applica quando viene modificata una selezione di
filtro.

NOTE
Queste opzioni si applicano solo al file corrente su cui si sta lavorando. Le impostazioni correnti dell'opzione File
vengono salvate con il file e ripristinate all'apertura dello stesso file.
Applicazione di filtri iterativi quando si aggiungono livelli di
dimensione in modalità di importazione
Quando si interagisce in modalità di importazione con un'origine dati del cubo multidimensionale come Oracle
Essbase, Power Query visualizza inizialmente le misure, le dimensioni e i livelli delle dimensioni nella finestra di
dialogo Strumento di navigazione database. Tuttavia, Power BI consente di selezionare e visualizzare facilmente i
dati che possono, a volte, causare il recupero di una quantità troppo grande di dati dal server.
La procedura seguente illustra come ridurre le probabilità di recupero di più dati di quanto sia necessario
quando si importano dati in Power BI applicando in modo iterativo filtri ai membri della dimensione a ogni
livello.
Connessione all'origine dati Oracle Essbase
1. Seguire le istruzioni in Connessione a Essbase da Power Query Desktop per connettersi a un server
Essbase usando la modalità di importazione.
2. Espandere l'albero per eseguire il drill-down nel server, nell'applicazione e nel database desiderati fino a
quando non vengono espore le misure e le dimensioni per il database. Per il momento, selezionare le
misure e un solo livello di dimensione. Selezionare il livello di dimensione più importante. Nei passaggi
successivi il risultato verrà compilato aggiungendo in modo incrementale altri livelli di dimensioni.

3. Selezionare Carica per importare le misure e il livello di dimensione selezionati.


Modifica di query per aggiungere altri livelli di dimensione
Ora che si dispone di un punto di partenza, è possibile iniziare ad aggiungere altri livelli di dimensione e
applicare filtri non appena si passa.
1. Selezionare Modifica quer y sulla barra Power BI Desktop per avviare il processo.

2. Se si dispone di membri in base ai quale si vuole applicare un filtro nella dimensione iniziale, selezionare
il pulsante Proprietà colonna Pulsante Proprietà colonna per visualizzare l'elenco dei membri della
dimensione disponibili a questo livello. Selezionare solo i membri della dimensione necessari a
questo livello e quindi selezionare OK per applicare il filtro.
3. I dati risultanti vengono ora aggiornati con il filtro applicato. Passaggi applicati contiene ora un nuovo
passaggio (Righe filtrate ) per il filtro impostato. È possibile selezionare il pulsante Impostazioni per
modificare il filtro in un secondo momento.

4. A questo punto si aggiungerà un nuovo livello di dimensione. In questo caso, si aggiungerà il livello
successivo verso il basso per la stessa dimensione scelta inizialmente. Selezionare Aggiungi elementi
sulla barra multifunzione per visualizzare la finestra di dialogo Strumento di navigazione.
5. Passare alla stessa dimensione, ma questa volta selezionare il livello successivo sotto il primo livello.
Selezionare quindi OK per aggiungere il livello di dimensione al risultato.

6. La griglia dei risultati include ora i dati del nuovo livello di dimensione. Si noti che, poiché è stato
applicato un filtro al livello superiore, vengono restituiti solo i membri correlati nel secondo livello.
7. È ora possibile applicare un filtro alla dimensione di secondo livello come per il primo livello.

8. In questo modo, ogni passaggio successivo garantisce che dal server siano recuperati solo i membri e i
dati necessari.
9. Aggiungere ora un nuovo livello di dimensione ripetendo i passaggi precedenti. Selezionare di nuovo
Aggiungi elementi sulla barra multifunzione.

10. Passare al livello di dimensione desiderato, selezionarlo e quindi selezionare OK per aggiungere il livello
di dimensione al risultato.
11. Il nuovo livello di dimensione viene aggiunto al risultato.

12. Applicare un filtro a questo livello di dimensione, in base alle esigenze.


13. Osservare il risultato.

Applicazione delle modifiche e caricamento dei dati


1. Dopo aver aggiunto tutti i livelli di dimensione desiderati e aver impostato tutti i filtri necessari,
selezionare Chiudi nell'angolo superiore destro per chiudere l'editor.
2. Selezionare Sì per applicare le modifiche.

3. Attendere l'applicazione delle modifiche.


4. Osservare i nuovi livelli di dimensione nel riquadro Campi.

A questo punto è possibile creare report e visualizzazioni.

Applicazione di filtri iterativi quando si aggiungono livelli di


dimensione in modalità DirectQuery
Quando si interagisce in modalità DirectQuery con un'origine dati del cubo multidimensionale (ad esempio
Essbase di Oracle), Power BI visualizza le dimensioni e i livelli del cubo nel riquadro Campi.
Per visualizzare e filtrare in base ai membri della dimensione:
1. Trascinare un livello di dimensione dal riquadro Campi al riquadro Filtri. È possibile trascinare il livello
della dimensione nell'area Aggiungi campi dati qui in Filtri nell'oggetto visivo , Filtri in questa pagina o
Filtri in tutte le pagine , a seconda delle esigenze.

2. Quando il livello di una dimensione è nel riquadro Filtro e il tipo di filtro è impostato su Filtro di base , si
noterà che i membri del livello della dimensione vengono visualizzati come elenco di filtri disponibili.
3. È possibile controllare i membri da includere nel risultato.
In caso contrario, è possibile selezionare l'opzione Seleziona tutto e quindi deselezionare i membri che
non si desidera includere nel risultato.
Digitare alcuni caratteri nel campo di ricerca per il filtro per trovare i membri nell'elenco.
4. Quando si dispone di filtri per due o più livelli della stessa dimensione, si noterà che la selezione di
membri da un livello superiore nella dimensione modifica i membri disponibili nei livelli inferiori di tale
dimensione.
Questo comportamento di evidenziazione/filtro incrociato può essere disabilitato selezionando l'opzione
Disabilita evidenziazione/filtro incrociato per impostazione predefinita, come descritto in Opzioni di
riduzione delle query.

5. Dopo aver scelto i membri desiderati nel filtro a livello di dimensione, è possibile aggiungere tale livello
di dimensione alla visualizzazione. Controllare il livello della dimensione corrispondente nel riquadro
Campi e quindi viene aggiunto alla visualizzazione corrente.
Per altre informazioni sull'aggiunta di filtri, vedere Aggiungere un filtro a un report in Power BI.

Risoluzione dei problemi


Questa sezione descrive i problemi comuni che potrebbero verificarsi e include la procedura di risoluzione dei
problemi per risolvere i problemi.
Problemi di connessione
Sintomo 1
Power BI Desktop restituisce il messaggio di errore "Impossibile connettersi al server remoto".
Risoluzione
1. Verificare che il server Essbase Analytic Provider Services (piattaforma di strumenti analitici) sia
configurato correttamente per i server provider e i server autonomi nella console del servizio di
amministrazione Essbase (EAS). Altre informazioni: Configurazione dei cluster Essbase
2. Verificare che l'URL sia corretto.
Verificare che il nome host e l'indirizzo IP o siano corretti.
Verificare che la porta fornita sia corretta.
Verificare che sia specificato il protocollo HTTP (non https).
Verificare che la distinzione tra maiuscole e minuscole sia corretta per il percorso /aps/XMLA nell'URL.
3. Se è presente un firewall tra Power BI Desktop e il nome host specificato, verificare che il nome host e la
porta specificati possano passare in uscita attraverso il firewall.
Convalida
Se si prova a connettersi di nuovo, l'errore non viene visualizzato e l'elenco Cubo e membri si trova nel riquadro
di spostamento. È anche possibile selezionare e visualizzare in anteprima in modalità importazione.
Sintomo 2
Power BI Desktop restituisce il messaggio di errore "Non è stato possibile eseguire l'autenticazione con le
credenziali specificate. Riprovare".
Risoluzione
Verificare che il nome utente e la password specificati siano corretti. Reimimarne i valori con attenzione. La
password fa distinzione tra maiuscole e minuscole.
Convalida
Dopo aver corretto il nome utente e la password, dovrebbe essere possibile visualizzare i membri e il valore
nell'anteprima o caricare i dati.
Sintomo 3
Power BI Desktop restituisce il messaggio di errore "I dati a livello di radice non sono validi. Riga 1, posizione 1."
Risoluzione
Verificare che il server Essbase Analytic Provider Services (piattaforma di strumenti analitici) sia configurato
correttamente per i server provider e i server autonomi nella console del servizio di amministrazione Essbase
(EAS). Altre informazioni: Configuring Essbase Clusters ( Configurazione dei cluster Essbase).
Convalida
Se si prova a connettersi di nuovo, l'errore non viene visualizzato e l'elenco Cubo e membri viene visualizzato
nel riquadro di spostamento. È anche possibile selezionare e visualizzare nell'anteprima in modalità
importazione.
Sintomo 4
Dopo la connessione al server Oracle Essbase Analytic Provider Services (piattaforma di strumenti analitici),
sono presenti server elencati sotto il nodo URL nello strumento di navigazione dell'origine dati. Tuttavia, quando
si espande un nodo del server, non viene elencata alcuna applicazione al di sotto di tale nodo del server.
Risoluzione
È consigliabile configurare il server Oracle Hyperion per definire il provider e i server autonomi tramite la
console Essbase Administration Service (EAS). Vedere la sezione Addendum: Registering Provider and
Standalone Servers in Essbase Administration Service (EAS) Console .
Convalida
Se si prova a connettersi di nuovo, l'errore non viene visualizzato ed è possibile visualizzare l'elenco Cubo e
membri nel riquadro di spostamento. È anche possibile selezionare e visualizzare nell'anteprima in modalità
importazione.
Timeout o problema di dati di grandi dimensioni
Sintomo 1
Power Query restituisce il messaggio di errore "Si è verificato il timeout dell'operazione"
Risoluzione
1. Verificare che la rete sia stabile e che sia disponibile un percorso di rete affidabile per il server Essbase
Analytic Provider Services (piattaforma di strumenti analitici) fornito nell'URL dell'origine dati.
2. Se è possibile che la query al servizio possa restituire una grande quantità di dati, specificare un
intervallo di timeout del comando lungo (o più lungo). Se possibile, aggiungere filtri alla query per
ridurre la quantità di dati restituiti. Ad esempio, selezionare solo membri specifici di ogni dimensione che
si desidera restituire.
Convalida
Riprovare a caricare i dati e, se il problema persiste, provare ad aumentare a un intervallo di timeout più lungo o
filtrare ulteriormente i dati. Se il problema persiste, provare a risolvere i sintomi 3.
Sintomo 2
La query restituisce il messaggio di errore "Errore interno: La query alloca memoria troppo grande (> 4 GB) e
non può essere eseguita. L'allocazione delle query supera i limiti di allocazione."
Risoluzione
La query che si sta tentando di eseguire produce risultati superiori a quelli che il server Oracle Essbase è in
grado di gestire. Specificare o aumentare i filtri nella query per ridurre la quantità di dati restituiti dal server. Ad
esempio, selezionare membri specifici per ogni livello di ogni dimensione o impostare limiti numerici sul valore
delle misure.
Convalida
Riprovare a caricare i dati e, se il problema persiste, provare ad aumentare a un intervallo di timeout più lungo o
filtrare ulteriormente i dati. Se il problema persiste, provare a risolvere i sintomi 3.
Sintomo 3
Il server Essbase Analytic Provider Services (piattaforma di strumenti analitici) o Essbase indica un numero
elevato di connessioni con sessioni a esecuzione lunga.
Risoluzione
Quando la modalità di connettività è DirectQuery, è facile selezionare misure o livelli di dimensione da
aggiungere alla visualizzazione selezionata. Tuttavia, ogni nuova selezione crea una nuova query e una nuova
sessione per il server Essbase Analytic Provider Services (piattaforma di strumenti analitici)/Essbase. Esistono
diversi modi per garantire un numero ridotto di query o per ridurre le dimensioni di ogni risultato della query.
Vedere Considerazioni sulle prestazioni per ridurre il numero di volte in cui viene eseguita una query sul server
e per ridurre anche le dimensioni dei risultati delle query.
Convalida
Riprovare a caricare i dati.
Chiave non corrispondente durante l'esecuzione di MDX
Sintomo
Un'istruzione MDX restituisce il messaggio di errore "La chiave non corrisponde ad alcuna riga nella tabella".
Risoluzione
È probabile che il valore o il caso dei campi Server e Applicazione non corrispondano. Selezionare il pulsante
Modifica e correggere il valore e la distinzione tra maiuscole e minuscole nei campi Server e Applicazione.
Convalida
Riprovare a caricare i dati.
Impossibile ottenere il problema del cubo - MDX
Sintomo
Un'istruzione MDX restituisce il messaggio di errore "Impossibile ottenere il nome del cubo dall'istruzione.
Controllare il formato usato per specificare il nome del cubo".
Risoluzione
Verificare che il nome del database nella clausola FROM dell'istruzione MDX sia completo con il nome
dell'applicazione e del database, ad esempio [Sample.Basic]. Selezionare il pulsante Modifica e correggere il
nome completo del database nella clausola FROM dell'istruzione MDX.
Convalida
Riprovare a caricare i dati.
Problema di errore di Essbase (1260060) - MDX
Sintomo
Un'istruzione MDX restituisce il messaggio di errore "Errore Essbase (1260060): il nome del cubo XXXX non
corrisponde all'applicazione o al database corrente"
Risoluzione
Verificare che il nome dell'applicazione e il nome completo del database nella clausola FROM corrispondano.
Selezionare il pulsante Modifica e correggere il nome dell'applicazione o il nome completo del database nella
clausola FROM dell'istruzione MDX
Convalida
Riprovare a caricare i dati.
Errore Essbase (1200549): dimensione ripetuta [Misure ] nella query MDX
Sintomo
Il caricamento di una dimensione restituisce il messaggio di errore "Essbase Error (1200549): Repeated
dimension [Measures] in MDX query".
Risoluzione
1. Accedere al server Essbase, aprire la console dei servizi di amministrazione di Essbase e accedere con un
utente amministratore (o chiunque abbia le autorizzazioni per il database problematico).
2. Passare al server Essbase >'> database con la dimensione "Measures" problematica.
3. Sbloccare la struttura del database e modificarla.
4. Determinare quale dimensione deve essere di tipo "Account". Fare clic con il pulsante destro del mouse
su di esso e scegliere Modifica proprietà membro....
5. Selezionare il campo Tipo dimensione e impostarlo su Account . Selezionare OK .

6. Verificare e salvare la struttura.


Convalida
Riprovare a caricare la dimensione.
Excel
07/12/2021 • 8 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Anonimo (online)


Basic (online)
Account aziendale (online)

Documentazione di riferimento per le funzioni Excel.Workbook


Excel.CurrentWorkbook

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Per connettersi a una cartella di lavoro legacy ,ad esempio .xls o xlsb, è necessario il provider OLEDB (o ACE) di
Access motore di database. Per installare questo provider, passare alla pagina di download e installare la
versione pertinente (32 bit o 64 bit). Se non è installato, durante la connessione alle cartelle di lavoro legacy
verrà visualizzato l'errore seguente:
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. The 32-bit (or 64-bit)
version of the Access Database Engine OLEDB provider may be required to read this type of file. To download
the client software, visit the following site: https://go.microsoft.com/fwlink/?LinkID=285987.

ACE non può essere installato negli ambienti del servizio cloud. Quindi, se viene visualizzato questo errore in un
host cloud (ad esempio Power Query Online), è necessario usare un gateway con ACE installato per connettersi
ai file Excel legacy.

Funzionalità supportate
Importa

Connessione a una cartella Excel cartella di lavoro da Power Query


Desktop
Per stabilire la connessione da Power Query Desktop:
1. Selezionare l Excel'opzione nella selezione del connettore.
2. Cercare e selezionare la cartella Excel cartella di lavoro da caricare. Quindi selezionare Apri .

Se la Excel cartella di lavoro è online, usare il connettore Web per connettersi alla cartella di lavoro.
3. In Strumento di spostamento selezionare le informazioni della cartella di lavoro desiderate, quindi
selezionare Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di
Power Query.

Connessione a una cartella Excel cartella di lavoro da Power Query


Online
Per stabilire la connessione da Power Query Online:
1. Selezionare l Excel'opzione nella selezione del connettore.
2. Nella finestra Excel visualizzata specificare il percorso della cartella Excel cartella di lavoro.
3. Se necessario, selezionare un gateway dati locale per accedere alla cartella Excel cartella di lavoro.
4. Se è la prima volta che si accede a questa cartella di lavoro Excel, selezionare il tipo di autenticazione e
accedere al proprio account (se necessario).
5. In Strumento di spostamento selezionare le informazioni della cartella di lavoro desiderate e quindi
Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Risoluzione dei problemi


Precisione numerica (o "Perché i numeri sono cambiato?")
Quando si importano Excel dati, è possibile notare che alcuni valori numerici sembrano cambiare leggermente
quando vengono importati in Power Query. Ad esempio, se si seleziona una cella contenente 0,049 in Excel,
questo numero viene visualizzato nella barra della formula come 0,049. Se tuttavia si importa la stessa cella in
Power Query e la si seleziona, i dettagli dell'anteprima la visualizzano come 0,049000000000002 (anche se
nella tabella di anteprima è formattata come 0,049). Che cosa succede qui?
La risposta è un po' complicata e ha a che fare con il modo in cui Excel i numeri usando una notazione binaria a
virgola mobile. La linea di fondo è che ci sono alcuni numeri che Excel non possono rappresentare con una
precisione del 100%. Se si apre il file .xlsx e si osserva il valore effettivo archiviato, si noti che nel file .xlsx, 0,049
viene effettivamente archiviato come 0,049000000000000000002. Questo è il valore Power Query legge dal
.xlsx e quindi il valore visualizzato quando si seleziona la cella in Power Query. Per altre informazioni sulla
precisione numerica in Power Query, vedere le sezioni "Numero decimale" e "Numero decimale fisso" dei tipi di
dati in Power Query.
Connessione a una cartella di lavoro Excel online
Se si vuole connettersi a un documento Excel ospitato in Sharepoint, è possibile farlo tramite il connettore Web
in Power BI Desktop, Excel e Flussi di dati e anche con il connettore Excel in Flussi di dati. Per ottenere il
collegamento al file:
1. Aprire il documento in Excel Desktop.
2. Aprire il menu File, selezionare la scheda Informazioni e quindi selezionare Copia percorso .
3. Copiare l'indirizzo nel campo Percorso file o URL e rimuovere ?web=1 dalla fine dell'indirizzo.
Connettore ACE legacy
Power Query le cartelle di lavoro legacy ,ad esempio .xls o xlsb, usare il provider OLEDB access motore di
database (o ACE). Di conseguenza, è possibile che si verifichino comportamenti imprevisti durante
l'importazione di cartelle di lavoro legacy che non si verificano durante l'importazione di cartelle di lavoro
OpenXML ,ad esempio .xlsx. Ecco alcuni esempi comuni.
Formattazione dei valori imprevista
A causa di ACE, i valori di una cartella di lavoro Excel legacy potrebbero essere importati con minore precisione
o fedeltà del previsto. Si supponga, ad esempio, che il file Excel contenga il numero 1024.231, formattato per la
visualizzazione come "1.024.23". Quando viene importato in Power Query, questo valore viene rappresentato
come valore di testo "1.024.23" anziché come numero di fedeltà completa sottostante (1024.231). Ciò è dovuto
al fatto che, in questo caso, ACE non visualizza il valore sottostante Power Query, ma solo il valore visualizzato in
Excel.
Valori Null imprevisti
Quando ACE carica un foglio, esamina le prime otto righe per determinare i tipi di dati delle colonne. Se le prime
otto righe non sono rappresentative delle righe successive, ACE può applicare un tipo non corretto a tale
colonna e restituire valori Null per qualsiasi valore che non corrisponde al tipo. Ad esempio, se una colonna
contiene numeri nelle prime otto righe (ad esempio 1000, 1001 e così via), ma contiene dati non numerici nelle
righe successive ,ad esempio "100Y" e "100Z", ACE conclude che la colonna contiene numeri e tutti i valori non
numerici vengono restituiti come Null.
Formattazione dei valori incoerente
In alcuni casi, ACE restituisce risultati completamente diversi tra gli aggiornamenti. Usando l'esempio descritto
nella sezione formattazione, è possibile che venga improvvisamente visualizzato il valore 1024.231 anziché
"1.024.23". Questa differenza può essere causata dall'apertura della cartella di lavoro legacy Excel durante
l'importazione in Power Query. Per risolvere il problema, chiudere la cartella di lavoro.
Dati mancanti o incompleti Excel dati
Talvolta Power Query non riesce a estrarre tutti i dati da un foglio Excel foglio di lavoro. Questo errore è spesso
causato da dimensioni errate del foglio di lavoro, ad esempio dimensioni di quando i dati effettivi occupano più
di tre colonne A1:C200 o 200 righe.
Come diagnosticare dimensioni non corrette
Per visualizzare le dimensioni di un foglio di lavoro:
1. Rinominare il file xlsx con un'.zip predefinita.
2. Aprire il file in Esplora file.
3. Passare a xl\worksheets.
4. Copiare il file xml per il foglio problematico (ad esempio, Sheet1.xml) dal file ZIP in un'altra posizione.
5. Esaminare le prime righe del file. Se il file è sufficientemente piccolo, aprirlo in un editor di testo. Se il file è
troppo grande per essere aperto in un editor di testo, eseguire il comando seguente da un prompt dei
comandi: più Sheet1.xml.
6. Cercare un <dimension .../> tag , ad esempio <dimension ref="A1:C200" /> .

Se il file ha un attributo dimensione che punta a una singola cella (ad esempio ), Power Query usa questo
attributo per trovare la riga e la colonna iniziale dei <dimension ref="A1" /> dati nel foglio.
Tuttavia, se il file ha un attributo di dimensione che punta a più celle (ad esempio ), Power Query usa questo
intervallo per trovare la riga e la colonna iniziale, nonché la riga e la colonna <dimension ref="A1:AJ45000"/>
finali. Se questo intervallo non contiene tutti i dati nel foglio, alcuni dei dati non verranno caricati.
Come correggere dimensioni non corrette
È possibile risolvere i problemi causati da dimensioni non corrette eseguendo una delle azioni seguenti:
Aprire e salvare nuovamente il documento in Excel. Questa azione sovrascriverà le dimensioni non
corrette archiviate nel file con il valore corretto.
Verificare che lo strumento che ha generato il file Excel sia fisso per generare correttamente le
dimensioni.
Aggiornare la query M per ignorare le dimensioni non corrette. A partire dalla versione di dicembre 2020
Power Query ora Excel.Workbook supporta InferSheetDimensions un'opzione . Se true, questa opzione fa
in modo che la funzione ignori le dimensioni archiviate nella cartella di lavoro e le determinerà invece
esaminando i dati.
Ecco un esempio di come fornire questa opzione:
Excel.Workbook(File.Contents("C:\MyExcelFile.xlsx"), [DelayTypes = true, InferSheetDimensions = true])

Prestazioni lente o lente durante il caricamento Excel dati


Il caricamento lento Excel dati può essere causato anche da dimensioni non corrette. In questo caso, tuttavia, la
lentezza è dovuta al fatto che le dimensioni sono molto più grandi del necessario, anziché essere troppo piccole.
Dimensioni troppo grandi causeranno la Power Query di dati dalla cartella di lavoro di una quantità molto
maggiore di quella effettivamente necessaria.
Per risolvere questo problema, è possibile fare riferimento a Individuare e reimpostare l'ultima cella di un foglio
di lavoro per istruzioni dettagliate.
Prestazioni scarse durante il caricamento dei dati da SharePoint
Quando si recuperano dati da Excel nel computer o da SharePoint, prendere in considerazione sia il volume dei
dati coinvolti, sia la complessità della cartella di lavoro.
Si noterà una riduzione delle prestazioni durante il recupero di file di dimensioni molto grandi da SharePoint.
Tuttavia, questa è solo una parte del problema. Se si dispone di una logica di business significativa in un file
Excel recuperato da SharePoint, potrebbe essere necessario eseguire questa logica di business quando si
aggiornano i dati, causando calcoli complessi. Prendere in considerazione l'aggregazione e il pre-calcolo dei dati
o lo spostamento di una parte maggiore della logica di business dal livello Excel al livello Power Query dati.
Errori durante l'uso del connettore Excel per importare file CSV
Anche se i file CSV possono essere aperti in Excel, non vengono Excel file. Usare invece il connettore Testo/CSV.
FHIR
07/12/2021 • 2 minutes to read

Fast Healthcare Interoperability Resources (FHIR ® ) è un nuovo standard per l'interoperabilità dei dati sanitari.
I dati sanitari sono rappresentati come risorse come , , e così via e un'API REST viene usata per eseguire query
sui dati sanitari serviti Patient Observation da un server Encounter FHIR. Il Power Query per FHIR può essere
usato per importare e modellare i dati da un server FHIR.
Se non si ha un server FHIR, è possibile effettuare il provisioning del API di Azure per FHIR.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Dynamics 365 per Customer Insights

Tipi di autenticazione supportati Anonimo


Azure Active Directory

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Importa

Connessione a un server FHIR da Power Query Desktop


Per stabilire una connessione a un server FHIR, seguire questa procedura:
1. Selezionare il pulsante Get Data (Ottieni dati).
2. Selezionare Other > FHIR (Altro FHIR) e quindi selezionare Connessione .
3. Immettere l'URL per il server FHIR.

Facoltativamente, è possibile immettere una query iniziale per il server FHIR, se si conoscono
esattamente i dati che si stanno cercando.
Selezionare OK per procedere.
4. Decidere lo schema di autenticazione.
Il connettore supporta "Anonymous" per i server FHIR senza controlli di accesso,ad esempio server di
test pubblici(ad esempio, o Azure Active Directory http://test.fhir.org/r4) autenticazione. Per informazioni
dettagliate, vedere Autenticazione del connettore FHIR.
5. Selezionare le risorse a cui si è interessati.

Selezionare Trasforma dati per modellare i dati.


6. Modellare i dati in base alle esigenze, ad esempio espandere il codice postale.
7. Salvare la query al termine della modellazione.

8. Creare dashboard con dati, ad esempio, creare un tracciato delle posizioni dei pazienti in base al codice
postale.
Connessione a un server FHIR da Power Query Online
Per stabilire una connessione a un server FHIR, seguire questa procedura:
1. In Power Quer y - Scegliere l'origine dati selezionare la categoria Altro e quindi FHIR.

2. Nella finestra di dialogo FHIR immettere l'URL per il server FHIR.


Facoltativamente, è possibile immettere una query iniziale per il server FHIR, se si conoscono
esattamente i dati che si stanno cercando.
3. Se necessario, includere il nome del gateway dati locale.
4. Selezionare il tipo di autenticazione Account aziendale e quindi Accedi. Immettere le credenziali
quando richiesto.
5. Selezionare Avanti per continuare.
6. Selezionare le risorse a cui si è interessati.

Selezionare Trasforma dati per modellare i dati.


7. Modellare i dati in base alle esigenze, ad esempio espandere il codice postale.

8. Salvare la query al termine della modellazione.

NOTE
In alcuni casi, la definizione della query non può essere ottenuta esclusivamente tramite il data shaping con
l'interfaccia utente grafica (GUI), come illustrato nell'immagine precedente. Per altre informazioni sulla funzionalità
di folding della query quando si usa il connettore FHIR, vedere FHIR query folding (FHIR query folding).

Passaggi successivi
In questo articolo si è appreso come usare il connettore Power Query FHIR per accedere ai dati FHIR. Esplorare
quindi le funzionalità di autenticazione del connettore Power Query per FHIR.
Autenticazione del connettore FHIR

FHIR e l'icona FHIR Icon sono i marchi registrati di HL7 e vengono usati con ® l'autorizzazione di HL7.
L'uso del marchio FHIR non costituisce l'approvazione del prodotto da parte di HL7.
Autenticazione del connettore FHIR
07/12/2021 • 2 minutes to read

Questo articolo illustra l'accesso autenticato ai server FHIR usando il connettore Power Query per FHIR. Il
connettore supporta l'accesso anonimo ai server FHIR accessibili pubblicamente e l'accesso autenticato ai
server FHIR usando Azure Active Directory autenticazione. Il API di Azure per FHIR è protetto con Azure Active
Directory.

NOTE
Se ci si connette a un server FHIR da un servizio online, ad esempio Power BI, è possibile usare solo un account aziendale.

Accesso anonimo
Sono disponibili molti server FHIR accessibili pubblicamente. Per abilitare i test con questi server pubblici, il
connettore Power Query per FHIR supporta lo schema di autenticazione "Anonimo". Ad esempio, per accedere al
https://vonk.fire.ly server pubblico:
1. Immettere l'URL del server Vonk pubblico.

2. Selezionare Schema di autenticazione anonima.

Seguire quindi la procedura per eseguire query e modellare i dati.

Azure Active Directory (organizzazione)


Il connettore Power Query per FHIR supporta l'autenticazione OAuth per i server FHIR protetti con Azure Active
Directory.
Per usare l Azure Active Directory autenticazione, selezionare Account aziendale durante la connessione.

Esistono alcune restrizioni da tenere presenti:


Il gruppo di destinatari previsto per il ser ver FHIR deve essere uguale all'URL di base del server FHIR. Per
il API di Azure per FHIR, è possibile impostare questo valore quando si effettua il provisioning del servizio
FHIR o in un secondo momento nel portale.
Se il server FHIR non restituisce un'intestazione di richiesta con un campo in caso di autorizzazione non
riuscita, è necessario usare un account aziendale WWW-Authenticate authorization_uri per accedere. Non
è possibile usare un account guest nel tenant di Active Directory. Per il API di Azure per FHIR, è
necessario usare un account Azure Active Directory aziendale.
Se il servizio FHIR non è il API di Azure per FHIR (ad esempio, se si esegue il server FHIR Microsoft open
sourceper Azure), sarà stata registrata un'applicazione di risorse Azure Active Directory per il server FHIR.
È necessario pre-autorizzare l'applicazione Power BI client per poter accedere a questa applicazione di
risorse.

L'ID client per il Power BI client è a672d62c-fc7b-4e81-a576-e60dc46e951d .


Il Power Query (ad esempio, Power BI) richiederà un solo ambito: user_impersonation . Questo ambito
deve essere disponibile e il server FHIR non può basarsi su altri ambiti.

Passaggi successivi
In questo articolo si è appreso come usare il connettore Power Query per le funzionalità di autenticazione FHIR.
Esplorare quindi la funzione di folding delle query.
FHIR Power Query di ripiegamento
Query folding FHIR
07/12/2021 • 4 minutes to read

Power Query di dati è il meccanismo usato da un connettore Power Query per trasformare le trasformazioni dei
dati in query inviate all'origine dati. In questo Power Query possibile eseguire l'off load della maggior parte
della selezione dei dati nell'origine dati anziché recuperare grandi quantità di dati non necessario solo per
eliminarli nel client. Il connettore Power Query per FHIR include funzionalità di folding della query, ma a causa
della natura della ricerca FHIR,è necessario prestare particolare attenzione alle espressioni Power Query per
garantire che la query si ripeta quando possibile. Questo articolo illustra le nozioni di base di FHIR Power Query
e fornisce linee guida ed esempi.

FHIR e query folding


Si supponga di creare una query per recuperare le risorse "patient" da un server FHIR e di essere interessati ai
pazienti nate prima dell'anno 1980. Una query di questo tipo potrebbe essere simile alla seguente:

let
Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
Patient1 = Source{[Name="Patient"]}[Data],
#"Filtered Rows" = Table.SelectRows(Patient1, each [birthDate] < #date(1980, 1, 1))
in
#"Filtered Rows"

Anziché recuperare tutte le risorse patient dal server FHIR e filtrarle nel client (Power BI), è più efficiente inviare
una query con un parametro di ricerca al server FHIR:

GET https://myfhirserver.azurehealthcareapis.com/Patient?birthdate=lt1980-01-01

Con una query di questo tipo, il client riceverà solo i pazienti di interesse e non dovrà eliminare i dati nel client.
Nell'esempio di una data di nascita, la query di tipo folding è semplice, ma in generale è difficile in FHIR perché i
nomi dei parametri di ricerca non corrispondono sempre ai nomi dei campi dati e spesso più campi dati
contribuiscono a un singolo parametro di ricerca.
Si considerino ad esempio la Observation risorsa e il campo category . Il Observation.category campo è in
CodeableConcept FHIR, che include un campo , che include i campi e coding system code (tra gli altri campi).
Si supponga di essere interessati solo ai segni vitali, di essere interessati alle osservazioni in cui , ma la ricerca
FHIR sarà Observation.category.coding.code = "vital-signs" simile a
https://myfhirserver.azurehealthcareapis.com/Observation?category=vital-signs .

Per poter ottenere la conversione della query nei casi più complessi, il connettore Power Query per FHIR
corrisponde alle espressioni Power Query con un elenco di modelli di espressione e le converte in parametri di
ricerca appropriati. I modelli di espressione vengono generati dalla specifica FHIR.
Questa corrispondenza con i modelli di espressione funziona meglio quando qualsiasi espressione di selezione
(filtro) viene eseguita il prima possibile nei passaggi di trasformazione dei dati prima di qualsiasi altra forma dei
dati.
NOTE
Per offrire al motore Power Query la migliore possibilità di eseguire la query di folding, è necessario eseguire tutte le
espressioni di selezione dei dati prima di qualsiasi data shaping.

Esempio di folding della query


Per illustrare una query di folding efficiente, verrà illustrato l'esempio di recupero di tutti i segni vitali dalla
risorsa Observation. Il modo intuitivo per eseguire questa operazione è espandere prima il campo
Observation.category e quindi espandere e quindi Observation.category.coding filtrare. La query sarà simile
alla seguente:

// Inefficient Power Query


let
Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
Observation = Source{[Name="Observation"]}[Data],
ExpandCategory = Table.ExpandTableColumn(Observation, "category", {"coding"}, {"category.coding"}),
ExpandCoding = Table.ExpandTableColumn(ExpandCategory, "category.coding", {"system", "code"},
{"category.coding.system", "category.coding.code"}),
FilteredRows = Table.SelectRows(ExpandCoding, each ([category.coding.code] = "vital-signs"))
in
FilteredRows

Sfortunatamente, il motore Power Query non lo ha più riconosciuto come criterio di selezione che esegue il
mapping al parametro di ricerca, ma se si ristruttura la category query per:

// Efficient Power Query allowing folding


let
Source = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null),
Observation = Source{[Name="Observation"]}[Data],
FilteredObservations = Table.SelectRows(Observation, each Table.MatchesAnyRows([category], each
Table.MatchesAnyRows([coding], each [code] = "vital-signs"))),
ExpandCategory = Table.ExpandTableColumn(FilteredObservations, "category", {"coding"},
{"category.coding"}),
ExpandCoding = Table.ExpandTableColumn(ExpandCategory, "category.coding", {"system", "code"},
{"category.coding.system", "category.coding.code"})
in
ExpandCoding

La query di ricerca verrà inviata al server FHIR, riducendo la quantità di dati che il
/Observation?category=vital-signs client riceverà dal server.

Mentre la prima e la seconda espressione Power Query genereranno lo stesso set di dati, quest'ultimo genererà,
in generale, prestazioni di query migliori. È importante notare che la seconda versione, più efficiente, della query
non può essere ottenuta esclusivamente tramite la modellazione dei dati con l'interfaccia utente grafica (GUI). È
necessario scrivere la query in "Editor avanzato".
L'esplorazione iniziale dei dati può essere eseguita con l'editor di query GUI, ma è consigliabile eseguire il
refactoring della query con la visualizzazione della query. In particolare, le query selettive (filtro) devono essere
eseguite il prima possibile.

Ricerca di modelli di folding


Il connettore Power Query per FHIR sarà in grado di eseguire la compilazione della query solo se le espressioni
Power Query eseguono il mapping a parametri di ricerca noti come definito dalla specifica FHIR. Se ci si chiede
se è possibile eseguire la compilazione della query, è consigliabile consultare la specifica FHIR. Ogni risorsa
elenca un set di parametri di ricerca nella parte inferiore della pagina di specifica. È anche possibile consultare la
pagina dei modelli di query di tipo folding per esempi su come scrivere espressioni Power Query per FHIR.

Debug della visualizzazione della query


Se si sta provando a determinare se una determinata espressione Power Query viene rilevata e qual è
l'espressione di ricerca FHIR risultante, è possibile avviare Fiddler durante il data shaping delle query in Power BI
Desktop.

Riepilogo
La funzionalità di folding della query offre Power Query espressioni. Un'operazione correttamente Power Query
consente di eseguire la folding della query e quindi di off-load gran parte del carico di filtro dei dati per l'origine
dati.

Passaggi successivi
In questo articolo si è appreso come usare la funzionalità di folding della query nel connettore Power Query per
FHIR. Esaminare quindi l'elenco dei modelli di Power Query FHIR.
Modelli di Power Query FHIR
Modelli di folding della query FHIR
07/12/2021 • 10 minutes to read

Questo articolo descrive i Power Query che consentiranno una efficace folding delle query in FHIR. Si
presuppone che si abbia familiarità con l'uso del connettore Power Query per FHIR e si conoscano la
motivazione e i principi di base per la Power Query in FHIR.

Come usare questo documento


L'elenco di esempi in questo documento non è esaustivo e non copre tutti i parametri di ricerca a cui verranno
riducite le query. Vengono tuttavia forniti esempi dei tipi di query e dei parametri che è possibile riscontrare.
Quando si costruisce un'espressione di query di filtro, valutare se il parametro in base a cui si vuole applicare il
filtro è:
Un tipo primitivo (ad esempio Patient.birthDate )
Un tipo complesso, che sarebbe un record in Power Query (ad esempio Patient.meta )
Matrice di tipi primitivi, che sarebbe un elenco in Power Query (ad esempio Patient.meta.profile )
Matrice di tipi complessi, che sarebbe una tabella in Power Query (ad esempio Observation.code.coding , che
ha un numero di colonne)
Consultare quindi l'elenco di esempi riportato di seguito. Sono disponibili anche esempi di combinazione di
questi tipi di filtri in istruzioni di filtro annidate a più livelli. Infine, in questo articolo vengono fornite espressioni
di filtro più complesse che si rilevano ai parametri di ricerca compositi.
In ogni esempio è presente un'espressione di filtro ( ) e sopra ogni istruzione di filtro è presente un commento
che illustra i parametri e i valori di ricerca a cui Table.SelectRows // Fold: ... l'espressione verrà consezione.

Applicazione di filtri ai tipi primitivi


Le proprietà radice si trovano alla radice di una risorsa e in genere di un tipo primitivo (stringa, data e così via),
ma possono anche essere campi di codifica (ad esempio Encoding.class ). Questa sezione illustra esempi di
ricerca di diversi tipi di proprietà a livello radice primitive.
Filtro dei pazienti in base alla data di nascita:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "birthdate=lt1980-01-01"
FilteredPatients = Table.SelectRows(Patients, each [birthDate] < #date(1980, 1, 1))
in
FilteredPatients

Filtrare i pazienti in base all'intervallo di date di nascita usando , solo gli anni and '70:
let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "birthdate=ge1970-01-01&birthdate=lt1980-01-01"
FilteredPatients = Table.SelectRows(Patients, each [birthDate] < #date(1980, 1, 1) and [birthDate] >=
#date(1970, 1, 1))
in
FilteredPatients

Filtro dei pazienti per data di nascita con , non negli anni or '70:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "birthdate=ge1980-01-01,lt1970-01-01"
FilteredPatients = Table.SelectRows(Patients, each [birthDate] >= #date(1980, 1, 1) or [birthDate] <
#date(1970, 1, 1))
in
FilteredPatients

Ricerca alternativa per i pazienti attivi:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "active=true"
FilteredPatients = Table.SelectRows(Patients, each [active])
in
FilteredPatients

Ricerca alternativa per i pazienti in cui attivo non è true (potrebbe includere mancante):

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "active:not=true"
FilteredPatients = Table.SelectRows(Patients, each [active] <> true)
in
FilteredPatients

Filtro per mantenere solo i pazienti di sesso uomo:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "gender=male"
FilteredPatients = Table.SelectRows(Patients, each [gender] = "male")
in
FilteredPatients

Filtro per mantenere solo i pazienti che non sono uomini (include altri):
let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "gender:not=male"
FilteredPatients = Table.SelectRows(Patients, each [gender] <> "male")
in
FilteredPatients

Filtro delle osservazioni con stato finale (codice):

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "status=final"
FilteredObservations = Table.SelectRows(Observations, each [status] = "final")
in
FilteredObservations

Applicazione di filtri ai tipi complessi


Filtro in base all'ultimo aggiornamento:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "_lastUpdated=2010-12-31T11:56:02.000+00:00"
FilteredPatients = Table.SelectRows(Patients, each [meta][lastUpdated] = #datetimezone(2010, 12, 31, 11,
56, 2, 0, 0))
in
FilteredPatients

Applicazione di filtri in base al sistema di classi e al codice (codifica):

let
Encounters = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Encounter" ]}
[Data],

// Fold: "class=s|c"
FilteredEncounters = Table.SelectRows(Encounters, each [class][system] = "s" and [class][code] = "c")
in
FilteredEncounters

Applicazione di filtri in base al codice (codifica):

let
Encounters = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Encounter" ]}
[Data],

// Fold: "class=c"
FilteredEncounters = Table.SelectRows(Encounters, each [class][code] = "c")
in
FilteredEncounters

Applicazione di filtri solo in base al sistema di classi (codifica):


let
Encounters = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Encounter" ]}
[Data],

// Fold: "class=s|"
FilteredEncounters = Table.SelectRows(Encounters, each [class][system] = "s")
in
FilteredEncounters

Filtrare le osservazioni in base a Observation.subject.reference (riferimento):

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "subject=Patient/1234"
FilteredObservations = Table.SelectRows(Observations, each [subject][reference] = "Patient/1234")
in
FilteredObservations

Filtrare le osservazioni in base alle variazioni in Observation.subject.reference (riferimento):

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "subject=1234,Patient/1234,https://myfhirservice/Patient/1234"
FilteredObservations = Table.SelectRows(Observations, each [subject][reference] = "1234" or [subject]
[reference] = "Patient/1234" or [subject][reference] = "https://myfhirservice/Patient/1234")
in
FilteredObservations

Filtro in base a Quantità uguale valore (quantità):

let
ChargeItems = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "ChargeItem"
]}[Data],

// Fold: "quantity=1"
FilteredChargeItems = Table.SelectRows(ChargeItems, each [quantity][value] = 1)
in
FilteredChargeItems

Filtro in base a Quantity maggiore di value (quantity):

let
ChargeItems = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "ChargeItem"
]}[Data],

// Fold: "quantity=gt1.001"
FilteredChargeItems = Table.SelectRows(ChargeItems, each [quantity][value] > 1.001)
in
FilteredChargeItems

Filtro in base a Quantity con il sistema di valori e il codice (quantity):


let
ChargeItems = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "ChargeItem"
]}[Data],

// Fold: "quantity=lt1.001|s|c"
FilteredChargeItems = Table.SelectRows(ChargeItems, each [quantity][value] < 1.001 and [quantity]
[system] = "s" and [quantity][code] = "c")
in
FilteredChargeItems

Filtro in base al periodo, inizia dopo (punto):

let
Consents = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Consent" ]}
[Data],

// Fold: "period=sa2010-01-01T00:00:00.000+00:00"
FiltertedConsents = Table.SelectRows(Consents, each [provision][period][start] > #datetimezone(2010, 1,
1, 0, 0, 0, 0, 0))
in
FiltertedConsents

Filtro in base al periodo, termina prima di (punto):

let
Consents = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Consent" ]}
[Data],

// Fold: "period=eb2010-01-01T00:00:00.000+00:00"
FiltertedConsents = Table.SelectRows(Consents, each [provision][period][end] < #datetimezone(2010, 1, 1,
0, 0, 0, 0, 0))
in
FiltertedConsents

Filtro del campo di testo di tipi complessi:

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "code:text=t"
FilteredObservations = Table.SelectRows(Observations, each [code][text] = "t")
in
FilteredObservations

Filtro in base al campo di testo (inizia con):

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "code:text=t"
FilteredObservations = Table.SelectRows(Observations, each Text.StartsWith([code][text], "t"))
in
FilteredObservations

Applicazione di filtri alle proprietà degli elenchi


Filtro dei pazienti in base al profilo:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "_profile=http://myprofile"
FilteredPatients = Table.SelectRows(Patients, each List.MatchesAny([meta][profile], each _ =
"http://myprofile"))
in
FilteredPatients

Applicazione di filtri a FilteringIntolerance in base alla categoria:

let
AllergyIntolerances = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name =
"AllergyIntolerance" ]}[Data],

// Fold: "category=food"
FilteredAllergyIntolerances = Table.SelectRows(AllergyIntolerances, each List.MatchesAny([category],
each _ = "food"))
in
FilteredAllergyIntolerances

Filtro di FilteringIntolerance in base alla categoria mancante:

let
AllergyIntolerances = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name =
"AllergyIntolerance" ]}[Data],

// Fold: "category:missing=true"
FilteredAllergyIntolerances = Table.SelectRows(AllergyIntolerances, each List.MatchesAll([category],
each _ = null))
in
FilteredAllergyIntolerances

Filtro di FilteringIntolerance su una forma più semplice di categoria mancante:

let
AllergyIntolerances = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name =
"AllergyIntolerance" ]}[Data],

// Fold: "category:missing=true"
FilteredAllergyIntolerances = Table.SelectRows(AllergyIntolerances, each [category] = null)
in
FilteredAllergyIntolerances

Applicazione di filtri alle proprietà della tabella


Filtro dei pazienti in base al nome esatto della famiglia:
let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "family:exact=Johnson"
FilteredPatients = Table.SelectRows(Patients, each Table.MatchesAnyRows([name], each [family] =
"Johnson"))
in
FilteredPatients

Filtro per i pazienti in cui il nome della famiglia inizia con:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "family=John"
FilteredPatients = Table.SelectRows(Patients, each Table.MatchesAnyRows([name], each
Text.StartsWith([family], "John")))
in
FilteredPatients

L'applicazione di filtri ai pazienti in base al nome della famiglia John inizia con o Paul :

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "family=John,Paul"
FilteredPatients = Table.SelectRows(Patients, each Table.MatchesAnyRows([name], each
Text.StartsWith([family], "John") or Text.StartsWith([family], "Paul")))
in
FilteredPatients

Filtrare i pazienti in base al nome della famiglia John inizia con e dato inizia con Paul :

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "family=John&given=Paul"
FilteredPatients = Table.SelectRows(
Patients,
each
Table.MatchesAnyRows([name], each Text.StartsWith([family], "John")) and
Table.MatchesAnyRows([name], each List.MatchesAny([given], each Text.StartsWith(_, "Paul"))))
in
FilteredPatients

Filtro in base alla data di scadenza dell'obiettivo:

let
Goals = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Goal" ]}[Data],

// Fold: "target-date=gt2020-03-01"
FilteredGoals = Table.SelectRows(Goals, each Table.MatchesAnyRows([target], each [due][date] >
#date(2020,3,1)))
in
FilteredGoals
Filtro del paziente in base all'identificatore:

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "identifier=s|v"
FilteredPatients = Table.SelectRows(Patients, each Table.MatchesAnyRows([identifier], each [system] =
"s" and _[value] = "v"))
in
FilteredPatients

Filtro in base al codice di osservazione (CodeableConcept):

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "code=s|c"
FilteredObservations = Table.SelectRows(Observations, each Table.MatchesAnyRows([code][coding], each
[system] = "s" and [code] = "c"))
in
FilteredObservations

Applicazione di filtri al codice e al testo dell'osservazione (CodeableConcept):

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "code:text=t&code=s|c"
FilteredObservations = Table.SelectRows(Observations, each Table.MatchesAnyRows([code][coding], each
[system] = "s" and [code] = "c") and [code][text] = "t")
in
FilteredObservations

Filtro di proprietà annidate multi-livello


Filtrare i pazienti in base al nome della famiglia John inizia con e dato inizia con Paul :

let
Patients = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Patient" ]}
[Data],

// Fold: "family=John&given=Paul"
FilteredPatients =
Table.SelectRows(
Patients,
each
Table.MatchesAnyRows([name], each Text.StartsWith([family], "John")) and
Table.MatchesAnyRows([name], each List.MatchesAny([given], each Text.StartsWith(_,
"Paul"))))
in
FilteredPatients

Filtrare solo i segni vitali dalle osservazioni:


let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "category=vital-signs"
FilteredObservations = Table.SelectRows(Observations, each Table.MatchesAnyRows([category], each
Table.MatchesAnyRows([coding], each [code] = "vital-signs")))
in
FilteredObservations

Filtro delle osservazioni sulla codifica di categoria con sistema e codice:

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "category=s|c"
FilteredObservations = Table.SelectRows(Observations, each Table.MatchesAnyRows([category], each
Table.MatchesAnyRows([coding], each [system] = "s" and [code] = "c")))
in
FilteredObservations

Filtro delle osservazioni in più categorie (OR):

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "category=s1|c1,s2|c2"
FilteredObservations =
Table.SelectRows(
Observations,
each
Table.MatchesAnyRows(
[category],
each
Table.MatchesAnyRows(
[coding],
each
([system] = "s1" and [code] = "c1") or
([system] = "s2" and [code] = "c2"))))
in
FilteredObservations

Filtro dell'elenco annidato nella tabella:

let
AuditEvents = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "AuditEvent"
]}[Data],

// Fold: "policy=http://mypolicy"
FilteredAuditEvents = Table.SelectRows(AuditEvents, each Table.MatchesAnyRows([agent], each
List.MatchesAny([policy], each _ = "http://mypolicy")))
in
FilteredAuditEvents

Filtro con parametri di ricerca compositi


FHIR include parametri di ricerca compositi che consentono di filtrare più campi in un tipo complesso all'interno
di una risorsa o contemporaneamente alla radice della risorsa. Ad esempio, è possibile cercare Osservazioni con
codice specifico e un valore specifico (un parametro code-value-quantity di ricerca). Il Power Query per FHIR
tenterà di riconoscere le espressioni di filtro mappate a tali parametri di ricerca compositi. In questa sezione
sono elencati alcuni esempi di questi modelli. Nel contesto dell'analisi dei dati FHIR, sono particolarmente
interessati i parametri di ricerca compositi Observation nella risorsa.
Filtro delle osservazioni in base alla quantità di codice e valore, altezza del corpo maggiore di 150:

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "code-value-quantity=http://loinc.org|8302-2$gt150"
FilteredObservations = Table.SelectRows(Observations, each Table.MatchesAnyRows([code][coding], each
[system] = "http://loinc.org" and [code] = "8302-2") and [value][Quantity][value] > 150)
in
FilteredObservations

Filtro in base al codice del componente di osservazione e alla quantità di valore, pressione sistolica maggiore di
140:

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "component-code-value-quantity=http://loinc.org|8480-6$gt140"
FilteredObservations = Table.SelectRows(Observations, each Table.MatchesAnyRows([component], each
Table.MatchesAnyRows([code][coding], each [system] = "http://loinc.org" and [code] = "8480-6") and [value]
[Quantity][value] > 140))
in
FilteredObservations

Applicazione di filtri in base a quantità di valori di codice di più componenti (AND), pressione diastolica del
globo maggiore di 90 e pressione sistolica maggiore di 140:

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "component-code-value-quantity=http://loinc.org|8462-4$gt90&component-code-value-
quantity=http://loinc.org|8480-6$gt140"
FilteredObservations =
Table.SelectRows(
Observations,
each
Table.MatchesAnyRows(
[component],
each
Table.MatchesAnyRows([code][coding], each [system] = "http://loinc.org" and [code] =
"8462-4") and [value][Quantity][value] > 90) and
Table.MatchesAnyRows([component], each Table.MatchesAnyRows([code][coding], each
[system] = "http://loinc.org" and [code] = "8480-6") and [value][Quantity][value] > 140))
in
FilteredObservations

Applicazione di filtri in base a quantità di valori di codice di più componenti (OR), pressione diastolica maggiore
di 90 o pressione sistolica maggiore di 140:
let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "component-code-value-quantity=http://loinc.org|8462-4$gt90,http://loinc.org|8480-6$gt140"
FilteredObservations =
Table.SelectRows(
Observations,
each
Table.MatchesAnyRows(
[component],
each
(Table.MatchesAnyRows([code][coding], each [system] = "http://loinc.org" and [code]
= "8462-4") and [value][Quantity][value] > 90) or
Table.MatchesAnyRows([code][coding], each [system] = "http://loinc.org" and [code]
= "8480-6") and [value][Quantity][value] > 140 ))
in
FilteredObservations

Filtro delle osservazioni sulle quantità di valori di codice nella radice della risorsa o nella matrice di componenti:

let
Observations = Fhir.Contents("https://myfhirserver.azurehealthcareapis.com", null){[Name = "Observation"
]}[Data],

// Fold: "combo-code-value-quantity=http://loinc.org|8302-2$gt150"
FilteredObservations =
Table.SelectRows(
Observations,
each
(Table.MatchesAnyRows([code][coding], each [system] = "http://loinc.org" and [code] = "8302-
2") and [value][Quantity][value] > 150) or
(Table.MatchesAnyRows([component], each Table.MatchesAnyRows([code][coding], each [system] =
"http://loinc.org" and [code] = "8302-2") and [value][Quantity][value] > 150)))
in
FilteredObservations

Riepilogo
La funzionalità di folding della query Power Query le espressioni di filtro in parametri di ricerca FHIR. Il Power
Query per FHIR riconosce determinati modelli e tenta di identificare i parametri di ricerca corrispondenti. Il
riconoscimento di questi modelli consente di scrivere espressioni Power Query efficienti.

Passaggi successivi
In questo articolo sono stati esaminati alcuni tipi di espressioni di filtro che verranno rilevate nei parametri di
ricerca FHIR. Leggere quindi informazioni su come stabilire relazioni tra le risorse FHIR.
Relazioni tra Power Query FHIR
Relazioni FHIR
07/12/2021 • 2 minutes to read

Questo articolo descrive come stabilire relazioni tra tabelle importate usando il connettore Power Query per
FHIR.

Introduzione
Le risorse FHIR sono correlate tra loro, ad esempio un oggetto che Observation fa riferimento a un oggetto (
Patient ):

{
"resourceType": "Observation",
"id": "1234",
"subject": {
"reference": "Patient/456"
}

// ... Other fields


}

Alcuni campi di riferimento alle risorse in FHIR possono fare riferimento a più tipi diversi di risorse , ad esempio
Practitioner o Organization . Per facilitare la risoluzione dei riferimenti, il connettore Power Query per FHIR
aggiunge un campo sintetico a tutte le risorse importate denominate , che contiene una concatenazione del tipo
di risorsa e <referenceId> dell'ID risorsa.
Per stabilire una relazione tra due tabelle, è possibile connettere un campo di riferimento specifico di una risorsa
al campo corrispondente nella risorsa a cui <referenceId> si vuole collegarla. In casi semplici, Power BI anche
automaticamente.

Definizione di relazioni FHIR in Power BI


In questa sezione verrà illustrato un esempio di stabilire una relazione tra il campo
Observation.subject.reference e il campo in <referenceId> Patient .

1. Quando si importano dati, selezionare le tabelle Paziente e Osservazione:


Selezionare quindi Trasforma dati .
2. Espandere la colonna dell'oggetto Observation in per visualizzare subject.reference :

Dopo l'espansione, verrà visualizzato l'elenco dei riferimenti al soggetto:


3. Apportare eventuali altre modifiche necessarie alla query e salvare la query modificata.
4. Selezionare Gestisci relazioni nel client Power BI:

5. Stabilire la relazione. In questo semplice esempio, Power BI probabilmente la relazione sarà stata rilevata
automaticamente:
In caso contrario, è possibile aggiungerlo manualmente:

È possibile modificare i dettagli della relazione:


Riepilogo
Le risorse in FHIR sono correlate. Queste relazioni devono essere stabilite sui dati importati con il connettore
Power Query per FHIR. Il <referenceId> campo è un campo sintetico aggiunto a tutti i dati FHIR importati che
consentono di stabilire le relazioni.

Passaggi successivi
In questo articolo si è appreso come stabilire relazioni tra tabelle importate con il connettore Power Query per
FHIR. Esaminare quindi il folding delle query con il connettore Power Query per FHIR.
FHIR Power Query di ripiegamento
Cartella
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Windows

Documentazione di riferimento delle funzioni Folder.Contents, Folder.Files

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Percorso della cartella
Combina
Combinare e caricare
Combinare e trasformare

Connessione a una cartella da Power Query Desktop


Per connettersi a una cartella da Power Query Desktop:
1. Selezionare l'opzione Cartella nella selezione del connettore.
2. Immettere il percorso della cartella da caricare oppure selezionare Sfoglia per passare alla cartella da
caricare. Selezionare OK .
Quando si seleziona la cartella che si vuole usare, vengono visualizzate le informazioni sul file relative a
tutti i file in tale cartella. Inoltre, vengono visualizzate anche le informazioni sui file in qualsiasi
sottocartella.

3. Selezionare Combina & Trasforma dati per combinare i dati nei file della cartella selezionata e caricare
i dati nel editor di Power Query per la modifica. Selezionare Combina & carica per caricare i dati da
tutti i file nella cartella direttamente nell'app. Oppure selezionare Trasforma dati per caricare i dati della
cartella così come sono nel editor di Power Query.

NOTE
I pulsanti Combina & Trasforma dati e Combina & carica sono i modi più semplici per combinare i dati presenti nei file
della cartella specificata. È anche possibile usare il pulsante Carica (solo Power BI Desktop) o i pulsanti Trasforma dati per
combinare i file, ma ciò richiede passaggi più manuali.
Connessione a una cartella da Power Query Online
Per connettersi a una cartella da Power Query Online:
1. Selezionare l'opzione Cartella nella selezione del connettore.
2. Immettere il percorso della cartella da caricare.

3. Immettere il nome di un gateway dati locale che verrà utilizzato per accedere alla cartella.
4. Selezionare il tipo di autenticazione per connettersi alla cartella. Se si seleziona il tipo Windows di
autenticazione, immettere le credenziali.
5. Selezionare Avanti .
6. Nella finestra di dialogo Strumento di navigazione selezionare Combina per combinare i dati nei file della
cartella selezionata e caricarli nel editor di Power Query per la modifica. Oppure selezionare Trasforma
dati per caricare i dati della cartella così come sono nel editor di Power Query.

Risoluzione dei problemi


Unione di file
Quando si combinano file usando il connettore di cartelle, tutti i file nella cartella e nelle relative sottocartelle
vengono elaborati nello stesso modo e i risultati vengono quindi combinati. La modalità di elaborazione dei file
è determinata dal file di esempio selezionato. Ad esempio, se si seleziona un file Excel e si sceglie una tabella
denominata "Table1", tutti i file verranno considerati come file Excel che contengono una tabella denominata
"Table1".
Per assicurarsi che la combinazione dei file funzioni correttamente, assicurarsi che tutti i file nella cartella e nelle
relative sottocartelle presentino lo stesso formato di file e la stessa struttura. Se è necessario escludere alcuni
file, selezionare Prima di tutto Trasforma dati anziché Combina e filtra la tabella di file nel editor di Power Query
prima di combinare.
Per altre informazioni sulla combinazione di file, vedere Combinare file in Power Query.
Google Analytics
07/12/2021 • 6 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power Apps (flussi di dati)

Tipi di autenticazione supportati Account Google

Documentazione di riferimento delle funzioni GoogleAnalytics.Accounts

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

NOTE
A partire da luglio 2021, Google interromperà il supporto per gli account Google da framework browser incorporati. A
causa di questa modifica, sarà necessario aggiornare la versione Power BI Desktop a giugno 2021 per supportare l'accesso
a Google.

NOTE
Questo connettore usa la versione 4 dell'API Google Analytics.

Prerequisiti
Prima di poter accedere a Google Analytics, è necessario avere un account Google Analytics (nome
utente/password).

Funzionalità supportate
Importa

Connessione dati di Google Analytics da Power Query Desktop


Per connettersi ai dati di Google Analytics:
1. Selezionare Recupera dati nella scheda Home della barra multifunzione in Power BI Desktop.
Selezionare Ser vizi online nelle categorie a sinistra e quindi selezionare Google Analytics. Selezionare
Connetti .
2. Se è la prima volta che si riceve dati tramite il connettore Google Analytics, viene visualizzato un avviso di
terze parti. Selezionare Don't warn me again with this connector (Non avvisare più con questo
connettore) se non si vuole che questo messaggio sia visualizzato nuovamente. Selezionare quindi
Continua .
3. Per accedere all'account Google Analytics, selezionare Accedi.

4. Nella finestra Accedi con Google visualizzata specificare le credenziali per accedere all'account Google
Analytics. È possibile specificare un indirizzo di posta elettronica o un numero di telefono. Selezionare
quindi Avanti .
5. Immettere la password di Google Analytics e selezionare Avanti.

6. Quando viene chiesto se si vuole Power BI Desktop accedere all'account Google, selezionare Consenti.
7. Dopo aver eseguito l'accesso, selezionare Connessione .

Dopo aver stabilito la connessione, verrà visualizzato un elenco degli account a cui si ha accesso. Eseguire il drill-
through dell'account, delle proprietà e delle viste per visualizzare una selezione di valori, suddivisi in categorie
nelle cartelle di visualizzazione.
È possibile caricare la tabella selezionata, che porta l'intera tabella in Power BI Desktop, oppure è possibile
selezionare Trasforma dati per modificare la query, che apre editor di Power Query. È quindi possibile filtrare e
perfezionare il set di dati da usare e quindi caricare il set di dati perfezionato in Power BI Desktop.
Connessione dati di Google Analytics da Power Query Online
Per connettersi ai dati di Google Analytics:
1. Selezionare Google Analytics nella pagina Power Query - Scegliere l'origine dati.
2. Nella pagina di connessione immettere un nome di connessione e scegliere un gateway dati locale, se
necessario.

3. Selezionare Accedi per accedere all'account Google.


4. Nella finestra Accedi con Google visualizzata specificare le credenziali per accedere all'account Google
Analytics. È possibile specificare un indirizzo di posta elettronica o un numero di telefono. Selezionare
quindi Avanti .

NOTE
Attualmente, le finestre di dialogo di accesso di Google Analytics indicano che si sta accedendo a Power Query
Desktop. Questa formulazione verrà modificata in futuro.
5. Immettere la password di Google Analytics e selezionare Avanti.

6. Quando viene chiesto se si vuole Power BI Desktop accedere all'account Google, selezionare Consenti.
7. Dopo aver eseguito l'accesso, selezionare Avanti.
Dopo aver stabilito la connessione, verrà visualizzato un elenco degli account a cui si ha accesso. Eseguire
il drill-through dell'account, delle proprietà e delle viste per visualizzare una selezione di valori, suddivisi
in categorie nelle cartelle di visualizzazione.
8. Selezionare Trasforma dati per modificare la query in editor di Power Query. È quindi possibile filtrare e
perfezionare il set di dati da usare e quindi caricare il set di dati perfezionato in Power Apps.

Limitazioni e problemi
È necessario tenere presenti le limitazioni e i problemi seguenti associati all'accesso ai dati di Adobe Analytics.
Limiti di quota di Google Analytics per Power BI
Le limitazioni e le quote standard per le richieste AP di Google Analytics sono documentate in Limiti e quote per
le richieste API. Tuttavia, Power BI Desktop e Power BI servizio consentono di usare il numero avanzato di query
seguente.
Query al giorno: 1.500.000
Query per 100 secondi: 4.000

Risoluzione dei problemi


Convalida di dati imprevisti
Quando gli intervalli di date sono molto grandi, Google Analytics restituirà solo un subset di valori. È possibile
usare il processo descritto in questa sezione per comprendere quali date vengono recuperate e modificarle
manualmente. Se sono necessari più dati, è possibile aggiungere più query con intervalli di date diversi. Se non
si è certi di aver restituito i dati previsti, è anche possibile usare la profilatura dei dati per ottenere una rapida
panoramica degli elementi restituiti.
Per assicurarsi che i dati visualizzati siano gli stessi che si ottengono da Google Analytics, è possibile eseguire la
query manualmente nello strumento interattivo di Google. Per comprendere quali dati Power Query in fase di
recupero, è possibile usare Diagnostica query per comprendere quali parametri di query vengono inviati a
Google Analytics.
Se si seguono le istruzioni per Diagnostica query ed si esegue Diagnose Step su qualsiasi elemento aggiunto,
è possibile visualizzare i risultati generati nella colonna Diagnostics Data Source Quer y (Quer y origine dati
di diagnostica). È consigliabile eseguire questa operazione con il maggior numero possibile di operazioni
aggiuntive oltre alla connessione iniziale a Google Analytics, per assicurarsi di non perdere i dati in una
trasformazione di Power Query anziché in ciò che viene recuperato da Google Analytics.
A seconda della query, la riga contenente la chiamata API generata a Google Analytics potrebbe non essere nella
stessa posizione. Tuttavia, per una semplice query solo di Google Analytics, la si vede in genere come l'ultima
riga con contenuto in tale colonna.
Nella colonna Quer y origine dati è presente un record con il modello seguente:

Request:
GET https://www.googleapis.com/analytics/v3/data/ga?ids=ga:<GA
Id>&metrics=ga:users&dimensions=ga:source&start-date=2009-03-12&end-date=2020-08-11&start-index=1&max-
results=1000&quotaUser=<User>%40gmail.com HTTP/1.1

<Content placeholder>

Response:
HTTP/1.1 200 OK
Content-Length: -1

<Content placeholder>

Da questo record è possibile visualizzare l'ID della visualizzazione Analisi (profilo),l'elenco delle metriche (in
questo caso solo ), l'elenco di dimensioni (in questo caso solo l'origine del riferimento), la data di inizio e la data
di fine, l'indice iniziale, il numero massimo di risultati (impostato su ga:users 1000 per l'editor per
impostazione predefinita) e quotaUser.
È possibile copiare questi valori in Esplora query di Google Analytics per verificare che anche gli stessi dati
restituiti dalla query vengano restituiti dall'API.
Se l'errore si trova in un intervallo di date, è possibile risolverlo facilmente. Passare al Editor avanzato. Sarà
presente una query M simile alla seguente (come minimo potrebbero esserci altre trasformazioni — sopra di
essa).

let
Source = GoogleAnalytics.Accounts(),
#"<ID>" = Source{[Id="<ID>"]}[Data],
#"UA-<ID>-1" = #"<ID>"{[Id="UA-<ID>-1"]}[Data],
#"<View ID>" = #"UA-<ID>-1"{[Id="<View ID>"]}[Data],
#"Added Items" = Cube.Transform(#"<View ID>",
{
{Cube.AddAndExpandDimensionColumn, "ga:source", {"ga:source"}, {"Source"}},
{Cube.AddMeasureColumn, "Users", "ga:users"}
})
in
#"Added Items"
È possibile eseguire una delle due operazioni seguenti. Se si dispone di una colonna Data, è possibile filtrare in
base alla data. Questa è l'opzione più semplice. Se non si è a favore della suddivisione in base alla data, è
possibile raggruppare in un secondo momento.
Se non è presente una colonna Data, è possibile modificare manualmente la query nel Editor avanzato per
aggiungerne una e filtrarla. Ad esempio:

let
Source = GoogleAnalytics.Accounts(),
#"<ID>" = Source{[Id="<ID>"]}[Data],
#"UA-<ID>-1" = #"<ID>"{[Id="UA-<ID>-1"]}[Data],
#"<View ID>" = #"UA-<ID>-1"{[Id="<View ID>"]}[Data],
#"Added Items" = Cube.Transform(#"<View ID>",
{
{Cube.AddAndExpandDimensionColumn, "ga:date", {"ga:date"}, {"Date"}},
{Cube.AddAndExpandDimensionColumn, "ga:source", {"ga:source"}, {"Source"}},
{Cube.AddMeasureColumn, "Organic Searches", "ga:organicSearches"}
}),
#"Filtered Rows" = Table.SelectRows(#"Added Items", each [Date] >= #date(2019, 9, 1) and [Date] <=
#date(2019, 9, 30))
in
#"Filtered Rows"

Passaggi successivi
Dimensioni di Google Analytics & Esplora metriche
API per la creazione di report principali di Google Analytics
Google BigQuery
07/12/2021 • 6 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Customer Insights (flussi di dati)

Tipi di autenticazione supportati Account aziendale


Account di servizio

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

NOTE
A partire da luglio 2021, Google interromperà il supporto per gli accesso agli account Google da framework browser
incorporati. A causa di questa modifica, sarà necessario aggiornare la versione Power BI Desktop a giugno 2021 per
supportare l'accesso a Google.

Prerequisiti
Per accedere a Google BigQuery, è necessario un account Google o un account del servizio Google.

Funzionalità supportate
Importa
DirectQuery (solo Power BI Desktop)

Connessione a Google BigQuery data da Power Query Desktop


Per connettersi a Google BigQuery da Power Query Desktop, seguire questa procedura:
1. Nell'esperienza Ottieni dati cercare e selezionare Google BigQuer y.
2. Per usare le opzioni avanzate, selezionare Opzioni avanzate . In caso contrario, selezionare OK per
continuare. Altre informazioni: Usare Connessione opzioni avanzate

3. Il connettore Google BigQuery supporta la connessione tramite un account aziendale o un account di


servizio. In questo esempio si userà l'account aziendale per accedere. Selezionare Accedi per continuare.

È anche possibile accedere usando un account del servizio Google. In questo caso, selezionare Account di
accesso al servizio e immettere l'indirizzo di posta elettronica dell'account del servizio e il contenuto del
file di chiave JSON dell'account del servizio. Selezionare Connetti .
4. Viene visualizzata la finestra di dialogo Accedi con Google. Selezionare l'account Google e
approvare la connessione Power BI Desktop.
5. Dopo aver eseguito l'accesso, Connessione per continuare.

6. Dopo aver eseguito la connessione, viene visualizzata una finestra Strumento di navigazione che
mostra i dati disponibili nel server. Selezionare i dati nello strumento di navigazione. Selezionare quindi
Trasforma dati per trasformare i dati in Power Query o Carica per caricare i dati in Power BI Desktop.
Connessione a Google BigQuery data da Power Query Online
Per connettersi a Google BigQuery da Power Query Online, seguire questa procedura:
1. Nell'esperienza Ottieni dati selezionare la categoria Database e quindi Selezionare Google BigQuer y.

2. Nella finestra di dialogo Google BigQuer y Database potrebbe essere necessario creare una nuova
connessione o selezionare una connessione esistente. Se si usano dati locali, selezionare un gateway dati
locale. Selezionare quindi Accedi .
3. Viene visualizzata la finestra di dialogo Accedi con Google. Selezionare l'account Google e
approvare la connessione.

NOTE
Anche se la finestra di dialogo di accesso indica che si continuerà a Power BI Desktop dopo aver eseguito l'accesso,
si verrà inviati all'app online.
4. Per usare le opzioni avanzate, selezionare Opzioni avanzate . Altre informazioni: Usare Connessione
opzioni avanzate
5. Dopo aver eseguito l'accesso, selezionare Avanti per continuare.
6. Dopo aver eseguito la connessione, viene visualizzata una finestra Strumento di navigazione che
mostra i dati disponibili nel server. Selezionare i dati nello strumento di navigazione. Selezionare quindi
Avanti per trasformare i dati in Power Query.

Connessione l'uso di opzioni avanzate


Sia Power Query Desktop che Power Query Online offrono un set di opzioni avanzate che è possibile
aggiungere alla query, se necessario.
La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop e Power
Query Online.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

ID Project fatturazione Progetto in base al quale Power Query le query. Le


autorizzazioni e la fatturazione sono legate a questo
progetto.

Usare l Archiviazione Api Flag che abilita l'uso dell'API Archiviazione di Google
BigQuery. Questa opzione è true per impostazione
predefinita. Questa opzione può essere impostata su false
per non usare l'API Archiviazione e usare invece le API REST.

Durata del timeout della connessione Impostazione di connessione standard (in secondi) che
controlla per quanto tempo Power Query attesa del
completamento di una connessione. È possibile modificare
questo valore se la connessione non viene completata prima
di 15 secondi (valore predefinito).

Durata del timeout del comando Tempo di Power Query attesa del completamento di una
query e della restituzione dei risultati. Il valore predefinito
dipende dall'impostazione predefinita del driver. È possibile
immettere un altro valore in minuti per mantenere la
connessione aperta più a lungo.

ID progetto Progetto su cui si desidera eseguire query native. Questa


opzione è disponibile solo in Power Query Desktop.
O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando una query di database nativa. In questa versione
della funzionalità di query native del database è necessario
usare nomi di tabella completi nel formato
Database.Schema.Table , ad esempio
SELECT * FROM DEMO_DB.PUBLIC.DEMO_TABLE . Questa
opzione è disponibile solo in Power Query Desktop.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop o Avanti in
Power Query Online per connettersi ai dati Di Google BigQuery.

Limitazioni e considerazioni
Questa sezione descrive eventuali limitazioni o considerazioni del connettore BigQuery di Google.
Connessione a Google Big Query in Power BI Desktop
Per altre informazioni sulle limitazioni e le considerazioni relative alla connessione a Google Big Query, vedere
Considerazioni e limitazioni.
Campi annidati
Per ottimizzare le considerazioni sulle prestazioni, Google BigQuery funziona bene con set di dati di grandi
dimensioni in caso di denormalizzazione, appiattimento e annidamento.
Il connettore Google BigQuery supporta i campi annidati, caricati come colonne di testo in formato JSON.

Gli utenti devono selezionare Trasforma dati e quindi usare le funzionalità di analisi JSON nel editor di Power
Query per estrarre i dati.
1. Nella scheda della barra multifunzione Trasformazioni, nella categoria Colonna di testo, selezionare
Analizza e quindi JSON.
2. Estrarre i campi del record JSON usando l'opzione Espandi colonna.
Configurazione di un account del servizio Google
Per altre informazioni sulla configurazione o sull'uso degli account del servizio Google, vedere Creazione e
gestione delle chiavi dell'account del servizio nella documentazione di Google.
Autenticazione tramite un account del servizio Google
Quando si esegue l'autenticazione tramite un account del servizio Google in Power BI Desktop, il connettore
richiede un formato di credenziali specifico.
Indirizzo di posta elettronica dell'account del servizio: deve essere nel formato di posta elettronica
Contenuto del file di chiave JSON dell'account del servizio: dopo aver scaricato questa chiave JSON, tutte le
nuove righe devono essere rimosse dal file in modo che il contenuto sia in un'unica riga. Quando il file JSON
è in questo formato, il contenuto può essere incollato in questo campo.
Quando si esegue l'autenticazione tramite un account del servizio Google Power BI servizio, gli utenti devono
usare l'autenticazione "Di base". Il campo Username (Nome utente) viene mappato al campo Service Account
Email (Posta elettronica account servizio) precedente e il campo Password al campo Service Account JSON key
file contents (Contenuto del file di chiave JSON dell'account del servizio) precedente. I requisiti di formato
per ogni credenziale rimangono invariati sia Power BI Desktop che Power BI servizio.
Non è possibile eseguire l'autenticazione con l'API Archiviazione Google BigQuery
Il connettore Google BigQuery usa Google BigQuery Archiviazione aPI per impostazione predefinita. Questa
funzionalità è controllata dall'opzione avanzata denominata UseStorageApi. Se si usano autorizzazioni granulari,
è possibile che si verifichino problemi con questa funzionalità. In questo scenario potrebbe essere visualizzato il
messaggio di errore seguente o potrebbe non essere possibile ottenere dati dalla query:
ERROR [HY000] [Microsoft][BigQuery] (131) Unable to authenticate with Google BigQuery Storage API. Check your
account permissions

È possibile risolvere questo problema modificando correttamente le autorizzazioni utente per l'API Archiviazione
BigQuery. Queste autorizzazioni dell'API di archiviazione sono necessarie per accedere correttamente ai dati con
l'API BigQueryStorage:
bigquery.readsessions.create : crea una nuova sessione di lettura tramite l'API di Archiviazione BigQuery.
bigquery.readsessions.getData : legge i dati da una sessione di lettura tramite l'API di Archiviazione BigQuery.
bigquery.readsessions.update : aggiorna una sessione di lettura tramite l'API Archiviazione BigQuery.

Queste autorizzazioni vengono in genere fornite nel BigQuery.User ruolo . Altre informazioni, Autorizzazioni e
ruoli predefiniti di Google BigQuery
Se i passaggi precedenti non risolvono il problema, è possibile disabilitare l'API Archiviazione BigQuery.
Fogli Google (Beta)
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI Desktop

Tipi di autenticazione supportati Account aziendale

Documentazione di riferimento delle funzioni -

Prerequisiti
Prima di poter usare il connettore Fogli Google, è necessario avere un account Google e avere accesso al Foglio
Google a cui si sta tentando di connettersi.

Funzionalità supportate
Importa

Connessione ai dati di Fogli Google da Power Query Desktop


Per connettersi a Fogli Google da Power Query Desktop, seguire questa procedura:
1. Nell'esperienza Ottieni dati cercare e selezionare Fogli Google.
2. Verrà richiesto di specificare un URL di Fogli Google. Copiare e incollare l'URL dalla barra degli indirizzi
del browser nel prompt di input.
3. Il connettore Fogli Google supporta la connessione tramite un account aziendale (Google). Selezionare
Accedi per continuare.

4. Viene visualizzata una finestra di dialogo Accedi con Google in una finestra del browser esterna.
Selezionare l'account Google e approvare la connessione Power BI Desktop.
5. Dopo aver eseguito l'accesso, Connessione per continuare.

6. Dopo aver eseguito la connessione, viene visualizzata una finestra Strumento di navigazione con i dati
disponibili nel server. Selezionare i dati nello strumento di navigazione. Selezionare quindi Trasforma dati
per trasformare i dati in Power Query o Carica per caricare i dati in Power BI Desktop.

Limitazioni e considerazioni
Questa sezione descrive eventuali limitazioni o considerazioni relative al connettore Google BigQuery.
Power Query Online
Questo connettore non è ancora disponibile in Power Query online e nei flussi di dati.
Supporto delle unità condivise
Questo connettore supporta la connessione alle unità condivise.
Connessioni multiple
Questo connettore usa un ResourcePath diverso per ogni URL di Google Sheet. Sarà necessario eseguire
l'autenticazione a ogni nuovo percorso di risorsa e URL, ma potrebbe non essere necessario accedere a Google
più volte se le sessioni precedenti rimangono attive.
Informazioni sull'analisi degli URL
Il connettore verifica prima di tutto la firma dell'URL, assicurandosi che inizi con
https://docs.google.com/spreadsheets/d/ . Il connettore analizza quindi l'ID del foglio di calcolo di Google
dall'URL da includere nella chiamata all'API Fogli Google. Il resto dell'URL non viene usato. Ogni connessione a
Google Sheet è associata all'URL inviato, che fungerà da ResourcePath.
Hive LLAP
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Di base (nome utente/password)


Windows

Documentazione di riferimento delle funzioni —

Prerequisiti
Un Apache Hive nome utente e una password LLAP.

Funzionalità supportate
Importa
DirectQuery
Protocollo di trasporto Thrift
HTTP
Standard

Connessione dati Hive LLAP da Power Query Desktop


Per connettersi a un Apache Hive LLAP:
1. Selezionare l'opzione Hive LL AP da Get Data (Ottieni dati).
2. Immettere l'URL del server Adobe Hive LLAP. È anche possibile immettere un numero di porta
facoltativo. In genere, l'URL è simile a http://[hostname]:[port number] . I componenti dell'URL sono:
hostname (ad esempio, hivellaphttp.southcentralus.contoso.com ) è il nome host o l'indirizzo IP del
server Apache Hive server.
port number (ad esempio, 10500) è il numero di porta per il server Apache Hive server. Se non viene
specificato , il valore predefinito è 10501 per il protocollo di trasporto HTTP e port number 10500 per
il protocollo di trasporto standard.
3. In Thrift Transpor t Protocol selezionare Standard per la modalità TCP o HTTP per la modalità HTTP.
4. Selezionare la modalità di connettività dei dati Importa o DirectQuer y. Altre informazioni: Usare
DirectQuery in Power BI Desktop
5. Selezionare OK per continuare.
6. La prima volta che ci si connette a un'origine dati (identificata da ogni URL univoco), verrà richiesto di
immettere le credenziali dell'account. Selezionare il tipo di autenticazione appropriato e immettere le
credenziali per la connessione.
Windows: selezionare questo tipo di autenticazione se si vuole connettersi usando Windows
autenticazione.
Di base: selezionare questo tipo di autenticazione se si vuole connettersi usando l Apache Hive LLAP.
Immettere il nome Apache Hive LLAP e la Password.
Altre informazioni: Autenticazione con un'origine dati.

7. Selezionare Connessione per connettersi ai Apache Hive LLAP.


8. In Strumento di navigazione selezionare i dati necessari. Selezionare quindi Trasforma dati per
trasformare i dati in editor di Power Query o Carica per caricare i dati in Power BI Desktop.
Single Sign-On (SSO) basato su Kerberos per Hive LLAP
Il connettore Hive LLAP supporta ora l'accesso Single Sign-On (SSO) basato su Kerberos.
Per usare questa funzionalità:
1. Accedere all'account Power BI e passare alla pagina Gestione gateway.
2. Aggiungere una nuova origine dati nel cluster del gateway che si vuole usare.
3. Selezionare il connettore nell'elenco Tipo di origine dati .
4. Espandere la sezione Impostazioni avanzate.
5. Selezionare l'opzione Use SSO via Kerberos for DirectQuer y queries (Usa SSO tramite Kerberos per
le query DirectQuery) o Use SSO via Kerberos for DirectQuer y and Impor t queries (Usa SSO
tramite Kerberos per le query DirectQuery e Import).
Per altre informazioni, vedere Configurare l'accesso SSO basato su Kerberos dal Power BI alle origini dati locali

Risoluzione dei problemi


Potrebbe verificarsi l'errore "SSL_connect" seguente dopo aver immesso le informazioni di autenticazione per il
connettore e aver selezionato Connessione .

Se si verifica questo errore:


1. In Power BI Desktop selezionare Opzioni file e impostazioni > Impostazioni > origine dati .
2. In Impostazioni origine dati selezionare l'origine Hive LLAP creata e quindi selezionare Modifica
autorizzazioni.

3. In Modifica autorizzazioni deselezionare la casella di controllo Crittografa connessioni in


Crittografia.

4. Selezionare OK e quindi in Impostazioni origine dati selezionare Chiudi.


5. Ripetere i passaggi descritti in Connessione dati Hive LLAP da Power Query Desktop.
Database IBM DB2
07/12/2021 • 11 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights

Tipi di autenticazione supportati Basic


Database
Windows

Documentazione di riferimento per le funzioni DB2.Database

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Per impostazione predefinita, il connettore di database IBM Db2 usa il driver Microsoft per connettersi ai dati. Se
si sceglie di usare il driver IBM nelle opzioni avanzate di Power Query Desktop, è necessario installare prima il
driver IBM Db2 per .NET nel computer usato per connettersi ai dati. Il nome di questo driver cambia di volta in
volta, quindi assicurarsi di installare il driver IBM Db2 che funziona con .NET. Per istruzioni su come scaricare,
installare e configurare il driver IBM Db2 per .NET, vedere Scaricare i client e i driver iniziali della versione 11.5.
Altre informazioni: Limitazioni del driver, Assicurarsi che il driver IBM Db2 sia installato

Funzionalità supportate
Importa
DirectQuery (solo Power BI Desktop)
Advanced Options
Driver (IBM o Microsoft)
Timeout del comando in minuti
Raccolta pacchetti
Istruzione SQL
Includi colonne relazioni
Esplora con gerarchia completa
Connessione a un database IBM Db2 da Power Query Desktop
Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione di database IBM Db2 da Ottieni dati .
2. Specificare il server IBM Db2 a cui connettersi in Ser ver . Se è necessaria una porta, specificarla usando il
formato NomeServer:Porta, dove Porta è il numero di porta. Immettere anche il database IBM Db2 a cui
si vuole accedere in Database . In questo esempio il nome del server e la porta sono e il database IBM
Db2 a TestIBMDb2server.contoso.com:4000 cui si accede è NORTHWD2 .

3. Se ci si connette da un Power BI Desktop, selezionare la modalità di connettività dei dati Importa o


DirectQuer y. Nella parte restante di questi passaggi di esempio viene utilizzata la modalità di
connettività Importa dati. Per altre informazioni su DirectQuery, vedere Usare DirectQuery in Power BI
Desktop.

NOTE
Per impostazione predefinita, la finestra di dialogo database IBM Db2 usa il driver Microsoft durante l'accesso. Se
si vuole usare il driver IBM, aprire Opzioni avanzate e selezionare IBM . Altre informazioni: Usare Connessione
opzioni avanzate
Se si seleziona DirectQuer y come modalità di connettività dati, l'istruzione SQL nelle opzioni avanzate verrà
disabilitata. DirectQuery attualmente non supporta il push delle query su una query di database nativa per il
connettore IBM Db2.

4. Selezionare OK .
5. Se questa è la prima volta che ci si connette a questo database IBM Db2, selezionare il tipo di
autenticazione da usare, immettere le credenziali e quindi selezionare Connessione . Per altre
informazioni sull'autenticazione, vedere Autenticazione con un'origine dati.
Per impostazione predefinita, Power Query tenta di connettersi al database IBM Db2 usando una
connessione crittografata. Se Power Query non riesce a connettersi usando una connessione
crittografata, verrà visualizzata la finestra di dialogo "Impossibile connettersi". Per connettersi usando una
connessione non crittografata, selezionare OK.

6. In Strumento di navigazione selezionare i dati necessari, quindi selezionare Carica per caricare i dati o
Trasforma dati per trasformare i dati.
Connessione a un database IBM Db2 da Power Query Online
Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione di database IBM Db2 nella pagina Power Quer y - Connessione all'origine
dati.
2. Specificare il server IBM Db2 a cui connettersi in Ser ver . Se è necessaria una porta, specificarla usando il
formato NomeServer:Porta, dove Porta è il numero di porta. Immettere anche il database IBM Db2 a cui
si vuole accedere in Database . In questo esempio il nome del server e la porta sono
TestIBMDb2server.contoso.com:4000 e il database IBM Db2 a cui si accede è NORTHWD2

3. Selezionare il nome del gateway dati locale.

NOTE
È necessario selezionare un gateway dati locale per questo connettore, indipendentemente dal fatto che il
database IBM Db2 si trova nella rete locale o online.

4. Se questa è la prima volta che ci si connette a questo database IBM Db2, selezionare il tipo di credenziali
per la connessione in Tipo di autenticazione . Scegliere Basic se si prevede di usare un account creato
nel database IBM Db2 anziché Windows autenticazione.
5. Immettere le credenziali.
6. Selezionare Usa connessione crittografata se si vuole usare una connessione crittografata oppure
deselezionare l'opzione se si vuole usare una connessione non crittografata.

7. Selezionare Avanti per continuare.


8. In Strumento di navigazione selezionare i dati necessari, quindi selezionare Trasforma dati per
trasformare i dati in editor di Power Query.
Connessione le opzioni avanzate
Power Query fornisce un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.

Nella tabella seguente sono elencate tutte le opzioni avanzate che è possibile impostare in Power Query.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Driver Determina quale driver viene usato per connettersi al


database IBM Db2. Le opzioni disponibili sono IBM e
Windows (impostazione predefinita). Se si seleziona il driver
IBM, è innanzitutto necessario assicurarsi che il driver IBM
Db2 per .NET sia installato nel computer. Questa opzione è
disponibile solo in Power Query Desktop. Altre informazioni:
Assicurarsi che il driver IBM Db2 sia installato

Timeout del comando in minuti Se la connessione dura più di 10 minuti (timeout


predefinito), è possibile immettere un altro valore in minuti
per mantenere la connessione aperta più a lungo.
O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Raccolta pacchetti Specifica dove cercare i pacchetti. I pacchetti sono strutture


di controllo usate da Db2 durante l'elaborazione
SQL'istruzione e verranno creati automaticamente, se
necessario. Per impostazione predefinita, questa opzione usa
il valore NULLID . Disponibile solo quando si usa il driver
Microsoft. Altre informazioni: Pacchetti DB2: Concetti, esempi
e problemi comuni

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando una query di database nativa.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non vengono visualizzate.

Esplora con gerarchia completa Se selezionata, lo strumento di spostamento visualizza la


gerarchia completa delle tabelle nel database a cui ci si
connette. Se l'opzione è deselezionata, lo strumento di
spostamento visualizza solo le tabelle le cui colonne e righe
contengono dati.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop o Avanti in
Power Query Online per connettersi al database IBM Db2.

Problemi e limitazioni
Limitazioni del driver
Il driver Microsoft è lo stesso usato in Microsoft Host Integration Server, denominato "ADO.NET Provider per
DB2". Il driver IBM è il driver IBM Db/2 che funziona con .NET. Il nome di questo driver cambia di volta in volta,
quindi assicurarsi che sia quello che funziona con .NET, che è diverso dai driver IBM Db2 che funzionano con
OLE/DB, ODBC o JDBC.
È possibile scegliere di usare il driver Microsoft (impostazione predefinita) o il driver IBM se si usa Power Query
Desktop. Attualmente, Power Query Online usa solo il driver Microsoft. Ogni driver presenta limitazioni.
Driver Microsoft
Non supporta l'Transport Layer Security (TLS)
Driver IBM
Il connettore di database IBM Db2, quando si usa il driver IBM Db2 per .NET, non funziona con i
sistemi Mainframe o IBM i
Non supporta DirectQuery
Microsoft fornisce supporto per il driver Microsoft, ma non per il driver IBM. Tuttavia, se il reparto IT lo ha già
configurato nei computer, il reparto IT deve sapere come risolvere i problemi del driver IBM.
Query native non supportate in DirectQuery
Quando si seleziona DirectQuery come modalità di connettività dati in Power Query Desktop, la casella SQL di
testo istruzione nelle opzioni avanzate è disabilitata. È disabilitato perché il connettore POWER QUERY IBM Db2
attualmente non supporta il push delle query su una query di database nativa.

Risoluzione dei problemi


Assicurarsi che il driver IBM Db2 sia installato
Se si sceglie di usare il driver IBM Db2 per Power Query Desktop, è prima necessario scaricare, installare e
configurare il driver nel computer. Per assicurarsi che il driver IBM Db2 sia stato installato:
1. Aprire Windows PowerShell nel computer.
2. Immettere il comando seguente:
[System.Data.Common.DbProviderFactories]::GetFactoryClasses() | ogv

3. Nella finestra di dialogo visualizzata dovrebbe essere visualizzato il nome seguente nella colonna
InvariantName:
IBM.Data.DB2

Se questo nome si trova nella colonna InvariantName, il driver IBM Db2 è stato installato e configurato
correttamente.
Codici di errore SQLCODE -805 e SQLCODE -551
Quando si tenta di connettersi a un database IBM Db2, a volte può verificarsi l'errore comune SQLCODE -805,
che indica che il pacchetto non viene trovato nella raccolta o in un'altra raccolta (specificata nella configurazione
di connessione del pacchetto NULLID Power Query). È anche possibile che si verifichi l'errore comune SQLCODE
-551, che indica che non è possibile creare pacchetti perché non è disponibile l'autorità di associazione dei
pacchetti.
In genere, SQLCODE -805 è seguito da SQLCODE -551, ma verrà visualizzata solo la seconda eccezione. In realtà,
il problema è lo stesso. Non è possibile associare il pacchetto a o NULLID alla raccolta specificata.
In genere, la maggior parte degli amministratori IBM Db2 non fornisce l'autorità di associazione dei pacchetti
agli utenti finali, in particolare in un ambiente — IBM z/OS (mainframe) o IBM i (AS/400). Db2 in Linux, Unix o
Windows è diverso perché gli account utente hanno privilegi di associazione per impostazione predefinita, che
creano il pacchetto MSCS001 (Stabilità cursore) nella raccolta dell'utente (nome = nome di accesso utente).
Se non si dispone dei privilegi di binding del pacchetto, è necessario chiedere all'amministratore db2 l'autorità
di associazione dei pacchetti. Con questa autorità di associazione del pacchetto, connettersi al database e
recuperare i dati, che creeranno automaticamente il pacchetto. Successivamente, l'amministratore può revocare
l'autorità di associazione dei pacchetti. Inoltre, in seguito, l'amministratore può "associare" la copia del pacchetto
ad altre raccolte per aumentare la concorrenza, per soddisfare meglio gli standard interni per la posizione in cui
sono associati i pacchetti e — così via.
Quando ci si connette a IBM Db2 per z/OS, l'amministratore db2 può eseguire la procedura seguente.
1. Concedere l'autorità per associare un nuovo pacchetto all'utente con uno dei comandi seguenti:
GRANT BINDADD ON SYSTEM TO <authorization_name>
GRANT PACKADM ON <collection_name> TO <authorization_name>
2. Usando Power Query, connettersi al database IBM Db2 e recuperare un elenco di schemi, tabelle e viste. Il
Power Query database IBM Db2 creerà automaticamente il pacchetto NULLID. MSCS001 e quindi
concedere l'esecuzione nel pacchetto al pubblico.
3. Revocare l'autorità per associare un nuovo pacchetto all'utente con uno dei comandi seguenti:
REVOCARE BINDADD FROM <authorization_name>
REVOCARE PACKADM <collection_name> ON FROM <authorization_name>
Quando ci si connette a IBM Db2 per Linux, Unix o Windows, l'amministratore db2 può eseguire la procedura
seguente.
1. CONCEDERE BINDADD ON DATABASE ALL'UTENTE <authorization_name> .
2. Usando Power Query, connettersi al database IBM Db2 e recuperare un elenco di schemi, tabelle e viste. Il
Power Query connettore IBM Db2 creerà automaticamente il pacchetto NULLID. MSCS001 e quindi
concedere l'esecuzione del pacchetto al pubblico.
3. REVOKE BINDADD ON DATABASE FROM USER <authorization_name> .
4. CONCEDERE EXECUTE ON PACKAGE <collection.package> ALL'UTENTE <authorization_name> .
Quando ci si connette a IBM Db2 per i, l'amministratore db2 può eseguire la procedura seguente.
1. WRKOBJ QSYS/CRTSQLPKG. Digitare "2" per modificare l'autorità dell'oggetto.
2. Modificare l'autorità da *EXCLUDE a PUBLIC o <authorization_name> .
3. Successivamente, modificare l'autorità in *EXCLUDE.
Codice di errore SQLCODE -360
Quando si tenta di connettersi al database IBM Db2, è possibile che si sia verificato l'errore seguente:
Microsoft Db2 Client: The host resource could not be found. Check that the Initial Catalog value matches the
host resource name. SQLSTATE=HY000 SQLCODE=-360

Questo messaggio di errore indica che non è stato inserito il valore giusto in per il nome del database.
Codice di errore SQLCODE -1336
The specified host could not be found.

Controllare il nome e verificare che l'host sia raggiungibile. Ad esempio, usare ping in un prompt dei comandi
per tentare di raggiungere il server e verificare che l'indirizzo IP sia corretto oppure usare telnet per comunicare
con il server.
Codice di errore SQLCODE -1037
Host is reachable, but is not responding on the specified port.

La porta viene specificata alla fine del nome del server, separati da due punti. Se omesso, viene usato il valore
predefinito 50000.
Per trovare la porta che Db2 usa per Linux, Unix e Windows, eseguire questo comando:
db2 get dbm cfg | findstr SVCENAME

Cercare nell'output una voce per SVCENAME (e SSL_SVCENAME connessioni crittografate TLS). Se questo
valore è un numero, questa è la porta. In caso contrario, fare riferimento incrociato al valore con la tabella
"services" del sistema. È in genere possibile trovarlo in /etc/services o in
c:\windows\system32\drivers\etc\services per Windows.
Lo screenshot seguente mostra l'output di questo comando in Linux/Unix.
Lo screenshot seguente mostra l'output di questo comando in Windows.

Determinare il nome del database


Per determinare il nome del database da usare:
1. In IBM i eseguire DSPRDBDIRE .
2. Una delle voci avrà un percorso remoto **LOCAL*. Questa voce è quella da usare.
Determinare il numero di porta
Il driver Microsoft si connette al database usando il protocollo DDA (Distributed Relational Database
Architecture). La porta predefinita per DRDA è la porta 446. Provare prima questo valore.
Per trovare con certezza su quale porta è in esecuzione il servizio DRDA:
1. Eseguire il comando IBM i WRKSRVTBLE .
2. Scorrere verso il basso fino a trovare le voci per DRDA.
3. Per verificare che il servizio DRDA sia in ascolto su tale porta, eseguire NETSTAT .
4. Scegliere l'opzione 3 (per IPv4) o l'opzione 6 (per IPv6).
5. Premere F14 per visualizzare i numeri di porta anziché i nomi e scorrere fino a visualizzare la porta in
questione. Deve avere una voce con stato "Listen".
Altre informazioni
HIS - provider Microsoft OLE DB per DB2
JSON
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Anonimo


Basic (solo Web)
Account dell'organizzazione
API Web (solo Web)
Windows

Documentazione di riferimento per le funzioni Json.Document

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Importa

Caricare un file JSON locale da Power Query Desktop


Per caricare un file JSON locale:
1. Selezionare l'opzione JSON nella selezione Ottieni dati. Questa selezione avvia un browser di file
locale in cui è possibile selezionare il file JSON.
2. Selezionare Apri per aprire il file.
Il caricamento del file JSON avvierà automaticamente il editor di Power Query. Power Query usa il rilevamento
automatico delle tabelle per appiattire facilmente i dati JSON in una tabella. Dall'editor è quindi possibile
continuare a trasformare i dati, se necessario, oppure è sufficiente chiudere e applicare. Altre informazioni:
Rilevamento tabelle automatico da file JSON

Caricare un file JSON locale da Power Query Online


Per caricare un file JSON locale:
1. Nella pagina Origini dati selezionare JSON.
2. Immettere il percorso del file JSON locale.
3. Selezionare un gateway dati locale da Gateway dati .
4. Se è necessaria l'autenticazione, immettere le credenziali.
5. Selezionare Avanti .
Il caricamento del file JSON avvierà automaticamente il editor di Power Query. Power Query usa il rilevamento
automatico delle tabelle per appiattire facilmente i dati JSON in una tabella. Dall'editor è quindi possibile
continuare a trasformare i dati, se necessario, oppure è sufficiente salvare e chiudere per caricare i dati. Altre
informazioni: Rilevamento tabelle automatico da file JSON

Caricare dal Web


Per caricare un file JSON dal Web, selezionare il connettore Web,immettere l'indirizzo Web del file e seguire le
richieste di credenziali.

Rilevamento automatico delle tabelle da file JSON


L'importazione di dati da file JSON (o API Web) può essere complessa per gli utenti finali. Ecco un esempio di
file JSON con più livelli di dati annidati.
Con l'aggiunta delle funzionalità di rilevamento tabelle automatico, l'uso del connettore JSON in Power Query
applica automaticamente i passaggi di trasformazione per appiattire i dati JSON in una tabella. In precedenza, gli
utenti dovevano appiattire manualmente i record e gli elenchi.
Risoluzione dei problemi
Se viene visualizzato il messaggio seguente, è possibile che il file non sia valido, ad esempio non si tratta di un
file JSON o di un formato non valido. Oppure è possibile che si stia tentando di caricare un file di righe JSON.

Se si sta tentando di caricare un file di righe JSON, il codice M di esempio seguente converte automaticamente
tutti gli input delle righe JSON in una singola tabella bi flat:

let
// Read the file into a list of lines
Source = Table.FromColumns({Lines.FromBinary(File.Contents("C:\json-lines-example.json"), null, null)}),
// Transform each line using Json.Document
#"Transformed Column" = Table.TransformColumns(Source, {"Column1", Json.Document})
in
#"Transformed Column"

Sarà quindi necessario usare un'operazione Expand per combinare le righe.


Mailchimp (deprecato)
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Deprecato

Prodotti -

Tipi di autenticazione supportati -

Documentazione di riferimento per le funzioni -

Deprecazione
Questo connettore è deprecato e non sarà supportato a breve. È consigliabile disattivare le connessioni esistenti
usando questo connettore e non usarlo per le nuove connessioni.
Microsoft Azure Consumption Insights (Beta)
(Deprecato)
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Deprecato

Prodotti -

Tipi di autenticazione supportati Account aziendale

Documentazione di riferimento delle funzioni -

Deprecazione
NOTE
Questo connettore è deprecato a causa della fine del supporto per il Microsoft Azure a consumo Insights servizio. È
consigliabile che gli utenti sconsigliano le connessioni esistenti usando questo connettore e non lo usino per le nuove
connessioni.

Istruzioni per la transizione


Agli utenti viene richiesto di usare il connettore Microsoft Azure gestione costi come sostituzione. I nomi di
tabella e campo sono simili e devono offrire la stessa funzionalità.
Sequenza temporale
Il Microsoft Azure consumo Insights dicembre 2021 smetterà di funzionare. Entro dicembre 2021 gli utenti
dovranno Microsoft Azure connettore Insights consumo al connettore Microsoft Azure Gestione costi.
Microsoft Graph Security (deprecato)
07/12/2021 • 2 minutes to read

Summary
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Deprecato

Prodotti -

Tipi di autenticazione supportati Account aziendale

Documentazione di riferimento per le funzioni -

Deprecazione
NOTE
Questo connettore è deprecato. È consigliabile disattivare le connessioni esistenti usando questo connettore e non usarlo
per le nuove connessioni.
Database MySQL
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Windows (Power BI Desktop, Excel, servizio online con
gateway)
Database (Power BI Desktop, Excel)
Basic (servizio online con gateway)

Documentazione di riferimento per le funzioni MySQL.Database

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Gli utenti devono installare il pacchetto Oracle MySQL Connector/NET prima di usare questo connettore in
Power BI Desktop. Questo componente deve essere installato anche nel computer che esegue il gateway dati
locale per poter usare questo connettore in Power Query Online (flussi di dati) o Power BI Service.

Funzionalità supportate
Importa
Advanced Options
Timeout del comando in minuti
Istruzione SQL nativa
Colonne di relazione
Esplora con gerarchia completa

Connessione database MySQL da Power Query Desktop


Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione Database MySQL nella selezione del connettore.
2. Nella finestra di dialogo Database MySQL specificare il nome del server e del database.

3. Selezionare il tipo di autenticazione database e immettere le credenziali MySQL nelle caselle Nome
utente e Password.

4. Selezionare il livello a cui applicare le credenziali.


5. Al termine, selezionare OK.

NOTE
Se la connessione non è crittografata, verrà visualizzata la finestra di dialogo seguente.

Selezionare OK per connettersi al database usando una connessione non crittografata oppure seguire le
istruzioni per configurare le connessioni crittografate SQL Server.
6. In Strumento di navigazione selezionare i dati necessari, quindi caricare o trasformare i dati.
Connessione database MySQL da Power Query Online
Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione Database MySQL nella selezione del connettore.
2. Nella finestra di dialogo Database MySQL specificare il nome del server e del database.

3. Se necessario, includere il nome del gateway dati locale.


4. Selezionare il tipo di autenticazione Di base e immettere le credenziali MySQL nelle caselle Nome
utente e Password.
5. Se la connessione non è crittografata, deselezionare Usa connessione crittografata .
6. Selezionare Avanti per connettersi al database.
7. In Strumento di navigazione selezionare i dati necessari, quindi selezionare Trasforma dati per
trasformare i dati in editor di Power Query.

Connessione le opzioni avanzate


Power Query Desktop offre un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.

La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Timeout del comando in minuti Se la connessione dura più di 10 minuti (timeout


predefinito), è possibile immettere un altro valore in minuti
per mantenere la connessione aperta più a lungo. Questa
opzione è disponibile solo in Power Query Desktop.

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando una query di database nativa.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non vengono visualizzate.

Esplora con gerarchia completa Se selezionata, lo strumento di spostamento visualizza la


gerarchia completa delle tabelle nel database a cui ci si
connette. Se l'opzione è deselezionata, lo strumento di
spostamento visualizza solo le tabelle le cui colonne e righe
contengono dati.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop per connettersi al
database MySQL.
Feed OData
07/12/2021 • 3 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Anonimo


Windows
Basic (richiede il gateway)
API Web
Account dell'organizzazione

Documentazione di riferimento per le funzioni OData.Feed, ODataOmitValues.Nulls

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Basic
Avanzate
Parti URL
Aprire colonne di tipo
Selezionare tabelle correlate

NOTE
Microsoft Graph non è supportato. Altre informazioni: Mancanza di supporto per Microsoft Graph in Power Query

Caricare dati da un feed OData in Power Query Desktop


Per caricare dati da un feed OData in Power Query Desktop:
1. Selezionare l'opzione OData o Feed OData nella selezione del connettore.
2. Scegliere il pulsante Basic e immettere un indirizzo URL nella casella di testo. Questo URL deve essere
la radice del servizio OData a cui si vuole connettersi. Immettere ad esempio
http://services.odata.org/V4/northwind/northwind.svc/ . Selezionare OK .

Se l'indirizzo URL immesso non è valido, viene visualizzata accanto alla casella di testo URL verrà
visualizzata l'icona di avviso.
3. Se è la prima volta che ci si connette usando il feed OData, selezionare il tipo di autenticazione, immettere
le credenziali (se necessario) e selezionare il livello a cui applicare le impostazioni di autenticazione.
Selezionare Connetti .

4. Nella finestra di dialogo Strumento di navigazione è possibile selezionare una tabella, quindi trasformare
i dati nel editor di Power Query selezionando Trasforma dati oppure caricare i dati selezionando Carica .

Se sono presenti più tabelle che hanno una relazione diretta con una o più tabelle già selezionate, è
possibile selezionare il pulsante Seleziona tabelle correlate. In questo caso, verranno importate anche
tutte le tabelle che hanno una relazione diretta con una o più tabelle già selezionate.

Caricare dati da un feed OData in Power Query Online


Per caricare dati da un feed OData in Power Query Online:
1. Selezionare l'opzione OData o Feed OData nella selezione del connettore.
2. Nella finestra di dialogo OData visualizzata immettere un URL nella casella di testo.

3. Se è la prima volta che ci si connette usando il feed OData, selezionare il tipo di autenticazione e
immettere le credenziali (se necessario). Selezionare quindi Avanti .
4. Nella finestra di dialogo Strumento di navigazione è possibile selezionare una tabella, quindi trasformare
i dati nel editor di Power Query selezionando Trasforma dati .

Se sono presenti più tabelle che hanno una relazione diretta con una o più tabelle già selezionate, è
possibile selezionare il pulsante Seleziona tabelle correlate. In questo caso, verranno importate anche
tutte le tabelle che hanno una relazione diretta con una o più tabelle già selezionate.

Connessione a Microsoft Graph


La connessione alle API REST Graph Microsoft da Power Query non è consigliata o supportata. Per altre
informazioni, vedere questo articolo.

Problemi noti e limitazioni


Join
A causa dell'architettura di OData e di altri connettori Web, i join possono non essere performanti. Anche se è
possibile usare le colonne di navigazione durante l'unione tra tabelle da un'origine OData, questa opzione non è
disponibile quando si esegue l'unione con origini non Odata.
Se si verificano problemi di prestazioni durante l'unione di un'origine OData, è necessario applicare Table.Buffer
alla query OData nel Editor avanzato, prima di unire i dati.
Testare i problemi di connessione
Nei casi in cui si passa un URL al connettore OData che non è solo la radice del servizio, ad esempio se si
dispone di un filtro sull'URL, quando si configura l'aggiornamento nel servizio è necessario selezionare Ignora
connessione di test .
Autenticazione a servizi arbitrari
Alcuni servizi supportano la possibilità per il connettore OData di eseguire l'autenticazione con l'autenticazione
OAuth/AAD. Tuttavia, questa operazione non funzionerà nella maggior parte dei casi.
Quando si tenta di eseguire l'autenticazione, se viene visualizzato l'errore seguente:
"Non è stato possibile connettersi perché questo tipo di credenziale non è supportato per questa risorsa.
Scegliere un altro tipo di credenziale."

Contattare il proprietario del servizio. Sarà necessario modificare la configurazione dell'autenticazione o creare
un connettore personalizzato.
<a name="maximum-url-length">Lunghezza massima dell'URL
Se si usa il connettore feed OData per connettersi a un elenco di SharePoint, SharePoint online o Project Online,
la lunghezza massima dell'URL per queste connessioni è di circa 2100 caratteri. Il superamento del limite di
caratteri comporta un errore 401. La lunghezza massima dell'URL è SharePoint front-end e non può essere
modificata.
Per aggirare questa limitazione, iniziare con l'endpoint OData radice e quindi spostarsi e filtrare all'interno
Power Query. Power Query questo URL viene filtrato in locale quando l'URL è troppo lungo SharePoint gestire.
Ad esempio, iniziare con:

OData.Feed(&quot;https://contoso.sharepoint.com/teams/sales/_api/ProjectData")

invece di
OData.Feed("https://contoso.sharepoint.com/teams/sales/_api/ProjectData/Projects?
select=_x0031_MetricName...etc...")
ODBC
07/12/2021 • 3 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Database (nome utente/password)


Windows
Impostazione predefinita o personalizzata

Documentazione di riferimento per le funzioni Odbc.DataSource


Odbc.Query

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Prima di iniziare, assicurarsi di aver configurato correttamente la connessione nell'Windows origine dati ODBC.
Il processo esatto dipende dal driver.

Funzionalità supportate
Importa
Advanced Options
Stringa di connessione (proprietà di tipo non credenziali)
Istruzione SQL
Clausole di riduzione delle righe supportate

Connessione a un'origine dati ODBC da Power Query Desktop


Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione ODBC nella selezione Ottieni dati.
2. In Da ODBC selezionare il nome dell'origine dati (DSN) dalla casella di riepilogo a discesa Nome origine
dati (DSN). In questo esempio è stato selezionato un nome DSN SQL Ser ver Database.
È anche possibile scegliere Opzioni avanzate per immettere altre informazioni di connessione
facoltative. Altre informazioni: Usare Connessione opzioni avanzate
3. Al termine, selezionare OK.
4. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione e immettere
le credenziali quando richiesto.

I tipi di autenticazione disponibili sono:


Predefinito o Personalizzato: selezionare questo tipo di autenticazione quando non si specificano
credenziali se si usa un DSN configurato con un nome utente e una password. In caso contrario, se è
necessario includere le credenziali come proprietà della stringa di connessione.
Windows: selezionare questo tipo di autenticazione se si vuole connettersi usando Windows
autenticazione. Facoltativamente, includere le proprietà della stringa di connessione necessarie.
Database : selezionare questo tipo di autenticazione per usare un nome utente e una password per
accedere a un'origine dati con un driver ODBC. Facoltativamente, includere le proprietà della stringa di
connessione necessarie. Si tratta della selezione predefinita.
Altre informazioni: Autenticazione con un'origine dati
5. Al termine, selezionare Connessione .
6. Nello strumento di navigazione selezionare le informazioni del database desiderate, quindi selezionare
Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.
Connessione a un'origine dati ODBC da Power Query Online
Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Nella pagina Origini dati selezionare ODBC .
2. Nella pagina ODBC immettere la stringa di connessione ODBC. In questo esempio la stringa di
connessione è dsn=SQL Server Database .

3. Se necessario, selezionare un gateway dati locale in Gateway dati .


4. Scegliere il tipo di autenticazione da usare per accedere e quindi immettere le credenziali.
5. Selezionare Avanti .
6. Nello strumento di navigazione selezionare le informazioni del database desiderate e quindi selezionare
Trasforma dati per continuare a trasformare i dati editor di Power Query.
Connessione le opzioni avanzate
Power Query un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Stringa di connessione (proprietà di tipo non credenziali) Fornisce una stringa di connessione facoltativa che può
essere usata al posto della selezione del nome dell'origine
dati (DSN) in Power BI Desktop. Se nome origine dati
(DSN) è impostato su (Nessuno), è possibile immettere
una stringa di connessione qui. Ad esempio, le stringhe di
connessione seguenti sono valide: dsn= <myDSN> o
driver= <myDriver> ;p or t= <myPor tNumber>
;ser ver= <mySer ver> ;d atabase= <myDatabase> ; .
I { } caratteri possono essere usati per eseguire l'escape di
caratteri speciali. Le chiavi per le stringhe di connessione
variano tra driver ODBC diversi. Per altre informazioni sulle
stringhe di connessione valide, vedere il provider di driver
ODBC.

Istruzione SQL Fornisce un'SQL, a seconda delle funzionalità del driver.


Chiedere altre informazioni al fornitore o passare a
Importare dati da un database usando una query di
database nativa.

Clausole di riduzione delle righe supportate Abilita il supporto di folding per Table.FirstN. Selezionare
Rileva per trovare le clausole di riduzione delle righe
supportate o selezionare una delle opzioni a discesa (TOP,
LIMIT e OFFSET, LIMIT o ANSI SQL compatibile con . Questa
opzione non è applicabile quando si usa un'istruzione SQL
nativa. Disponibile solo in Power Query Desktop.
Database Oracle
07/12/2021 • 6 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Windows (desktop/online)


Database (desktop)
Basic (online)

Documentazione di riferimento per le funzioni Oracle.Database

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Versioni di Oracle supportate:
Oracle Server 9 e versioni successive
Software Oracle Data Access Client (ODAC) 11.2 e versioni successive
Prima di connettersi a un database Oracle usando Power Query, è necessario installare il software client Oracle
v8.1.7 o versione successiva nel computer. Per installare il software client Oracle a 32 bit, passare a Oracle Data
Access Components (ODAC) a 32 bit con Oracle Strumenti di sviluppo per Visual Studio (12.1.0.2.4). Per
installare il client Oracle a 64 bit, passare a ODAC 12c Release 4 (12.1.0.2.4) Xcopy a 64 bit per Windows x64.

NOTE
Scegliere una versione di Oracle Data Access Client (ODAC) compatibile con Oracle Server. Ad esempio, ODAC 12.x non
supporta sempre Oracle Server versione 9. Scegliere il programma di installazione di Windows per il client Oracle. Durante
l'installazione del client Oracle, assicurarsi di abilitare Configura provider ODP.NET e/o Oracle per ASP.NET a livello di
computer selezionando la casella di controllo corrispondente durante l'installazione guidata. Alcune versioni della
procedura guidata client Oracle selezionano la casella di controllo per impostazione predefinita, altre no. Assicurarsi che la
casella di controllo sia selezionata in modo Power Query connettersi al database Oracle.

Per connettersi a un database Oracle con il gatewaydati locale, è necessario installare il software client Oracle
corretto nel computer che esegue il gateway. Il software client Oracle usato dipende dalla versione del server
Oracle, ma corrisponderà sempre al gateway a 64 bit. Per altre informazioni, vedere Gestire l'origine dati -
Oracle.

Funzionalità supportate
Comando Importa
DirectQuery
Advanced Options
Timeout del comando in minuti
Istruzione SQL
Includi colonne relazioni
Esplora con gerarchia completa

Connessione a un database Oracle da Power Query Desktop


Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione Database Oracle nella selezione del connettore.
2. Specificare il server Oracle a cui connettersi nel ser ver . Se è necessario un SID, specificarlo usando il
formato NomeServer/SID, dove SID è il nome univoco del database. Se il formato NomeServer/SID non
funziona, usare NomeServer/NomeServizio, dove NomeServizio è l'alias usato durante la connessione.

NOTE
Se si usano un database locale o connessioni di database autonome, potrebbe essere necessario inserire il nome
del server tra virgolette per evitare errori di connessione.

3. Se ci si connette da un Power BI Desktop, selezionare la modalità di connettività dei dati Importa o


DirectQuer y. Nella parte restante di questi passaggi di esempio viene utilizzata la modalità di
connettività Importa dati. Per altre informazioni su DirectQuery, vedere Usare DirectQuery in Power BI
Desktop.
4. Se è la prima volta che ci si connette a questo database Oracle, selezionare il tipo di autenticazione che si
vuole usare e quindi immettere le credenziali. Per altre informazioni sull'autenticazione, vedere
Autenticazione con un'origine dati.
5. In Strumento di navigazione selezionare i dati necessari, quindi selezionare Carica per caricare i dati o
Trasforma dati per trasformare i dati.

Connessione a un database Oracle da Power Query Online


Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione Database Oracle nella selezione delle origini dati.
2. Nella finestra di dialogo Database Oracle visualizzata specificare il server Oracle a cui connettersi in
Ser ver . Se è necessario un SID, specificarlo usando il formato NomeServer/SID, dove SID è il nome
univoco del database. Se il formato NomeServer/SID non funziona, usare NomeServer/NomeServizio,
dove NomeServizio è l'alias usato durante la connessione.

3. Selezionare il nome del gateway dati locale.

NOTE
È necessario selezionare un gateway dati locale per questo connettore, indipendentemente dal fatto che il
database Oracle si trova nella rete locale o in un sito Web.
4. Se è la prima volta che ci si connette a questo database Oracle, selezionare il tipo di credenziali per la
connessione in Tipo di autenticazione . Scegliere Di base se si intende usare un account creato in
Oracle invece dell'autenticazione di Windows.
5. Immettere le credenziali.
6. Selezionare Avanti per continuare.
7. In Strumento di navigazione selezionare i dati necessari, quindi selezionare Trasforma dati per
trasformare i dati in editor di Power Query.

Connessione le opzioni avanzate


Power Query Desktop offre un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.

La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Timeout del comando in minuti Se la connessione dura più di 10 minuti (timeout


predefinito), è possibile immettere un altro valore in minuti
per mantenere la connessione aperta più a lungo. Questa
opzione è disponibile solo in Power Query Desktop.

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando una query di database nativa.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non vengono visualizzate.

Esplora con gerarchia completa Se selezionata, lo strumento di spostamento visualizza la


gerarchia completa delle tabelle nel database a cui ci si
connette. Se l'opzione è deselezionata, lo strumento di
spostamento visualizza solo le tabelle le cui colonne e righe
contengono dati.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop per connettersi al
database Oracle.

Risoluzione dei problemi


È possibile che si siano verificati diversi errori da Oracle quando la sintassi di denominazione non è corretta o
non è configurata correttamente:
ORA-12154: TNS: impossibile risolvere l'identificatore di connessione specificato.
ORA-12514: TNS: il listener non conosce attualmente il servizio richiesto nel descrittore di connessione.
ORA-12541: TNS: nessun listener.
ORA-12170: TNS: si è verificato il timeout di connessione.
ORA-12504: TNS: il listener non ha SERVICE_NAME in CONNECT_DATA.
Questi errori possono verificarsi se il client Oracle non è installato o se non è configurato correttamente. Se è
installato, verificare che il file tnsnames.ora sia configurato correttamente e che si sta usando il
net_service_name. È anche necessario assicurarsi che il net_service_name sia lo stesso tra il computer che usa
Power BI Desktop e il computer che esegue il gateway. Per altre informazioni, vedere Prerequisiti.
È anche possibile che si sia verificato un problema di compatibilità tra la versione del server Oracle e la versione
del client di accesso ai dati Oracle. In genere, è preferibile che queste versioni corrispondano, perché alcune
combinazioni sono incompatibili. Ad esempio, ODAC 12.x non supporta Oracle Server versione 9.
Se Power BI Desktop è stato scaricato da Microsoft Store, è possibile che la connessione ai database Oracle non
riesca a causa di un problema di driver di Oracle. Se si verifica questo problema, il messaggio di errore restituito
è: Riferimento all'oggetto non impostato. Per risolvere il problema, eseguire una di queste operazioni:
Scaricare Power BI Desktop dall'Area download anziché da Microsoft Store.
Se si vuole usare la versione di Microsoft Store: nel computer locale copiare oraons.dll da 12.X.X\client_X
a 12.X.X\client_X\bin, dove X rappresenta i numeri di versione e directory.
Se viene visualizzato il messaggio di errore Riferimento a oggetto non impostato in Power BI Gateway durante
la connessione a un database Oracle, seguire le istruzioni in Gestire l'origine dati - Oracle.
Se si usa il server di report di Power BI, consultare le linee guida nell'articolo Tipo di connessione Oracle.

Passaggi successivi
Ottimizzare Power Query durante l'espansione di colonne di tabella
PDF
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights

Tipi di autenticazione supportati Anonimo (online)


Basic (online)
Account aziendale (online)
Windows (online)

Documentazione di riferimento per le funzioni Pdf.Tables

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

NOTE
PDF non è supportato in Power BI Premium.

Prerequisiti
Nessuno.

Funzionalità supportate
Importa

Connessione a un file PDF da Power Query Desktop


Per stabilire la connessione da Power Query Desktop:
1. Selezionare l'opzione PDF nella selezione del connettore.
2. Cercare e selezionare il file PDF da caricare. Quindi selezionare Apri .
Se il file PDF è online, usare il connettore Web per connettersi al file.
3. In Strumento di navigazione selezionare le informazioni sul file desiderate, quindi selezionare Carica per
caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Connessione a un file PDF da Power Query Online


Per stabilire la connessione da Power Query Online:
1. Selezionare l'opzione PDF nella selezione del connettore.
2. Nella finestra di dialogo PDF visualizzata specificare il percorso del file o l'URL del percorso del file PDF.
Se si sta caricando un file locale, è anche possibile selezionare un file Upload (anteprima) per passare al
file locale o trascinare e rilasciare il file.
3. Se necessario, selezionare un gateway dati locale per accedere al file PDF.
4. Se è la prima volta che si accede a questo file PDF, selezionare il tipo di autenticazione e accedere al
proprio account (se necessario).
5. In Strumento di navigazione selezionare le informazioni sul file desiderate e quindi selezionare
Trasforma dati per continuare a trasformare i dati in editor di Power Query.
PostgreSQL
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Database (nome utente/password)

Documentazione di riferimento delle funzioni PostgreSQL.Database

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
A partire dalla versione di dicembre 2019, NpgSQL 4.0.10 è stato fornito con Power BI Desktop e non è
necessaria alcuna installazione aggiuntiva. L'installazione gac sostituisce la versione fornita Power BI Desktop,
che sarà l'impostazione predefinita. L'aggiornamento è supportato sia tramite il cloud nel servizio Power BI sia
in locale tramite il gateway. Nel servizio Power BI verrà usato NpgSQL 4.0.10, mentre l'aggiornamento locale
userà l'installazione locale di NpgSQL, se disponibile, e in caso contrario userà NpgSQL 4.0.10.
Per Power BI Desktop rilasciate prima di dicembre 2019, è necessario installare il provider NpgSQL nel
computer locale. Per installare il provider NpgSQL, passare alla pagina delle versioni e scaricare la versione
pertinente. L'architettura del provider (a 32 bit o a 64 bit) deve corrispondere all'architettura del prodotto in cui
si intende usare il connettore. Durante l'installazione, assicurarsi di selezionare NpgSQL GAC Installation
(Installazione GAC NpgSQL) per assicurarsi che NpgSQL stesso sia aggiunto al computer.
È consigliabile usare NpgSQL 4.0.10. NpgSQL 4.1 e versioni non funzioneranno a causa di
incompatibilità con la versione di .NET.
Funzionalità supportate
Importa
DirectQuery (solo Power BI)
Advanced Options
Timeout del comando in minuti
Istruzione SQL nativa
Colonne delle relazioni
Esplora con gerarchia completa

Connessione a un database PostgreSQL da Power Query Desktop


Dopo aver installato il provider Npgsql corrispondente, è possibile connettersi a un database PostgreSQL. Per
stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione Database PostgreSQL nella selezione del connettore.
2. Nella finestra di dialogo Database PostgreSQL visualizzata specificare il nome del server e del
database.

3. Selezionare la modalità di connettività dei dati Importa o DirectQuer y.


4. Se è la prima volta che ci si connette a questo database, immettere le credenziali di PostgreSQL nelle
caselle Nome utente e Password del tipo di autenticazione database. Selezionare il livello a cui
applicare le impostazioni di autenticazione. Selezionare Connetti .

Per altre informazioni sull'uso dei metodi di autenticazione, vedere Autenticazione con un'origine dati.

NOTE
Se la connessione non è crittografata, verrà visualizzato il messaggio seguente.

Selezionare OK per connettersi al database usando una connessione non crittografata oppure seguire le
istruzioni in Abilitare le connessioni crittografate al motore di database per configurare le connessioni
crittografate al database PostgreSQL.
5. In Strumento di navigazione selezionare le informazioni sul database desiderate, quindi selezionare
Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.
Connessione a un database PostgreSQL da Power Query Online
Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione Database PostgreSQL nella selezione del connettore.
2. Nella finestra di dialogo Database PostgreSQL visualizzata specificare il nome del server e del
database.

3. Selezionare il nome del gateway dati locale che si vuole usare.


4. Selezionare il tipo di autenticazione Di base e immettere le credenziali di MySQL nelle caselle Nome
utente e Password.
5. Se la connessione non è crittografata, deselezionare Usa connessione crittografata .
6. Selezionare Avanti per connettersi al database.
7. In Strumento di navigazione selezionare i dati necessari, quindi selezionare Trasforma dati per
trasformare i dati in editor di Power Query.

Connessione l'uso di opzioni avanzate


Power Query Desktop offre un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.

La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Timeout del comando in minuti Se la connessione dura più di 10 minuti (timeout


predefinito), è possibile immettere un altro valore in minuti
per mantenere aperta la connessione più a lungo. Questa
opzione è disponibile solo in Power Query Desktop.

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando la query di database nativa.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non saranno visualizzate.

Esplora con gerarchia completa Se questa opzione è selezionata, lo strumento di navigazione


visualizza la gerarchia completa delle tabelle nel database a
cui ci si connette. Se deselezionata, lo strumento di
navigazione visualizza solo le tabelle le cui colonne e righe
contengono dati.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop per connettersi al
database PostgreSQL.

Folding della query nativa


Per impostazione predefinita, la funzionalità di visualizzazione delle query native è abilitata. Le operazioni in
grado di eseguire la ripiegamento verranno applicate alla query nativa in base alla normale logica di
importazione o direct query. La folding della query nativa non è applicabile con parametri facoltativi presenti in
Value.NativeQuery().
Nel raro caso in cui la funzionalità di folding non funzioni con la funzionalità di folding della query nativa
abilitata, è possibile disabilitarla. Per disabilitare la visualizzazione della query nativa, impostare EnableFolding il
flag su per false Value.NativeQuery() nell'editor avanzato.
Esempio: Value.NativeQuery(target as any, query, null, [EnableFolding=false])

Risoluzione dei problemi


La query nativa potrebbe generare l'errore seguente:
We cannot fold on top of this native query. Please modify the native query or remove the 'EnableFolding'
option.

Un passaggio di risoluzione dei problemi di base consiste nel verificare se la query in Value.NativeQuery()
genera lo stesso errore con una limit 1 clausola che la circonda:
select * from (query) _ limit 1
QuickBooks Online (beta)
07/12/2021 • 2 minutes to read

Il connettore Power BI QuickBooks Online consente di connettersi all'account QuickBooks Online e di


visualizzare, analizzare e creare report sui dati di QuickBooks aziendali Power BI.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Account QuickBooks Online

WARNING
QuickBooks Online ha deprecato il supporto per Internet Explorer 11, che Power Query Desktop usa per l'autenticazione
Servizi online. Per poter accedere a Quickbooks Online da Power BI Desktop, passare a Abilitazione di Microsoft Edge
(Chromium)per l'autenticazione OAuth in Power BI Desktop .

Prerequisiti
Per usare il connettore QuickBooks Online, è necessario avere un nome utente e una password dell'account
QuickBooks Online.
Il connettore QuickBooks Online usa il driver ODBC QuickBooks. Il driver ODBC QuickBooks viene fornito con
Power BI Desktop e non è necessaria alcuna installazione aggiuntiva.

Funzionalità supportate
Importa

Connessione a QuickBooks Online


Per connettersi a QuickBooks Online:
1. Nella finestra di dialogo Ottieni dati immettere QuickBooks nella casella di ricerca, selezionare
QuickBooks Online (Beta) nell'elenco connettore dati specifico del prodotto e quindi selezionare
Connessione .
2. Selezionare Continua nel messaggio del connettore anteprima.

3. Selezionare Accedi per accedere all'account QuickBooks Online.

4. Nella finestra di dialogo seguente immettere le credenziali di QuickBooks. Potrebbe essere necessario
fornire anche 2FA (codice di autenticazione a due fattori).
5. Nella finestra di dialogo seguente selezionare una società e quindi selezionare Avanti.
6. Dopo aver eseguito l'accesso, selezionare Connessione .

7. Nella finestra di dialogo Strumento di navigazione selezionare le tabelle QuickBooks da caricare. È quindi
possibile caricare o trasformare i dati.
Problemi noti
A partire dal 1° agosto 2020, Intuit non supporterà più Microsoft Internet Explorer 11 (IE 11) per QuickBooks
Online. Quando si usa OAuth2 per autorizzare QuickBooks Online, dopo il 1° agosto 2020, saranno supportati
solo i browser seguenti:
Microsoft Edge
Mozilla Firefox
Google Chrome
Safari 11 o versione più recente (solo Mac)
Per altre informazioni, vedere Avviso: Supporto per IE11 deprecato il 31 luglio 2020 per le schermate di
autorizzazione.
Per informazioni sul supporto Microsoft Edge corrente in Power BI Desktop, vedere a Enabling Microsoft Edge
(Chromium) for OAuth Authentication in Power BI Desktop.
Oggetti Salesforce
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Account Salesforce

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

WARNING
Per impostazione predefinita, Salesforce non supporta Internet Explorer 11, che viene usato come parte dell'esperienza di
autenticazione per Servizi online in Power Query Desktop. Acconsentire esplicitamente al supporto esteso per l'accesso a
Lightning Experience usando Microsoft Internet Explorer 11. È anche possibile consultare la documentazione di Salesforce
sulla configurazione di Internet Explorer. A questo punto, gli utenti saranno compromessi dall'autenticazione, ma le
credenziali archiviate continueranno a funzionare fino alla scadenza dei token di autenticazione esistenti. Per risolvere
questo problema, passare a Abilitazione Microsoft Edge (Chromium) per l'autenticazione OAuth in Power BI Desktop.

Prerequisiti
Per usare il connettore Salesforce Objects, è necessario avere un nome utente e una password dell'account
Salesforce.
Inoltre, l'accesso all'API Salesforce deve essere abilitato. Per verificare le impostazioni di accesso, passare alla
pagina personale di Salesforce, aprire le impostazioni del profilo e cercare e verificare che la casella di controllo
API abilitata sia selezionata. Si noti che gli account di valutazione di Salesforce non hanno accesso all'API.

Funzionalità supportate
Produzione
Personalizzato
Domini personalizzati
Reindirizzamenti dei record CNAME
Colonne di relazione
Connessione a Salesforce Objects da Power Query Desktop
Per connettersi ai dati di Salesforce Objects:
1. Selezionare Salesforce Objects nell'elenco del connettore dati specifico del prodotto e quindi
selezionare Connessione .
2. In Salesforce Objects scegliere l'URL di produzione se si usa l'URL di produzione di Salesforce ( )
https://www.salesforce.com per accedere.

È anche possibile selezionare Personalizzato e immettere un URL personalizzato per accedere. Questo
URL personalizzato potrebbe essere un dominio personalizzato creato in Salesforce, ad esempio
https://contoso.salesforce.com . È anche possibile usare la selezione url personalizzata se si usa il
proprio record CNAME che reindirizza a Salesforce.
È anche possibile selezionare Includi colonne relazione . Questa selezione modifica la query includendo
colonne che potrebbero avere relazioni di chiave esterna con altre tabelle. Se questa casella è
deselezionata, tali colonne non vengono visualizzate.
Dopo aver selezionato l'URL, selezionare OK per continuare.
3. Selezionare Accedi per accedere all'account Salesforce.

Dopo aver eseguito l'accesso, selezionare Connessione .


4. Se è la prima volta che si è eseguito l'accesso con un'app specifica, verrà chiesto di verificare l'autenticità
immettendo un codice inviato all'indirizzo di posta elettronica. Verrà quindi chiesto se si vuole che l'app
in uso accedono ai dati. Ad esempio, verrà chiesto se si vuole consentire Power BI Desktop ai dati di
Salesforce. selezionare Consenti .
5. Nella finestra di dialogo Strumento di navigazione selezionare gli oggetti Salesforce da caricare. È quindi
possibile selezionare Carica per caricare i dati o selezionare Trasforma dati per trasformare i dati.
Connessione a Salesforce Objects da Power Query Online
Per connettersi ai dati di Salesforce Objects:
1. Selezionare Oggetti Salesforce dall'elenco connettore dati specifico del prodotto e quindi selezionare
Connessione .
2. In Oggetti Salesforce scegliere l'URL da usare per la connessione. Selezionare l'URL di produzione se
si usa l'URL di produzione salesforce ( https://www.salesforce.com ) per accedere.

NOTE
Attualmente potrebbe essere necessario selezionare l'URL personalizzato, immettere nella casella di testo e quindi
https://www.salesforce.com selezionare Produzione per connettersi ai dati.

È anche possibile selezionare Personalizzato e immettere un URL personalizzato per accedere. Questo
URL personalizzato potrebbe essere un dominio personalizzato creato in Salesforce, ad esempio
https://contoso.salesforce.com . È anche possibile usare la selezione url personalizzata se si usa il
proprio record CNAME che reindirizza a Salesforce.
È anche possibile selezionare Includi colonne relazione. Questa selezione modifica la query includendo
colonne che potrebbero avere relazioni di chiave esterna con altre tabelle. Se questa casella è
deselezionata, tali colonne non vengono visualizzate.
3. Se questa è la prima volta che si crea questa connessione, selezionare un gateway dati locale, se
necessario.
4. Selezionare Accedi per accedere all'account Salesforce. Dopo aver eseguito l'accesso, selezionare
Avanti.
5. Nella finestra di dialogo Strumento di navigazione selezionare gli oggetti Salesforce da caricare.
Selezionare quindi Trasforma dati per trasformare i dati.

Limitazioni e problemi noti


Esiste un limite per il numero di campi che una query può contenere in Salesforce. Il limite varia a
seconda del tipo di colonne, del numero di colonne calcolate e così via. Quando viene visualizzato
Query is either selecting too many fields or the filter conditions are too complicated l'errore,
significa che la query supera il limite. Per evitare questo errore, usare l'opzione Avanzata Seleziona
query e specificare i campi effettivamente necessari.
Le impostazioni di sessione di Salesforce possono bloccare questa integrazione. Assicurarsi che
l'impostazione Blocca sessioni sull'indirizzo IP da cui hanno avuto origine sia disabilitata.
L'accesso all'API Salesforce deve essere abilitato. Per verificare le impostazioni di accesso, passare alle
impostazioni del profilo per l'utente corrente e cercare la casella di controllo "API abilitata".
Gli account di valutazione di Salesforce non hanno accesso alle API.
I campi personalizzati di tipo "Elenco a discesa (selezione multipla)" non sono supportati dalle operazioni
"Crea record" e "Aggiorna record".
Gli URL di Lightning non sono supportati.
Per altre informazioni sui limiti delle API interne di Salesforce, vedere Riferimento rapido per i limiti e le
allocazioni di Salesforce Developer Limits and Allocations.
Report di Salesforce
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Account Salesforce

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

WARNING
Per impostazione predefinita, Salesforce non supporta Internet Explorer 11, che viene usato come parte dell'esperienza di
autenticazione per Servizi online in Power Query Desktop. Acconsentire esplicitamente al supporto esteso per l'accesso a
Lightning Experience usando Microsoft Internet Explorer 11. È anche possibile consultare la documentazione di Salesforce
sulla configurazione Internet Explorer. A questo punto, gli utenti saranno compromessi dall'autenticazione, ma le
credenziali archiviate continueranno a funzionare fino alla scadenza dei token di autenticazione esistenti. Per risolvere il
problema, passare a Abilitazione Microsoft Edge (Chromium) per l'autenticazione OAuth in Power BI Desktop.

Prerequisiti
Per usare il connettore Salesforce Reports, è necessario avere un nome utente e una password dell'account
Salesforce.
Inoltre, l'accesso all'API Salesforce deve essere abilitato. Per verificare le impostazioni di accesso, passare alla
pagina personale di Salesforce, aprire le impostazioni del profilo e cercare e verificare che la casella di controllo
API Enabled (API abilitata) sia selezionata. Si noti che gli account di valutazione di Salesforce non hanno
accesso all'API.

Funzionalità supportate
Produzione
Personalizzato
Domini personalizzati
Reindirizzamenti dei record CNAME
Connessione ai report salesforce da Power Query Desktop
Per connettersi ai dati di Salesforce Reports:
1. Selezionare Salesforce Repor ts nell'elenco dei connettori dati specifici del prodotto e quindi
selezionare Connessione .
2. In Salesforce Repor ts (Repor t Salesforce) scegliere l'URL di produzione se si usa l'URL di
produzione di Salesforce ( https://www.salesforce.com ) per accedere.

È anche possibile selezionare Personalizzato e immettere un URL personalizzato per accedere. Questo
URL personalizzato potrebbe essere un dominio personalizzato creato in Salesforce, ad esempio
https://contoso.salesforce.com . È anche possibile usare la selezione dell'URL personalizzato se si usa il
proprio record CNAME che reindirizza a Salesforce.
Dopo aver selezionato l'URL, selezionare OK per continuare.
3. Selezionare Accedi per accedere all'account Salesforce.

Dopo aver eseguito l'accesso, selezionare Connessione .


4. Se è la prima volta che si è eseguito l'accesso usando un'app specifica, verrà chiesto di verificare
l'autenticità immettendo un codice inviato all'indirizzo di posta elettronica. Verrà quindi chiesto se si
vuole che l'app in uso accedono ai dati. Ad esempio, verrà chiesto se si vuole consentire Power BI Desktop
ai dati di Salesforce. selezionare Consenti .
5. Nella finestra di dialogo Strumento di navigazione selezionare i report di Salesforce da caricare. È quindi
possibile selezionare Carica per caricare i dati oppure Selezionare Trasforma dati per trasformare i
dati.

Connessione ai report salesforce da Power Query Online


Per connettersi ai dati di Salesforce Reports:
1. Selezionare Repor t di Salesforce nell'elenco dei connettori dati specifici del prodotto e quindi
selezionare Connessione .
2. Nei repor t di Salesforce scegliere l'URL da usare per la connessione. Selezionare l'URL di produzione
se si usa l'URL di produzione di Salesforce ( https://www.salesforce.com ) per accedere.

NOTE
Attualmente potrebbe essere necessario selezionare l'URL personalizzato, immettere nella casella di testo e quindi
https://www.salesforce.com selezionare Produzione per connettersi ai dati.

È anche possibile selezionare Personalizzato e immettere un URL personalizzato per accedere. Questo
URL personalizzato potrebbe essere un dominio personalizzato creato in Salesforce, ad esempio
https://contoso.salesforce.com . È anche possibile usare la selezione dell'URL personalizzato se si usa il
proprio record CNAME che reindirizza a Salesforce.
È anche possibile selezionare Includi colonne relazione. Questa selezione modifica la query includendo
colonne che potrebbero avere relazioni di chiave esterna con altre tabelle. Se questa casella è
deselezionata, tali colonne non saranno visualizzate.
3. Se è la prima volta che si crea questa connessione, selezionare un gateway dati locale, se necessario.
4. Selezionare Accedi per accedere all'account Salesforce. Dopo aver eseguito l'accesso, selezionare
Avanti.
5. Nella finestra di dialogo Strumento di navigazione selezionare i report di Salesforce da caricare.
Selezionare quindi Trasforma dati per trasformare i dati.

Limitazioni e problemi noti


È previsto un limite al numero di campi che una query a Salesforce può contenere. Il limite varia a
seconda del tipo di colonne, del numero di colonne calcolate e così via. Quando viene visualizzato un
Query is either selecting too many fields or the filter conditions are too complicated errore, significa
che la query supera il limite. Per evitare questo errore, usare l'opzione avanzata Seleziona quer y e
specificare i campi effettivamente necessari.
Le impostazioni di sessione di Salesforce possono bloccare questa integrazione. Assicurarsi che
l'impostazione Blocca sessioni sull'indirizzo IP da cui hanno avuto origine sia disabilitata.
Il numero di righe a cui è possibile accedere nei report di Salesforce è limitato da Salesforce a 2000 righe.
Come soluzione alternativa per questo problema, è possibile usare il connettore Salesforce Objects in
Power BI Desktop per recuperare tutte le righe dalle singole tabelle e ricreare i report che si desidera. Il
connettore di oggetti non ha il limite di 2000 righe.
L'accesso all'API Salesforce deve essere abilitato. Per verificare le impostazioni di accesso, passare alle
impostazioni del profilo per l'utente corrente e cercare la casella di controllo "API abilitata".
Gli account di valutazione di Salesforce non hanno accesso all'API.
Gli URL Lightning non sono supportati.
Per altre informazioni sui limiti delle API interne di Salesforce, vedere Guida di riferimento rapido a Limiti e
allocazioni per gli sviluppatori di Salesforce.
Server applicazioni SAP Business Warehouse
07/12/2021 • 5 minutes to read

NOTE
Il connettore SAP Business Warehouse (BW) Application Server è ora certificato per SAP BW/4HANA a partire da giugno
2020.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Analysis Services

Tipi di autenticazione supportati Windows (desktop)


Database (desktop)
Basic (online)

Documentazione di riferimento per le funzioni SapBusinessWarehouse.Cubes


sapbusinesswarehouseexecutionmode.datastream
SapBusinessWarehouseExecutionMode.BasXml
SapBusinessWarehouseExecutionMode.BasXmlGzip

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
È necessario un account SAP per accedere al sito Web e scaricare i driver. In caso di dubbi, contattare
l'amministratore SAP dell'organizzazione.
È possibile usare la versione 1.0 del connettore del server applicazioni SAP Business Warehouse (BW) o il
connettore SAP Implementation 2.0 in Power Query Desktop. Le sezioni seguenti illustrano l'installazione delle
diverse versioni. È possibile scegliere uno o l'altro connettore quando ci si connette a SAP BW server
applicazioni da Power BI Desktop.
Sono supportati BW 7.3, BW 7.5 e BW/4HANA 2.0.
NOTE
È consigliabile usare il connettore SAP Implementation 2.0 quando possibile perché offre miglioramenti significativi di
prestazioni, funzionalità e affidabilità rispetto alla versione 1.0.

NOTE
Power Query Online usa la versione 2.0 SAP BW del server applicazioni per impostazione predefinita. Tuttavia, la versione
1.0 del connettore SAP BW application server funziona a livello di motore M se è effettivamente necessario usarlo.

Prerequisiti per la versione 1.0


Per usare la versione 1.0 del connettore SAP BW Application Server, è necessario installare la libreria SAP
NetWeaver nel computer locale. È possibile ottenere la libreria SAP NetWeaver dall'amministratore SAP o
direttamente da SAP Software Download Center (area di download del software SAP). Dato che SAP Software
Download Center cambia struttura di frequente, non sono disponibili indicazioni più specifiche per la
navigazione nel sito. Di solito la libreria SAP NetWeaver è inclusa anche nell'installazione degli strumenti client
SAP.
È possibile cercare la nota SAP 1025361 per ottenere il percorso di download per la versione più recente.
Assicurarsi che l'architettura per la libreria SAP NetWeaver (a 32 bit o a 64 bit) corrisponda all'installazione di
Power BI Desktop. Installare tutti i file inclusi in SAP NetWeaver RFC SDK in base alla nota SAP.
Prerequisiti per la versione 2.0
Per usare la versione 2.0 SAP BW application server connector in Power BI Desktop o Power Query Online, è
necessario installare SAP .NET Connector 3.0. Per l'accesso al download è necessario avere un ID utente SAP
valido. Per ottenere SAP .NET Connector 3.0 contattare il team SAP Basis. È possibile scaricare SAP .NET
Connector 3.0 da SAP. Il connettore è disponibile nelle versioni a 32 bit e a 64 bit. Scegliere la versione che
corrisponde all'installazione di Power BI Desktop in uso. Per Power Query Online, scegliere la versione a 64 bit.
Attualmente il sito Web include due versioni per .NET 4.0 Framework:
Connettore SAP per Microsoft .NET 3.0.23.0 per Windows 32 bit (x86) come file ZIP (6.928 KB), 28 maggio
2020
Connettore SAP per Microsoft .NET 3.0.23.0 per Windows a 64 bit (x64) come file ZIP (7.225 KB), 28 maggio
2020
Quando si esegue l'installazione, in Passaggi di installazione facoltativi assicurarsi di selezionare Installa
assembly in GAC.
NOTE
Se si vuole usare la versione 1 del connettore SAP BW Application Server, è necessario usare la libreria SAP NetWeaver. Per
altre informazioni sull'installazione della versione 1, vedere Prerequisiti per la versione 1.0. È consigliabile usare il
connettore Implementation 2.0 SAP BW Application Server, quando possibile.

Funzionalità supportate
Importa
DirectQuery
Implementazione
2.0 (richiede SAP .NET Connector 3.0)
1.0 (richiede NETWeaver RFC)
Avanzato
Codice lingua
Modalità di esecuzione
Dimensioni dei batch
Istruzione MDX
Abilita le strutture per le caratteristiche

Connessione a un server SAP BW applicazioni da Power Query


Desktop
Per connettersi a un server SAP BW applicazioni:
1. Nella scheda Home della Power BI Desktop selezionare Ottieni dati > SAP Business Warehouse
ser ver applicazioni .
2. Immettere il nome del server, il numero di sistema e l'ID client SAP BW server applicazioni a cui
connettersi. In questo esempio viene SAPBWTestServer utilizzato come nome del server, un numero di
sistema di e un ID client di 00 837 .
Il resto di questo esempio descrive come importare i dati in Power Query Desktop, che è l'impostazione
predefinita per la modalità di connettività dati . Se si vuole usare DirectQuery per caricare i dati,
vedere Connessione to SAP Business Warehouse by using DirectQuery in Power BI.
Questo esempio usa anche l'implementazione predefinita di 2.0 (richiede SAP .NET Connector
3.0). Se si vuole usare la versione 1 del connettore SAP BW Application Server, selezionare 1.0 (richiede
NetWeaver RFC).
Se si vuole usare una delle opzioni avanzate per questo connettore per ottimizzare la query, passare a
Usare le opzioni avanzate.
Dopo aver compilato le informazioni pertinenti, selezionare OK.

3. Quando si accede al database per la prima volta, il server SAP BW applicazioni richiede le credenziali
utente del database. Power Query Desktop offre due modalità di autenticazione per le connessioni SAP
BW autenticazione nome utente/password (database) e autenticazione Windows — (Single Sign-On).
L'autenticazione SAML non è attualmente supportata. Selezionare Windows o Database . Se si seleziona
Autenticazione database, immettere il nome utente e la password. Se si seleziona Windows
autenticazione singola, passare a Windows e Single Sign-On per altre informazioni sui requisiti per l
Windows autenticazione.

Selezionare Connetti .
Per altre informazioni sull'autenticazione, vedere Autenticazione con un'origine dati.
4. Nella finestra di dialogo Strumento di navigazione selezionare gli elementi da usare. Quando si
selezionano uno o più elementi dal server, la finestra di dialogo Strumento di navigazione crea
un'anteprima della tabella di output. Per altre informazioni sull'esplorazione SAP BW oggetti query del
server applicazioni in Power Query, vedere Esplorare gli oggetti query.

5. Nella finestra di dialogo Strumento di navigazione è possibile trasformare i dati nel editor di Power
Query selezionando Trasforma dati oppure caricare i dati selezionando Carica .

Connessione a un SAP BW application server da Power Query Online


Per connettersi a un SAP BW application server da Power Query Online:
1. Nella pagina Origini dati selezionare SAP BW ser ver applicazioni .
2. Immettere il nome del server, il numero di sistema e l'ID client SAP BW server applicazioni a cui
connettersi. In questo esempio SAPBWTestServer viene utilizzato come nome del server, un numero di
sistema di e un ID client di 00 837 .
3. Selezionare il gateway dati locale da usare per connettersi ai dati.
4. Impostare Authentication Kind (Tipo di autenticazione) su Basic . Immettere il nome utente e la
password.
5. È anche possibile scegliere da un set di opzioni avanzate per ottimizzare la query.
6. Selezionare Avanti per connettersi.
7. Nella finestra di dialogo Strumento di navigazione selezionare gli elementi da usare. Quando si
selezionano uno o più elementi dal server, la finestra di dialogo Strumento di navigazione crea
un'anteprima della tabella di output. Per altre informazioni sull'esplorazione SAP BW oggetti query del
server applicazioni in Power Query, vedere Esplorare gli oggetti query.
8. Nella finestra di dialogo Strumento di navigazione è possibile trasformare i dati nel editor di Power
Query selezionando Trasforma dati .

Vedi anche
Esplorare gli oggetti query
SAP Business Warehouse fondamentali
Usare le opzioni avanzate
SAP Business Warehouse risoluzione dei problemi del connettore
Server messaggi SAP Business Warehouse
07/12/2021 • 6 minutes to read

NOTE
A SAP Business Warehouse giugno 2020 il connettore del server messaggi di SAP BW (BW) è certificato per SAP
BW/4HANA.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)

Tipi di autenticazione supportati Windows (desktop)


Database (desktop)
Basic (online)

Documentazione di riferimento delle funzioni SapBusinessWarehouse.Cubes


sapbusinesswarehouseexecutionmode.datastream
SapBusinessWarehouseExecutionMode.BasXml
SapBusinessWarehouseExecutionMode.BasXmlGzip

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
È necessario un account SAP per accedere al sito Web e scaricare i driver. In caso di dubbi, contattare
l'amministratore SAP dell'organizzazione.
È possibile usare la versione 1.0 del connettore del server messaggi di SAP Business Warehouse (BW) o il
connettore SAP Implementation 2.0 in Power Query Desktop. Le sezioni seguenti illustrano l'installazione delle
diverse versioni. È possibile scegliere uno o l'altro connettore quando ci si connette a un SAP BW message
server da Power BI Desktop. È consigliabile usare il connettore SAP implementation 2.0 quando possibile.

NOTE
È consigliabile usare il connettore SAP implementation 2.0 quando possibile perché offre miglioramenti significativi di
prestazioni, funzionalità e affidabilità rispetto alla versione 1.0.
NOTE
Power Query Online usa la versione 2.0 SAP BW connettore del server messaggi per impostazione predefinita. Tuttavia, la
versione 1.0 del connettore SAP BW Message Server funziona a livello di motore M se è effettivamente necessario usarlo.

Prerequisiti per la versione 1.0


Per usare la versione 1.0 del connettore SAP BW Message Server, è necessario installare la libreria SAP
NetWeaver nel computer locale. È possibile ottenere la libreria SAP NetWeaver dall'amministratore SAP o
direttamente da SAP Software Download Center (area di download del software SAP). Dato che SAP Software
Download Center cambia struttura di frequente, non sono disponibili indicazioni più specifiche per la
navigazione nel sito. Di solito la libreria SAP NetWeaver è inclusa anche nell'installazione degli strumenti client
SAP.
È possibile cercare la nota SAP 1025361 per ottenere il percorso di download per la versione più recente.
Assicurarsi che l'architettura per la libreria SAP NetWeaver (a 32 bit o a 64 bit) corrisponda all'installazione di
Power BI Desktop. Installare tutti i file inclusi in SAP NetWeaver RFC SDK in base alla nota SAP.
Prerequisiti per la versione 2.0
Per usare il connettore SAP BW Message Server versione 2.0 in Power BI Desktop o Power Query Online, è
necessario installare SAP .NET Connector 3.0. Per l'accesso al download è necessario avere un ID utente SAP
valido. Per ottenere SAP .NET Connector 3.0 contattare il team SAP Basis. È possibile scaricare SAP .NET
Connector 3.0 da SAP. Il connettore è disponibile nelle versioni a 32 bit e a 64 bit. Scegliere la versione che
corrisponde all'installazione di Power BI Desktop in uso. Per Power Query Online, scegliere la versione a 64 bit.
Attualmente il sito Web include due versioni per .NET 4.0 Framework:
SAP Connector per Microsoft .NET 3.0.23.0 per Windows Windows 32 bit (x86) come file ZIP (6.928 KB), 28
maggio 2020
SAP Connector per Microsoft .NET 3.0.23.0 per Windows Windows 64 bit (x64) come file ZIP (7.225 KB), 28
maggio 2020
Al momento dell'installazione, in Optional setup steps (Procedura di installazione facoltativa) assicurarsi di
selezionare Install assemblies to GAC (Installa gli assembly in GAC).
NOTE
Se si vuole usare la versione 1.0 del connettore SAP BW Message Server, è necessario usare la libreria SAP NetWeaver. Per
altre informazioni sull'installazione della versione 1.0, vedere Prerequisiti per la versione 1.0. È consigliabile usare
l'implementazione 2.0 SAP BW connettore del server messaggi quando possibile.

Funzionalità supportate
Importa
DirectQuery
Implementazione
2.0 (richiede SAP .NET Connector 3.0)
1.0 (richiede NetWeaver RFC)
Avanzato
Codice lingua
Modalità di esecuzione
Dimensioni dei batch
Istruzione MDX
Abilita le strutture per le caratteristiche

Connessione a un SAP BW Message Server da Power Query Desktop


Per connettersi a un SAP BW message server:
1. Nella scheda Home della Power BI Desktop selezionare Ottieni dati > SAP Business Warehouse
Ser ver messaggi.
2. Immettere il server, il numero di sistema, l'ID client e il gruppo di accesso SAP BW Message Server a cui
connettersi. In questo esempio viene utilizzato come nome del server, un numero di sistema
SAPBWTestServer di , un ID client di e un gruppo di accesso di 100 837 PURCHASING .

Nella parte restante di questo esempio viene descritto come importare i dati in Power Query Desktop,
che è l'impostazione predefinita per la modalità connettività dati. Se si vuole usare DirectQuery per
caricare i dati, vedere Connessione to SAP Business Warehouse by using DirectQuery in Power BI.
Questo esempio usa anche l'implementazione predefinita di 2.0 (richiede SAP .NET Connector 3.0).
Se si vuole usare la versione 1 del connettore SAP BW Message Server, selezionare 1.0 (richiede
NetWeaver RFC).
Se si vuole usare una delle opzioni avanzate per questo connettore per ottimizzare la query, vedere Usare
le opzioni avanzate.
Dopo aver completato la compilazione delle informazioni pertinenti, selezionare OK.
3. Quando si accede al database per la prima volta, il server di messaggi SAP BW server messaggi richiede
le credenziali utente del database. Power Query Desktop offre due modalità di autenticazione per le
connessioni SAP BW l'autenticazione con nome utente/password (database) e l'autenticazione Windows
— (Single Sign-On). L'autenticazione SAML non è attualmente supportata. Selezionare Windows o
Database . Se si seleziona Autenticazione database, immettere il nome utente e la password. Se si
seleziona autenticazione Windows, passare a Autenticazione Windows e Single Sign-On per altre
informazioni sui requisiti per l'Windows autenticazione.

Selezionare Connetti .
Per altre informazioni sull'autenticazione, vedere Autenticazione con un'origine dati.
4. Nella finestra di dialogo Strumento di navigazione selezionare gli elementi da usare. Quando si
selezionano uno o più elementi dal server, la finestra di dialogo Strumento di navigazione crea
un'anteprima della tabella di output. Per altre informazioni sull'esplorazione SAP BW oggetti query del
server messaggi in Power Query, vedere Esplorare gli oggetti query.
5. Nella finestra di dialogo Strumento di navigazione è possibile trasformare i dati nel editor di Power
Query selezionando Trasforma dati oppure caricare i dati selezionando Carica.

Connessione a un server messaggi SAP BW da Power Query Online


Per connettersi a un SAP BW message server da Power Query Online:
1. Nella pagina Origini dati selezionare SAP BW Ser ver messaggi.
2. Immettere il server, il numero di sistema, l'ID client e il gruppo di logo del server SAP BW a cui
connettersi. In questo esempio viene utilizzato come nome del server, un numero di sistema
SAPBWTestServer di , un ID client di e un gruppo di accesso di 100 837 PURCHASING .

3. Selezionare il gateway dati locale da usare per connettersi ai dati.


4. Impostare Authentication Kind (Tipo di autenticazione) su Basic . Immettere il nome utente e la
password.
5. È anche possibile scegliere da un set di opzioni avanzate per ottimizzare la query.
6. Selezionare Avanti per connettersi.
7. Nella finestra di dialogo Strumento di navigazione selezionare gli elementi da usare. Quando si
selezionano uno o più elementi dal server, la finestra di dialogo Strumento di navigazione crea
un'anteprima della tabella di output. Per altre informazioni sull'esplorazione SAP BW oggetti query del
server messaggi in Power Query, vedere Esplorare gli oggetti query.
8. Nella finestra di dialogo Strumento di navigazione è possibile trasformare i dati nel editor di Power
Query selezionando Trasforma dati .

Vedi anche
Esplorare gli oggetti query
SAP Business Warehouse fondamentali
Usare le opzioni avanzate
SAP Business Warehouse risoluzione dei problemi del connettore
Nozioni fondamentali su SAP BW
07/12/2021 • 6 minutes to read

Questo articolo descrive la terminologia di base usata per descrivere le interazioni tra il server SAP BW e Power
Query. Include anche informazioni sugli strumenti che possono risultare utili quando si usa Power Query SAP
BW connettore.

Architettura di integrazione
Dal punto di vista tecnico, l'integrazione tra applicazioni e SAP BW si basa sulle cosiddette interfacce BAPI
(Business Application Programming Interface) OLAP (Online Analytical Processing).
I BAPI OLAP vengono forniti con SAP BW e forniscono a terze parti e sviluppatori interfacce standardizzate che
consentono di accedere ai dati e ai metadati di SAP BW con i propri strumenti front-end.
Le applicazioni di tutti i tipi possono essere connesse a un server SAP BW usando questi metodi.
I BAFI OLAP vengono implementati in SAP BW moduli di funzione abilitati per RFC e vengono richiamati dalle
applicazioni tramite il protocollo RFC di SAP. A questo scopo, è necessario installare la libreria RFC NetWeaver o
SAP .NET Connector nel computer dell'applicazione.
I BAFI OLAP forniscono metodi per l'esplorazione dei metadati e dei dati master e anche per il passaggio di
istruzioni MDX per l'esecuzione al processore MDX.
Il processore OLAP è responsabile del recupero, dell'elaborazione e della formattazione dei dati dagli oggetti di
origine SAP BW, descritti più avanti in Origine dati di SAP BW e Oggetti dati in SAP BW.

SAP Business Explorer e altri strumenti SAP usano un'interfaccia più diretta per il processore OLAP di SAP BW
denominato Business Intelligence Consumer Services, comunemente noto come BICS. BiCS non è disponibile
per strumenti di terze parti.

SAP BW origini dati


I BAPI OLAP forniscono alle applicazioni di terze parti l'accesso SAP BW infoprovider e alle query BEx.
In genere, quando uno strumento di terze parti come Power Query si connette usando i BAFI OLAP, SAP BW
risponde prima con un elenco di cataloghi disponibili nel sistema SAP BW.
È presente un catalogo con il nome tecnico $INFOCUBE che contiene tutti gli InfoProvider nel SAP BW sistema.
Questo catalogo viene visualizzato come nodo nello strumento di navigazione di Power Query. Espandendo
questo nodo nello strumento di navigazione, è possibile selezionare tra gli InfoProvider disponibili nel SAP BW
sistema.
Gli altri cataloghi rappresentano Gli InfoProvider per cui esiste almeno una query. Espandendo uno di questi
nodi nello strumento di navigazione, è possibile selezionare una delle query disponibili associate
all'InfoProvider.
Le query BEx offrono alcuni vantaggi e funzionalità aggiuntive per creare origini dati personalizzate per
soddisfare i requisiti dell'utente finale. Ad esempio, è possibile parametrizzare le query con variabili che
possono limitare il set di dati a ciò che è importante per l'utente finale. In caso contrario, è possibile ricalcolare le
cifre chiave usando le formule.
Anche se le query BEx presentano vantaggi come origini dati (vedere Considerazioni sulle prestazioni),non è
necessaria una query per ogni report. Sarà necessario valutare i costi di sviluppo e gestione di query aggiuntive
in base ai requisiti di creazione di report.

Oggetti dati in SAP BW


SAP BW include strumenti predefiniti per la creazione di modelli di dati basati su oggetti dati diversi. È utile
avere una conoscenza rudimentale del modo in cui i dati vengono rappresentati in SAP BW e nella terminologia.
Gli oggetti dati principali in SAP BW sono brevemente introdotti qui:
InfoProvider è il termine generico per un oggetto di Business Intelligence (BI) in cui vengono caricati i
dati o che fornisce visualizzazioni dei dati. Gli InfoProvider possono essere sottoposti a query con
strumenti client, ad esempio Business Explorer (o BEx) e anche con Power Query.
Gli InfoProvider possono essere visti come provider di dati uniformi dal punto di vista di una definizione
di query. I dati possono quindi essere analizzati in modo uniforme.
InfoCube è un tipo di InfoProvider. InfoCube descrive, dal punto di vista dell'analisi, un set di dati
autonomo per un'area orientata all'azienda, ad esempio l'acquisto. È possibile analizzare un InfoCube
direttamente come InfoProvider con strumenti di analisi e creazione di report, tra cui Power BI o Power
Platform app.
Un InfoCube è costituito da un set di tabelle relazionali disposte in base a uno schema star avanzato. Ciò
significa che è presente una tabella dei fatti (di grandi dimensioni) che contiene le cifre chiave per
InfoCube e anche diverse tabelle delle dimensioni (più piccole) che la circondano.
La figura chiave è un attributo operativo che indica una misura numerica, ad esempio quantità, peso,
quantità e così via.
La dimensione è un raggruppamento di caratteristiche correlate in un singolo termine generico. Ad
esempio, la dimensione Customer può essere costituito da Customer Number, Customer Group e i livelli
della gerarchia dei clienti.
Una dimensione Sales può contenere le caratteristiche Sales Person, Sales Group e Sales Office.
Una dimensione Temporale può avere le caratteristiche Giorno (nel formato AAAAMMMMDD), Settimana
(nel formato AAAAA). WW), Month (nel formato AAAA. MM), Year (nel formato AAAA) e Fiscal Period (nel
formato AAAA. PPP).
Le caratteristiche fanno riferimento ai dati master con i relativi attributi e descrizioni di testo e, in
alcuni casi, gerarchie . Le caratteristiche di un InfoCube vengono archiviate in dimensioni.
Ad esempio, la dimensione Customer può avere le caratteristiche Sold-to-party, Ship-to-party e Payer.
La caratteristica Sold-to-party può avere gli attributi Country, Region, City, Street e Industry. La
descrizione testuale della caratteristica sarà il nome dell'oggetto Venduto a parte.
Nei termini di query MDX, gli attributi delle caratteristiche sono definiti anche proprietà .
InfoObjects è il termine generico per tutte le caratteristiche e le cifre chiave. Tutti gli InfoObject vengono
gestiti indipendentemente da InfoCube in SAP BW. Gli InfoObject sono le unità più piccole di Business
Intelligence (BI). Usando Gli InfoObject, le informazioni possono essere archiviate e mappate in un
modulo strutturato. Questa operazione è necessaria per la creazione di InfoProvider. Gli InfoObject con
attributi o testi possono essere InfoProvider.
DataStore Object (DSO) funge da posizione di archiviazione per i dati consolidati e puliti delle
transazioni o i dati master a livello di documento (atomico). A differenza dei dati multidimensionali in
InfoCubes, i dati negli oggetti DataStore vengono archiviati in tabelle di database flat trasparenti. Il
sistema non crea tabelle dei fatti o tabelle delle dimensioni separate per gli oggetti DSO. I dati in DSO
possono essere valutati usando una query BEx.
MultiProvider sono un tipo speciale di InfoProvider che combinano i dati di diversi InfoProvider. Sono
quindi disponibili per la creazione di report. I provider multiprovider non contengono dati, ma
provengono esclusivamente dagli InfoProvider su cui si basano. I provider multiprovider possono essere
basati su qualsiasi combinazione di InfoProvider, inclusi InfoCube, oggetti Archivio dati, InfoObject o
InfoSet.
Gli InfoSet sono un tipo speciale di InfoProvider che non archivia fisicamente i dati. Gli InfoSet
descrivono i dati basati sul join delle tabelle di altri InfoProvider, ad esempio oggetti Archivio dati,
InfoCube standard o InfoObject con caratteristiche dei dati master. Gli InfoSet possono essere utili
quando è necessario compilare un report che si estende su due o più destinazioni dati diverse in SAP BW.
I provider compositi sono un nuovo oggetto dati nei sistemi SAP BW che vengono eseguiti in HANA, SAP BW
7.5 o BW4/HANA. Un provider composito è basato su un'operazione JOIN o UNION di altri Provider di
informazioni o indici analitici. I dati nei provider compositi possono essere valutati usando una query BEx.
Vedi anche
Esplorare gli oggetti query
Esplorare gli oggetti query
07/12/2021 • 6 minutes to read

Dopo la connessione all'istanza SAP BW, nella finestra di dialogo Strumento di navigazione verrà visualizzato
un elenco di cataloghi disponibili nel server selezionato.
Verrà visualizzata una cartella del catalogo con il nome $INFOCUBE. Questa cartella contiene tutti gli
InfoProvider nel SAP BW sistema.
Le altre cartelle del catalogo rappresentano InfoProvider in SAP BW per cui esiste almeno una query.

La finestra di dialogo Strumento di navigazione visualizza un albero gerarchico di oggetti dati dal sistema SAP
BW connesso. Nella tabella seguente vengono descritti i tipi di oggetti .

SIM B O LO DESC RIZ IO N E

Server SAP BW

Catalogare — $INFOCUBE o un InfoProvider


SIM B O LO DESC RIZ IO N E

InfoCube o una query BEx

Cifra chiave

Caratteristica

Livello di caratteristica

Proprietà (attributo)

Gerarchia
NOTE
Lo strumento di navigazione mostra le query InfoCubes e BEx. Per le query BEx, potrebbe essere necessario passare a
Business Explorer, aprire la query desiderata e selezionare Consenti accesso esterno a questa query: Per OLE DB per
OL AP perché la query sia disponibile nello strumento di navigazione.

NOTE
In Power BI Desktop, gli oggetti sotto un nodo InfoCube o BEx Query, ad esempio le figure chiave, le caratteristiche e le
proprietà, vengono visualizzati solo in modalità di connettività Di importazione, non in modalità DirectQuery. In modalità
DirectQuery, tutti gli oggetti disponibili vengono mappati a un modello Power BI e saranno disponibili per l'uso in
qualsiasi oggetto visivo.

Nello strumento di spostamento è possibile selezionare tra diverse opzioni di visualizzazione per visualizzare gli
oggetti query disponibili in SAP BW:
Solo elementi selezionati: questa opzione limita gli oggetti visualizzati nell'elenco solo agli elementi
selezionati. Per impostazione predefinita, vengono visualizzati tutti gli oggetti query. Questa opzione è
utile per esaminare gli oggetti inclusi nella query. Un altro approccio alla visualizzazione degli elementi
selezionati consiste nel selezionare i nomi delle colonne nell'area di anteprima.
Abilita anteprime dati: questo valore è il valore predefinito. Questa opzione consente di controllare se
un'anteprima dei dati deve essere visualizzata a destra nella finestra di dialogo Strumento di navigazione.
La disabilitazione delle anteprime dei dati riduce la quantità di interazione del server e il tempo di
risposta. In Power BI Desktop, l'anteprima dei dati è disponibile solo in modalità di connettività
importazione.
Nomi tecnici: SAP BW la nozione di nomi tecnici per gli oggetti query, anziché i nomi descrittivi
visualizzati per impostazione predefinita. I nomi tecnici identificano in modo univoco un oggetto
all'interno SAP BW. Con l'opzione selezionata, i nomi tecnici verranno visualizzati accanto al nome
descrittivo dell'oggetto.

Gerarchie di caratteristiche
Una caratteristica avrà sempre almeno un livello di caratteristica (livello 01), anche quando non è definita alcuna
gerarchia per la caratteristica. L'oggetto Livello di caratteristica 01 contiene tutti i membri per la
caratteristica come elenco semplice di valori.
Le caratteristiche SAP BW possono avere più gerarchie definite. Per queste caratteristiche, è possibile selezionare
solo una gerarchia o l'oggetto Livello 01.
Per le caratteristiche con gerarchie, le proprietà selezionate per tale caratteristica verranno incluse per ogni
livello selezionato della gerarchia.

Proprietà della misura


Quando si seleziona una misura, è possibile selezionare le unità,la valuta, il valore formattato e la stringa di
formato. Nello screenshot seguente è utile ottenere il valore formattato per COGS. In questo modo è possibile
seguire lo stesso standard di formattazione in tutti i report.

NOTE
Le proprietà della misura non sono disponibili in Power BI Desktop in modalità DirectQuery.
Appiattimento dei dati multidimensionali
In base agli oggetti e alle proprietà selezionati nello strumento di navigazione, Power Query un'istruzione MDX
inviata per l'esecuzione SAP BW. L'istruzione MDX restituisce un set di dati flat che può essere ulteriormente
modificato usando il editor di Power Query.
Power Query usa un'interfaccia più recente disponibile in SAP BW versione 7.01 o successiva. L'interfaccia
riduce il consumo di memoria e il set di risultati non è limitato dal numero di celle.
Il set di dati flat viene aggregato in SAP BW livello delle caratteristiche e delle proprietà selezionate.
Anche con questi miglioramenti, il set di dati risultante può diventare molto grande e richiedere molto tempo
per l'elaborazione.
Raccomandazione sulle prestazioni
Includere solo le caratteristiche e le proprietà necessarie. Puntare a livelli di aggregazione più elevati, ad
esempio sono necessari dettagli a livello di materiale nel report o sono sufficienti a livello di MaterialGroup?
Quali livelli di gerarchia sono necessari in Power BI? Provare a creare set di dati più piccoli, con livelli di
aggregazione più elevati o più set di dati più piccoli, che possono essere uniti in un secondo momento.

Parametri di query
Nelle query SAP BW possono essere definiti filtri dinamici che consentono di limitare il set di dati restituito dalla
query. In Progettazione query BEx questo tipo di filtro dinamico può essere definito con la cosiddetta restrizione
caratteristica e assegnando una variabile a tale restrizione. Le variabili in una query possono essere obbligatorie
o facoltative e sono disponibili per l'utente nello strumento di navigazione.
Quando si seleziona una query SAP BW con restrizioni delle caratteristiche nello strumento di spostamento
Power Query, le variabili vengono visualizzate come parametri sopra l'area di anteprima dei dati.
Usando il selettore Mostra è possibile visualizzare tutti i parametri definiti nella query o solo quelli necessari.
La query illustrata nell'immagine precedente ha diversi parametri facoltativi, tra cui uno per Material Group . È
possibile selezionare uno o più gruppi di materiali per restituire solo le informazioni di acquisto per i valori
selezionati, ad esempio maiuscole e minuscole, schede madre e processori. È anche possibile digitare i valori
direttamente nel campo dei valori. Per le variabili con più voci, sono previsti valori delimitati da virgole, in
questo esempio sarà simile a [0D_MTLGROUP].[201], [0D_MTLGROUP].[202], [0D_MTLGROUP].[208] .
Il valore # indica non assegnato; nell'esempio qualsiasi record di dati senza un valore del gruppo di materiali
assegnato.
Raccomandazione sulle prestazioni
I filtri basati sui valori dei parametri vengono elaborati nell'origine SAP BW dati, non in Power BI. Questo tipo di
elaborazione può avere vantaggi in termini di prestazioni per set di dati più grandi durante il caricamento o
l'aggiornamento SAP BW dati in Power BI. Il tempo necessario per caricare i dati da SAP BW in Power BI
aumenta con le dimensioni del set di dati, ad esempio il numero di colonne e righe nel set di risultati appiattito.
Per ridurre il numero di colonne, selezionare solo le figure chiave, le caratteristiche e le proprietà nello
strumento di navigazione che si vuole visualizzare.
Analogamente, per ridurre il numero di righe, usare i parametri disponibili nella query per restringere il set di
dati o suddividere un set di dati più grande in più set di dati più piccoli che possono essere uniti nel modello di
dati Power BI Desktop.
In molti casi, può anche essere possibile collaborare con l'autore della query BEx in SAP BW per clonare e
modificare una query esistente e ottimizzarla per le prestazioni aggiungendo ulteriori restrizioni delle
caratteristiche o rimuovendo le caratteristiche non necessarie.

Caricamento di dati SAP in Power Query


Dopo aver selezionato il set di dati SAP desiderato nello strumento di navigazione, è possibile importare i dati in
editor di Power Query. Selezionare Trasforma dati per avviare la editor di Power Query, in cui è possibile
eseguire passaggi aggiuntivi di trasformazione e filtro dei dati.
Nell'esempio precedente è stato usato un parametro per riportare i record solo con un gruppo di materiali di
maiuscole e minuscole, schede madre e processori.
In Power Query Desktop è anche possibile selezionare Carica per portare l'intero set di dati SAP BW in Power BI
Desktop. Power BI Desktop verrà avviata la visualizzazione Repor t in cui è possibile iniziare a visualizzare i dati
o apportare altre modifiche usando le visualizzazioni Dati o Relazioni.
Vedi anche
Trasformare e filtrare un set di dati SAP BW
Trasformare e filtrare un set di dati SAP BW
07/12/2021 • 2 minutes to read

Con editor di Power Query, è possibile applicare altre trasformazioni dati e passaggi di filtro prima di portare il
set di dati da SAP BW nel modello di dati Power BI Desktop o Microsoft Power Platform dati.
In editor di Power Query i passaggi applicati per la query vengono visualizzati nel riquadro Impostazioni query
a destra. Per modificare o rivedere un passaggio, selezionare l'icona a forma di ingranaggio accanto a un
passaggio.
Ad esempio, se si seleziona l'icona a forma di ingranaggio accanto a Elementi aggiunti , è possibile esaminare gli
oggetti dati selezionati in SAP BW o modificare i parametri di query specificati. In questo modo è possibile
filtrare un set di dati usando una caratteristica non inclusa nel set di risultati.

È possibile applicare filtri aggiuntivi al set di dati selezionando il menu a discesa per una delle colonne.
Un altro modo semplice per impostare un filtro è fare clic con il pulsante destro del mouse su uno dei valori
nella tabella, quindi scegliere Filtri membri o Filtri testo.

Ad esempio, è possibile filtrare il set di dati in modo da includere solo i record relativi a Calendar Year/Month
FEB 2003 oppure applicare un filtro di testo per includere solo i record in cui Calendar Year/Month contiene
2003.
Non tutti i filtri verranno suddivisi nella query in base SAP BW. È possibile determinare se un filtro viene inserito
nella query esaminando l'icona nell'angolo superiore sinistro della tabella dati, direttamente sopra il numero 1
del primo record di dati.
Se l'icona è un cubo, il filtro viene applicato nella query al SAP BW sistema.
Se l'icona è una tabella, il filtro non fa parte della query e viene applicato solo alla tabella.

Dietro l'interfaccia utente editor di Power Query, il codice viene generato in base al linguaggio della formula M
per le query di mashup dei dati.
È possibile visualizzare il codice M generato con l Editor avanzato nella scheda Visualizza.
Per visualizzare una descrizione per ogni funzione o per testarla, fare clic con il pulsante destro del mouse sulla
query SAP BW query esistente nel riquadro Query e selezionare Crea funzione. Nella barra della formula in
alto immettere:
= < function name >
dove <nome> funzione è il nome della funzione che si vuole visualizzare come descritto. Nell'esempio seguente
viene illustrata la descrizione della Cube.Transform funzione .

Negli esempi seguenti vengono mostrate alcune descrizioni di varie funzioni del cubo:
Cube.Transform : applica l'elenco di funzioni o trasformazioni al cubo.
Cube.ApplyParameter : applica i valori specificati per un parametro.
Cube.DisplayFolders : restituisce un albero annidato di oggetti che rappresenta la gerarchia di cartelle di
visualizzazione del cubo.
Cube.Parameters : restituisce una tabella con il set di parametri che è possibile applicare al cubo.
Cube.Dimensions : restituisce una tabella con il set di dimensioni per il cubo.
Cube.Measures : restituisce una tabella con il set di misure per il cubo.
Vedi anche
Informazioni di riferimento sul linguaggio delle formule M di Power Query
Dettagli di implementazione
Dettagli dell'implementazione
07/12/2021 • 12 minutes to read

Questo articolo descrive le informazioni sulla conversione e le funzionalità specifiche disponibili


nell'implementazione 2 del connettore Power Query SAP Business Warehouse.

Nuove opzioni per l'implementazione 2.0


L'implementazione 2.0 supporta le seguenti opzioni:
ExecutionMode specifica l'interfaccia MDX usata per eseguire query nel server. Sono valide le opzioni
seguenti:
SapBusinessWarehouseExecutionMode.BasXml

SapBusinessWarehouseExecutionMode.BasXmlGzip

SapBusinessWarehouseExecutionMode.DataStream

Il valore predefinito è SapBusinessWarehouseExecutionMode.BasXmlGzip .


L'uso di SapBusinessWarehouseExecutionMode.BasXmlGzip può migliorare le prestazioni quando si
verifica una latenza elevata per set di dati di grandi dimensioni.
BatchSize specifica il numero massimo di righe recuperate in una singola operazione quando si esegue
un'istruzione MDX. Un numero ridotto implica un numero maggiore di chiamate al server durante il
recupero di un set di dati di grandi dimensioni. Un numero di righe elevato può migliorare le prestazioni,
ma può anche causare problemi di memoria nel server SAP BW. Il valore predefinito è 50000 righe.
EnableStructures indica se le strutture di caratteristiche vengono riconosciute. Il valore predefinito di
questa opzione è false. L'opzione ha effetto sull'elenco degli oggetti disponibili per la selezione. Non è
supportata in modalità Query nativa.
L'opzione ScaleMeasures è stata deprecata in questa implementazione. Il comportamento è ora uguale
all'impostazione di ScaleMeasures su false, ovvero vengono visualizzati sempre valori non in scala.

Altri miglioramenti per l'implementazione 2.0


L'elenco seguente descrive alcuni miglioramenti aggiuntivi inclusi nella nuova implementazione:
Prestazioni migliorate.
Possibilità di recuperare vari milioni di righe di dati e ottimizzazione tramite il parametro delle dimensioni
batch.
Possibilità di cambiare la modalità di esecuzione.
Supporto della modalità compressa. Particolarmente vantaggioso per le connessioni con latenza elevata o
set di dati di grandi dimensioni.
Rilevamento migliorato delle variabili Date .
Esporre Date (ABAP tipo DATS) e (ABAP tipo TIMS) rispettivamente come date e ore, anziché Time come
valori di testo. Altre informazioni: Supporto per le date digitate in SAP BW
Gestione delle eccezioni migliorata. Gli errori che si verificano nelle chiamate BAPI vengono ora rilevati.
Riduzione delle colonne nelle modalità BasXml e BasXmlGzip. Se ad esempio la query MDX generata
recupera 40 colonne ma la selezione corrente ne richiede solo 10, questa richiesta viene passata al server per
il recupero di un set di dati più piccolo.
Modifica dei report esistenti per l'uso dell'implementazione 2.0
La modifica dei report esistenti per l'uso dell'implementazione 2.0 è possibile solo in modalità importazione. A
tale scopo, seguire questa procedura:
1. Aprire un report esistente, selezionare Modifica quer y nella barra multifunzione e quindi selezionare la
query di SAP Business Warehouse da aggiornare.
2. Fare clic con il pulsante destro del mouse sulla query e selezionare Editor avanzato .
3. In Editor avanzato modificare la chiamata SapBusinessWarehouse.Cubes come indicato di seguito:
Determinare se la query contiene già un record di opzioni, ad esempio l'esempio seguente.

In tal caso, aggiungere Implementation 2.0 l'opzione e rimuovere ScaleMeasures l'opzione, se presente,
come illustrato.

Se la query non include un record di opzione, aggiungere il record. Nel caso dell'opzione seguente:

Modificarla nel modo seguente:

È stato fatto tutto il possibile per rendere l'implementazione 2.0 del connettore SAP BW compatibile con la
versione 1. Tuttavia possono essere presenti alcune differenze, originate dalle diverse modalità di esecuzione
MDX usate in SAP BW. Per risolvere eventuali discrepanze, provare ad alternare tra le diverse modalità di
esecuzione.

Supporto per le date digitate in SAP BW


L'implementazione 2.0 del connettore SAP BW include il supporto per le date e le ore digitate. Se si esegue una
query su un report con dimensioni con ABAP, DATS o TIMS, ora possono essere restituiti come date anziché
come testo.
Le limitazioni per l'uso di questa funzionalità sono:
Disponibile solo nell'implementazione 2.0 del SAP BW connettore.
Disponibile solo in modalità importazione.
L'account usato per connettersi al server SAP BW deve disporre di autorizzazioni sufficienti per chiamare
BAPI_IOBJ_GETDETAIL.

let
Source = SapBusinessWarehouse.Cubes("sapbwtestserver", "00", "837",
[ExecutionMode=SapBusinessWarehouseExecutionMode.BasXmlGzip, Implementation="2.0"]),
#"$INFOCUBE" = Source{[Name="$INFOCUBE"]}[Data],
#"$0D_DECU" = #"$INFOCUBE"{[Id="$0D_DECU"]}[Data],
#"Added Items" = Cube.Transform(#"$0D_DECU",
{
{Cube.AddAndExpandDimensionColumn, "[0CALDAY]", {"[0CALDAY].[LEVEL01]"}, {"Calendar day.Calendar day
Level 01"}},
{Table.AddColumn, "Calendar day.Calendar day Level 01.Key", each
Cube.AttributeMemberProperty([Calendar day.Calendar day Level 01], "[20CALDAY]")},
{Cube.AddMeasureColumn, "Billed Quantity", "[Measures].[0D_INV_QTY]"}
})
in
#"Added Items"

È necessario aggiungere la chiave in per accedere alla data digitata. Ad esempio, se è presente un attributo di
dimensione denominato [0CALDAY], è necessario aggiungere la chiave [20CALDAY] per ottenere il valore tipiato.
Nell'esempio precedente ciò significa che:
Giorno del calendario. Il giorno del calendario Livello 01 [0CALDAY] sarà testo (didascalia). Aggiunta per
impostazione predefinita quando viene aggiunta la dimensione.
Giorno del calendario. Calendar day Level 01.Key [20CALDAY] sarà una data (deve essere selezionata
manualmente).
Per aggiungere manualmente la chiave in modalità importazione, è sufficiente espandere Proprietà e
selezionare la chiave.

La colonna chiave sarà di tipo date e può essere usata per il filtro. L'applicazione di filtri in base a questa colonna
verrà ripiegata sul server.

Supporto per le funzionalità di SAP BW


La tabella seguente elenca tutte SAP BW funzionalità che non sono completamente supportate o si comportano
in modo diverso quando si usa il connettore Power Query SAP BW.

F UN Z IO N A L ITÀ DESC RIZ IO N E

Calcoli locali I calcoli locali definiti in una query BEX modificheranno i


numeri visualizzati con strumenti come BEx Analyzer.
Tuttavia, non si riflettono nei numeri restituiti da SAP, tramite
l'interfaccia MDX pubblica.

Di conseguenza, i numeri Power Quer y non


corrispondono necessariamente a quelli per un
oggetto visivo corrispondente in uno strumento
SAP.

Ad esempio, quando ci si connette a un cubo di query da


una query BEx che imposta l'aggregazione da cumulare (ad
esempio, la somma in esecuzione), Power Query restituisce i
numeri di base, ignorando tale impostazione. Un analista
potrebbe quindi applicare un calcolo della somma in locale,
ad esempio Power BI, ma dovrebbe prestare attenzione al
modo in cui i numeri vengono interpretati se questa
operazione non viene eseguita.

Aggregations In alcuni casi,in particolare quando si gestiscono più valute, i


numeri aggregati restituiti dall'interfaccia pubblica SAP non
corrispondono a quelli visualizzati dagli strumenti SAP.

Di conseguenza, i numeri Power Quer y non


corrispondono necessariamente a quelli per un
oggetto visivo corrispondente in uno strumento
SAP.

Ad esempio, i totali su valute diverse verrebbero visualizzati


come "*" in Bex Analyzer, ma il totale verrebbe restituito
dall'interfaccia pubblica SAP, senza alcuna informazione che
tale numero aggregato non ha alcun significato. Di
conseguenza, il numero (aggregando, ad esempio, $, EUR e
AUD) viene visualizzato Power Query.

Formattazione della valuta Qualsiasi formattazione di valuta ,ad esempio $ 2.300 o


4000 AUD, non viene riflessa in Power Query.

Unità di misura Le unità di misura (ad esempio, 230 KG) non vengono
riflesse in Power Query.

Chiave rispetto a testo (breve, medio, lungo) Per una SAP BW caratteristica come CostCenter, lo
strumento di navigazione mostrerà un singolo elemento
Cost Center Level 01. La selezione di questo elemento
includerà il testo predefinito per Centro di costo nell'elenco
dei campi. Inoltre, i valori Chiave, Nome breve, Nome medio
e Nome lungo sono disponibili per la selezione nel nodo
Proprietà per la caratteristica (se mantenuta in SAP BW).

Si noti che questo vale solo per la modalità di connettività Di


importazione. Per la modalità DirectQuery, nel set di dati
verrà incluso solo il testo predefinito.
F UN Z IO N A L ITÀ DESC RIZ IO N E

Attributi Gli attributi di una caratteristica saranno disponibili per la


selezione in Proprietà per la caratteristica. Questo vale solo
per la modalità di connettività Di importazione. Per la
modalità DirectQuery, gli attributi non saranno disponibili.

Più gerarchie di una caratteristica In SAP, una caratteristica può avere più gerarchie. In
strumenti come BEx Analyzer, quando una caratteristica
viene inclusa in una query, l'utente può quindi selezionare la
gerarchia da usare.

In Power BI, è possibile visualizzare le varie gerarchie


nell'elenco dei campi come gerarchie diverse sulla stessa
dimensione. Tuttavia, la selezione di più livelli di due
gerarchie diverse sulla stessa dimensione comporterà la
restituzione di dati vuoti da SAP.

Trattamento delle gerarchie incomplete SAP BW supporta gerarchie incomplete, in cui è possibile
non visualizzare i livelli, ad esempio:

Continente
Americas
Canada
USA
Non assegnato
Australia

In Power BI viene visualizzato con (Vuoto) al livello mancante:

Continente
Americas
Canada
USA
Non assegnato
(Vuoto)
Australia

Fattore di proporzione/invertire il segno In SAP, una figura chiave può avere un fattore di scala (ad
esempio, 1000) definito come opzione di formattazione, vale
a dire che tutti gli schermi verranno ridimensionati in base a
tale fattore.

Analogamente, può avere un set di proprietà che inverte il


segno. L'uso di una figura chiave di questo tipo in Power BI
(in un oggetto visivo o come parte di un calcolo) comporta
l'uso del numero non ridimensionato (e il segno non viene
invertito). Il fattore di scala sottostante non è disponibile.
Negli oggetti visivi di Power BI, è possibile controllare le unità
di scala visualizzate sull'asse (K, M, B) come parte della
formattazione dell'oggetto visivo.
F UN Z IO N A L ITÀ DESC RIZ IO N E

Gerarchie in cui i livelli appaiono/scompaiono in modo Quando ci si connette inizialmente a SAP BW, verranno
dinamico recuperate le informazioni sui livelli di una gerarchia,
popolando l'elenco dei campi con un set di campi, Viene
memorizzato nella cache e, se il set di livelli cambia, il set di
campi non cambia fino a quando non viene richiamato
Refresh.

Questo è possibile solo in Power BI Desktop. Un


aggiornamento di questo tipo per riflettere le modifiche ai
livelli non può essere richiamato nel Power BI dopo la
pubblicazione.

Filtro predefinito Una query BEX può includere filtri predefiniti, che verranno
applicati automaticamente da SAP BEx Analyzer. Questi filtri
non vengono esposti e pertanto l'utilizzo equivalente in
Power Query non appli0rà gli stessi filtri per impostazione
predefinita.

Cifre chiave nascoste Una query BEX può controllare la visibilità delle figure chiave
e quelle nascoste non verranno visualizzate in SAP BEx
Analyzer. Questa operazione non viene riflessa tramite l'API
pubblica e quindi tali cifre chiave nascoste verranno
comunque visualizzate nell'elenco dei campi. Tuttavia,
possono essere nascoste all'interno di Power Query.

Formattazione numerica Qualsiasi formattazione numerica (numero di posizioni


decimali, separatore decimale e così via) non verrà riflessa
automaticamente in Power Query. Tuttavia, è possibile
controllare tale formattazione all'interno di Power Query.

Controllo delle versioni della gerarchia SAP BW consente di gestire versioni differenti di una
gerarchia; ad esempio, la gerarchia del centro di costo nel
2007 rispetto al 2008. Solo la versione più recente sarà
disponibile in Power Query, perché le informazioni sulle
versioni non sono esposte dall'API pubblica.

Gerarchie dipendenti dal tempo Quando si Power Query, le gerarchie dipendenti dal tempo
vengono valutate alla data corrente.

Conversione di valuta SAP BW supporta la conversione di valuta, in base alle tariffe


contenute nel cubo. Tali funzionalità non sono esposte
dall'API pubblica e pertanto non sono disponibili in Power
Query.

Ordinamento È possibile definire l'ordinamento (per testo o chiave) di una


caratteristica in SAP. Questo ordinamento non si riflette in
Power Query. Ad esempio, i mesi potrebbero essere
visualizzati come "Aprile", "Ago" e così via.

Non è possibile modificare questo ordinamento in Power


Query.

Nomi tecnici Nello strumento di navigazione è possibile visualizzare i nomi


delle caratteristiche/misure (descrizioni) e i nomi tecnici
usando il selettore Opzioni di visualizzazione. L'elenco dei
campi contiene i nomi delle caratteristiche/misure
(descrizioni).
F UN Z IO N A L ITÀ DESC RIZ IO N E

Impostazione della lingua utente finale Le impostazioni locali usate per connettersi SAP BW
vengono impostate come parte dei dettagli della
connessione e non riflettono le impostazioni locali del
consumer del report finale.

Variabili di testo SAP BW consente di includere segnaposto per le variabili nei


nomi di campo (ad esempio, "Valori effettivi $ANNO$") che
verranno quindi sostituiti dal valore selezionato. Ad esempio,
il campo viene visualizzato come "Valori effettivi 2016" negli
strumenti BEx, se è stato selezionato l'anno 2016 per la
variabile.

Il nome della colonna Power Query non verrà modificato a


seconda del valore della variabile e quindi verrà visualizzato
come "$YEAR$ Actuals". Tuttavia, il nome della colonna può
essere modificato in Power Query.

Variabili di uscita cliente Le variabili customer exit non sono esposte dall'API pubblica
e pertanto non sono supportate da Power Query.

Considerazioni sulle prestazioni


La tabella seguente fornisce un elenco di riepilogo dei suggerimenti per migliorare le prestazioni per il
caricamento e l'aggiornamento dei dati SAP BW.

SUGGERIM EN TO DESC RIZ IO N E

Limitare la selezione di caratteristiche e proprietà (attributo) Il tempo necessario per caricare i dati da SAP BW in Power
Query aumenta con le dimensioni del set di dati, ad esempio
il numero di colonne e righe nel set di risultati bi flat. Per
ridurre il numero di colonne, selezionare solo le
caratteristiche e le proprietà nello strumento di navigazione
che si desidera visualizzare nel report o nel dashboard.

Usare i parametri L'uso di filtri/parametri contribuisce a ridurre le dimensioni


del set di risultati, migliorando in modo significativo i
runtime di query.

I parametri sono particolarmente utili quando vengono usati


con dimensioni di grandi dimensioni, in cui sono presenti
molti membri, ad esempio clienti, materiali o numeri di
documento.

Limitare il numero di cifre chiave La selezione di molte cifre chiave da un modello di query
BEx/BW può avere un impatto significativo sulle prestazioni
durante l'esecuzione della query a causa del tempo
impiegato per il caricamento dei metadati per le unità.
Includere solo le cifre chiave necessarie in Power Query.

Suddividere query di dimensioni molto grandi in più query Per query di dimensioni molto grandi su Query InfoCube o
più piccole BEx, può essere utile suddividere la query. Ad esempio, una
query potrebbe ottenere le cifre chiave, mentre un'altra
query (o diverse altre query) sta ottenendo i dati delle
caratteristiche. È possibile unire i singoli risultati della query
in Power Query.
SUGGERIM EN TO DESC RIZ IO N E

Evitare provider virtuali (MultiProvider o InfoSet) VirtualProvider sono simili alle strutture senza archiviazione
permanente. Sono utili in molti scenari, ma possono
mostrare prestazioni di query più lente perché
rappresentano un livello aggiuntivo sui dati effettivi.

Evitare l'uso di attributi di navigazione nella query BEx Una query con un attributo di navigazione deve eseguire un
join aggiuntivo, rispetto a una query con lo stesso oggetto
come caratteristica per arrivare ai valori.

Usare RSRT per monitorare e risolvere i problemi relativi alle L'amministratore SAP può usare Query Monitor in SAP BW
query con esecuzione lenta (transazione RSRT) per analizzare i problemi di prestazioni
con SAP BW query. Per altre informazioni, 1591837 note
SAP.

Evitare cifre chiave con restrizioni e cifre chiave calcolate Entrambi vengono calcolati durante l'esecuzione delle query
e possono rallentare le prestazioni delle query.

Prendere in considerazione l'uso dell'aggiornamento Power BI il set di dati completo a ogni aggiornamento. Se si
incrementale per migliorare le prestazioni lavora con un volume elevato di dati, l'aggiornamento del
set di dati completo a ogni aggiornamento potrebbe non
essere ottimale. In questo scenario è possibile usare
l'aggiornamento incrementale, in modo da aggiornare solo
un subset di dati. Per altri dettagli, vedere Aggiornamento
incrementale in Power BI.

Vedi anche
Server applicazioni SAP Business Warehouse
Server messaggi SAP Business Warehouse
Importa rispetto a DirectQuery per SAP BW
Importa rispetto a DirectQuery per SAP BW
07/12/2021 • 7 minutes to read

NOTE
Questo articolo illustra le differenze tra le modalità Import e DirectQuery in Power BI Desktop. Per una descrizione
dell'uso della modalità di importazione in Power Query Desktop o Power Query Online, vedere le sezioni seguenti:
SAP BW connettore del server applicazioni:
Connessione a un server applicazioni SAP BW da Power Query Desktop
Connessione a un server applicazioni SAP BW da Power Query Online
SAP BW connettore server messaggi:
Connessione a un SAP BW Message Server da Power Query Desktop
Connessione a un server messaggi SAP BW da Power Query Online

Con Power Query, è possibile connettersi a un'ampia gamma di origini dati, tra cui Servizi online, database,
formati di file diversi e altre. Se si usa Power BI Desktop, è possibile connettersi a queste origini dati in due modi
diversi: importare i dati in Power BI o connettersi direttamente ai dati nel repository di origine, noto come
DirectQuery. Quando ci si connette a un SAP BW, è anche possibile scegliere tra queste due modalità di
connettività. Per un elenco completo delle origini dati che supportano DirectQuery, vedere Power BI origini dati.
Di seguito sono descritte le differenze principali tra le due modalità di connettività, nonché le linee guida e le
limitazioni, in relazione alle connessioni SAP BW connessioni. Per altre informazioni sulla modalità DirectQuery,
vedere Uso di DirectQuery in Power BI.

Import Connections (Importa connessioni)


Quando ci si connette a un'origine dati con Power BI Desktop, lo strumento di navigazione consente di
selezionare un set di tabelle (per le origini relazionali) o un set di oggetti di origine (per le origini
multidimensionali).
Per SAP BW, è possibile selezionare gli oggetti da includere nella query dall'albero visualizzato. È possibile
selezionare un InfoProvider o una query BEx per un InfoProvider, espandere le cifre chiave e le dimensioni e
selezionare figure chiave, caratteristiche, attributi (proprietà) o gerarchie specifiche da includere nella query.
La selezione definisce una query che restituirà un set di dati bi flat costituito da colonne e righe. I livelli di
caratteristiche, le proprietà e le figure chiave selezionati verranno rappresentati nel set di dati come colonne. Le
cifre chiave vengono aggregate in base alle caratteristiche selezionate e ai relativi livelli. Nello strumento di
navigazione viene visualizzata un'anteprima dei dati. È possibile modificare queste query in Power Query prima
di caricare i dati, ad esempio per applicare filtri o aggregare i dati o creare un join di tabelle diverse.
Quando i dati definiti dalle query vengono caricati, verranno importati nella cache Power BI in memoria.
Quando si inizia a creare gli oggetti visivi in Power BI Desktop, verrà eseguita una query sui dati importati nella
cache. L'esecuzione di query sui dati memorizzati nella cache è molto veloce e le modifiche apportate agli
oggetti visivi verranno riflesse immediatamente.
Tuttavia, l'utente deve fare attenzione quando compila oggetti visivi che aggregano ulteriormente i dati, quando
si gestiscono misure non additive. Ad esempio, se la query ha importato ogni sales Office e la % di crescita per
ognuno di essi, se l'utente ha creato un oggetto visivo che somma i valori di Growth % in tutti gli uffici vendita,
tale aggregazione verrà eseguita localmente sui dati memorizzati nella cache. Il risultato non sarebbe uguale alla
richiesta della % di crescita complessiva dal SAP BW e probabilmente non è quello previsto. Per evitare tali
aggregazioni accidentali, è utile impostare Il riepilogo predefinito per tali colonne su Non riepilogare .
Se i dati nell'origine sottostante cambiano, non verranno riflessi negli oggetti visivi. Sarà necessario eseguire
un'operazione Di aggiornamento , che reimporterà i dati dall'origine sottostante nella cache Power BI dati.
Quando si pubblica un report (file con estensione pbix) nel servizio Power BI, viene creato e caricato un set di
dati nel server Power BI. I dati importati nella cache sono inclusi nel set di dati. Mentre si lavora con un report
nel servizio Power BI, viene eseguita una query sui dati caricati, offrendo tempi di risposta e interattività rapidi. È
possibile configurare un aggiornamento pianificato del set di dati o reimportare i dati manualmente. Per le
origini SAP BW locali, è necessario configurare un gateway dati locale. Le informazioni sull'installazione e la
configurazione del gateway dati locale sono disponibili nella documentazione seguente:
Documentazione del gateway dati locale
Gestire l'origine dati del gateway in Power BI
Gestione delle origini dati in Power Platform

Connessioni DirectQuery
L'esperienza di navigazione è leggermente diversa quando ci si connette a un'origine SAP BW in modalità
DirectQuery. Lo strumento di navigazione continuerà a visualizzare un elenco di InfoProvider e query BEx
disponibili in SAP BW, ma non Power BI è definita alcuna query nel processo. Si selezionerà l'oggetto di origine
stesso, ad esempio la query InfoProvider o BEx, e verrà visualizzato l'elenco dei campi con le caratteristiche e le
cifre chiave dopo la connessione.
Per SAP BW query con variabili, è possibile immettere o selezionare valori come parametri della query.
Selezionare il pulsante Applica per includere i parametri specificati nella query.
Anziché un'anteprima dei dati, vengono visualizzati i metadati dell'InfoCube o della query BEx selezionata. Dopo
aver selezionato il pulsante Carica nello Strumento di navigazione, non verrà importato alcun dato.

È possibile apportare modifiche ai valori per le variabili SAP BW query con l'opzione Modifica query sulla
barra Power BI Desktop multifunzione.
Quando si inizia a creare gli oggetti visivi in Power BI Desktop, viene eseguita una query sull'origine dati
sottostante in SAP BW per recuperare i dati necessari. Il tempo necessario per aggiornare un oggetto visivo
dipende dalle prestazioni del sistema SAP BW sottostante.
Eventuali modifiche apportate ai dati sottostanti non verranno riflesse immediatamente negli oggetti visivi. Sarà
comunque necessario eseguire un'operazione Di aggiornamento , che eseguirà di nuovo le query per ogni
oggetto visivo sull'origine dati sottostante.
Quando si pubblica un report nel servizio Power BI, verrà creato nuovamente un set di dati nel servizio Power BI,
come per una connessione di importazione. In tale set di dati, tuttavia, non sono inclusi dati.
Quando si lavora con un report nel servizio Power BI, viene eseguita di nuovo una query sull'origine dati
sottostante per recuperare i dati necessari. Per le connessioni DirectQuery ai sistemi SAP BW e SAP HANA, è
necessario che sia installato un gateway dati locale e che l'origine dati sia registrata con il gateway.
Per SAP BW query con variabili, gli utenti finali possono modificare i parametri della query.

NOTE
Per poter modificare i parametri, l'utente finale deve pubblicare il set di dati in un'area di lavoro Premium, in modalità
DirectQuery, e deve essere abilitato l'accesso Single Sign-On (SSO).

Suggerimenti generali
È consigliabile importare i dati Power BI quando possibile. L'importazione dei dati sfrutta il motore di query a
prestazioni elevate di Power BI e offre un'esperienza estremamente interattiva e completa sui dati.
DirectQuery offre tuttavia i vantaggi seguenti quando ci si connette a SAP BW:
Consente di accedere ai dati SAP BW SSO, per garantire che la sicurezza definita nell'origine SAP BW
sottostante sia sempre applicata. Quando si accede SAP BW SSO, verranno applicate le autorizzazioni di
accesso ai dati dell'utente in SAP, che possono produrre risultati diversi per utenti diversi. I dati che un
utente non è autorizzato a visualizzare verranno tagliati SAP BW.
Garantisce che i dati più recenti possano essere facilmente visibili, anche se cambiano di frequente
nell'origine SAP BW sottostante.
Garantisce che sia possibile gestire facilmente misure complesse, in cui il SAP BW di origine viene sempre
sottoposto a query per i dati aggregati, senza alcun rischio di aggregazioni impreviste e fuorvianti
rispetto alle cache importate dei dati.
Evita le cache dei dati estratti e pubblicati, che potrebbero violare la sovranità dei dati o i criteri di
sicurezza applicati.
L'uso di DirectQuery è in genere possibile solo quando l'origine dati sottostante può fornire query interattive
per la tipica query di aggregazione entro pochi secondi ed è in grado di gestire il carico di query che verrà
generato. Inoltre, è necessario prendere in considerazione l'elenco delle limitazioni che accompagnano l'uso di
DirectQuery, per garantire che gli obiettivi possano essere ancora soddisfatti.
Se si lavora con set di dati di dimensioni molto grandi o si verifica un tempo di risposta alle query di SAP BW
lento in modalità DirectQuery, Power BI offre opzioni nel report per inviare un minor numero di query,
semplificando l'interazione con il report. Per accedere a queste opzioni in Power BI Desktop, passare a Opzioni
file e impostazioni > > Opzioni e selezionare Riduzione quer y.

È possibile disabilitare l'evidenziazione incrociata nell'intero report, riducendo il numero di query inviate SAP
BW. È anche possibile aggiungere un pulsante Applica ai filtri dei dati e filtrare le selezioni. È possibile
effettuare tutte le selezioni desiderate per filtri dei dati e filtri, ma non verrà inviata alcuna query SAP BW fino a
quando non si seleziona il pulsante Applica. Le selezioni verranno quindi usate per filtrare tutti i dati.
Queste modifiche verranno applicate al report mentre si interagisce con esso in Power BI Desktop, nonché
quando gli utenti utilizzano il report nel servizio Power BI dati.
Nel servizio Power BI, la cache delle query per le connessioni DirectQuery viene aggiornata periodicamente
tramite query sull'origine dati. Per impostazione predefinita, questo aggiornamento viene eseguita ogni ora, ma
può essere configurato per un intervallo diverso nelle impostazioni del set di dati. Per altre informazioni, vedere
Aggiornamento dati in Power BI.
Inoltre, molte delle procedure consigliate generali descritte in Uso di DirectQuery in Power BI si applicano
ugualmente quando si usa DirectQuery su SAP BW. Altri dettagli specifici per SAP BW sono descritti in
Connessione to SAP Business Warehouse by using DirectQuery in Power BI.
Vedi anche
Autenticazione di Windows e Single Sign-On
Autenticazione di Windows e Single Sign-On
07/12/2021 • 2 minutes to read

NOTE
Le informazioni seguenti sull'Windows e l'accesso Single Sign-On si applicano solo a Power Query Desktop. Per altre
informazioni sull'uso dell'autenticazione Windows e dell'accesso Single Sign-On in Power Query Desktop, vedere
Panoramica dell'accesso Single Sign-On (SSO)per i gateway in Power BI .

Per Windows'autenticazione basata su certificati e la funzionalità Single Sign-On, il server SAP BW deve essere
configurato per l'accesso tramite Secure Network Communications (SNC). SNC è un meccanismo fornito dal
sistema SAP che consente la sicurezza a livello di applicazione sui dati s scambiati tra un client, ad esempio
Power BI Desktop, e il server SAP BW. SNC funziona con diversi prodotti di sicurezza esterni e offre funzionalità
non fornite direttamente dal sistema SAP, incluso l'accesso Single Sign-On.
Oltre al server SAP BW configurato per l'accesso SNC, l'account utente SAP deve essere configurato con un
nome SNC (transazione SU01 nel sistema SAP).
Per informazioni più dettagliate, vedere Secure Network Communication(Comunicazione di rete sicura) e il
capitolo Single Sign-On Configuration in questo documento.
Secure Login è una soluzione software di SAP che consente ai clienti di trarre vantaggio dai vantaggi del
controller di rete SNC senza dover configurare un'infrastruttura a chiave pubblica (PKI). Accesso sicuro consente
agli utenti di eseguire l'autenticazione Windows credenziali di Active Directory.
Secure Login richiede l'installazione di Secure Login Client nel Power BI Desktop computer. Il pacchetto di
installazione è SAPSetupSCL.EXE e può essere ottenuto da SAP Service Marketplace (richiede le credenziali del
cliente SAP).
Per altre informazioni, vedere Accesso sicuro.
1. Nella finestra di SAP Business Warehouse ser ver di distribuzione selezionare la Windows
predefinita.
2. Selezionare questa opzione per usare le credenziali Windows correnti o specificare credenziali Windows
alternative.
3. Immettere il nome del par tner SNC. Questo nome è il nome SNC configurato nel token SAP BW di
sicurezza del server. È possibile recuperare il nome SNC con la transazione RZ11 (Profile Parameter
Maintenance) in SAPGUI e il nome del parametro snc/identity/as .
Per i token di sicurezza del certificato X.509, il formato è:
P:<X.509 Distinguished Name>
Esempio (i valori sono con distinzione tra maiuscole e minuscole): p:CN=BW0, OU=BI, O=MyOrg,
C=US
Per i token di sicurezza Kerberos, il formato è:
p:CN= <ser vice_User_Principal_Name>
Esempio (i valori sono con distinzione tra maiuscole e minuscole): p:CN=
SAPSer viceBW0@BWSERVER.MYORG.COM
4. Selezionare la libreria SNC per cui è stato SAP BW'ambiente locale.
L SNC_LIB o SNC_LIB_64'opzione controlla la variabile di ambiente corrispondente nel
computer e usa la DLL specificata in tale posizione.
Le opzioni NTLM e KERBEROS prevedono che la DLL corrispondente sia in una cartella
specificata nella variabile PATH nel computer locale. Le librerie per i sistemi a 32 bit GSSNTLM.DLL
(per NTLM) e GSSKRB5.DLL (per Kerberos). Le librerie per i sistemi a 64 bit GX64NTLM.DLL (per
NTLM) e GX64KRB5.DLL (per Kerberos).
L'opzione Personalizzata consente l'uso di una libreria sviluppata personalizzata.
Convalidare le impostazioni con l'amministratore SAP.

5. Selezionare Connetti .
Vedi anche
Usare le opzioni avanzate
Usare le opzioni avanzate
07/12/2021 • 4 minutes to read

Quando si crea una connessione a un server SAP Business Warehouse, è possibile specificare facoltativamente
un codice lingua, la modalità di esecuzione, le dimensioni del batch e un'istruzione MDX. È anche possibile
scegliere se abilitare le strutture delle caratteristiche.

NOTE
Anche se le immagini in questo articolo illustrano le opzioni avanzate nel connettore SAP Business Warehouse Application
Server, funzionano allo stesso modo nel connettore SAP Business Warehouse Message Server.

Codice lingua
Facoltativamente, è possibile specificare un codice lingua quando si stabilisce una connessione al SAP BW server.

Il valore previsto è un codice linguistico di due lettere come definito nel sistema SAP. In Power Query Desktop
selezionare l'icona della Guida (punto interrogativo) accanto al campo Codice lingua per un elenco di valori
validi.
Dopo aver impostato il codice lingua, Power Query i nomi descrittivi degli oggetti dati in SAP BW nella lingua
specificata, inclusi i nomi dei campi per gli oggetti selezionati.
NOTE
Non tutte le lingue elencate potrebbero essere configurate nel sistema SAP BW e le descrizioni degli oggetti potrebbero
non essere tradotte in tutte le lingue.

Se non viene specificato alcun codice di lingua, verranno usate le impostazioni locali predefinite della finestra di
dialogo Opzioni e verrà eseguito il mapping a un codice di lingua SAP valido. Per visualizzare o ignorare le
impostazioni locali correnti in Power BI Desktop, aprire la finestra di dialogo Opzioni e impostazioni file e
selezionare Impostazioni internazionali > > file > correnti . Per visualizzare o sostituire le impostazioni locali
correnti in Power Query Online, aprire la finestra di dialogo Opzioni home > > Project opzioni. Se si esegue
l'override delle impostazioni locali, l'impostazione viene mantenuta nella query M e viene rispettata se si copia e
incolla la query da Power Query Desktop a Power Query Online.

Modalità di esecuzione
NOTE
La modalità di esecuzione non può essere modificata nella versione 1.0 del SAP BW connettore.

L'opzione Modalità di esecuzione specifica che l'interfaccia MDX viene usata per eseguire query nel server.
Sono valide le opzioni seguenti:
BasXml: specifica l'opzione bXML flattening mode per l'esecuzione MDX in SAP Business Warehouse.
BasXmlGzip: specifica l'opzione della modalità flat flat BXML compressa Gzip per l'esecuzione MDX in
SAP Business Warehouse. Questa opzione è consigliata per query a bassa latenza o con volumi elevati.
Valore predefinito per l'opzione della modalità di esecuzione.
DataStream : specifica l'opzione DataStream flattening mode per l'esecuzione MDX in SAP Business
Warehouse.
Dimensioni dei batch
NOTE
Le dimensioni del batch non possono essere modificate nella versione 1.0 del connettore SAP BW batch.

Specifica il numero massimo di righe da recuperare contemporaneamente durante l'esecuzione di un'istruzione


MDX. Un numero ridotto si traduce in più chiamate al server quando si recupera un set di dati di grandi
dimensioni. Un numero di righe elevato può migliorare le prestazioni, ma può anche causare problemi di
memoria nel server SAP BW. Il valore predefinito è 50000 righe.

Istruzione MDX
NOTE
L'opzione di istruzione MDX non è disponibile in Power Query Online.

Invece di usare lo strumento di navigazione per esplorare e selezionare tra gli oggetti dati disponibili in SAP BW,
un utente che ha familiarità con il linguaggio di query MDX può specificare un'istruzione MDX per l'esecuzione
diretta in SAP BW. Tenere tuttavia presente che non verrà applicata alcuna ulteriore ripiegamento delle query
quando si usa un'istruzione MDX personalizzata.
L'istruzione per l'esempio usato qui sarà simile a quanto illustrato nell'esempio seguente, in base ai nomi tecnici
degli oggetti e delle proprietà in SAP BW.
SELECT {[0EFUZM0P10X72MBPOYVBYIMLB].[0EFUZM0P10X72MBPOYVBYISWV]} ON COLUMNS ,
NON EMPTY CROSSJOIN(CROSSJOIN([0D_MATERIAL].[LEVEL01].MEMBERS,[0D_PUR_ORG].[LEVEL01].MEMBERS) ,
[0D_VENDOR].[LEVEL01].MEMBERS)
DIMENSION PROPERTIES
[0D_MATERIAL].[20D_MATERIAL],
[0D_MATERIAL].[50D_MATERIAL],
[0D_PUR_ORG].[20D_PUR_ORG],
[0D_PUR_ORG].[50D_PUR_ORG],
[0D_VENDOR].[20D_VENDOR],
[0D_VENTOR].[50D_VENDOR] ON ROWS FROM [0D_PU_C01/0D_PU_C01_Q0013]

Il SAP BW connector visualizza un'anteprima dei dati restituiti dall'istruzione MDX. È quindi possibile
selezionare Carica per caricare i dati (solo Power Query Desktop) o selezionare Trasforma dati per modificare
ulteriormente il set di dati nel editor di Power Query.
Per convalidare e risolvere i problemi di un'istruzione MDX, SAP BW la transazione MDXTEST per l'interfaccia
utente grafica SAP Windows utenti. Inoltre, la transazione MDXTEST può essere uno strumento utile per
analizzare gli errori del server o i problemi di prestazioni in seguito all'elaborazione che si verifica all'interno del
SAP BW sistema.
Per informazioni più dettagliate su questa transazione, vedere Ambiente di test MDX.

MDXTEST può essere usato anche per costruire un'istruzione MDX. La schermata della transazione include
pannelli a sinistra che assiste l'utente nella navigazione a un oggetto query SAP BW generazione di un'istruzione
MDX.
La transazione offre diverse modalità di esecuzione/interfacce per l'istruzione MDX. Selezionare Flattening
(basXML) per simulare Power Query la query in SAP BW. Questa interfaccia in SAP BW crea il set di righe in
modo dinamico usando le selezioni dell'istruzione MDX. La tabella dinamica risultante restituita a Power Query
Desktop ha una forma molto compatta che riduce il consumo di memoria.
La transazione visualizza il set di risultati dell'istruzione MDX e le metriche di runtime utili.

Abilita le strutture per le caratteristiche


La selezione Abilita strutture di caratteristiche modifica il modo in cui le strutture delle caratteristiche
vengono visualizzate nello strumento di navigazione. Una struttura è un SAP BW che può essere usato durante
la compilazione di query BEX. Nell'esperienza utente BEX hanno un aspetto simile all'immagine seguente.
Se la selezione Abilita strutture caratteristiche è deselezionata (impostazione predefinita), il connettore
produrrà un prodotto cartesiano di ogni dimensione nella struttura con ogni misura disponibile. Ad esempio:

Se selezionata, il connettore produce solo le misure disponibili. Ad esempio:

Vedi anche
Esplorare gli oggetti query
Trasformare e filtrare SAP BW set di dati
SAP Business Warehouse risoluzione dei problemi del connettore
SAP Business Warehouse risoluzione dei problemi
del connettore
07/12/2021 • 11 minutes to read

Questo articolo illustra le situazioni di risoluzione dei problemi (e le possibili soluzioni) per l'uso del connettore
SAP Business Warehouse (BW).

Raccogliere SAP BW tracce avanzate


NOTE
La raccolta di una traccia di una query inviata al server SAP BW richiede alcune opzioni e impostazioni che possono essere
fornite solo usando Power BI Desktop. Se non si ha già una copia di Power BI Desktop, è possibile ottenerne una copia
nell'Area download Microsoft. È possibile impostare tutte le opzioni e le impostazioni necessarie per le tracce avanzate
usando questa versione gratuita.

Molte volte in cui si verifica un errore, può essere vantaggioso raccogliere una traccia della query inviata al
server SAP BW e alla relativa risposta. La procedura seguente illustra come configurare tracce avanzate per i
problemi che si verificano usando il SAP BW connettore.
1. Chiudere Power BI Desktop se è in esecuzione.
2. Creare una nuova variabile di ambiente:
a. Nell'Windows Pannello di controllo selezionare Sistema > avanzato sistema Impostazioni .
È anche possibile aprire un prompt dei comandi e immettere sysdm.cpl .
b. In Proprietà di sistema selezionare la scheda Avanzate e quindi Variabili di ambiente .
c. In Variabili di ambiente selezionare Nuovo in Variabili di sistema .
d. In Nuova variabile di sistema in Nome variabile immettere PBI_EnableSapBwTracing e in
Valore variabile immettere true .
e. Selezionare OK .
Quando questa traccia avanzata viene attivata, nella car tella Tracce verrà creata una cartella aggiuntiva
denominata SapBw. Vedere il resto di questa procedura per il percorso della car tella Tracce.
3. Aprire Power BI Desktop.
4. Cancellare la cache prima dell'acquisizione.
a. In Power BI desktop selezionare la scheda File.
b. Selezionare Opzioni e impostazioni > Opzioni .
c. In Impostazioni globali scegliere Caricamento dati .
d. Selezionare Cancella cache .
5. Mentre si è ancora in Opzioni e impostazioni, abilitare la traccia.
a. In Impostazioni globali scegliere Diagnostica .
b. Selezionare Abilita traccia .
6. Mentre si è ancora in Opzioni e impostazioni Diagnostica globale , selezionare Apri cartella > >
dump/tracce di arresto anomalo del sistema . Assicurarsi che la cartella sia deselezionata prima di
acquisire nuove tracce.
7. Riprodurre il problema.
8. Al termine, chiudere Power BI Desktop in modo che i log siano scaricati su disco.
9. È possibile visualizzare le tracce appena acquisite nella cartella SapBw (la cartella Tracce che contiene la
cartella SapBw viene visualizzata selezionando Apri cartella dump/tracce di arresto anomalo del
sistema nella pagina Diagnostica in Power BI Desktop).
10. Assicurarsi di disattivare questa traccia avanzata al termine, rimuovendo la variabile di ambiente o
impostando PBI_EnableSapBwTracing su false.

Raccogliere SAP BW tracce avanzate con tracce CPIC


Se si stanno analizzando i problemi di autenticazione o single sign-on (SSO), usare la stessa procedura descritta
in Raccogliere tracce avanzate di SAP BW , adeccezione del passaggio 2d, immettere le variabili e i valori di
sistema aggiuntivi seguenti:
CPIC_TRACE — 3
CPIC_TRACE_DIR una — cartella valida, ad esempio: E:\traces\CPIC
Il resto della procedura rimane invariato. È possibile visualizzare le tracce CPIC nella cartella specificata nella
variabile CPIC_TRACE_DIR di ambiente. È anche possibile visualizzare le tracce regolari nella car tella SapBw.
Assicurarsi anche di disattivare questa traccia avanzata al termine, rimuovendo le variabili di ambiente o
impostando BI_EnableSapBwTracing su false e CPIC_TRACE su 0.

Eseguire un'installazione pulita del connettore SAP .NET


Se diventa necessario reinstallare il connettore SAP .NET:
1. Rimuovere (disinstallare) sap .NET Connector.
2. Dopo la rimozione, verificare che SAP .NET Connector non sia installato nella Global Assembly Cache
(GAC), verificando che i percorsi seguenti NON esistano o NON contengano DLL:
GaC a 32 bit:
C:\Windows\Microsoft.NET\assembly\GAC_32\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23
C:\Windows\Microsoft.NET\assembly\GAC_32\sapnco_utils\v4.0_3.0.0.42__50436dca5c7f7d23
GaC a 64 bit:
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco_utils\v4.0_3.0.0.42__50436dca5c7f7d23
3. Verificare che i file binari non siano in Programmi . Assicurarsi che i percorsi seguenti NON esistano o
siano vuoti:
C:\Programmi\SAP\SAP_DotNetConnector3_Net40_x64
C:\Programmi (x86)\sap\SAP_DotNetConnector3_Net40_x86
4. Reinstallare il connettore e ricordarsi di selezionare l'opzione Installa assembly in GAC. È
consigliabile usare la versione più recente, 3.0.23.
Risoluzione dei problemi relativi ai messaggi di errore
SAP BW metodo ErrorCode non trovato
Method not found: 'Int32 SAP.Middleware.Connector.RfcBaseException.get_ErrorCode()'

Questo errore viene generato quando si verifica un errore nel server SAP BW e il connettore SAP .NET tenta di
recuperare informazioni sull'errore. Tuttavia, questo errore potrebbe nascondere l'errore reale. Questo errore
può verificarsi quando:
Uso di una versione precedente del connettore SAP .NET.
Sono installate più versioni del connettore SAP .NET.
Il connettore SAP .NET è stato installato due volte, una volta nella Global Assembly Cache (GAC) e una
volta non nella GaC.
Seguire le istruzioni in Eseguire un'installazione pulita del connettore SAP .NET per reinstallare il connettore.
Questo non risolverà il problema, ma fornirà il messaggio di errore effettivo.
Eccezione: inizializzatore di tipo per 'Microsoft.Mashup.Engine1.Library.SapBusinessWarehouse.
SapBwMicrosoftProviderFactoryService' ha generato un'eccezione.
Seguire le istruzioni in Eseguire un'installazione pulita del connettore SAP .NET per reinstallare il connettore.
Questo connettore richiede uno o più componenti aggiuntivi
Se viene visualizzato questo messaggio di errore, seguire questa procedura di risoluzione dei problemi:
1. Verificare che la versione del connettore SAP .NET sia installata con la lunghezza in bit corretta. Se è
installato Power BI Desktop a 64 bit, assicurarsi di aver installato il connettore SAP .NET a 64 bit.
2. Verificare che, durante l'installazione di SAP .NET Connector, sia stata selezionata l'opzione Install
assemblies to GAC (Installa assembly in GAC). Per verificare che gac sia installato, aprire Windows
Explorer e passare a:
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco
Ad esempio, il percorso completo potrebbe essere:
C:\Windows\Microsoft.NET\assembly\GAC_64\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23\sapnco.dll
Se è stata installata la versione a 32 bit del connettore SAP .NET, sarebbe
C:\Windows\Microsoft.NET\assembly\GAC_32\sapnco\v4.0_3.0.0.42__50436dca5c7f7d23\sapnco.dll (ed è
necessaria una versione a 32 bit di Power BI Desktop).
Un altro modo per controllare la GLOBALC è usare gacutil (una delle opzioni per disabilitare la firma con nome
sicuro). È necessario eseguirlo da un prompt dei comandi a 64 bit. È possibile controllare il contenuto della
Global Assembly Cache aprendo un prompt dei comandi, passando al percorso gacutil.exe ed eseguendo:
gacutil -l
Ad esempio, nell'output dovrebbe essere visualizzato:
sapnco, Version=3.0.0.42, Culture=neutral, PublicKeyToken=50436dca5c7f7d23,
processorArchitecture=AMD64 sapnco_utils, Version=3.0.0.42, Culture=neutral,
PublicKeyToken=50436dca5c7f7d23, processorArchitecture=AMD64
"Nessuna autorizzazione RFC per la funzione ...*
L'implementazione 2.0 richiede l'accesso ai BAPI seguenti. Per risolvere il problema, contattare il team sap Basis
e richiedere le autorizzazioni per questi BAPI e RFC per l'utente.
Connettività:
RFC_PING
RFC_METADATA_GET
Esecuzione MDX:
RSR_MDX_CREATE_OBJECT
BAPI_MDDATASET_CREATE_OBJECT
BAPI_MDDATASET_SELECT_DATA
BAPI_MDDATASET_DELETE_OBJECT
RSR_MDX_GET_AXIS_INFO
RSR_MDX_GET_AXIS_DATA
RSR_MDX_GET_CELL_DATA
BAPI_MDDATASET_GET_AXIS_INFO
BAPI_MDDATASET_GET_AXIS_DATA
BAPI_MDDATASET_GET_CELL_DATA
ExecutionMode flattening:
RSR_MDX_GET_FLAT_DATA
RSR_MDX_GET_FS_DATA
BAPI_MDDATASET_GET_FLAT_DATA
BAPI_MDDATASET_GET_FS_DATA
Streaming ExecutionMode:
BAPI_MDDATASET_GET_STREAMDATA
BAPI_MDDATASET_GET_STREAMINFO
ExecutionMode BasXml:
RSR_MDX_BXML_GET_DATA
RSR_MDX_BXML_GET_GZIP_DATA
RSR_MDX_BXML_GET_INFO
RSR_MDX_BXML_SET_BINDING
Metadati:
BAPI_MDPROVIDER_GET_DIMENSIONS
BAPI_MDPROVIDER_GET_CATALOGS
BAPI_MDPROVIDER_GET_CUBES
BAPI_MDPROVIDER_GET_MEASURES
BAPI_MDPROVIDER_GET_HIERARCHYS
BAPI_MDPROVIDER_GET_LEVELS
BAPI_MDPROVIDER_GET_PROPERTIES
BAPI_MDPROVIDER_GET_MEMBERS
BAPI_MDPROVIDER_GET_VARIABLES
Informazioni:
BAPI_IOBJ_GETDETAIL (obbligatorio per le dimensioni tipiche (DATS, TIMS))
BAPI_USER_GET_DETAIL (usato solo per l'interfaccia flat)
RFC_READ_TABLE (obbligatorio per le chiamate a nomi di catalogo e a determinati valori di variabile)
Potrebbe essere chiamato dal connettore SAP .NET sottostante:
RFC_GET_FUNCTION_INTERFACE
FUNCTION_IMPORT_INTERFACE
DDIF_FIELDINFO_GET
SYSTEM_FINISH_ATTACH_GUI
BGRFC_DEST_CONFIRM
BGRFC_CHECK_UNIT_STATE_SERVER
BGRFC_DEST_SHIP
ARFC_DEST_SHIP
RFC_FUNCTION_SEARCH
RFC_SYSTEM_INFO
RFC_SET_REG_SERVER_PROPERTY
RFC_DOCU
SEO_GET_CLIF_REMOTE
SYSTEM_PREPARE_ATTACH_GUI
API_CLEAR_TID
ARFC_DEST_CONFIRM
Metodo non trovato 'Int32 SAP. Middleware.Connector.RfcBaseException.get_ErrorCode ()
Verificare che il connettore SAP .NET sia installato correttamente. Vedere Eseguire un'installazione pulita del
connettore SAP .NET.
Questo errore viene visualizzato quando la versione installata nella GaC è inferiore alla versione 3.0.18.0
prevista. Nota SAP 2417315 questo scenario.
Proprietà della stringa di connessione impostate dal connettore
Quando vengono forniti sia il nome del partner SNC che la libreria SNC, il connettore SAP BW Application
Server (implementazione 2.0) imposta queste proprietà nella stringa di connessione:
SNC_MODE — SncModeApply
SNC_LIB con il percorso della libreria specificato; se si tratta di una variabile di ambiente, viene — espansa a
questo punto
SNC_PARTNERNAME con — il valore fornito
SNC_QOP = RfcConfigParameters.RfcSncQOP.Default
Vengono usati per le connessioni SAP BW server applicazioni e SAP BW server messaggi.
Per entrambi i tipi di connessione, il connettore imposta:
LANG (lingua)
AREA
Per la SAP BW del server applicazioni, il connettore imposta:
ASHOST (AppServerHost)
SYSNR (SystemNumber)
Per SAP BW connessioni al server messaggi, il connettore imposta:
MSHOST (MessageServerHost)
SYSID (SystemID)
GROUP (LogonGroup)
Comando MDX non valido con <internal>
Questo errore proviene direttamente dal server SAP BW. L'implementazione 1 del connettore, basata su RFC
netweaver, non ha esposto questi errori all'utente, ma ha restituito un set di risultati vuoto.
Questo problema viene descritto nelle note SAP seguenti. L'accesso a queste note richiede un utente S. Per
applicare le correzioni pertinenti per questo problema, contattare il team di SAP Basis.
1084454 — MDX: Errore di sistema "Comando MDX non valido con <internal> "
1282785 — MDX: Errore di sistema "Comando MDX non valido con <internal> "
401607 errori — nel comando MDX con CROSSJOIN nel filtro dei dati
1786009 — MDX non valido quando si usa una formula membro con caratteri speciali
Inoltre, per altri errori simili, è possibile esaminare il contenuto delle note SAP seguenti e applicarle in base alle
esigenze dell'ambiente:
1142664 — MDX: Nota SAP composita sui miglioramenti delle prestazioni
1156101 — MDX: nota SAP composita sui dati non corretti

Problemi e limitazioni
Se si modificano i nomi delle variabili in un cubo SAP, il report DirectQuery viene interrotto e non irreversibile
Si verificano i sintomi seguenti:
Messaggio di errore— [Expression.Error] The import [XXXX] matches no exports.

Nei log— Message: [Expression.Error] The key didn't match any rows in the table.

StackTrace:

at Microsoft.Mashup.Engine1.Runtime.TableValue.get_Item(Value key)
at
Microsoft.Mashup.Engine1.Library.Cube.CubeParametersModule.Cube.ApplyParameterFunctionValue.GetParame
terValue(CubeValue cubeValue, Value parameter)
at
Microsoft.Mashup.Engine1.Library.Cube.CubeParametersModule.Cube.ApplyParameterFunctionValue.TypedInvo
ke(TableValue cube, Value parameter, Value arguments)
Detail: [Key = [Id = \"[!V000004]\"], Table = #table({...}, {...})]

Una possibile soluzione alternativa consiste nel:


1. Creare una copia del file PBIX (in quanto potrebbero verificarsi interruzioni).
2. Aggiungere una variabile di ambiente denominata PBI_AlwaysEnableQueryEditor con valore true. Questa
impostazione consentirà l'accesso all'editor di query anche in modalità DirectQuery.

NOTE
Questa variabile di ambiente non è supportata, pertanto deve essere usata solo come descritto qui.

3. Fare clic con il pulsante destro del mouse sulla query "Cube" e scegliere Editor avanzato .
4. La query deve avere una riga che inizia con "{Cube.ApplyParameter, "[! V000004]" (parametro mancante).
Rimuovere la riga.
5. Selezionare Operazione completata .
6. Chiudere il editor di Power Query.
7. Aggiornare l'oggetto visivo interessato.
Se la soluzione alternativa precedente non funziona, l'unica correzione alternativa consiste nel ricreare il report.
Dati numerici da SAP BW

NOTE
Le informazioni seguenti si applicano solo quando si usa Implementation 1.0 del connettore SAP BW o Implementation
2.0 del connettore SAP BW con la modalità Flattening (quando ExecutionMode=67).

Gli account utente SAP BW impostazioni predefinite per la formattazione dei valori decimali o di data/ora
quando vengono visualizzati all'utente nell'interfaccia utente grafica SAP.
Le impostazioni predefinite vengono mantenute nel sistema SAP nel profilo utente per un account e l'utente può
visualizzare o modificare queste impostazioni nell'interfaccia utente grafica SAP con il percorso di menu
System > User Profile Own > Data .

Power BI Desktop esegue una query sul sistema SAP per la notazione decimale dell'utente connesso e usa tale
notazione per formattare i valori decimali nei dati SAP BW.
SAP BW restituisce i dati decimali con , (virgola) o . (punto) come separatore decimale. Per specificare quale
di questi simboli verrà usato da SAP BW come separatore decimale, il driver usato da Power BI Desktop esegue
una chiamata a BAPI_USER_GET_DETAIL . Questa chiamata restituisce una struttura denominata DEFAULTS , con un
campo denominato DCPFM che archivia Decimal Format Notation (Notazione formato decimale). Il campo
accetta uno dei seguenti valori:
" " (spazio) = Il separatore decimale è la virgola: N.NNN,NN
"X" = Il separatore decimale è il punto: N,NNN.NN
"Y" = Il separatore decimale è N NNN NNN,NN
I clienti che hanno segnalato questo problema hanno rilevato che la chiamata a non riesce per un determinato
utente, che mostra i dati non corretti, con un messaggio di errore simile al BAPI_USER_GET_DETAIL seguente:

You are not authorized to display users in group TI:


<item>
<TYPE>E</TYPE>
<ID>01</ID>
<NUMBER>512</NUMBER>
<MESSAGE>You are not authorized to display users in group TI</MESSAGE>
<LOG_NO/>
<LOG_MSG_NO>000000</LOG_MSG_NO>
<MESSAGE_V1>TI</MESSAGE_V1>
<MESSAGE_V2/>
<MESSAGE_V3/>
<MESSAGE_V4/>
<PARAMETER/>
<ROW>0</ROW>
<FIELD>BNAME</FIELD>
<SYSTEM>CLNTPW1400</SYSTEM>
</item>
Per risolvere questo errore, gli utenti devono chiedere all'amministratore SAP di concedere all SAP BW utente
usato Power BI il diritto di eseguire BAPI_USER_GET_DETAIL . Vale anche la pena verificare che l'utente abbia il
valore DCPFM richiesto, come descritto in precedenza in questa soluzione.
Connettività per le query BEx SAP
È possibile eseguire query BEx in Power BI Desktop abilitando una proprietà specifica, come illustrato nella
figura seguente:

Limitazione dell'interfaccia MDX


Una limitazione dell'interfaccia MDX è che le variabili long perdono il nome tecnico e vengono sostituite da
V00000#.
Nessuna anteprima dei dati nella finestra Strumento di navigazione
In alcuni casi, la finestra di dialogo Strumento di navigazione non visualizza un'anteprima dei dati e fornisce
invece un riferimento all'oggetto non impostato su un'istanza di un messaggio di errore dell'oggetto.
Gli utenti SAP devono accedere a moduli di funzione BAPI specifici per ottenere i metadati e recuperare dati da
InfoProvider di SAP BW. I moduli includono:
BAPI_MDPROVIDER_GET_CATALOGS
BAPI_MDPROVIDER_GET_CUBES
BAPI_MDPROVIDER_GET_DIMENSIONS
BAPI_MDPROVIDER_GET_HIERARCHYS
BAPI_MDPROVIDER_GET_LEVELS
BAPI_MDPROVIDER_GET_MEASURES
BAPI_MDPROVIDER_GET_MEMBERS
BAPI_MDPROVIDER_GET_VARIABLES
BAPI_IOBJ_GETDETAIL
Per risolvere il problema verificare che l'utente abbia accesso ai vari moduli MDPROVIDER e a
BAPI_IOBJ_GETDETAIL . Per altre opzioni di risoluzione per questo problema o problemi simili, è possibile abilitare
la funzionalità di traccia. Selezionare File > Opzioni e impostazioni > Opzioni . In Opzioni selezionare
Diagnostica e quindi selezionare Abilita traccia . Tentare il recupero dei dati da SAP BW mentre è attiva la
traccia ed esaminare il file di traccia per altri dettagli.
Eccezioni di memoria
In alcuni casi, potrebbe verificarsi uno degli errori di memoria seguenti:
Message: No more memory available to add rows to an internal table.
Message: [DataSource.Error] SAP Business Warehouse: The memory request for [number] bytes could not be
complied with.
Message: The memory request for [number] bytes could not be complied with.

Queste eccezioni di memoria derivano dal server SAP BW e sono dovute all'insufficiente memoria disponibile
del server per elaborare la query. Ciò può verificarsi quando la query restituisce un set di risultati di grandi
dimensioni o quando la query è troppo complessa per essere gestita dal server, ad esempio quando una query
ha molti crossjoin.
Per risolvere questo errore, è consigliabile semplificare la query o dividerla in query più piccole. Se possibile,
eseguire il push di altre aggregazioni al server. In alternativa, contattare il team sap basis per aumentare le
risorse disponibili nel server.
Il caricamento di stringhe di testo di lunghezza superiore a 60 caratteri in Power BI Desktop ha esito negativo
In alcuni casi è possibile che le stringhe di testo vengano troncate a 60 caratteri in Power BI Desktop.
Per prima cosa, seguire le istruzioni in 2777473 - MDX: domande frequenti per Power BI accesso a BW o
BW/4HANA e verificare se il problema viene risolto.
Poiché il connettore Power Query SAP Business Warehouse usa l'interfaccia MDX fornita da SAP per l'accesso di
terze parti, è necessario contattare SAP per le possibili soluzioni perché sono proprietarie del livello tra
l'interfaccia MDX e il server SAP BW. Chiedere quanto "long text is XL" può essere specificato per lo scenario
specifico.
Database SAP HANA
07/12/2021 • 6 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Analysis Services

Tipi di autenticazione supportati Basic


Database
Windows

Documentazione di riferimento delle funzioni SapHana.Database

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
È necessario un account SAP per accedere al sito Web e scaricare i driver. In caso di dubbi, contattare
l'amministratore SAP dell'organizzazione.
Per usare SAP HANA in Power BI Desktop o Excel, è necessario che il driver ODBC di SAP HANA sia installato nel
computer client locale per il corretto funzionamento della connessione dati SAP HANA. È possibile scaricare gli
strumenti client di SAP HANA dalla pagina degli strumenti di sviluppo SAP, in cui è presente il driver ODBC
necessario. In alternativa, è possibile scaricarlo dalla pagina SAP Software Download Center. Nel portale
Software cercare il CLIENT SAP HANA per computer Windows. Dato che SAP Software Download Center cambia
struttura di frequente, non sono disponibili indicazioni più specifiche per la navigazione nel sito. Per istruzioni
sull'installazione del driver ODBC SAP HANA, vedere Installing SAP HANA ODBC Driver on Windows 64
Bits(Installazione del driver ODBC Windows a 64 bit).
Per usare SAP HANA in Excel, è necessario che nel computer client locale sia installato il driver ODBC a 32 o a 64
bit SAP HANA (a seconda che si usi la versione a 32 bit o a 64 bit di Excel).
Questa funzionalità è disponibile solo in Excel per Windows se si ha una sottoscrizione Office 2019 o Microsoft
365 2019. Se si è un sottoscrittore Microsoft 365, assicurarsi di avere la versione più recente di Office.
È supportato HANA 1.0 SPS 12rev122.09, 2.0 SPS 3rev30 e BW/4HANA 2.0.

Funzionalità supportate
Importa
DirectQuery
Avanzato
Istruzione SQL

Connessione a un database SAP HANA da Power Query Desktop


Per connettersi a un database SAP HANA da Power Query Desktop:
1. Selezionare Get Data > SAP HANA database in Power BI Desktop o From Database > From SAP
HANA Database (Da SAP HANA database) nella barra multifunzione Dati Excel.
2. Immettere il nome e la porta del server SAP HANA a cui connettersi. L'esempio nella figura seguente usa
SAPHANATestServer sulla porta 30015 .

Per impostazione predefinita, il numero di porta è impostato per supportare un database contenitore
singolo. Se il database SAP HANA può contenere più contenitori di database multi-contenitore,
selezionare Database di sistema multi-contenitore (30013). Se si vuole connettersi a un database
tenant o a un database con un numero di istanza non predefinito, selezionare Personalizzato dal menu
a discesa Porta.
Se ci si connette a un database SAP HANA da Power BI Desktop, è anche possibile selezionare Importa o
DirectQuer y. L'esempio in questo articolo usa Impor t, che è l'impostazione predefinita e l'unica
modalità per Excel. Per altre informazioni sulla connessione al database tramite DirectQuery in Power BI
Desktop, vedere Connessione to SAP HANA data sources by using DirectQuery in Power BI.
Se si seleziona Opzioni avanzate , è anche possibile immettere un'SQL istruzione. Per altre informazioni
sull'uso di questa SQL, vedere Importare dati da un database usando una query di database nativa.
Dopo aver immesso tutte le opzioni, selezionare OK.
3. Se si accede a un database per la prima volta, verrà richiesto di immettere le credenziali per
l'autenticazione. In questo esempio il server SAP HANA richiede le credenziali utente del database, quindi
selezionare Database e immettere il nome utente e la password. Se necessario, immettere le
informazioni sul certificato del server.
Potrebbe anche essere necessario convalidare il certificato del server. Per altre informazioni sull'uso della
convalida delle selezioni di certificati server, vedere Uso della SAP HANA server. In Power BI Desktop e
Excel la selezione del certificato del server di convalida è abilitata per impostazione predefinita. Se queste
selezioni sono già state impostate in Amministrazione origine dati ODBC, deselezionare la casella di
controllo Convalida cer tificato ser ver . Per altre informazioni sull'uso di Amministrazione origine
dati ODBC per configurare queste selezioni, vedere Configurare SSL per l'accesso client ODBC SAP
HANA.
Per altre informazioni sull'autenticazione, vedere Autenticazione con un'origine dati.
Dopo aver inserito tutte le informazioni necessarie, selezionare Connessione .
4. Nella finestra di dialogo Strumento di navigazione è possibile trasformare i dati nell'editor Power Query
selezionando Trasforma dati oppure caricare i dati selezionando Carica.

Connessione a un database SAP HANA online Power Query


Per connettersi ai SAP HANA dati da Power Query Online:
1. Nella pagina Origini dati selezionare SAP HANA database .
2. Immettere il nome e la porta del server SAP HANA a cui connettersi. L'esempio nella figura seguente usa
SAPHANATestServer sulla porta 30015 .

Se si vuole connettersi a un database tenant o a un database con un numero di istanza non predefinito,
selezionare Personalizzato dal menu a discesa Porta.
3. Selezionare il nome del gateway dati locale da usare per accedere al database.

NOTE
È necessario usare un gateway dati locale con questo connettore, indipendentemente dal fatto che i dati siano
locali o online.

4. Scegliere il tipo di autenticazione da usare per accedere ai dati. È anche necessario immettere un nome
utente e una password.

NOTE
Attualmente, Power Query Online non supporta l'Windows autenticazione. Windows il supporto per
l'autenticazione è previsto per diventare disponibile in pochi mesi.

5. Selezionare Avanti per continuare.


6. Nella finestra di dialogo Strumento di navigazione è possibile trasformare i dati nell'editor Power Query
selezionando Trasforma dati oppure caricare i dati selezionando Carica.

Funzionalità supportate per SAP HANA


L'elenco seguente illustra le funzionalità supportate per SAP HANA. Non tutte le funzionalità elencate di seguito
sono supportate in tutte le implementazioni del connettore SAP HANA database.
Il connettore Power BI Desktop e Excel per un database SAP HANA usa il driver ODBC SAP per offrire la
migliore esperienza utente.
In Power BI Desktop, SAP HANA le opzioni DirectQuery e Import.
Power BI Desktop supporta i modelli in informazioni HANA, ad esempio le viste analitiche e di calcolo, e
ha una navigazione ottimizzata.
Con SAP HANA è anche possibile usare i comandi SQL nell'istruzione SQL di query del database nativo
per connettersi alle tabelle di righe e colonne nelle tabelle del catalogo HANA, che non sono incluse nelle
viste analitiche/di calcolo fornite dall'esperienza Strumento di navigazione. È anche possibile usare il
connettore ODBC per eseguire query su queste tabelle.
Power BI Desktop include la navigazione ottimizzata per i modelli HANA.
Power BI Desktop supporta SAP HANA variabili e parametri di input.
Power BI Desktop supporta le viste di calcolo basate su contenitori HDI.
Per accedere alle viste di calcolo basate su contenitori HDI in Power BI, assicurarsi che gli utenti del
database HANA usati con Power BI abbiano le autorizzazioni per accedere al contenitore di
runtime HDI che archivia le viste a cui si vuole accedere. Per concedere questo accesso, creare un
ruolo che consenta l'accesso al contenitore HDI, quindi assegnare il ruolo all'utente del database
HANA che si userà con Power BI. Questo utente deve anche disporre dell'autorizzazione per
leggere dalle tabelle di sistema nello schema _SYS_BI, come di consueto. Consultare la
documentazione ufficiale di SAP per istruzioni dettagliate su come creare e assegnare ruoli del
database. Questo post di blog SAP può essere un buon punto di partenza.
Esistono attualmente alcune limitazioni per le variabili HANA associate alle viste di calcolo basate
su HDI. Queste limitazioni sono dovute a errori sul lato HANA. In primo luogo, non è possibile
applicare una variabile HANA a una colonna condivisa di una vista di calcolo basata su contenitori
HDI. Per evitare questa limitazione, eseguire l'aggiornamento a HANA 2 versione 37.02 e
successive o a HANA 2 versione 42 e successive. In secondo luogo, i valori predefiniti a più voci
per variabili e parametri attualmente non vengono visualizzati nell'interfaccia utente di Power BI.
Un errore in SAP HANA causa questa limitazione, ma SAP non ha ancora annunciato una
correzione.

Passaggi successivi
Abilitare la crittografia per SAP HANA
Gli articoli seguenti contengono altre informazioni che possono risultare utili quando ci si connette a un SAP
HANA debase.
Gestire l'origine dati - SAP HANA
Usare Kerberos per il Single Sign-On (SSO) a SAP HANA
Abilitare la crittografia per SAP HANA
07/12/2021 • 5 minutes to read

È consigliabile crittografare le connessioni a un server SAP HANA da Power Query Desktop e Power Query
Online. È possibile abilitare la crittografia HANA usando sia OpenSSL che la libreria CommonCryptoLib
(precedentemente nota come sapcrypto) proprietaria di SAP. SAP consiglia di usare CommonCryptoLib, ma le
funzionalità di crittografia di base sono disponibili con entrambe le librerie.
Questo articolo offre una panoramica dell'abilitazione della crittografia tramite OpenSSL e fa riferimento ad
alcune aree specifiche della documentazione sap. Il contenuto e i collegamenti vengono aggiornati
periodicamente, ma per istruzioni e supporto completi, vedere sempre la documentazione SAP ufficiale. Per
configurare la crittografia usando CommonCryptoLib invece di OpenSSL, vedere Come configurare TLS/SSL in
SAP HANA 2.0. Per i passaggi per la migrazione da OpenSSL a CommonCryptoLib, vedere la nota SAP 2093286
(è necessario un account utente SAP).

NOTE
La procedura di configurazione per la crittografia descritta in modo dettagliato in questo articolo si sovrappone ai
passaggi di impostazione e configurazione per l'accesso SSO SAML. Sia che si scelga OpenSSL o CommonCryptoLib come
provider di crittografia del server HANA, assicurarsi che la scelta sia coerente in tutte le configurazioni di crittografia e
SAML.

L'abilitazione della crittografia per SAP HANA tramite OpenSSL prevede quattro fasi. Queste fasi sono descritte
di seguito. Per altre informazioni, vedere Protezione delle comunicazioni tra SAP HANA Studio e SAP HANA
Server tramite SSL.

Usare OpenSSL
Assicurarsi che il server HANA sia configurato per l'uso di OpenSSL come provider di crittografia. Sostituire le
informazioni sul percorso mancanti con l'ID server (SID) del server HANA.

Creare una richiesta di firma del certificato


Creare una richiesta di firma del certificato X509 per il server HANA.
1. Usare SSH per connettersi al computer Linux in cui viene eseguito il server HANA come <sid>adm.
2. Passare alla home directory / usr/sap/<sid>/home.
3. Creare una directory nascosta con il nome _.__ssl_if non esiste già.
4. Eseguire il comando seguente:
openssl req -newkey rsa:2048 -days 365 -sha256 -keyout Server\_Key.pem -out Server\_Req.pem -nodes

Questo comando crea una richiesta di firma del certificato e una chiave privata. Una volta firmato, il certificato è
valido per un anno (vedere il parametro -days). Quando viene richiesto il nome comune (CN), immettere il
nome di dominio completo (FQDN) del computer in cui è installato il server HANA.

Ottenere il certificato firmato


Ottenere il certificato firmato da un'autorità di certificazione (CA) ritenuta attendibile dai client che verranno
usati per connettersi al server HANA.
1. Se si ha già un'autorità di certificazione aziendale attendibile (rappresentata da CA_Cert.pem e
CA_Key.pem nell'esempio seguente), firmare la richiesta di certificato eseguendo questo comando:

openssl x509 -req -days 365 -in Server\_Req.pem -sha256 -extfile /etc/ssl/openssl.cnf -extensions
usr\_cert -CA CA\_Cert.pem -CAkey CA\_Key.pem -CAcreateserial -out Server\_Cert.pem

Se non si ha già un'autorità di certificazione che è possibile usare, è possibile creare una CA radice
seguendo la procedura illustrata inProtezione delle comunicazioni tra SAP HANA Studio e SAP HANA
Server tramite SSL.
2. Creare la catena di certificati del server HANA combinando il certificato del server, la chiave e il certificato
della CA (il nome key.pem rappresenta la convenzione per SAP HANA):

cat Server\_Cert.pem Server\_Key.pem CA\_Cert.pem \> key.pem

3. Creare una copia di CA_Cert.pem denominata trust.pem (il nome trust.pem rappresenta la convenzione
per SAP HANA):

cp CA\_Cert.pem trust.pem

4. Riavviare il server HANA.


5. Verificare la relazione di trust tra un client e la CA usata per firmare il certificato del server SAP HANA.
Il client deve considerare attendibile l'autorità di certificazione usata per firmare il certificato X509 del
server HANA affinché sia possibile stabilire una connessione crittografata al server HANA dal computer
del client.
Ci sono diversi modi per assicurarsi che questa relazione di trust esista, usando Microsoft Management
Console (MMC) o la riga di comando. È possibile importare il certificato X509 della CA (trust.pem) nella
cartella Autorità di cer tificazione radice disponibile nell'elenco locale per l'utente che stabilirà la
connessione o nella stessa cartella del computer client, se necessario.
Per poter importare il certificato nella cartella Autorità di certificazione radice disponibile nell'elenco
locale, è necessario innanzitutto convertire trust.pem in un file con estensione crt, ad esempio eseguendo
il comando OpenSSL seguente:

openssl x509 -outform der -in your-cert.pem -out your-cert.crt

Per informazioni sull'uso di OpenSSL per la conversione, vedere la documentazione di OpenSSL.

Testare la connessione
Prima di poter convalidare un certificato del server nel servizio Power BI online, è necessario disporre di
un'origine dati già impostata per il gateway dati locale. Se non è già stata impostata un'origine dati per testare la
connessione, è necessario crearne una. Per configurare l'origine dati nel gateway:
1. Nel servizio Power BI selezionare icona di installazione.
2. Nell'elenco a discesa selezionare Gestisci gateway.
3. Selezionare i puntini di sospensione (...) accanto al nome del gateway che si vuole usare con questo
connettore.
4. Nell'elenco a discesa selezionare Aggiungi origine dati.
5. In Origine dati Impostazioni immettere il nome dell'origine dati che si vuole chiamare nella casella di
testo Nome origine dati .
6. In Tipo di origine dati selezionare SAP HANA .
7. Immettere il nome del server in Ser ver e selezionare il metodo di autenticazione.
8. Continuare seguendo le istruzioni della procedura successiva.
Testare la connessione in Power BI Desktop o nel servizio Power BI.
1. Nella Power BI Desktop o nella pagina Impostazioni origine dati del servizio Power BI verificare che
l'opzione Convalida certificato ser ver sia abilitata prima di tentare di stabilire una connessione al server
SAP HANA. Per Provider di crittografia SSL , selezionare mscrypto se è stata seguita la procedura di
configurazione di OpenSSL e commoncrypto se tale libreria è stata configurata come provider di
crittografia. Lasciare vuoti i campi Archivio chiavi SSL e Archivio attendibilità SSL.
Power BI Desktop
Servizio Power BI

2. Verificare che sia possibile stabilire una connessione crittografata al server con l'opzione Convalida il
cer tificato del ser ver abilitata, caricando i dati in Power BI Desktop o aggiornando un report
pubblicato nel servizio Power BI.
Si noti che sono necessarie solo le informazioni del provider di crittografia SSL. Tuttavia, l'implementazione
potrebbe richiedere l'uso anche dell'archivio chiavi e dell'archivio attendibilità. Per altre informazioni su questi
archivi e su come crearli, vedere Proprietà di connessione TLS/SSL lato client (ODBC).

Informazioni aggiuntive
Proprietà di configurazione TLS/SSL lato server per la comunicazione esterna (JDBC/ODBC)

Passaggi successivi
Configurare SSL per l'accesso client ODBC SAP HANA
Configurare SSL per l'accesso client ODBC SAP
HANA
07/12/2021 • 2 minutes to read

Se ci si connette a un database SAP HANA da Power Query Online, potrebbe essere necessario configurare
diversi valori di proprietà per la connessione. Queste proprietà possono essere il provider di crittografia SSL, un
archivio chiavi SSL e un archivio di attendibilità SSL. Potrebbe anche essere necessario crittografare la
connessione. In questo caso, è possibile utilizzare l'applicazione Amministrazione origine dati ODBC fornita con
Windows per impostare queste proprietà.
In Power BI Desktop e Excel, è possibile configurare queste proprietà quando si accede per la prima volta usando
il connettore Power Query SAP HANA database. La selezione Convalida cer tificato ser ver nella finestra di
dialogo di autenticazione è abilitata per impostazione predefinita. È quindi possibile immettere i valori nelle
proprietà Provider di crittografia SSL , Archivio chiavi SSL e Archivio attendibilità SSL in questa finestra di
dialogo. Tuttavia, tutte le selezioni di convalida del certificato server nella finestra di dialogo di autenticazione in
Power BI Desktop e Excel sono facoltative. Sono facoltativi nel caso in cui si voglia usare Amministrazione
origine dati ODBC per configurarli a livello di driver.

NOTE
Prima di poter impostare queste proprietà in Amministrazione SAP HANA origine dati ODBC, è necessario che sia
installato il driver ODBC (a 32 bit o a 64 bit) appropriato.

Se si usa Amministratore origine dati ODBC per configurare il provider di crittografia SSL, l'archivio chiavi SSL e
l'archivio attendibilità SSL in Power BI o Excel, deselezionare la casella di controllo Convalida certificato ser ver
quando viene visualizzata la finestra di dialogo di autenticazione.
Per utilizzare Amministrazione origine dati ODBC per configurare le selezioni del certificato del server di
convalida:
1. Nell'elenco Windows menu Start selezionare Windows di dati ODBC in Strumenti di >
amministrazione . Se si usa una versione a 32 bit di Power BI Desktop o Excel, aprire Origini dati ODBC
(32 bit), altrimenti aprire Origini dati ODBC (64 bit).
2. Nella scheda DSN utente selezionare Aggiungi .
3. Nella finestra di dialogo Crea nuova origine dati selezionare il driver HDBODBC e quindi selezionare
Fine.

4. Nella finestra di dialogo Configurazione ODBC SAP HANA immettere un Nome origine dati .
Immettere quindi le informazioni sul server e sul database e selezionare Validate the TLS/SSL
cer tificate (Convalida cer tificato TLS/SSL).
5. Selezionare il pulsante Advanced (Avanzate).
6. Nella finestra di dialogo Advanced ODBC Connection Proper ty Setup (Configurazione avanzata
proprietà connessione ODBC) selezionare il pulsante Aggiungi.

7. Nella finestra di dialogo Aggiungi/Modifica proprietà di connessione immettere


sslCr yptoProvider nella casella di testo Proprietà.
8. Nella casella di testo Valore immettere il nome del provider di crittografia che verrà utilizzato:
sapcr ypto , commoncr ypto , openssl o mscr ypto .

9. Selezionare OK .
10. Se necessario, è anche possibile aggiungere le proprietà e i valori sslKeyStore e sslTrustStore facoltativi.
Se la connessione deve essere crittografata, aggiungere ENCRYPT come proprietà e TRUE come valore.
11. Nella finestra di dialogo Impostazione avanzata proprietà di connessione ODBC selezionare OK.
12. Per testare la connessione impostata, selezionare Test connessione nella finestra di dialogo
Configurazione ODBC SAP HANA connessione.
13. Al termine della connessione di test, selezionare OK.
Per altre informazioni sulle proprietà SAP HANA di connessione, vedere Proprietà di configurazione TLS/SSL
lato server per la comunicazione esterna (JDBC/ODBC).

NOTE
Se si seleziona Convalida certificato ser ver nella finestra di dialogo di autenticazione di SAP HANA in Power BI Desktop o
Excel, qualsiasi valore immesso nel provider di crittografia SSL, nell'archivio chiavi SSL e nell'archivio attendibilità SSL nella
finestra di dialogo di autenticazione eseguirà l'override delle selezioni impostate con Amministrazione origine dati ODBC.

Passaggi successivi
SAP HANA risoluzione dei problemi del connettore di database
Risoluzione dei problemi
07/12/2021 • 2 minutes to read

La sezione seguente descrive alcuni problemi che possono verificarsi durante l'uso del connettore Power Query
SAP HANA, insieme ad alcune possibili soluzioni.

Limitazioni e problemi noti


Esistono alcune limitazioni all'uso di SAP HANA, come illustrato di seguito:
Le stringhe NVARCHAR vengono troncate a una lunghezza massima di 4000 caratteri Unicode.
SMALLDECIMAL non è supportato.
VARBINARY non è supportato.
Le date valide sono comprese tra 30/12/1899 e 31/12/9999.

Errore: questo connettore richiede l'installazione di uno o più


componenti aggiuntivi
Il connettore cerca il driver nel Registro di sistema, quindi se il driver non è stato installato correttamente non
verrà visualizzato.
La chiave del Registro di sistema è:
HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers

Se si è in un computer a 64 bit, ma Excel o Power BI Desktop è a 32 bit (come negli screenshot seguenti), è
possibile controllare il driver nel nodo WOW6432:
HKEY_LOCAL_MACHINE\Software\WOW6432Node\ODBC\ODBCINST.INI\ODBC Drivers

Si noti che il driver deve corrispondere alla versione in bit del Excel o Power BI Desktop. Se si usa:
A 32 bit Excel/Power BI Desktop, è necessario il driver ODBC a 32 bit (HDBODBC32).
A 64 bit Excel/Power BI Desktop, è necessario il driver ODBC a 64 bit (HDBODBC).
Il driver viene in genere installato eseguendo hdbsetup.exe.
Infine, il driver deve anche essere visualizzato come "ODBC DataSources 32 bit" o "ODBC DataSources 64 bit".

Raccogliere SAP HANA tracce del driver ODBC


Per acquisire una SAP HANA traccia:
1. Aprire una finestra della riga di comando.
2. A seconda dell'installazione, potrebbe essere necessario passare a C:\Programmi anziché a C:\Programmi
(x86). Il comando potrebbe anche essere hdbodbc_cons.exe anziché hdbodb_cons32.exe.
3. Digitare i comandi seguenti:
cd C:\Programmi (x86)\sap\hdbclient
hdbodbc_cons32.exe config trace api on hdbodbc_cons32.exe config trace sql on
hdbodbc_cons32.exe config trace debug on hdbodbc_cons32.exe
config trace shor t on hdbodbc_cons32.exe config trace packet 99999999999999
hdbodbc_cons32.exe config trace
filename

D:\tmp\odbctraces\hana-%p.html
hdbodbc_cons32.exe trace refresh hdbodbc_cons32.exe show
all
4. Aprire Power BI, cancellare la cache ed eseguire di nuovo lo scenario.
5. Al termine, comprimere le tracce:
Dal percorso del file di log nella scheda Traccia di Amministratore origine dati ODBC.
Dalla traccia HANA in base al percorso configurato con il comandohdbodbc_cons32.exe config trace
filename .
6. Disabilitare la traccia usando il comando seguente:
hdbodbc_cons.exe traccia disattivata
Quando si acquisisce SAP HANA traccia, tenere presente quanto segue:
I comandi di traccia devono essere eseguiti come utente che eseguirà il processo Mashup che accede SAP
HANA server.
Il percorso del file di traccia specificato deve essere scrivibile dall'utente che esegue il processo Mashup.
Ad esempio:
Per acquisire connessioni non SSO dal gateway, assicurarsi di usare l'utente del servizio gateway. In questo
caso, eseguire la finestra della riga di comando come utente del gateway quando si vuole eseguire il
hdodbc_cons.exe chiamate. Assicurarsi che l'utente del server gateway possa scrivere nel percorso del file di
log specificato.
Per acquisire le connessioni SSO dal gateway, usare l'utente SSO.

SAP HANA: privilegi insufficienti


Questo messaggio potrebbe essere dovuto a:
L'utente non dispone legittimamente di privilegi sufficienti per la visualizzazione a cui sta tentando di
accedere.
Il problema noto seguente:
Problema: non è possibile connettersi a SAP Hana da PBI Desktop usando il client SAP 2.0 37.02, ma se
si esegue il downgrade della versione client alla versione 1.00.120.128, funziona.
ERROR MESSAGE: External error: ERROR [S1000] [SAP AG][LIBODBCHDB DLL][HDBODBC] General error;258
insufficient privilege: [2950] user is not authorized

Risposta da SAP:
Sfortunatamente, si tratta di un problema SAP, quindi è necessario attendere una correzione da SAP.
Cartella di SharePoint
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights

Tipi di autenticazione supportati Anonimo


Account Microsoft
Windows

Documentazione di riferimento per le funzioni SharePoint.Contents


SharePoint.Files

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

NOTE
AAD/OAuth per SharePoint locale non è supportato tramite il gateway dati locale.

Funzionalità supportate
Percorso della cartella
Combina
Combinare e caricare
Combinare e trasformare

Determinare l'URL del sito


Quando ci si connette a un SharePoint, verrà chiesto di immettere l'URL del sito. Per trovare l'URL del sito che
contiene la cartella SharePoint, aprire prima una pagina in SharePoint. Da una pagina in SharePoint, è in genere
possibile ottenere l'indirizzo del sito selezionando Home nel riquadro di spostamento o l'icona per il sito nella
parte superiore. Copiare l'indirizzo dalla barra degli indirizzi del Web browser e salvarlo per un secondo
momento.
Connessione una cartella SharePoint da Power Query Desktop
Per connettersi a una SharePoint cartella:
1. In Ottieni dati selezionare SharePoint car tella .
2. Incollare SharePoint URL del sito copiato nella casella di testo Determinare l'URL del sito nella finestra di
dialogo SharePoint cartella. In questo esempio l'URL del sito è
https://contoso.sharepoint.com/marketing/data . Se l'URL del sito immesso non è valido, viene
visualizzata accanto alla casella di testo URL verrà visualizzata l'icona di avviso.

Selezionare OK per continuare.


3. Se è la prima volta che si visita questo indirizzo del sito, selezionare il metodo di autenticazione
appropriato. Immettere le credenziali e scegliere il livello a cui applicare queste impostazioni. Selezionare
Connetti .
Per altre informazioni sui metodi di autenticazione e sulle impostazioni di livello, vedere Autenticazione
con un'origine dati.
4. Quando si seleziona SharePoint cartella da usare, vengono visualizzate le informazioni sui file relativi a
tutti i file SharePoint cartella. Vengono inoltre visualizzate le informazioni sui file di qualsiasi sottocartella.

5. Selezionare Combina & Trasforma dati per combinare i dati nei file della cartella SharePoint
selezionata e caricare i dati nel editor di Power Query per la modifica. Oppure selezionare Combina &
carica per caricare i dati da tutti i file nella cartella SharePoint direttamente nell'app.

NOTE
I pulsanti Combina & Trasforma dati e Combina & carica sono i modi più semplici per combinare i dati presenti nei file
della cartella SharePoint specificata. È anche possibile usare il pulsante Carica o i pulsanti Trasforma dati per combinare
anche i file, ma ciò richiede passaggi più manuali.

Connessione una cartella SharePoint da Power Query Online


Per connettersi a una SharePoint cartella:
1. Nella pagina Origini dati selezionare SharePoint car tella .
2. Incollare SharePoint URL del sito copiato nella casella di testo Determinare l'URL del sito nella finestra di
dialogo SharePoint cartella. In questo esempio l'URL del sito è
https://contoso.sharepoint.com/marketing/data .

3. Se la SharePoint locale, immettere il nome di un gateway dati locale.


4. Selezionare il tipo di autenticazione e immettere le credenziali necessarie.
5. Selezionare Avanti .
6. Quando si seleziona SharePoint cartella da usare, vengono visualizzate le informazioni sui file relativi a
tutti i file SharePoint cartella. Vengono inoltre visualizzate le informazioni sui file di qualsiasi sottocartella.

7. Selezionare Combina per combinare i dati nei file della cartella SharePoint e caricare i dati nel editor di
Power Query per la modifica.

NOTE
Il pulsante Combina è il modo più semplice per combinare i dati trovati nei file SharePoint cartella specificata. È
anche possibile usare i pulsanti Trasforma dati per combinare i file, ma ciò richiede passaggi più manuali.
Risoluzione dei problemi
Unione di file
Tutti i file nella SharePoint selezionata verranno inclusi nei dati da combinare. Se si dispone di file di dati che si
trovano in una sottocartella della cartella SharePoint selezionata, verranno inclusi anche tutti questi file. Per
assicurarsi che la combinazione dei dati del file funzioni correttamente, assicurarsi che tutti i file nella cartella e
nelle sottocartelle presentino lo stesso schema.
In alcuni casi, nel sito potrebbero essere presenti più cartelle SharePoint che contengono tipi diversi di dati. In
questo caso, è necessario eliminare i file non necessari. Per eliminare questi file:
1. Nell'elenco dei file della SharePoint selezionata selezionare Trasforma dati .

2. Nell'editor Power Query scorrere verso il basso per trovare i file da mantenere.

3. Nell'esempio illustrato nello screenshot precedente, i file necessari sono le ultime righe della tabella.
Selezionare Rimuovi righe, immettere il valore dell'ultima riga prima dei file da mantenere (in questo
caso 903) e selezionare OK.

4. Dopo aver rimosso tutti i file non necessari, selezionare Combina file dalla barra multifunzione Home
per combinare i dati di tutti i file rimanenti.
Per altre informazioni sulla combinazione di file, vedere Combinare i file in Power Query.
Caratteri speciali del nome file
Se un nome file contiene determinati caratteri speciali, potrebbe verificarsi errori di autenticazione a causa del
troncamento del nome file nell'URL. Se si verificano errori di autenticazione insoliti, assicurarsi che tutti i nomi di
file in uso non contengano i caratteri speciali seguenti.
# % $

Se questi caratteri sono presenti nel nome file, il proprietario del file deve rinominare il file in modo che NON
contenga nessuno di questi caratteri.
Elenco SharePoint
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Anonimo


Windows
Account Microsoft

Documentazione di riferimento delle funzioni SharePoint.Contents


SharePoint.Files
SharePoint.Tables

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

NOTE
AAD/OAuth per SharePoint locale non è supportato con il gateway dati locale.

Funzionalità supportate
Site URL

Determinare l'URL del sito


Quando ci si connette a un sito SharePoint, verrà richiesto di immettere l'URL del sito. Per trovare l'URL del sito
che contiene l'SharePoint, aprire prima una pagina in SharePoint. Da una pagina in SharePoint è in genere
possibile ottenere l'indirizzo del sito selezionando Home nel riquadro di spostamento o l'icona del sito nella
parte superiore. Copiare l'indirizzo dalla barra degli indirizzi del Web browser e salvarlo per un momento
successivo.
Connessione a un SharePoint da Power Query Desktop
Per connettersi a un SharePoint seguente:
1. In Get Data (Ottieni dati) selezionare SharePoint List (Elenco).
2. Incollare SharePoint'URL del sito copiato in Determinare l'URL del sito nel campo URL sito nella finestra
di dialogo apri.

Se l'indirizzo URL immesso non è valido, viene visualizzata verrà visualizzata l'icona di avviso accanto
alla casella di testo URL sito.
Selezionare OK per continuare.
3. Se è la prima volta che si visita questo indirizzo del sito, selezionare il metodo di autenticazione
appropriato. Immettere le credenziali e scegliere il livello a cui applicare queste impostazioni. Selezionare
Connetti .
Per altre informazioni sui metodi di autenticazione e sulle impostazioni a livello, vedere Autenticazione
con un'origine dati.
4. Nello Strumento di navigazione è possibile selezionare una posizione, quindi trasformare i dati
nell'editor Power Query selezionando Trasforma dati oppure caricare i dati selezionando Carica.

Connessione a un SharePoint da Power Query Online


Per connettersi a un SharePoint seguente:
1. Nella pagina Origini dati selezionare l'SharePoint dati .
2. Incollare SharePoint'URL del sito copiato in Determinare l'URL del sito nel campo URL sito nella finestra
di dialogo apri.
3. Immettere il nome di un gateway dati locale, se necessario.
4. Selezionare il tipo di autenticazione e immettere le credenziali necessarie.
5. Selezionare Avanti .
6. Nello Strumento di navigazione è possibile selezionare una posizione, quindi trasformare i dati nell'editor
Power Query selezionando Avanti.

Risoluzione dei problemi


Usare l'indirizzo SharePoint radice
Assicurarsi di specificare l'indirizzo radice del sito SharePoint, senza sottocartelle o documenti. Usare, ad
esempio, un collegamento simile al seguente: https://contoso.sharepoint.com/teams/ObjectModel/
Comportamento incoerente dei dati booleani
Quando si usa il connettore SharePoint list, i valori booleani vengono rappresentati in modo incoerente come
TRUE/FALSE o 1/0 negli ambienti Power BI Desktop e Power BI servizio. Ciò può comportare dati errati, filtri non
corretti e oggetti visivi vuoti.
Questo problema si verifica solo quando il tipo di dati non è impostato in modo esplicito per una colonna nel
visualizzazione Query di Power BI Desktop. Per sapere che il tipo di dati non è impostato, vedere l'immagine
"ABC 123" nella colonna e il tipo di dati "Qualsiasi" nella barra multifunzione, come illustrato di seguito.
L'utente può forzare la coerenza dell'interpretazione impostando in modo esplicito il tipo di dati per la colonna
tramite il editor di Power Query. Ad esempio, l'immagine seguente mostra la colonna con un tipo booleano
esplicito.

Uso di OData per accedere a un SharePoint dati


Se si usa un feed OData per accedere a un elenco SharePoint, esiste una limitazione di circa 2100 caratteri per
l'URL che si usa per la connessione. Altre informazioni: Lunghezza massima URL

Passaggi successivi
Ottimizzare Power Query durante l'espansione di colonne di tabella
Elenco SharePoint Online
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights

Tipi di autenticazione supportati Anonimo


Windows
Account Microsoft

Documentazione di riferimento per le funzioni SharePoint.Contents


SharePoint.Files
SharePoint.Tables

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Site URL

Determinare l'URL del sito


Quando ci si connette a un SharePoint, verrà chiesto di immettere l'URL del sito. Per trovare l'URL del sito che
contiene l'SharePoint online, aprire prima una pagina in SharePoint. Da una pagina in SharePoint, è in genere
possibile ottenere l'indirizzo del sito selezionando Home nel riquadro di spostamento o l'icona per il sito nella
parte superiore. Copiare l'indirizzo dalla barra degli indirizzi del Web browser e salvarlo per un secondo
momento.
Connessione a un SharePoint Online da Power Query Desktop
Per connettersi a un SharePoint Online:
1. In Ottieni dati selezionare l'SharePoint Online.
2. Incollare SharePoint'URL del sito copiato in Determinare l'URL del sito nel campo URL sito nella finestra
di dialogo Apri.

Se l'indirizzo URL immesso non è valido, viene visualizzata accanto alla casella di testo URL sito verrà
visualizzata l'icona di avviso.
È anche possibile selezionare l'implementazione 1.0 di questo connettore o l'implementazione beta 2.0.
Altre informazioni: Connessione per SharePoint'elenco online v2.0 (Beta)
Selezionare OK per continuare.
3. Se è la prima volta che si visita questo indirizzo del sito, selezionare il metodo di autenticazione
appropriato. Immettere le credenziali e scegliere il livello a cui applicare queste impostazioni. Selezionare
Connetti .
Per altre informazioni sui metodi di autenticazione e sulle impostazioni di livello, vedere Autenticazione
con un'origine dati.
4. Dallo strumento di navigazione è possibile selezionare una posizione, quindi trasformare i dati
nell'editor di Power Query selezionando Trasforma dati oppure caricare i dati selezionando Carica .

Connessione a un SharePoint Online da Power Query Online


Per connettersi a un SharePoint Online:
1. Nella pagina Origini dati selezionare SharePoint Online .
2. Incollare SharePoint'URL del sito copiato in Determinare l'URL del sito nel campo URL sito nella finestra
di dialogo Apri.
3. Immettere il nome di un gateway dati locale, se necessario.
4. Selezionare il tipo di autenticazione e immettere le credenziali necessarie.
5. Selezionare Avanti .
6. Nello strumento di navigazione è possibile selezionare una posizione, quindi trasformare i dati nell'editor
Power Query selezionando Trasforma dati .

Connessione per SharePoint'elenco online v2.0 (beta)


Nella versione di ottobre 2020 di Power BI Desktop è stata introdotta una versione aggiornata del connettore
SharePoint elenco online. Questo connettore ha migliorato le API e una maggiore usabilità, ma non è
compatibile con le versioni precedenti con l'uso della versione 1.0 del connettore.
Per accedervi, si accederà alla stessa schermata del connettore tramite il passaggio 2 in Connessione a un elenco
SharePoint Onlineda Power Query Desktop . Assicurarsi tuttavia di selezionare 2.0 (Beta) in Implementazione
se non è già selezionato.
Con questo aggiornamento del connettore, sono disponibili due visualizzazioni diverse per gli stessi dati:
Tutto
Default
La visualizzazione Tutti include tutte le colonne create dall'utente e definite dal sistema. È possibile
visualizzare le colonne incluse nella schermata seguente.
La visualizzazione predefinita è quella che verrà visualizzata quando si esamina l'elenco online in qualsiasi
visualizzazione impostata come Predefinita nelle impostazioni. Se si modifica questa vista per aggiungere o
rimuovere colonne create dall'utente o definite dal sistema oppure creando una nuova vista e impostandola
come predefinita, queste modifiche verranno propagate tramite il connettore.
Risoluzione dei problemi
Usare l'SharePoint radice
Assicurarsi di specificare l'indirizzo radice del sito SharePoint, senza sottocartelle o documenti. Ad esempio,
usare un collegamento simile a https://contoso.sharepoint.com/teams/ObjectModel/ .
Problemi relativi al fuso orario
Quando si usa il connettore SharePoint Online list (v1.0), è possibile notare che i dati del fuso orario non
corrispondono a quanto previsto dal browser. Il SharePoint client basato sul Web esegue una conversione del
fuso orario locale in base alla conoscenza del fuso orario dell'utente da parte del browser.
L'API back-end per SharePoint usa l'ora UTC e invia questa ora UTC direttamente a Power BI. Power BI non
converte l'ora UTC, ma la segnala all'utente.
Per ottenere l'ora nell'ora locale, l'utente deve eseguire la stessa conversione SharePoint client. Un esempio delle
operazioni di colonna che verrebbero eseguite a questo scopo sono:

#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Datewithtime", type datetimezone}}),


#"Timezone Shifted" = Table.TransformColumns(#"Changed Type", {"Datewithtime", DateTimeZone.ToLocal})

La prima operazione modifica il tipo in datetimezone e la seconda operazione lo converte nell'ora locale del
computer.
SharePoint limite di join
Questo problema è limitato al connettore SharePoint elenco online v2.0
Il connettore SharePoint Online list v2.0 usa un'API diversa rispetto al connettore v1.0 e, di conseguenza, è
soggetta a un massimo di 12 operazioni di join per ogni query, come documentato nella documentazione di
SharePoint Online in Soglia di ricerca visualizzazione elenco . Questo problema si manifesterà come SharePoint
le query non riescono quando si accede a più di 12 colonne contemporaneamente da un SharePoint dati.
Uso di OData per accedere a un SharePoint Online
Se si usa un feed OData per accedere a un elenco SharePoint Online, esiste una limitazione di circa 2100
caratteri per l'URL che si usa per la connessione. Altre informazioni: Lunghezza massima URL
SIS-CC SDMX
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore è fornito da SiS-CC (Statistical Information System Collaboration Community), il
proprietario del connettore e un membro del Programma di certificazione connettore microsoft Power Query. In caso di
domande relative al contenuto di questo articolo o di modifiche che si desidera visualizzare, visitare il sito Web SIS-CC e
usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Anonimo

Documentazione di riferimento delle funzioni —

Prerequisiti
Prima di iniziare, assicurarsi di aver configurato correttamente l'URL dall'API del provider di servizi. Il processo
esatto dipende dal provider di servizi.

Funzionalità supportate
Importazione del formato SDMX-CSV 2.1. Altri formati non sono supportati.

Istruzioni di connessione
Per connettersi ai dati del servizio Web SDMX:
1. Selezionare Recupera dati nella scheda Home della barra multifunzione in Power BI Desktop.
Selezionare Tutte dalle categorie a sinistra e quindi selezionare SIS-CC SDMX . Selezionare Connetti .
2. Compilare i parametri:
a. In URL quer y dati immettere un URL di query dati REST SDMX (il servizio Web deve supportare il
formato SDMX-CSV).
b. In Formato di visualizzazione selezionare una delle opzioni seguenti:
Visualizzare codici ed etichette; esempio: FREQ: Frequenza
Visualizzare i codici; esempio: FREQ
Mostra etichette; esempio: Frequenza
Facoltativamente, immettere una preferenza per la lingua in Etichetta preferenza lingua
usando un tag IETF BCP 47

3. Se è la prima volta che ci si connette al servizio Web REST nel passaggio precedente URL quer y dati,
viene visualizzato questo passaggio di autenticazione. Poiché la connessione è Anonima, selezionare
Connessione
4. Selezionare Carica per importare i dati in Power BI o Trasforma dati per modificare la query in editor di
Power Query in cui è possibile perfezionare la query prima del caricamento in Power BI.

Limitazioni e problemi
Questa versione del connettore non supporta l'importazione di formati di dati SDMX-ML o SDMX-JSON.

Passaggi successivi
Se si vuole inviare una richiesta di funzionalità o contribuire al progetto open source, visitare il sito del progetto
Gitlab.
Snowflake
07/12/2021 • 4 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)

Tipi di autenticazione supportati Database (nome utente/password), AAD

Documentazione di riferimento delle funzioni -

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Importa
DirectQuery (solo Power BI)
Advanced Options
Specificare un valore di testo da usare come Nome ruolo
Istruzione SQL nativa
Colonne delle relazioni
Timeout connessione in secondi
Timeout comando in secondi

Connessione a Snowflake data warehouse da Power Query Desktop


Per stabilire la connessione a un data warehouse Snowflake Computing, seguire questa procedura:
1. Selezionare Ottieni dati dalla barra multifunzione Home Power BI Desktop, selezionare Database dalle
categorie a sinistra, selezionare Snowflake e quindi selezionare Connessione .
2. Nella finestra Snowflake visualizzata immettere il nome del server Snowflake in Ser ver e il nome del
data warehouse Snowflake computing in Warehouse .
3. Facoltativamente, immettere i valori nelle opzioni avanzate da usare per modificare la query di
connessione, ad esempio un valore di testo da usare come nome di ruolo o timeout del comando. Altre
informazioni: Connessione opzioni avanzate
4. Selezionare Impor ta per importare i dati direttamente Power BI oppure selezionare DirectQuer y.
Altre informazioni: Usare DirectQuery in Power BI Desktop

NOTE
Azure Active Directory (Azure AD) Single Sign-On (SSO) supporta solo DirectQuery.

5. Selezionare OK .
6. Per accedere al data warehouse snowflake computing, immettere il nome utente e la password e quindi
selezionare Connessione .
NOTE
Dopo avere immesso il nome utente e la password per un particolare server Snowflake , Power BI Desktop usa
quelle stesse credenziali nei successivi tentativi di connessione. Le credenziali possono essere modificate
selezionando File > Opzioni e impostazioni > Impostazioni origine dati. Altre informazioni: Modificare il
metodo di autenticazione

Se si vuole usare l'opzione con account Microsoft, l'integrazione di AAD con Snowflake deve essere
configurata sul lato Snowflake. Per altre informazioni: Power BI SSO to Snowflake - Attività iniziali
7. In Strumento di navigazione selezionare uno o più elementi da importare e usare in Power BI Desktop.
Selezionare quindi Carica per caricare la tabella in Power BI Desktop o Modifica per aprire il editor di
Power Query in cui è possibile filtrare e perfezionare il set di dati da usare e quindi caricare il set di dati
perfezionato in Power BI Desktop.

Connessione a un database Snowflake da Power Query Online


Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione Snowflake nella selezione del connettore.
2. Nella finestra di dialogo Snowflake visualizzata immettere il nome del server e del warehouse.

3. Immettere eventuali valori nelle opzioni avanzate da usare. Se sono presenti opzioni avanzate non
rappresentate nell'interfaccia utente, è possibile modificarle nell'Editor avanzato in Power Query
successive.
4. Immettere le credenziali di connessione, tra cui la selezione o la creazione di una nuova connessione, il
gateway che si vuole usare e un nome utente e una password (in Power Query Online è supportato solo
il tipo di autenticazione di base).
5. Selezionare Avanti per connettersi al database.
6. In Strumento di navigazione selezionare i dati necessari, quindi selezionare Trasforma dati per
trasformare i dati in editor di Power Query.

Connessione l'uso di opzioni avanzate


Power Query offre un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.
Nella tabella seguente sono elencate tutte le opzioni avanzate che è possibile impostare in Power Query.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Nome del ruolo Specifica il ruolo utilizzato dal report tramite il driver. Questo
ruolo deve essere disponibile per l'utente. In caso contrario,
non verrà impostato alcun ruolo.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non saranno visualizzate.

Timeout connessione in secondi Specifica per quanto tempo attendere una risposta quando
si interagisce con il servizio Snowflake prima di restituire un
errore. Il valore predefinito è 0 (nessun timeout).

Timeout comando in secondi Specifica per quanto tempo attendere il completamento di


una query prima di restituire un errore. Il valore predefinito è
0 (nessun timeout).

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando la query di database nativa. In questa versione della
funzionalità di query nativa del database è necessario usare
nomi di tabella completi nel formato
Database.Schema.Table, ad esempio SELECT * FROM
DEMO_DB. PUBBLICO. DEMO_TABLE .

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop o Avanti in
Power Query Online per connettersi al database Snowflake.

Webinar su Power BI e Snowflake


Power BI e Snowflake hanno collaborato per ospitare un webinar di base il 25 agosto 2021 per un
approfondimento su Come ottenere il Insights di consumer con Snowflakee Microsoft Power BI .
In questa esercitazione si apprenderà come accedere a tutti i dati rilevanti da una singola origine e trasformare i
dati in informazioni dettagliate tramite questo connettore.
Accedere facilmente ai dati di prima parte in Snowflake
Sfruttare il Marketplace dei dati per eseguire query sui dati in tempo reale da provider di terze parti
Configurare l'analisi self-service in Power BI
Visualizzare il webinar su richiesta usando il collegamento precedente.

Informazioni aggiuntive
Connettersi a Snowflake nel servizio Power BI
SoftOne BI (Beta)
07/12/2021 • 2 minutes to read

NOTE
L'articolo sul connettore seguente viene fornito da SoftOne, il proprietario del connettore e un membro del programma di
certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo articolo o di modifiche che si
desidera visualizzare, visitare il sito Web SoftOne e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Anteprima

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Basic (servizi Web Soft1/Atlanta)

Prerequisiti
È necessario avere installato il prodotto Soft1 ERP/CRM o ERP di ERP di Atlanta con un modulo del connettore
SoftOne BI concesso in licenza. È necessario configurare un account Web nell'applicazione con accesso al
servizio Connettore BI SoftOne. Queste informazioni sull'account e il numero di serie dell'installazione verranno
convalidati durante l'autenticazione dal connettore BI SoftOne.
Il connettore Bi SoftOne è supportato da Soft1 Series 5 versione 500.521.11424 o successiva e da ERP di Atlanta
versione 3.3.2697.1 o successiva.

Funzionalità supportate
Importa

Istruzioni di connessione
SoftOne offre molti modelli come Power BI file modello (con estensione pbit) che è possibile usare o
personalizzare, per iniziare a usare il progetto BI. Ad esempio, Sales & Collections e Finance.
Per connettersi in Power BI Desktop un nuovo report, seguire questa procedura. Se ci si connette da un report
creato usando uno dei modelli di Bi SoftOne, vedere Uso di un modello fornito più avanti in questo articolo.
Connessione'archivio dati Soft1 o Atlanta da zero
Per caricare i dati dall'installazione con Power Query Desktop:
1. Selezionare Get Data > More... > Online Ser vices in Power BI Desktop e cercare SoftOne BI .
Selezionare Connetti .
2. Selezionare Accedi . Verrà visualizzato un modulo di autenticazione.
NOTE
Se si immettono credenziali non corrette, si riceverà un messaggio che informa che l'accesso non è riuscito a
causa di credenziali non valide.
Se softOne BI Connector non è attivato o l'account Web in uso non è configurato con il servizio, verrà
visualizzato un messaggio che informa che l'accesso è stato negato perché il modulo selezionato non è
attivato.

3. Dopo aver effettuato l'accesso con i servizi Web SoftOne, è possibile connettersi all'archivio dati.

Selezionando Connessione verrà visualizzata la tabella di navigazione e verranno visualizzate le tabelle


disponibili dall'archivio dati da cui è possibile selezionare i dati necessari.
4. Nello strumento di navigazione dovrebbero essere ora presenti le tabelle nell'archivio dati. Il recupero
delle tabelle può richiedere tempo.
Per visualizzare le tabelle, è necessario aver caricato i dati dall'installazione di Soft1 o Atlanta (in base alla
documentazione del prodotto). Se i dati non sono stati caricati, non verranno visualizzate tabelle nella
tabella di spostamento.

In questo caso, sarà necessario tornare all'applicazione e caricare i dati.


Uso di un modello fornito
1. Aprire il modello selezionato, Power BI Desktop tenterà di caricare i dati dall'archivio dati e richiederà le
credenziali.
2. Selezionare Accedi e immettere le credenziali (numero di serie, nome utente e password).

3. Dopo l'autenticazione, selezionare Connessione .


Power BI Desktop recupererà i dati dall'archivio dati.
4. Al termine dell'aggiornamento, è possibile iniziare a personalizzare il report o pubblicarlo così come nel
servizio Power BI.

IMPORTANT
Se si lavora con più di un'installazione Soft1/Atlanta, quando si passa da un archivio dati all'altro, è necessario cancellare le
credenziali di SoftOne BI salvate da Power BI Desktop.
SQL Server
07/12/2021 • 3 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Tipi di autenticazione supportati Database (nome utente/password)


Windows

Informazioni di riferimento sulla funzione M Sql.Database


Sql.Databases

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Per impostazione predefinita, Power BI installa un driver OLE DB per SQL Server. Tuttavia, per ottenere
prestazioni ottimali, è consigliabile che il cliente installi il SQL Server Native Client prima di usare il connettore
SQL Server. SQL Server Native Client 11.0 e SQL Server Native Client 10.0 sono entrambi supportati nella
versione più recente.

Funzionalità supportate
Importa
DirectQuery (Power BI Desktop)
Advanced Options
Timeout del comando in minuti
Istruzione SQL nativa
Colonne delle relazioni
Esplora con gerarchia completa
SQL Server del failover

Connessione database SQL Server da Power Query Desktop


Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'SQL Ser ver database nella selezione del connettore.
2. Nella finestra SQL Ser ver di dialogo Del database visualizzata specificare il nome del server e del
database (facoltativo).

3. Selezionare la modalità di connettività dei dati Importa o DirectQuer y (Power BI Desktop predefinita).
4. Selezionare OK .
5. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione, immettere le
credenziali e selezionare il livello a cui applicare le impostazioni di autenticazione. Selezionare Connetti .

NOTE
Se la connessione non è crittografata, verrà visualizzata la finestra di dialogo seguente.
Selezionare OK per connettersi al database usando una connessione non crittografata oppure seguire
queste istruzioni per configurare le connessioni crittografate SQL Server.
6. In Strumento di navigazione selezionare le informazioni sul database desiderate, quindi selezionare
Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Connessione per SQL Server database da Power Query Online


Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'SQL Ser ver database nella selezione del connettore.
2. Nella finestra SQL Ser ver di dialogo Del database visualizzata specificare il nome del server e del
database (facoltativo).
3. Se necessario, selezionare un gateway dati locale.
4. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione e immettere
le credenziali.
5. Se la connessione non è crittografata e la finestra di dialogo della connessione contiene una casella di
controllo Usa connessione crittografata , deselezionare la casella di controllo.
6. Selezionare Avanti per continuare.
7. In Strumento di navigazione selezionare i dati necessari e quindi selezionare Trasforma dati.

Connessione l'uso di opzioni avanzate


Sia Power Query Desktop che Power Query Online offrono un set di opzioni avanzate che è possibile
aggiungere alla query, se necessario.
La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop e Power
Query Online.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Timeout del comando in minuti Se la connessione dura più di 10 minuti (timeout


predefinito), è possibile immettere un altro valore in minuti
per mantenere aperta la connessione più a lungo. Questa
opzione è disponibile solo in Power Query Desktop.

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando la query di database nativa.

Includi colonne relazioni Se selezionata, include le colonne che potrebbero avere


relazioni con altre tabelle. Se questa casella è deselezionata,
tali colonne non saranno visualizzate.

Esplora con gerarchia completa Se questa opzione è selezionata, lo Strumento di navigazione


visualizza la gerarchia completa delle tabelle nel database a
cui ci si connette. Se deselezionata, lo Strumento di
navigazione visualizza solo le tabelle le cui colonne e righe
contengono dati.

Abilita il supporto per il failover di SQL Server Se questa opzione è selezionata, quando un nodo nel
gruppo SQL Server failover non è disponibile, Power Query
da tale nodo a un altro quando si verifica il failover. Se
deselezionata, non verrà eseguito alcun failover.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop o Avanti in
Power Query Online per connettersi al database SQL Server.

Risoluzione dei problemi


Colonne Always Encrypted
Power Query non supporta le colonne "Always Encrypted".

Passaggi successivi
Ottimizzare Power Query durante l'espansione di colonne di tabella
Stripe (deprecato)
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Deprecato

Prodotti -

Tipi di autenticazione supportati -

Documentazione di riferimento per le funzioni -

Deprecazione
Questo connettore è deprecato e non sarà supportato a breve. È consigliabile disattivare le connessioni esistenti
usando questo connettore e non usarlo per le nuove connessioni.
SumTotal (beta)
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore viene fornito da SumTotal, il proprietario del connettore e un membro del programma
di certificazione Microsoft Power Query Connector. In caso di domande relative al contenuto di questo articolo o di
modifiche che si desidera visualizzare, visitare il sito Web SumTotal e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI (set di dati)

Tipi di autenticazione OAuth 2.0

Documentazione di riferimento per le funzioni -

Prerequisiti
È necessario disporre di un ambiente ospitato SumTotal con autorizzazioni standard per accedere al portale e
autorizzazioni di lettura per accedere ai dati nelle tabelle.

Funzionalità supportate
Importa

Ricerca dell'URL ospitato di SumTotal


Copiare l'URL radice ospitato in SumTotal per intero. Questo URL radice è l'URL univoco specifico dell'istanza.
L'URL sarà nel formato https:// < yourdomain > .sumtotal.host/ . Assicurarsi di non copiare il resto dell'URL.
Mantenere questo URL a portata di mano in modo da poterlo usare in un secondo momento.

Connessione a SumTotal BI da Power BI Desktop


NOTE
Il Power Query SumTotal è attualmente adatto solo agli endpoint dell'API OData. Per altre informazioni, vedere la specifica
dell'API OData SumTotal.

Per connettersi a SumTotal da Power BI Desktop:


1. Nell'esperienza Ottieni dati selezionare SumTotal nella categoria Altro e quindi selezionare
Connessione .
2. Immettere l'indirizzo URL del server dei dati da caricare.

NOTE
Verrà visualizzato un errore di script. è previsto e carica gli script JS/CSS utilizzati dal modulo di accesso.
Selezionare Sì.

3. Quando la tabella viene caricata in Navigator , verrà visualizzato l'elenco delle entità dell'API OData
attualmente supportate dal connettore. È possibile scegliere di caricare una o più entità.
4. Dopo aver selezionato le entità, selezionare Carica per caricare i dati direttamente in Power BI desktop
oppure selezionare Trasforma dati per trasformare i dati.

NOTE
Se è la prima volta che ci si connette a questo sito, selezionare Accedi e immettere le credenziali. Selezionare Connetti.

Limitazioni e problemi noti


In questa sezione vengono descritte eventuali limitazioni o considerazioni del connettore SumTotal.
Prestazioni dell'API OData SumTotal e limiti di limitazione
Per informazioni sulle prestazioni dell'API OData e sui limiti di limitazione per le connessioni SumTotal, vedere la
specifica dell'API OData di SumTotal nella sezione Note importanti. Queste limitazioni si applicano sia al
connettore SumTotal (che usa l'API OData) che all'API ospitata OData "effettiva" quando si accede agli stessi
endpoint.
Frequenza di recupero delle tabelle
La maggior parte delle tabelle predefinite viene recuperata a circa 1000 righe al secondo usando il connettore
SumTotal. Se sono necessarie velocità di recupero più veloci, è consigliabile usare il parametro di filtro
RowVersionId. È possibile passare questo parametro direttamente all'URL ospitato nell'ambiente
aggiungendolo come parametro della stringa di query, ad esempio https://{host}.sumtotalystems.com/?
rowVersionId=1234 .
Testo/CSV
07/12/2021 • 7 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Documentazione di riferimento delle funzioni File.Contents


Lines.FromBinary
Csv.Document

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Importa

Connessione al file di testo/CSV locale da Power Query Desktop


Per caricare un file di testo o CSV locale:
1. Selezionare l'opzione Testo/CSV in Ottieni dati . Questa azione avvia un browser di file locale in cui è
possibile selezionare il file di testo.
Selezionare Apri per aprire il file.
2. Dallo strumento di navigazione è possibile trasformare i dati nel editor di Power Query selezionando
Trasforma dati oppure caricare i dati selezionando Carica.

Connessione al file di testo/CSV da Power Query Online


Per caricare un file di testo o CSV locale:
1. Nella pagina Origini dati selezionare Testo/CSV.
2. In Impostazioni di connessione immettere il percorso del file di testo locale o CSV desiderato.
3. Selezionare un gateway dati locale da Gateway dati.
4. Immettere un nome utente e una password.
5. Selezionare Avanti .
6. Nello strumento di navigazione selezionare Trasforma dati per iniziare a trasformare i dati nel editor di
Power Query.

Caricare dal Web


Per caricare un file di testo o CSV dal Web, selezionare il connettore Web,immettere l'indirizzo Web del file e
seguire le richieste di credenziali.

Delimitatori di testo/CSV
Power Query considera i csv come file strutturati con una virgola come delimitatore un caso — speciale di un
file di testo. Se si sceglie un file di testo, Power Query tenterà automaticamente di determinare se contiene valori
delimitati e qual è il delimitatore. Se può dedurre un delimitatore, lo tratterà automaticamente come origine dati
strutturata.
Testo non strutturato
Se il file di testo non ha una struttura, si otterrà una singola colonna con una nuova riga per riga codificata nel
testo di origine. Come esempio di testo non strutturato, è possibile prendere in considerazione un file del Blocco
note con il contenuto seguente:

Hello world.
This is sample data.

Quando la si carica, viene visualizzata una schermata di spostamento che carica ognuna di queste righe nella
propria riga.

In questa finestra di dialogo è possibile configurare un solo elemento, ovvero l'elenco a discesa Origine file
selezionato. Questo elenco a discesa consente di selezionare il set di caratteri usato per generare il file.
Attualmente, il set di caratteri non viene dedotto e UTF-8 verrà dedotto solo se inizia con un BOM UTF-8.
CSV
È possibile trovare un file CSV di esempio qui.
Oltre all'origine file, CSV supporta anche la specifica del delimitatore e la modalità di gestione del rilevamento
dei tipi di dati.

I delimitatori disponibili includono due punti, virgola, segno di uguale, punto e virgola, spazio, tabulazione, un
delimitatore personalizzato (che può essere qualsiasi stringa) e una larghezza fissa (divisione del testo in base a
un numero standard di caratteri).

L'elenco a discesa finale consente di selezionare la modalità di gestione del rilevamento dei tipi di dati. Questa
operazione può essere eseguita in base alle prime 200 righe nell'intero set di dati oppure è possibile scegliere di
non eseguire il rilevamento automatico del tipo di dati e lasciare che tutte le colonne siano impostate sul valore
predefinito "Text". Avviso: se si imposta questa opzione sull'intero set di dati, il caricamento iniziale dei dati
nell'editor potrebbe risultare più lento.

Poiché l'inferenza può non essere corretta, è opportuno controllare le impostazioni prima del caricamento.
Testo strutturato
Quando Power Query è in grado di rilevare la struttura nel file di testo, il file di testo verrà trattato come un file
con valori delimitati e offrirà le stesse opzioni disponibili quando si apre un file CSV che è essenzialmente un file
con un'estensione che indica il tipo di — delimitatore.
Ad esempio, se si salva l'esempio seguente come file di testo, verrà letto come con un delimitatore di
tabulazione anziché come testo non strutturato.

Column 1 Column 2 Column 3


This is a string. 1 ABC123
This is also a string. 2 DEF456
Può essere usato per qualsiasi altro tipo di file basato su delimitatore.
Modifica dell'origine
Quando si modifica il passaggio di origine, verrà visualizzata una finestra di dialogo leggermente diversa
rispetto al caricamento iniziale. A seconda di ciò che si sta trattando il file come (ovvero testo o CSV), verrà
visualizzata una schermata con un'ampia gamma di elenchi a discesa.

L'elenco a discesa Interruzioni di riga consente di scegliere se applicare o meno interruzioni di riga racchiuse
tra virgolette.

Ad esempio, se si modifica l'esempio "strutturato" fornito in precedenza, è possibile aggiungere un'interruzione


di riga.
Column 1 Column 2 Column 3
This is a string. 1 "ABC
123"
This is also a string. 2 "DEF456"

Se l'opzione Interruzioni di riga è impostata su Ignora interruzioni di riga tra virgolette , verrà caricata come
se non fosse presente alcuna interruzione di riga (con uno spazio aggiuntivo).

Se interruzioni di riga è impostato su Applica tutte le interruzioni di riga , verrà caricata una riga aggiuntiva,
con il contenuto dopo le interruzioni di riga che è l'unico contenuto in tale riga (l'output esatto può dipendere
dalla struttura del contenuto del file).

L'elenco a discesa Apri file come consente di modificare ciò che si vuole caricare come importante per la
risoluzione dei — problemi. Per i file strutturati che non sono tecnicamente CSV ,ad esempio un file con valori
delimitati da tabulazioni salvato come file di testo, aprire il file come impostato su CSV. Questa impostazione
determina anche quali elenchi a discesa sono disponibili nel resto della finestra di dialogo.

Testo/CSV in base all'esempio


Text/CSV By Example in Power Query è una funzionalità disponibile a livello generale in Power BI Desktop.
Quando si usa il connettore Testo/CSV, nell'angolo inferiore sinistro dello strumento di navigazione viene
visualizzata l'opzione Estrai tabella tramite esempi.
Quando si seleziona il pulsante, verrà visualizzata la pagina Estrai tabella tramite esempi. In questa pagina si
specificano i valori di output di esempio per i dati che si desidera estrarre dal file di testo/CSV. Dopo aver
immesso la prima cella della colonna, vengono compilate le altre celle della colonna. Per estrarre correttamente i
dati, potrebbe essere necessario immettere più di una cella nella colonna. Se alcune celle della colonna non sono
corrette, è possibile correggere la prima cella non corretta e i dati verranno estratti nuovamente. Controllare i
dati nelle prime celle per assicurarsi che i dati siano stati estratti correttamente.

NOTE
È consigliabile immettere gli esempi nell'ordine delle colonne. Dopo aver compilato correttamente la colonna, creare una
nuova colonna e iniziare a immettere esempi nella nuova colonna.
Dopo aver costruito la tabella, è possibile scegliere di caricare o trasformare i dati. Si noti che le query risultanti
contengono una suddivisione dettagliata di tutti i passaggi dedotto per l'estrazione dei dati. Questi passaggi
sono solo normali passaggi di query che è possibile personalizzare in base alle esigenze.

NOTE

Questa funzionalità verrà rilasciata a breve in Power Query Online. Altre informazioni: Text/CSV by example data
extraction
Risoluzione dei problemi
Caricamento di file dal Web
Se si richiedono file di testo/csv dal Web e si innalzano di livello anche le intestazioni e si recupera un numero di
file sufficiente per preoccuparsi della potenziale limitazione, è consigliabile eseguire il wrapping della chiamata
Web.Contents con Binary.Buffer() . In questo caso, la memorizzazione nel buffer del file prima
dell'innalzamento di livello delle intestazioni causerà la richiesta del file una sola volta.
Testo non strutturato interpretato come strutturato
In rari casi, un documento con numeri virgola simili tra paragrafi può essere interpretato come csv. Se si verifica
questo problema, modificare il passaggio Origine nel Editor di query e selezionare Testo anziché CSV
nell'elenco a discesa Apri file con nome.
Errore: Connessione chiusa dall'host
Quando si caricano file di testo/CSV da un'origine Web e si innalzano di livello anche le intestazioni, è possibile
che si verifichino a volte gli errori seguenti: o questi errori potrebbero essere causati dall'host che usa misure di
protezione e dalla chiusura di una connessione temporaneamente sospesa, ad esempio quando si attende
un'altra connessione all'origine dati per un'operazione di aggiunta o
“An existing connection was forcibly closed by the remote host”
“Received an unexpected EOF or 0 bytes from the transport stream.” aggiunta. Per risolvere questi errori,
provare ad aggiungere una chiamata Binary.Buffer (scelta consigliata) o Table.Buffer, che scarica il file, lo carica in
memoria e chiude immediatamente la connessione. Questo dovrebbe impedire qualsiasi sospensione durante il
download e impedire all'host di chiudere forzatamente la connessione prima che il contenuto venga recuperato.
L'esempio seguente illustra questa soluzione alternativa. Questa memorizzazione nel buffer deve essere
eseguita prima che la tabella risultante venga passata a Table.PromoteHeaders .
Originale:

Csv.Document(Web.Contents("https://.../MyFile.csv"))

Con Binary.Buffer :

Csv.Document(Binary.Buffer(Web.Contents("https://.../MyFile.csv")))

Con Table.Buffer :

Table.Buffer(Csv.Document(Web.Contents("https://.../MyFile.csv")))
TIBCO(R) Data Virtualization (Beta)
07/12/2021 • 3 minutes to read

NOTE
L'articolo seguente sul connettore è fornito da TIBCO, il proprietario del connettore e un membro del programma di
certificazione microsoft Power Query Connector. In caso di domande relative al contenuto di questo articolo o in caso di
modifiche da apportare a questo articolo, visitare il sito Web TIBCO e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Database (nome utente/password)


Windows Autenticazione (NTLM/Kerberos)

Documentazione di riferimento delle funzioni —

Prerequisiti
Per accedere al sito TIBCO eDelivery, è necessario aver acquistato il software TIBCO. Non è necessaria alcuna
licenza TIBCO per il software TIBCO(R) Data Virtualization (TDV) che un cliente TIBCO deve avere solo un —
contratto valido. Se non si ha accesso, è necessario contattare l'amministratore TIBCO dell'organizzazione.
Il connettore Power BI per TIBCO(R) Data Virtualization deve prima essere scaricato e installato nel computer
che esegue https://edelivery.tibco.com Power BI Desktop. Il sito eDelivery scarica un file ZIP (ad esempio,
TIB_tdv_drivers_ <VERSION>_all.zip*.zip dove =versione TDV) che contiene un programma di installazione che
installa tutti i driver client TDV, incluso il connettore <VERSION> Power BI.
Dopo aver installato il connettore, configurare un nome dell'origine dati (DSN) per specificare le proprietà di
connessione necessarie per connettersi a TIBCO(R) Data Virtualization Server.

NOTE
L'architettura DSN (a 32 bit o a 64 bit) deve corrispondere all'architettura del prodotto in cui si intende usare il
connettore.
NOTE
Power BI Connector for TIBCO(R) Data Virtualization è il driver usato da TIBCO(R) Data Virtualization Connector per
connettersi Power BI Desktop TDV.

Funzionalità supportate
Importa
DirectQuery (solo Power BI)
Advanced Connection Properties
Avanzato
Istruzione SQL nativa

Connessione a un TIBCO(R) Data Virtualization Server da Power


Query Desktop
Dopo aver installato il connettore corrispondente e aver configurato un DSN, è possibile connettersi a un
tiBCO(R) Data Virtualization Server. Per stabilire la connessione, seguire la procedura illustrata di seguito:
1. Selezionare l'opzione TIBCO(R) Data Vir tualization (Vir tualizzazione dati TIBCO(R) ) nella
selezione del connettore.
2. Nella finestra Power BI connector per TIBCO(R) Data Vir tualization visualizzata specificare il nome
dell'origine dati.

3. Selezionare la modalità di connettività dei dati Importa o DirectQuer y.


4. Se è la prima volta che ci si connette a questo database, selezionare il tipo di autenticazione. Se
applicabile, immettere le credenziali necessarie. Selezionare Connetti .
Anonimo: usa le credenziali archiviate nel DSN.
Di base: nome utente/password vengono inviati durante la creazione della connessione.
Windows : esegue l'autenticazione usando l'utente Windows corrente. Questo tipo di autenticazione
richiede l'impostazione della proprietà di connessione SSO. Quando si usa Kerberos, l'API
Kerberos use platform deve essere impostata su true per usare l'utente Windows corrente.
5. In Strumento di navigazione selezionare le informazioni sul database desiderate, quindi selezionare
Carica per caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Connessione l'uso di opzioni avanzate


Power Query Desktop offre un set di opzioni avanzate che è possibile aggiungere alla query, se necessario.
La tabella seguente elenca tutte le opzioni avanzate che è possibile impostare in Power Query Desktop.

O P Z IO N E AVA N Z ATA DESC RIZ IO N E

Advanced Connection Properties Accetta un elenco di proprietà di connessione separate da


punto e virgola. Questa opzione viene usata per specificare
altre proprietà di connessione non configurate nel DSN.

Istruzione SQL Per informazioni, vedere Importare dati da un database


usando la query nativa del database.

Dopo aver selezionato le opzioni avanzate necessarie, selezionare OK in Power Query Desktop per connettersi a
TIBCO(R) Data Virtualization Server.
Single Sign-On (SSO) basato su Kerberos per TIBCO(R) Data
Virtualization
TIBCO(R) Data Virtualization Connector supporta ora l'accesso Single Sign-On (SSO) basato su Kerberos.
Per usare questa funzionalità:
1. Accedere all'account Power BI e passare alla pagina Gestione gateway.
2. Aggiungere una nuova origine dati nel cluster del gateway che si vuole usare.
3. Selezionare il connettore nell'elenco Tipo di origine dati .
4. Espandere la sezione Impostazioni avanzate.
5. Selezionare l'opzione Use SSO via Kerberos for DirectQuer y queries (Usa SSO tramite Kerberos per
le query DirectQuery) o Use SSO via Kerberos for DirectQuer y and Impor t queries (Usa SSO
tramite Kerberos per le query DirectQuery e Importa).

Altre informazioni: Configurare l'accesso SSO basato su Kerberos dal Power BI locale alle origini dati locali
Usercube
07/12/2021 • 2 minutes to read

NOTE
L'articolo seguente sul connettore viene fornito da Usercube, il proprietario di questo connettore e un membro del
programma di certificazione microsoft Power Query Connector. In caso di domande relative al contenuto di questo
articolo o di modifiche che si desidera visualizzare, visitare il sito Web Usercube e usare i canali di supporto.

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Client Credentials

Documentazione di riferimento delle funzioni —

Prerequisiti
È necessario disporre di un'istanza di Usercube con l'opzione PowerBI.

Funzionalità supportate
Importa

Connessione a Usercube da Power Query Desktop


Per connettersi a un server Usercube:
1. Avviare Power BI Desktop e immettere l'esperienza Ottieni dati.
2. Nella categoria Altro selezionare Usercube e quindi selezionare Connessione .
3. Verrà richiesto di specificare l'URL del server Usercube.

4. Immettere le credenziali client. L'ID client deve essere compilato dall'identificatore di un elemento
OpenIdClient. Questo elemento è definito nella configurazione dell'istanza di Usercube. Per questo
identificatore, è necessario concatenare il @ carattere e il nome di dominio dell'istanza di Usercube.
5. In Strumento di navigazione selezionare i dati necessari. Selezionare quindi Trasforma dati per
trasformare i dati nel editor di Power Query o scegliere Carica per caricare i dati in Power BI.
Web
07/12/2021 • 9 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights

Tipi di autenticazione supportati Anonimo


Windows
Basic
API Web
Account dell'organizzazione

Documentazione di riferimento per le funzioni Web.Page


Web.BrowserContents

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Internet Explorer 10

Funzionalità supportate
Basic
Avanzate
Parti URL
Timeout comando
Parametri dell'intestazione della richiesta HTTP

Caricare dati Web usando Power Query Desktop


Per caricare dati da un sito Web con Power Query Desktop:
1. Selezionare Get Data > Web in Power BI o From Web (Dal Web) nella barra multifunzione Dati Excel.
2. Scegliere il pulsante Basic e immettere un indirizzo URL nella casella di testo. Immettere ad esempio
https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States . Selezionare OK .
Se l'indirizzo URL immesso non è valido, viene visualizzata accanto alla casella di testo URL verrà
visualizzata l'icona di avviso.
Se è necessario creare un URL più avanzato prima di connettersi al sito Web, passare a Caricare dati Web
usando un URL avanzato.
3. Selezionare il metodo di autenticazione da usare per questo sito Web. In questo esempio selezionare
Anonimo . Selezionare quindi il livello a cui si desidera applicare queste impostazioni — in questo caso,
https://en.wikipedia.org/ . Selezionare Connetti .

I metodi di autenticazione disponibili per questo connettore sono:


Anonimo: selezionare questo metodo di autenticazione se la pagina Web non richiede credenziali.
Windows: selezionare questo metodo di autenticazione se la pagina Web richiede Windows
credenziali.
Basic : selezionare questo metodo di autenticazione se la pagina Web richiede un nome utente e
una password di base.
API Web: selezionare questo metodo se la risorsa Web a cui ci si connette usa una chiave API a
scopo di autenticazione.
Account aziendale: selezionare questo metodo di autenticazione se la pagina Web richiede
credenziali dell'account aziendale.

NOTE
Quando si carica il report nel servizio Power BI, sono disponibili solo i metodi di autenticazione anonima,
Windows e di base.

Il livello selezionato per il metodo di autenticazione determina la parte di un URL a cui verrà applicato il
metodo di autenticazione. Se si seleziona l'indirizzo Web di primo livello, il metodo di autenticazione
selezionato qui verrà usato per tale indirizzo URL o per qualsiasi sottoindirizzo all'interno di tale indirizzo.
Tuttavia, potrebbe non essere necessario impostare l'indirizzo URL principale su un metodo di
autenticazione specifico perché sottoindirizzo diversi potrebbero richiedere metodi di autenticazione
diversi. Ad esempio, se si accede a due cartelle separate di un singolo sito SharePoint e si vuole usare
account Microsoft diversi per accedervi.
Dopo aver impostato il metodo di autenticazione per un indirizzo del sito Web specifico, non sarà
necessario selezionare di nuovo il metodo di autenticazione per tale indirizzo URL o qualsiasi
sottoindirizzo. Ad esempio, se si seleziona l'indirizzo in questa finestra di dialogo, qualsiasi pagina Web
che inizia con questo indirizzo non richiederà di nuovo di https://en.wikipedia.org/ selezionare il metodo
di autenticazione.

NOTE
Se è necessario modificare il metodo di autenticazione in un secondo momento, passare a Modifica del metodo di
autenticazione.

4. Nella finestra di dialogo Strumento di navigazione è possibile selezionare una tabella, quindi trasformare
i dati nell'editor Power Query selezionando Trasforma dati oppure caricare i dati selezionando Carica .

Sul lato destro della finestra di dialogo Strumento di navigazione viene visualizzato il contenuto della
tabella selezionata per la trasformazione o il caricamento. Se non si è incerti sulla tabella che contiene i
dati a cui si è interessati, è possibile selezionare la scheda Visualizzazione Web. La visualizzazione Web
consente di visualizzare l'intero contenuto della pagina Web ed evidenzia ognuna delle tabelle rilevate in
tale sito. È possibile selezionare la casella di controllo sopra la tabella evidenziata per ottenere i dati da
tale tabella.
Nella parte inferiore sinistra della finestra di dialogo Strumento di navigazione è anche possibile
selezionare il pulsante Aggiungi tabella con esempi. Questa selezione presenta una finestra
interattiva in cui è possibile visualizzare in anteprima il contenuto della pagina Web e immettere i valori
di esempio dei dati da estrarre. Per altre informazioni sull'uso di questa funzionalità, vedere Ottenere i
dati della pagina Web fornendo esempi.

Caricare dati Web usando Power Query Online


Per caricare dati da un sito Web con Power Query Online:
1. Nella finestra di dialogo Ottieni dati selezionare Pagina Web o API Web .

Nella maggior parte dei casi, è necessario selezionare il connettore pagina Web. Per motivi di sicurezza, è
necessario usare un gateway dati locale con questo connettore. Il connettore pagina Web richiede un
gateway perché le pagine HTML vengono recuperate usando un controllo browser, che comporta
potenziali problemi di sicurezza. Questo problema non è un problema con il connettore API Web, perché
non usa un controllo browser.
In alcuni casi, potrebbe essere necessario usare un URL che punti a un'API o a un file archiviato sul Web.
In questi scenari, il connettore API Web (o connettori specifici del file) consente di procedere senza usare
un gateway dati locale.
Si noti anche che se l'URL punta a un file, è necessario usare il connettore di file specifico anziché il
connettore di pagine Web.
2. Immettere un indirizzo URL nella casella di testo. Per questo esempio immettere
https://en.wikipedia.org/wiki/List_of_states_and_territories_of_the_United_States .

3. Selezionare il nome del gateway dati locale.


4. Selezionare il metodo di autenticazione che verrà utilizzato per connettersi alla pagina Web.

I metodi di autenticazione disponibili per questo connettore sono:


Anonimo: selezionare questo metodo di autenticazione se la pagina Web non richiede credenziali.
Windows: selezionare questo metodo di autenticazione se la pagina Web richiede Windows
credenziali.
Basic : selezionare questo metodo di autenticazione se la pagina Web richiede un nome utente e
una password di base.
Account aziendale: selezionare questo metodo di autenticazione se la pagina Web richiede
credenziali dell'account aziendale.
Dopo aver scelto il metodo di autenticazione, selezionare Avanti.
5. Nella finestra di dialogo Strumento di navigazione è possibile selezionare una tabella, quindi trasformare
i dati nel editor di Power Query selezionando Trasforma dati .
Caricare dati Web usando un URL avanzato
Quando si seleziona Ottieni > dati dal Web in Power Query Desktop, nella maggior parte dei casi si
immetteranno gli URL nell'impostazione Basic. Tuttavia, in alcuni casi può essere necessario assemblare un URL
dalle relative parti separate, impostare un timeout per la connessione o fornire dati di intestazione URL
individualizzati. In questo caso, selezionare l'opzione Avanzate nella finestra di dialogo Da Web .

Usare la sezione Par ti URL della finestra di dialogo per assemblare l'URL che si vuole usare per ottenere i dati.
La prima parte dell'URL nella sezione delle parti URL è probabilmente costituita da schema, autorità e percorso
dell'URI , ad esempio http://contoso.com/products/ . La seconda casella di testo può includere qualsiasi query o
frammento da usare per filtrare le informazioni fornite al sito Web. Se è necessario aggiungere più parti,
selezionare Aggiungi parte per aggiungere un'altra casella di testo frammento URL. Quando si immette ogni
parte dell'URL, l'URL completo che verrà usato quando si seleziona OK viene visualizzato nella casella di
anteprima DELL'URL.
A seconda del tempo necessario alla richiesta POST per elaborare i dati, potrebbe essere necessario prolungare
il tempo in cui la richiesta continua a rimanere connessa al sito Web. Il timeout predefinito per POST e GET è
100 secondi. Se il timeout è troppo breve, è possibile usare il timeout del comando facoltativo in minuti per
estendere il numero di minuti di connessione.
È anche possibile aggiungere intestazioni di richiesta specifiche al POST inviato al sito Web usando la casella di
riepilogo a discesa dei parametri facoltativi dell'intestazione della richiesta HTTP. Nella tabella seguente
vengono descritte le intestazioni di richiesta che è possibile selezionare.

IN T ESTA Z IO N E DEL L A RIC H IESTA DESC RIZ IO N E

Accetta Specifica i tipi di supporti di risposta accettabili.

Accept-Charset Indica quali set di caratteri sono accettabili nel contenuto


della risposta testuale.

Accept-Encoding Indica quali codifiche del contenuto della risposta sono


accettabili nella risposta.

Accept-Language Indica il set di linguaggi naturali preferiti nella risposta.

Cache-Control Indica i criteri di memorizzazione nella cache, specificati dalle


direttive , nelle richieste client e nelle risposte del server.

Content-Type Indica il tipo di supporto del contenuto.

If-Modified-Since Determina in modo condizionale se il contenuto Web è stato


modificato dopo la data specificata in questo campo. Se il
contenuto non è stato modificato, il server risponde solo con
le intestazioni con un codice di stato 304. Se il contenuto è
stato modificato, il server restituirà la risorsa richiesta
insieme al codice di stato 200.

Prefer Indica che determinati comportamenti del server sono


preferiti dal client, ma non sono necessari per il
completamento della richiesta.

Intervallo Specifica uno o più sottointervallo dei dati di


rappresentazione selezionati.

Referer Specifica un riferimento URI per la risorsa da cui è stato


ottenuto l'URI di destinazione.

Importare file dal Web


In genere, quando si importa un file locale in Power Query Desktop, si userà il connettore di tipo file specifico
per importare il file, ad esempio il connettore JSON per importare un file JSON o il connettore CSV per
importare un file CSV. Tuttavia, se si usa Power Query Desktop e il file da importare si trova sul Web, è
necessario usare il connettore Web per importare il file. Come nel caso locale, verrà quindi visualizzata la tabella
caricata dal connettore per impostazione predefinita, che è quindi possibile caricare o trasformare.
Il connettore Web supporta i tipi di file seguenti:
Accedere al database
Documento CSV
Cartella di lavoro di Excel
JSON
File di testo
Pagina HTML
Tabelle XML
PDF
Ad esempio, è possibile usare la procedura seguente per importare un file JSON nel
https://contoso.com/products sito Web:

1. Nella finestra di dialogo Ottieni dati selezionare il connettore Web.


2. Scegliere il pulsante Basic e immettere l'indirizzo nella casella URL, ad esempio:
http://contoso.com/products/Example_JSON.json

3. Selezionare OK .
4. Se è la prima volta che si visita questo URL, selezionare Anonimo come tipo di autenticazione e quindi
selezionare Connessione .
5. editor di Power Query verrà aperto con i dati importati dal file JSON. Selezionare la scheda Visualizza
nell'editor di Power Query quindi selezionare Barra della formula per attivare la barra della formula
nell'editor.

Come si può vedere, il connettore Web restituisce il contenuto Web dall'URL fornito e quindi esegue
automaticamente il wrapping del contenuto Web nel tipo di documento appropriato specificato dall'URL (
Json.Document in questo esempio).

Gestione di pagine Web dinamiche


Le pagine Web che caricano il contenuto in modo dinamico potrebbero richiedere una gestione speciale. Se si
notano sporadici errori nelle query Web, è possibile che si stia tentando di accedere a una pagina Web dinamica.
Un esempio comune di questo tipo di errore è:
1. Aggiornare il sito.
2. Viene visualizzato un errore , ad esempio "La colonna 'Foo' della tabella non è stata trovata").
3. Aggiornare nuovamente il sito.
4. Non si verifica alcun errore.
Questi tipi di problemi sono in genere dovuti alla tempistica. Le pagine che caricano il contenuto in modo
dinamico possono talvolta non essere coerenti perché il contenuto può cambiare dopo il completamento del
caricamento da parte del browser. In alcuni casi Web.BrowserContents scarica il codice HTML dopo il
caricamento di tutto il contenuto dinamico. Altre volte le modifiche sono ancora in corso durante il download
del codice HTML, causando errori sporadici.
La soluzione consiste nel passare l'opzione a , che indica un selettore o un periodo di tempo che deve essere
atteso prima di WaitFor Web.BrowserContents scaricare il codice HTML.
Come è possibile determinare se una pagina è dinamica? In genere è piuttosto semplice. Aprire la pagina in un
browser e guardarla caricare. Se il contenuto viene visualizzato immediatamente, si tratta di una normale pagina
HTML. Se viene visualizzata dinamicamente o cambia nel tempo, si tratta di una pagina dinamica.

Vedi anche
Estrarre dati da una pagina Web per esempio
Risoluzione dei problemi del Power Query Web
Ottenere i dati della pagina Web offrendo esempi
07/12/2021 • 2 minutes to read

Il recupero di dati da una pagina Web consente agli utenti di estrarre facilmente i dati dalle pagine Web. Spesso,
tuttavia, i dati nelle pagine Web non sono in tabelle ordinate facili da estrarre. Il recupero di dati da tali pagine
può risultare complesso, anche se i dati sono strutturati e coerenti.
Ma esiste una soluzione. Con la funzionalità Get Data from Web by example (Ottieni dati dal Web in base
all'esempio), è essenzialmente possibile visualizzare i dati Power Query da estrarre fornendo uno o più esempi
all'interno della finestra di dialogo del connettore. Power Query raccoglie nella pagina altri dati corrispondenti
agli esempi. Con questa soluzione è possibile estrarre tutti i tipi di dati dalle pagine Web, inclusi i dati presenti
nelle tabelle e altri dati non di tabella.

NOTE
I prezzi elencati nelle immagini sono solo a scopo di esempio.

Uso della funzionalità per l'acquisizione dei dati dal Web da un


esempio
Selezionare l'opzione Web nella selezione del connettore e quindi selezionare Connessione continuare.
In Da Web immettere l'URL della pagina Web da cui si vogliono estrarre i dati. In questo articolo verrà usata la
pagina Web Microsoft Store e sarà illustrato il funzionamento di questo connettore.
Se si vuole seguire questa procedura, è possibile usare l'URL di Microsoft Store usato in questo articolo:
https://www.microsoft.com/store/top-paid/games/xbox?category=classics
Quando si sceglie OK , viene visualizzata la finestra di dialogo Strumento di navigazione , in cui sono
presentate le eventuali tabelle rilevate automaticamente dalla pagina Web. Nel caso illustrato nell'immagine
seguente non è stata trovata alcuna tabella. Selezionare Aggiungi la tabella basata sugli esempi per fornire
esempi.

Aggiungi la tabella basata sugli esempi presenta una finestra interattiva in cui è possibile visualizzare in
anteprima il contenuto della pagina Web. Immettere i valori di esempio dei dati da estrarre.
In questo esempio si estrarranno il nome e il prezzo per ognuno dei giochi nella pagina. A tale scopo, specificare
un paio di esempi nella pagina per ogni colonna. Quando si immettono gli esempi, Power Query estrae i dati
che corrispondono al modello di voci di esempio usando algoritmi di estrazione dei dati intelligenti.
NOTE
i suggerimenti di valore includono solo valori minori o uguali a 128 caratteri di lunghezza.

Quando si è soddisfatti dei dati estratti dalla pagina Web, selezionare OK per passare all'editor di Power Query.
È quindi possibile applicare altre trasformazioni o modellare i dati, ad esempio combinandoli con altre origini
dati.

Vedi anche
Aggiungere una colonna da esempi
Effettuare il data shaping e combinare i dati
Recupero dei dati
Risoluzione dei problemi del Power Query Web
Risoluzione dei problemi del connettore Web
07/12/2021 • 5 minutes to read

Connessione a Microsoft Graph


La connessione alle API REST Graph Microsoft da Power Query non è consigliata o supportata. Per altre
informazioni, vedere questo articolo.

Uso di un gateway con il connettore Web


Ogni uso del connettore Web per ottenere dati da una pagina HTML richiede l'uso di un gateway dati locale
quando viene pubblicato in un servizio cloud, indipendentemente dal fatto che si tratta di un servizio Power BI
per set di dati o flussi di dati o Power Apps per i flussi di dati. Dynamics 365 Customer Insights attualmente non
supporta l'uso di un gateway.
Se viene visualizzato un messaggio di errore quando si tenta di connettersi a una pagina HTML usando il
connettore Web, assicurarsi di aver installato Internet Explorer 10 o versione successiva nel computer che ospita
il gateway dati Please specify how to connect locale.

Acquisizione di richieste Web e revoca di certificati


È stata potenziata la sicurezza delle connessioni Web per proteggere i dati. Ciò significa tuttavia che alcuni
scenari, ad esempio l'acquisizione di richieste Web con Fiddler, non funzioneranno più per impostazione
predefinita. Per abilitare questi scenari:
1. Aprire Power BI Desktop.
2. Nella scheda File selezionare Opzioni e impostazioni > Opzioni .
3. In Opzioni in Sicurezza > globale deselezionare Abilita la revoca del cer tificato .

4. Selezionare OK .
5. Riavviare Power BI Desktop.

IMPORTANT
Tenere presente che se si deseleziona Abilita controllo revoca cer tificati, le connessioni Web saranno meno sicure.
Per impostare questo scenario in Criteri di gruppo, usare la chiave "DisableCertificateRevocationCheck" nel
percorso del Registro di sistema "Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Power BI
Desktop". L'impostazione di "DisableCertificateRevocationCheck" su 0 abiliterà sempre il controllo (arrestando il
funzionamento di Fiddler e software simile) e impostando "DisableCertificateRevocationCheck" su 1 il controllo
verrà sempre disabilitato (abilitando Fiddler e software simile).

Modifica del metodo di autenticazione


In alcuni casi potrebbe essere necessario modificare il metodo di autenticazione utilizzato per accedere a un sito
specifico. Se questa modifica è necessaria, vedere Modificare il metodo di autenticazione.

Limitazioni dell'autenticazione del connettore Web per il contenuto


HTML
NOTE
Le limitazioni descritte in questa sezione si applicano solo alle pagine Web HTML. L'apertura di altri tipi di file dal Web con
questo connettore non è interessata da queste limitazioni.

Il connettore Power Query Web crea automaticamente Web.Page una query che supporta l'autenticazione.
L'unica limitazione si verifica se si seleziona Windows autenticazione nella finestra di dialogo del metodo di
autenticazione. In questo caso, la selezione Usa le credenziali correnti funziona correttamente, ma Usa
credenziali alternative non esegue l'autenticazione.
La nuova versione del connettore Web (attualmente disponibile in Power BI Desktop) crea automaticamente una
Web.BrowserContents query. Queste query attualmente supportano solo l'autenticazione anonima. In altre
parole, il nuovo connettore Web non può essere usato per connettersi a un'origine che richiede l'autenticazione
non anonima. Questa limitazione si applica alla Web.BrowserContents funzione, indipendentemente
dall'ambiente host.
Attualmente, Power BI Desktop usa automaticamente la Web.BrowserContents funzione . La Web.Page funzione
viene comunque usata automaticamente da Excel e Power Query Online. Power Query Online supporta l'uso di
un gateway dati locale, ma attualmente è necessario Web.BrowserContents immettere manualmente una formula
di questo tipo. Quando Web per esempio diventa disponibile in Power Query Online a metà ottobre 2020,
questa funzionalità userà Web.BrowserContents .
Per Web.Page la funzione è necessario che Internet Explorer 10 installato nel computer. Quando si aggiorna una
query tramite un gateway dati locale, il computer che contiene il gateway deve avere installato Web.Page
Internet Explorer 10. Se si usa solo la funzione , non è necessario che Internet Explorer 10 installato nel
computer o nel computer contenente il Web.BrowserContents gateway dati locale.
Nei casi in cui è necessario usare Web.Page invece di a causa di problemi di Web.BrowserContents autenticazione,
è comunque possibile usare manualmente Web.Page .
In Power BI Desktop, è possibile usare la funzione precedente deselezionando la funzionalità di anteprima
Web.Page inferenza nuova tabella Web:

1. Nella scheda File selezionare Opzioni e impostazioni > Opzioni .


2. Nella sezione Globale selezionare Funzionalità di anteprima .
3. Deselezionare la funzionalità Di anteprima dell'inferenza nuova tabella Web e quindi selezionare
OK.
4. Riavviare Power BI Desktop.
NOTE
Attualmente non è possibile disattivare l'uso di in Power BI Desktop Web.BrowserContents ottimizzato per
Server di report di Power BI.

È anche possibile ottenere una copia di una Web.Page query da Excel. Per copiare il codice da Excel:
1. Selezionare Da Web nella scheda Dati.
2. Immettere l'indirizzo nella finestra di dialogo Dal Web e quindi selezionare OK.
3. In Strumento di navigazione scegliere i dati da caricare e quindi selezionare Trasforma dati .
4. Nella scheda Home della Power Query selezionare Editor avanzato .
5. Nel Editor avanzato copiare la formula M.
6. Nell'app che usa Web.BrowserContents selezionare il connettore Quer y vuota.
7. Se si sta copiando in Power BI Desktop:
a. Nella scheda Home selezionare Editor avanzato .
b. Incollare la Web.Page query copiata nell'editor e quindi selezionare Fine .
8. Se si sta copiando in Power Query Online:
a. In Quer y vuota incollare la Web.Page query copiata nella query vuota.
b. Selezionare un gateway dati locale da usare.
c. Selezionare Avanti .
È anche possibile immettere manualmente il codice seguente in una query vuota. Assicurarsi di immettere
l'indirizzo della pagina Web da caricare.

let
Source = Web.Page(Web.Contents("<your address here>")),
Navigation = Source{0}[Data]
in
Navigation

Autenticazione a servizi arbitrari


Alcuni servizi supportano la possibilità per il connettore Web di eseguire l'autenticazione con l'autenticazione
OAuth/AAD. Tuttavia, questa operazione non funzionerà nella maggior parte dei casi.
Quando si tenta di eseguire l'autenticazione, se viene visualizzato l'errore seguente:
"Non è stato possibile connettersi perché questo tipo di credenziale non è supportato per questa risorsa.
Scegliere un altro tipo di credenziale."
Contattare il proprietario del servizio. Sarà necessario modificare la configurazione dell'autenticazione o creare
un connettore personalizzato.

Il connettore Web usa HTTP 1.1 per comunicare


Il Power Query Web connector comunica con un'origine dati tramite HTTP 1.1. Se l'origine dati prevede di
comunicare tramite HTTP 1.0, è possibile che venga visualizzato un errore, ad esempio
500 Internal Server Error .

Non è possibile cambiare Power Query usare HTTP 1.0. Power Query invia sempre un oggetto quando è
presente un corpo per evitare di passare un payload probabilmente di grandi dimensioni quando la chiamata
iniziale potrebbe non riuscire (ad esempio, a causa della mancanza Expect:100-continue di autorizzazioni).
Attualmente, questo comportamento non può essere modificato.
Vedi anche
Power Query Web connector
Risoluzione dei problemi del Power Query Web
Workforce Dimensions (Beta) (Deprecato)
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Deprecato

Prodotti -

Tipi di autenticazione supportati -

Documentazione di riferimento per le funzioni -

Deprecazione
NOTE
Questo connettore è deprecato a causa della fine del supporto per il connettore. È consigliabile che gli utenti eseere esere
sconsigliano le connessioni esistenti usando questo connettore e non usino questo connettore per le nuove connessioni.
XML
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Disponibilità generale

Prodotti Power BI (set di dati)


Power BI (flussi di dati)
Power Apps (flussi di dati)
Excel
Dynamics 365 per Customer Insights
Analysis Services

Documentazione di riferimento delle funzioni Xml.Tables


Xml.Document

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Funzionalità supportate
Importa

Caricare un file XML locale da Power Query Desktop


Per caricare un file XML locale:
1. Selezionare l'opzione XML nella selezione Ottieni dati. Questa azione avvierà un browser di file locale
e consentirà di selezionare il file XML.
2. Passare alla directory contenente il file XMl locale che si vuole caricare e quindi selezionare Apri.
3. In Strumento di navigazione selezionare i dati desiderati e quindi selezionare Carica per caricare i dati o
Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Caricare un file XML locale da Power Query Online


Per caricare un file XML locale:
1. Nella pagina Origini dati selezionare XML.
2. Immettere il percorso del file XML locale.
3. Selezionare un gateway dati locale da Gateway dati.
4. Se è necessaria l'autenticazione, immettere le credenziali.
5. Selezionare Avanti .
Il caricamento del file XML avvierà automaticamente il editor di Power Query. Dall'editor è quindi possibile
trasformare i dati, se lo si desidera, oppure è sufficiente salvare e chiudere per caricare i dati.

Caricare un file XML dal Web


Se si vuole caricare un file XML dal Web, invece di selezionare il connettore XML è possibile selezionare il
connettore Web. Incollare l'indirizzo del file desiderato e verrà richiesto di selezionare l'autenticazione, perché si
accede a un sito Web anziché a un file statico. Se non è disponibile alcuna autenticazione, è sufficiente
selezionare Anonimo. Come nel caso locale, verrà visualizzata la tabella caricata dal connettore per
impostazione predefinita, che è possibile caricare o trasformare.

Risoluzione dei problemi


Struttura dei dati
A causa del fatto che molti documenti XML hanno dati intrusi o annidati, potrebbe essere necessario eseguire
altre attività di data shaping per ottenere i dati in un tipo di formato che rende più semplice eseguire analisi.
Questo vale se si usa la funzione accessibile Xml.Tables dall'interfaccia utente o la funzione Xml.Document . A
seconda delle esigenze, potrebbe essere necessario eseguire più o meno data shaping.
Confronto tra testo e nodi
Se il documento contiene una combinazione di nodi di testo e nodi di pari livello non di testo, è possibile che si
verifichino problemi.
Ad esempio, se è presente un nodo simile al seguente:

<abc>
Hello <i>world</i>
</abc>

Xml.Tables restituirà la parte "world", ma ignorerà "Hello". Vengono restituiti solo gli elementi, non il testo.
Tuttavia, Xml.Document restituirà "Hello <i> </i> world". L'intero nodo interno viene trasformato in testo e la
struttura non viene mantenuta.
Zendesk (Beta)
07/12/2021 • 2 minutes to read

Riepilogo
EL EM EN TO DESC RIZ IO N E

Stato di rilascio Beta

Prodotti Power BI (set di dati)

Tipi di autenticazione supportati Account Zendesk

Prerequisiti
Prima di accedere a Zendesk, è necessario avere un account Zendesk (nome utente/password).

Funzionalità supportate
Importa

Connessione ai dati zendesk


Per connettersi ai dati di Zendesk:
1. Selezionare Recupera dati nella scheda Home della barra multifunzione in Power BI Desktop.
Selezionare Online Ser vices nelle categorie a sinistra, selezionare Zendesk (Beta) e quindi selezionare
Connessione .
2. Se è la prima volta che si riceveranno dati tramite il connettore Zendesk, verrà visualizzata una notifica
del connettore di anteprima. Selezionare Don't warn me again with this connector (Non avvisare di
nuovo con questo connettore) se non si vuole che questo messaggio sia visualizzato di nuovo e quindi
selezionare Continua.
3. Immettere il percorso dell'URL di Zendesk a cui si vuole accedere e selezionare OK.

4. Per accedere all'account Zendesk, selezionare Accedi.


5. Nella finestra di Zendesk visualizzata specificare le credenziali per accedere all'account Zendesk.

6. Selezionare Accedi .
7. Dopo aver eseguito l'accesso, selezionare Connessione .
8. In Strumento di navigazione selezionare le informazioni desiderate, quindi selezionare Carica per
caricare i dati o Trasforma dati per continuare a trasformare i dati in editor di Power Query.

Limitazioni e problemi
È necessario tenere presenti le limitazioni e i problemi seguenti associati all'accesso ai dati di Zendesk.
Zendesk restituisce uno stato di errore 422 se l'istanza restituisce più di 1000 righe.
Power Query limiti online
07/12/2021 • 2 minutes to read

Riepilogo
Power Query Online è integrato in un'ampia gamma di prodotti Microsoft. Poiché questi prodotti hanno come
destinazione scenari diversi, possono impostare limiti diversi per l Power Query'utilizzo online.
I limiti vengono applicati all'inizio delle valutazioni delle query. Quando è in corso una valutazione, vengono
imposti solo i limiti di timeout.
Tipi di limite
Hourly Evaluation Count (Numero di valutazioni orarie): numero massimo di richieste di valutazione che un
utente può mettere durante un periodo di 60 minuti
Daily Evaluation Time (Tempo di valutazione giornaliero): tempo netto che un utente può dedicare alla
valutazione delle query durante qualsiasi periodo di 24 ore
Valutazioni simultanee: numero massimo di valutazioni che un utente può eseguire in qualsiasi momento
Limiti di creazione
I limiti di creazione sono gli stessi per tutti i prodotti. Durante la creazione, le valutazioni delle query
restituiscono anteprime che possono essere subset dei dati. I dati non sono persistenti.
Hourly Evaluation Count : 1000
Ora di valutazione giornaliera: attualmente senza restrizioni
Timeout per query: 10 minuti
Limiti di aggiornamento
Durante l'aggiornamento (pianificato o su richiesta), le valutazioni delle query restituiscono risultati completi. I
dati vengono in genere mantenuti nell'archiviazione.

H O URLY EVA L UAT IO N O RA DI VA L UTA Z IO N E VA L UTA Z IO N I SIM ULTA N EE


P RO DUC T IN T EGRAT IO N C O UN T ( #) GIO RN A L IERA ( O RE) ( #)

Microsoft Flow (SQL 500 2 5


Connector Transform —
Data Using Power Query)

Flussi di dati in 500 2 5


PowerApps.com (versione di
valutazione)

Flussi di dati in 1000 8 10


PowerApps.com
(produzione)

Integrazione dei dati nel 1000 24 10


PowerApps.com di
amministrazione

Flussi di dati in PowerBI.com 1000 100 10


Problemi comuni
07/12/2021 • 6 minutes to read

Mantenimento dell'ordinamento
Si potrebbe presupporre che, se si ordinano i dati, qualsiasi operazione downstream conserverà l'ordinamento.
Ad esempio, se si ordina una tabella delle vendite in modo che venga visualizzata per prima la vendita più
grande di ogni negozio, si potrebbe prevedere che l'esecuzione di un'operazione "Rimuovi duplicati" restituirà
solo le vendite principali per ogni negozio. E questa operazione potrebbe infatti sembrare funzionare. Tuttavia,
questo comportamento non è garantito.
A causa del modo in cui Power Query ottimizza determinate operazioni, tra cui ignorarle o scaricarle nelle
origini dati (che possono avere un proprio comportamento di ordinamento univoco), non è garantito che
l'ordinamento sia mantenuto tramite aggregazioni (ad esempio ), unioni (ad esempio ) o rimozione di duplicati
Table.Group Table.NestedJoin (ad esempio Table.Distinct ).

Esistono diversi modi per risolvere questo problema. Ecco due suggerimenti:
Eseguire un ordinamento dopo aver applicato l'operazione downstream. Ad esempio, quando si
raggruppano righe, ordinare la tabella nidificata in ogni gruppo prima di applicare altri passaggi. Ecco un
esempio di codice M che illustra questo approccio:
Table.Group(Sales_SalesPerson, {"TerritoryID"}, {{"SortedRows", each Table.Sort(_, {"SalesYTD",
Order.Descending})}})
Buffer dei dati (utilizzando Table.Buffer ) prima di applicare l'operazione downstream. In alcuni casi, questa
operazione fa sì che l'operazione downstream manteni l'ordinamento memorizzato nel buffer.

Inferenza del tipo di dati


Talvolta Power Query possibile rilevare in modo errato il tipo di dati di una colonna. Ciò è dovuto al fatto che
Power Query i tipi di dati usando solo le prime 200 righe di dati. Se i dati nelle prime 200 righe sono in qualche
modo diversi rispetto ai dati dopo la riga 200, Power Query può finire per scegliere il tipo errato. Tenere
presente che un tipo non corretto non genererà sempre errori. A volte i valori risultanti saranno semplicemente
errati, rendendo il problema più difficile da rilevare.
Si supponga, ad esempio, che una colonna contenga numeri interi nelle prime 200 righe (ad esempio tutti gli
zeri), ma che contenga numeri decimali dopo la riga 200. In questo caso, Power Query dedurrà il tipo di dati
della colonna come Numero intero (Int64.Type). Questa inferenza comporta il troncamento delle parti decimali
di tutti i numeri non interi.
Oppure si immagini una colonna che contiene valori di data testuali nelle prime 200 righe e altri tipi di valori di
testo dopo la riga 200. In questo caso, Power Query dedurrà il tipo di dati della colonna come Data. Questa
inferenza comporta che i valori di testo non di data vengano considerati come errori di conversione del tipo.
Poiché il rilevamento dei tipi funziona sulle prime 200 righe, ma la profilatura dei dati può operare sull'intero set
di dati, è possibile usare la funzionalità Profiling dati per ottenere un'indicazione anticipata nel Editor di query
sugli errori (dal rilevamento del tipo o da qualsiasi altro motivo) oltre le prime N righe.

Connessioni chiuse forzatamente dall'host remoto


Quando ci si connette a diverse API, è possibile che venga visualizzato l'avviso seguente:
Data source error: Unable to read data from the transport connection: An existing connection was forcibly
closed by the remote host

Se si verifica questo errore, è molto probabile che si sia verificato un problema di rete. In genere, le prime
persone da controllare sono i proprietari dell'origine dati a cui si sta tentando di connettersi. Se non si pensa di
essere quelli che chiudono la connessione, è possibile che lungo il percorso si esemplino ( ad esempio, un server
proxy, router/gateway intermedi e così via).
Sia che si riproduca solo con dati o solo con dati di dimensioni maggiori, è probabile che si sia verificato un
timeout di rete in un punto qualsiasi della route. Se si tratta solo di dati di dimensioni maggiori, i clienti devono
rivolgersi al proprietario dell'origine dati per verificare se le API supportano il paging, in modo che possano
suddividere le richieste in blocchi più piccoli. In caso contrario, è necessario seguire modi alternativi per estrarre
i dati dall'API (procedure consigliate per le origini dati seguenti).

I pacchetti di crittografia RSA TLS sono deprecati


A partire dal 30 ottobre 2020, i pacchetti di crittografia seguenti verranno deprecati dai server.
"TLS_RSA_WITH_AES_256_GCM_SHA384"
"TLS_RSA_WITH_AES_128_GCM_SHA256"
"TLS_RSA_WITH_AES_256_CBC_SHA256"
"TLS_RSA_WITH_AES_128_CBC_SHA256"
Di seguito sono elencati i pacchetti di crittografia supportati:
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"
"TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"
"TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"
"TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"
"TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
"TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
I pacchetti di crittografia vengono usati per crittografare i messaggi per proteggere una connessione di rete tra
client/server e altri server. L'elenco precedente dei pacchetti di crittografia viene rimosso per garantire la
conformità ai protocolli di sicurezza correnti. A partire dal 1° marzo 2021, i clienti possono usare solo i pacchetti
di crittografia standard.
Si tratta dei pacchetti di crittografia a cui il server a cui ci si connette deve supportare per connettersi da Power
Query Online o Power BI.
In Power Query Desktop (Power BI, Excel), i pacchetti di crittografia non vengono controllati. Se si sta tentando di
connettersi a Power Platform (ad esempio flussi di dati Power Platform) o al servizio Power BI, è necessario uno
di questi pacchetti di crittografia abilitati nel sistema operativo. È possibile aggiornare la versione Windows o
aggiornare il registro TLS di Windows per assicurarsi che l'endpoint server supporti una di queste crittografia.
Per verificare che il server sia conforme al protocollo di sicurezza, è possibile eseguire un test usando uno
strumento di crittografia e scanner TLS. Un esempio potrebbe essere SSLLABS.
I clienti devono aggiornare i server prima del 1° marzo 2021. Per altre informazioni sulla configurazione
dell'ordine di TLS Cipher Suite, vedere Gestire Transport Layer Security (TLS).

Revoca del certificato


Una versione futura di Power BI Desktop causerà un errore di connessione SSL dal desktop quando uno dei
certificati nella catena SSL non ha lo stato di revoca del certificato. Si tratta di una modifica rispetto allo stato
corrente, in cui la revoca ha causato solo un errore di connessione nel caso in cui il certificato sia stato revocato
in modo esplicito. Altri problemi relativi ai certificati possono includere firme non valide e scadenza del
certificato.
Poiché esistono configurazioni in cui lo stato di revoca può essere ignorato, ad esempio con i server proxy
aziendali, verrà offerta un'altra opzione per ignorare i certificati che non dispongono di informazioni di revoca.
Questa opzione consente alle situazioni in cui le informazioni di revoca vengono spogliate in determinati casi,
ma non si vuole ridurre completamente la sicurezza, per continuare a lavorare.
Non è consigliabile, ma gli utenti continueranno a essere in grado di disattivare completamente i controlli di
revoca.

Errore: Valutazione annullata


Power Query restituirà il messaggio "Valutazione annullata" quando l'analisi in background è disabilitata e
l'utente passa da una query all'altro o chiude il Editor di query mentre è in corso l'aggiornamento di una query.

Errore: La chiave non corrisponde ad alcuna riga nella tabella


Esistono molti motivi per cui Power Query può restituire un errore che indica che la chiave non corrisponde ad
alcuna riga nella tabella . Quando si verifica questo errore, il motore Mashup non riesce a trovare il nome
della tabella che sta cercando. I motivi per cui questo errore può verificarsi includono:
Il nome della tabella è stato modificato, ad esempio nell'origine dati stessa.
L'account usato per accedere alla tabella non dispone di privilegi sufficienti per leggere la tabella.
Possono essere presenti più credenziali per una singola origine dati, che non è supportata in Power BI
Service. Questo errore può verificarsi, ad esempio, quando l'origine dati è un'origine dati cloud e vengono
usati più account per accedere contemporaneamente all'origine dati con credenziali diverse. Se l'origine dati
è locale, è necessario usare il gateway dati locale.

Limitazione: requisito aggiunto al dominio per i computer gateway


quando si usa l'Windows autenticazione
L Windows'autenticazione con un gateway locale richiede che il computer gateway sia aggiunto a un dominio.
Questo vale per tutte le connessioni impostate con "autenticazione Windows tramite il gateway". Windows che
verranno usati per accedere a un'origine dati potrebbero richiedere l'accesso in lettura ai componenti condivisi
nella directory Windows e l'installazione del gateway.
Esaminare le modifiche dello script in Power Query
Online
07/12/2021 • 2 minutes to read

Sfondo
A causa del modo in cui le query vengono archiviate in Power Query Online, in alcuni casi si verifica la perdita
dello script M immesso manualmente (in genere i commenti). Il riquadro "Rivedi modifiche script" offre
un'esperienza diff evidenziando le modifiche, che consente agli utenti di comprendere quali modifiche vengono
apportate. Gli utenti possono quindi accettare le modifiche o ridisporre lo script per correggerlo.
Questa esperienza può essere causata da tre casi particolari.
Script per le trasformazioni della barra multifunzione
Le trasformazioni della barra multifunzione generano sempre lo stesso script M, che può essere diverso dal
modo in cui vengono immesse manualmente. Deve essere sempre uno script equivalente. Se non è questo il
caso, contattare il supporto tecnico.
Commenti
I commenti devono essere sempre all'interno Let .. in dell'espressione e al di sopra di un passaggio. Verrà
visualizzato nell'interfaccia utente come "Proprietà passaggio". Tutti gli altri commenti vengono persi. I
commenti scritti nella stessa riga di un passaggio, ma sopra un altro passaggio (ad esempio, dopo la virgola che
consente di tracciare ogni passaggio) verranno spostati verso il basso.
Rimozione degli errori di script
In alcuni casi, lo script verrà aggiornato se si verifica un errore di sintassi usando l'escape dello script, ad
esempio quando si usa la barra della formula.

Esperienza
Quando si esegue il commit di una query, Power Query Online la valuterà per verificare se la versione
"archiviata" dello script è diversa da quella inviata. In caso contrario, verrà visualizzata una finestra di dialogo
"Rivedi modifiche script" che consentirà di accettare o annullare l'operazione.
Se si accetta, le modifiche verranno apportate alla query.
Se si annulla l'operazione, è possibile riscrivere la query per assicurarsi di spostare correttamente i commenti
o riorganizzarli nel modo desiderato.
Power Query del connettore
07/12/2021 • 2 minutes to read

Questo articolo descrive come inviare commenti e suggerimenti per Power Query connettori. È importante
distinguere tra i connettori di proprietà di Microsoft e i connettori non di proprietà di Microsoft, perché i canali
di supporto e feedback sono diversi.
Per verificare se un connettore è di proprietà di Microsoft, vedere le informazioni di riferimento sul connettore.
Solo i connettori contrassegnati come "Da Microsoft" sono connettori di proprietà di Microsoft.

Connettori di proprietà di Microsoft


Questa sezione descrive le istruzioni per ricevere supporto o inviare commenti e suggerimenti sui connettori di
proprietà di Microsoft.
Supporto e risoluzione dei problemi
Se si verifica un problema con un connettore Power Query, usare i canali di supporto dedicati per il prodotto in
cui si Power Query connettori. Ad esempio, per Power BI, visitare la pagina Power BI supporto tecnico.
Per informazioni sull'uso di connettori di proprietà di Microsoft Power Query, visitare una delle risorse seguenti.
Power Query su Microsoft Q&A
Community forum per il prodotto in uso Power Query in uso. Ad esempio, per Power BI, questo forum sarà il
Power BI Community
Power Query risorse del sito Web
Invio di commenti e suggerimenti
Per inviare commenti e suggerimenti su un connettore di proprietà di Microsoft, inviare commenti e
suggerimenti al forum "idee" per il prodotto in cui si Power Query connettori. Ad esempio, per Power BI, visitare
il forum Power BI ideas. Se si dispone di un account, è anche possibile inviare commenti e suggerimenti
direttamente al account Microsoft contatto.

Connettori non Di proprietà di Microsoft


Questa sezione descrive le istruzioni per ricevere supporto o inviare commenti e suggerimenti sui connettori
non di proprietà di Microsoft.
Supporto e risoluzione dei problemi
Per i connettori non di proprietà di Microsoft, le domande relative al supporto e alla risoluzione dei problemi
devono essere poste al proprietario del connettore tramite i canali di supporto. Ad esempio, per un connettore
di proprietà di Contoso, è necessario inviare una richiesta tramite i canali di supporto di Contoso.
È anche possibile coinvolgere le Power Query della community indicate in precedenza per i connettori di
proprietà di Microsoft, nel caso in cui un membro della community possa fornire assistenza.
Invio di commenti e suggerimenti
Poiché i connettori non di proprietà di Microsoft vengono gestiti e aggiornati dal proprietario del connettore, i
commenti e suggerimenti devono essere inviati direttamente al proprietario del connettore. Ad esempio, per
inviare commenti e suggerimenti su un connettore di proprietà di Contoso, è necessario inviare direttamente
commenti e suggerimenti a Contoso.
Acquisire richieste Web con Fiddler
07/12/2021 • 3 minutes to read

Quando si diagnosticano problemi che possono verificarsi quando Power Query comunica con i dati, potrebbe
essere richiesto di fornire una traccia di Fiddler. Le informazioni fornite da Fiddler possono essere utili per la
risoluzione dei problemi di connettività.

NOTE
Questo articolo presuppone che si abbia già familiarità con il funzionamento generale di Fiddler.

Configurare Fiddler per l'acquisizione di indirizzi HTTP sicuri


Prima di iniziare ad acquisire le richieste Web emesse da Power Query, è necessario abilitare Fiddler per
l'acquisizione di indirizzi HTTP sicuri (https://) nel dispositivo.
Se Fiddler non è già installato, scaricare e installare Fiddler ora. Assicurarsi di installare Fiddler nel sistema in cui
si verifica il problema.
Per configurare Fiddler per l'acquisizione di indirizzi HTTP sicuri:
1. Aprire Fiddler.
2. In File deselezionare il segno di spunta accanto a Acquisisci traffico.
3. Selezionare Strumenti > Opzioni .
4. Aprire la scheda HTTPS.
5. Selezionare Capture HTTPS CONNECTs (Acquisisci HTTPS CONNECT).
6. Selezionare Decr ypt HTTPS traffic (Decrittografa traffico HTTPS).
7. Nella finestra di dialogo certificato radice selezionare Sì.
8. Quando viene chiesto di confermare che si vuole aggiungere il certificato all'elenco di radice attendibili
dei PC, selezionare Sì.
9. Nella scheda HTTPS selezionare OK.
10. Nel riquadro Del traffico di Fiddler selezionare una delle tracce correnti e quindi premere CTRL+X.
Questa azione cancella tutte le tracce correnti dal riquadro del traffico.

Linee guida per l'acquisizione di richieste Web


Poiché Fiddler acquisisce tutto il traffico di rete durante la sessione registrata, assicurarsi di chiudere tutte le
altre app e le altre pagine Web prima di acquisire una traccia di Fiddler. La chiusura di tutte le altre app e pagine
Web elimina la maggior parte del traffico Web aggiuntivo non associato al problema che si sta tentando di
acquisire.
Dopo aver chiuso tutte le altre app e le pagine Web non associate al problema, cancellare il riquadro del traffico
di Fiddler come descritto nel passaggio 10 della procedura precedente. Selezionare quindi Traffico di
acquisizione > file appena prima di avviare l'operazione in questione. Quando si verifica il problema,
deselezionare immediatamente il segno di spunta accanto a Traffico acquisizione file per > arrestare
l'acquisizione.
Queste azioni riducono al minimo il numero di messaggi che è necessario scorrere e consentono anche di
concentrare l'analisi. Evita inoltre di acquisire altre informazioni potenzialmente riservate che non si vuole
condividere.
Se si eseguono solo Power Query e Fiddler, questa configurazione minima dovrebbe produrre una sequenza di
richieste e risposte HTTP da qualsiasi back-end con cui si sta comunicando, ad esempio un servizio Power BI,
SharePoint o Azure. Le richieste, le risposte, le intestazioni, i codici di risposta e talvolta il payload forniranno
tutti indicazioni che è possibile usare per risolvere il problema.
Per salvare la sessione di acquisizione in un file di log, selezionare File > Salva tutte le > sessioni . Potrebbe
anche essere richiesto di comprimere il file di log (.zip) prima di inviarlo.

Ripristinare la configurazione originale del sistema


Dopo aver specificato i file di log di Fiddler e completato la risoluzione dei problemi, è necessario ripristinare la
configurazione originale del sistema e rimuovere Fiddler come middleman.
Per ripristinare la configurazione originale del sistema:
1. In Fiddler selezionare Strumenti > Opzioni .
2. In Opzioni aprire la scheda HTTPS.
3. Deselezionare il segno di spunta accanto a Acquisisci HTTPS CONNECTS .
4. Selezionare Azioni.
5. Selezionare Reimposta tutti i cer tificati .

6. In Reimposta tutti i cer tificati selezionare OK.


7. In Consentire all'app di appor tare modifiche al dispositivo? selezionare Sì.
8. In TrustCer t Success (Attendibilità cer tificato riuscita) selezionare OK.
9. In Archivio cer tificati radice selezionare Sì.
10. Se viene visualizzata la finestra di dialogo Certificato radice, chiudere la finestra di dialogo senza
selezionare Sì o No.
11. In Operazione riuscita selezionare OK.
12. In Opzioni selezionare OK.

Vedi anche
Diagnostica query
Power Query feedback
Introduzione a Fiddler Classic
Installazione dell'SDK Power Query
07/12/2021 • 3 minutes to read

Avvio rapido
NOTE
I passaggi per abilitare le estensioni sono stati modificati nella versione di giugno 2017 di Power BI Desktop.

1. Installare Power Query SDK da Visual Studio Marketplace.


2. Creare un nuovo progetto di connettore dati.
3. Definire la logica del connettore.
4. Compilare il progetto per produrre un file di estensione.
5. Copiare il file di estensione in [Documenti]/Power BI Desktop/Connettori personalizzati.
6. Selezionare l'opzione (Non consigliato) Consenti il caricamento di qualsiasi estensione senza convalida
o avviso in Power BI Desktop (in File | Opzioni e impostazioni | Opzioni | Sicurezza | Estensioni per i dati).
7. Riavviare Power BI Desktop.

Distribuzione dei connettori dati


Power BI Desktop utenti possono scaricare i file di estensione e posizionarli in una directory nota (procedura
descritta in precedenza). Power BI Desktop carica automaticamente le estensioni al riavvio.

Collegamenti e risorse aggiuntivi


Funzioni della libreria M
Specifica del linguaggio M
Power BI Centro per sviluppatori
Esercitazione sul connettore dati
Procedura dettagliata
Creazione di una nuova estensione in Visual Studio
L'installazione Power Query SDK per Visual Studio creerà un nuovo modello di progetto connettore dati in
Visual Studio.
Verrà creato un nuovo progetto contenente i file seguenti:
File di definizione del connettore <connectorName> (con estensione pq)
Un file di test di query ( <connectorName> .query.pq)
Un file di risorse stringa (resources.resx)
File PNG di varie dimensioni usate per creare icone
Il file di definizione del connettore inizierà con una descrizione dell'origine dati vuota. Per informazioni
dettagliate, vedere la sezione Tipo di origine dati più avanti in questo documento.
Test in Visual Studio
L Power Query SDK offre funzionalità di base per l'esecuzione di query, che consentono di testare l'estensione
senza dover passare a Power BI Desktop. Per altri dettagli, vedere File di query.
Compilare e distribuire da Visual Studio
La compilazione del progetto produrrà il file con estensione pqx.
I progetti connettore dati non supportano istruzioni post-compilazione personalizzate per copiare il file di
estensione nella directory [Documenti]\Microsoft Power BI Desktop\Connettori personalizzati. Se si vuole
eseguire questa operazione, è possibile usare un'estensione di Visual Studio, ad esempio Distribuzione
automatica.
File di estensione
Power Query estensioni vengono raggruppate in un file ZIP e con estensione mez. In fase di Power BI Desktop
carica le estensioni da [Documenti]\Microsoft Power BI Desktop\Connettori personalizzati.

NOTE
In una modifica imminente l'estensione predefinita verrà modificata da .mez a .pqx.

Formato del file di estensione


Le estensioni sono definite all'interno di un documento di sezione M. Un documento di sezione ha un formato
leggermente diverso dai documenti di query generati in Power Query. Il codice importato da Power Query in
genere richiede modifiche per rientrare in un documento di sezione, ma le modifiche sono secondarie. Le
differenze dei documenti di sezione da tenere presenti includono:
Iniziano con una dichiarazione di sezione (ad esempio, section HelloWorld; ).
Ogni espressione termina con un punto e virgola (ad esempio, a = 1; o b = let c = 1 + 2 in c; ).
Tutte le funzioni e le variabili sono locali nel documento di sezione, a meno che non siano contrassegnate
come condivise. Le funzioni condivise diventano visibili ad altre query/funzioni e possono essere chiamate
come esportazioni per l'estensione, ovvero possono essere chiamate da Power Query.
Altre informazioni sui documenti della sezione M sono disponibili nella specifica del linguaggio M.
Query File
Oltre al file di estensione, i progetti connettore dati possono avere un file di query (name.query.pq). Questo file
può essere usato per eseguire query di test all'interno Visual Studio. La valutazione della query includerà
automaticamente il codice dell'estensione, senza dover registrare il file con estensione pqx, consentendo di
chiamare/testare eventuali funzioni condivise nel codice dell'estensione.
Il file di query può contenere una singola espressione (ad esempio, ), un'espressione (ad esempio ciò
HelloWorld.Contents() let che Power Query genererebbe) o un documento di sezione.
Avvio di sviluppo di connettori personalizzati
07/12/2021 • 2 minutes to read

Per velocizzare l'uso di Power Query, questa pagina elenca alcune delle domande più comuni.
Quale software è necessario per iniziare a usare Power Query SDK?
È necessario installare Power Query SDK oltre a Visual Studio. Per poter testare i connettori, è necessario avere
installato Power BI.
Cosa è possibile fare con un connettore personalizzato?
I connettori personalizzati consentono di creare nuove origini dati o di personalizzare ed estendere un'origine
esistente. I casi d'uso comuni in cui può verificarsi questa situazione includono:
Creazione di una business analyst semplice per un'API REST.
Fornire informazioni di personalizzazione per un'Power Query supporta con un connettore esistente, ad
esempio un servizio OData o un driver ODBC.
Implementazione del flusso di autenticazione OAuth v2 per un'offerta SaaS.
Esposizione di una visualizzazione limitata o filtrata sull'origine dati per migliorare l'usabilità.
Abilitazione di DirectQuery per un'origine dati tramite un driver ODBC.
I connettori personalizzati sono disponibili solo in Power BI Desktop e Power BI service tramite l'uso di un
gateway dati locale. Altre informazioni: TripPin 9 - Test Connection
Creazione del primo connettore: Hello World
07/12/2021 • 2 minutes to read

Hello World esempio


Questo esempio fornisce una semplice estensione per l'origine dati che può essere eseguita in Visual Studio e
caricata in Power BI Desktop. Come panoramica, questo esempio mostra quanto segue:
Funzione di esportazione ( HelloWorld.Contents ), che accetta un parametro di testo dell'opzione.
Definizione di un tipo di origine dati che:
Dichiara di utilizzare l'autenticazione implicita (anonima).
Usa risorse stringa che consentono la localizzazione.
Dichiarazione dei metadati dell'interfaccia utente in modo che l'estensione possa essere visualizzata
nella Power BI Desktop di dialogo Ottieni dati.
Seguendo le istruzioni in Installazione di PowerQuery SDK,creare un nuovo progetto denominato "HelloWorld"
e copiarlo nel codice M seguente, quindi seguire le altre istruzioni per poterlo aprire in PowerBI.
Nella definizione del connettore seguente è possibile trovare:
Istruzione section .
Funzione dell'origine dati con metadati che la stabiliscono come definizione di origine dati con Kind
HelloWorld e Publish HelloWorld.Publish .
Record Authentication che dichiara che implicito (anonimo) è l'unico tipo di autenticazione per questa
origine.
Record di pubblicazione che dichiara che la connessione è in beta, il testo da caricare dal file resx, l'immagine
di origine e l'immagine del tipo di origine.
Record che associa le dimensioni delle icone a png specifici nella cartella di compilazione.
[DataSource.Kind="HelloWorld", Publish="HelloWorld.Publish"]
shared HelloWorld.Contents = (optional message as text) =>
let
message = if (message <> null) then message else "Hello world"
in
message;

HelloWorld = [
Authentication = [
Implicit = []
],
Label = Extension.LoadString("DataSourceLabel")
];

HelloWorld.Publish = [
Beta = true,
ButtonText = { Extension.LoadString("FormulaTitle"), Extension.LoadString("FormulaHelp") },
SourceImage = HelloWorld.Icons,
SourceTypeImage = HelloWorld.Icons
];

HelloWorld.Icons = [
Icon16 = { Extension.Contents("HelloWorld16.png"), Extension.Contents("HelloWorld20.png"),
Extension.Contents("HelloWorld24.png"), Extension.Contents("HelloWorld32.png") },
Icon32 = { Extension.Contents("HelloWorld32.png"), Extension.Contents("HelloWorld40.png"),
Extension.Contents("HelloWorld48.png"), Extension.Contents("HelloWorld64.png") }
];

Dopo aver compilato il file e copiato nella directory corretta, seguendo le istruzioni riportate nell'esercitazione
Sull'installazione di PowerQuery SDK, aprire PowerBI. È possibile cercare "hello" per trovare il connettore nella
finestra di dialogo Ottieni dati.
Questo passaggio aprirà una finestra di dialogo di autenticazione. Poiché non sono disponibili opzioni di
autenticazione e la funzione non accetta parametri, non sono disponibili altri passaggi in queste finestre di
dialogo.
Premere Connessione dialogo per indicare che si tratta di un "connettore di anteprima", perché è Beta
impostato su true nella query. Poiché non è presente alcuna autenticazione, la schermata di autenticazione
presenterà una scheda per Autenticazione anonima senza campi. Premere Connessione di nuovo per
completare l'operazione.
Infine, verrà visualizzato l'editor di query che mostra ciò che ci si aspetta da una — funzione che restituisce il
testo "Hello world".
Per l'esempio completamente implementato, vedere l'esempio Hello World nel repo di esempio connettori di
dati.
Esercitazione su TripPin
07/12/2021 • 2 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza, ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
Questa esercitazione usa un servizio OData pubblico (TripPin) come origine di riferimento. Anche se questa
lezione richiede l'uso delle funzioni OData del motore M, le lezioni successive useranno
Web.Contents,rendendolo applicabile alla maggior parte delle API REST.

Prerequisiti
In questa esercitazione verranno usate le applicazioni seguenti:
Power BI Desktop, versione di maggio 2017 o successiva
Power Query SDK per Visual Studio
Fiddler — Facoltativo, ma consigliato per la visualizzazione e il debug delle richieste al servizio REST
È consigliabile esaminare:
Installazione di PowerQuery SDK
Iniziare a sviluppare connettori personalizzati
Creazione del primo connettore: Hello World
Gestione dell'accesso ai dati
Gestione dell'autenticazione

NOTE
È anche possibile avviare la registrazione delle tracce del lavoro in qualsiasi momento abilitando la diagnostica, descritta
più avanti in questa esercitazione. Altre informazioni: Abilitazione della diagnostica

Parti
PA RT E L EZ IO N E DET TA GL I

1 OData Creare un connettore dati semplice su


un servizio OData

2 Resto Connessione a un'API REST che


restituisce una risposta JSON

3 Tabelle di spostamento Offrire un'esperienza di navigazione


per l'origine

4 Percorsi delle origini dati Come vengono identificate le


credenziali per l'origine dati

5 Paging Leggere con una risposta di pagina da


un servizio Web
PA RT E L EZ IO N E DET TA GL I

6 Applicazione dello schema Applicare la struttura della tabella e i


tipi di dati delle colonne

7 Schema avanzato Applicare dinamicamente la struttura


della tabella usando i tipi M e i
metadati esterni

8 Diagnostica Aggiungere la traccia dettagliata al


connettore

9 Test connessione Implementare un gestore


TestConnection per abilitare
l'aggiornamento tramite il gateway

10 Folding della query di base Implementare gestori di base per la


visualizzazione delle query
Parte 1 di TripPin - Connettore dati per un servizio
OData
07/12/2021 • 5 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Creare un nuovo progetto connettore dati usando Visual Studio SDK
Creare una funzione di base per eseguire il pull dei dati da un'origine
Testare il connettore in Visual Studio
Registrare il connettore in Power BI Desktop

Creazione di un connettore OData di base


In questa sezione verrà creato un nuovo progetto Connettore dati, verranno fornite alcune informazioni di base
e verrà testato in Visual Studio.
Aprire Visual Studio e creare un nuovo Project. Nella cartella Power Query selezionare il progetto Connettore
dati. Per questo esempio, impostare il nome del progetto su TripPin .

Aprire il file TripPin.pq e incollare la definizione del connettore seguente.


section TripPin;

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

TripPinImpl = (url as text) =>


let
source = OData.Feed(url)
in
source;

// Data Source Kind description


TripPin = [
Authentication = [
Anonymous = []
],
Label = "TripPin Part 1 - OData"
];

// Data Source UI publishing description


TripPin.Publish = [
Beta = true,
Category = "Other",
ButtonText = { "TripPin OData", "TripPin OData" }
];

Questa definizione del connettore contiene:


Record di definizione dell'origine dati per il connettore TripPin
Dichiarazione che Implicit (Anonymous) è l'unico tipo di autenticazione per questa origine
Funzione ( TripPinImpl ) con un'implementazione che chiama OData.Feed
Funzione condivisa ( TripPin.Feed ) che imposta il tipo di parametro su Uri.Type
Record di pubblicazione dell'origine dati che consentirà al connettore di essere visualizzato nella Power BI di
dialogo Ottieni dati
Aprire il file TripPin.query.pq. Sostituire il contenuto corrente con una chiamata alla funzione esportata.

TripPin.Feed("https://services.odata.org/v4/TripPinService/")

Selezionare il pulsante Star t per avviare l'utilità M Query.


Il file con estensione query.pq viene usato per testare l'estensione senza doverla distribuire nella cartella
<project> bin Power BI Desktop cartella bin dell'utente. Se si seleziona il pulsante Star t (o si preme F5),
l'estensione viene compilata automaticamente e viene avviata l'utilità M Query.
L'esecuzione della query per la prima volta comporta un errore di credenziale. In Power Query, l'applicazione
host converte questo errore in una richiesta di credenziali. In Visual Studio verrà visualizzato un prompt simile
che indica l'origine dati in cui mancano le credenziali e il relativo percorso dell'origine dati. Selezionare il
percorso più breve dell'origine dati ( ) per applicare le credenziali a https://services.odata.org/ tutti gli URL in
questo — percorso.
Selezionare il tipo di credenziale Anonima e quindi Selezionare Imposta credenziali .
Selezionare OK per chiudere la finestra di dialogo e quindi selezionare di nuovo il pulsante Avvia. Viene
visualizzata una finestra di dialogo dello stato di esecuzione della query e infine una tabella Risultati query che
mostra i dati restituiti dalla query.

È possibile provare alcuni URL OData diversi nel file di test per vedere come vengono restituiti i diversi risultati.
Ad esempio:
https://services.odata.org/v4/TripPinService/Me
https://services.odata.org/v4/TripPinService/GetPersonWithMostFriends()
https://services.odata.org/v4/TripPinService/People

Il file TripPin.query.pq può contenere istruzioni singole, istruzioni let o documenti di sezione completi.

let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/"),
People = Source{[Name="People"]}[Data],
SelectColumns = Table.SelectColumns(People, {"UserName", "FirstName", "LastName"})
in
SelectColumns

Aprire Fiddler per acquisire il traffico HTTP ed eseguire la query. Dovrebbero essere visualizzati alcuni diversi
elementi di services.odata.org, generati dal processo del contenitore mashup. È possibile vedere che l'accesso
all'URL radice del servizio comporta uno stato 302 e un reindirizzamento alla versione più lunga dell'URL. I
reindirizzamenti seguenti sono un altro comportamento che si ottiene "gratuitamente" dalle funzioni della
libreria di base.
Un aspetto da notare se si osservano gli URL è che è possibile visualizzare la query che si è verificata con
SelectColumns l'istruzione .
https://services.odata.org/v4/TripPinService/People?$select=UserName%2CFirstName%2CLastName

Se si aggiungono altre trasformazioni alla query, è possibile vedere come influiscono sull'URL generato.
Questo comportamento è importante da notare. Anche se non è stata implementata la logica di folding esplicita,
il connettore eredita queste funzionalità dalla funzione OData.Feed. Le istruzioni M sono contesti di filtro in
grado di comporre il flusso da una funzione a — un'altra, quando possibile. Questo concetto è simile al modo in
cui le funzioni dell'origine dati usate all'interno del connettore ereditano il contesto di autenticazione e le
credenziali. Nelle lezioni successive si sostituirà l'uso di OData.Feed, che ha funzionalità di folding native, con
Web.Contents, che non lo fa. Per ottenere lo stesso livello di funzionalità, è necessario usare l'interfaccia e
Table.View implementare la propria logica di folding esplicita.

Caricamento dell'estensione in Power BI Desktop


Per usare l'estensione Power BI Desktop, è necessario copiare il file di output del progetto connettore
(TripPin.mez) nella directory Connettori personalizzati.
1. In Visual Studio selezionare Compila | Compilare la soluzione (F6) dalla barra dei menu. Verrà generato il
file mez per il progetto. Per impostazione predefinita, verrà visualizzato nella cartella bin\Debug del progetto.
2. Creare una directory [My Documents]\Power BI Desktop\Custom Connectors .
3. Copiare il file di estensione in questa directory.
4. Selezionare l'opzione (Non consigliato) Consenti il caricamento di qualsiasi estensione senza convalida o
avviso in Power BI Desktop (in Opzioni file e impostazioni Opzioni Estensioni dati > > > > di sicurezza ).
5. Riavviare Power BI Desktop.
6. Selezionare Ottieni dati > altro per visualizzare la finestra di dialogo Ottieni dati.
È possibile individuare l'estensione digitandone il nome nella casella di ricerca.

Selezionare il nome della funzione e selezionare Connessione . Viene visualizzato un messaggio di terze —
parti selezionare Continua per continuare. Viene ora visualizzata la finestra di dialogo di chiamata di funzione.
Immettere l'URL radice del servizio ( https://services.odata.org/v4/TripPinService/ ) e selezionare OK.
Poiché questa è la prima volta che si accede a questa origine dati, si riceverà una richiesta di credenziali.
Verificare che sia selezionato l'URL più breve e quindi selezionare Connessione .

Si noti che invece di ottenere una semplice tabella di dati, viene visualizzato lo strumento di spostamento. Ciò è
dovuto al fatto che la funzione OData.Feed restituisce una tabella con metadati speciali che l'esperienza Power
Query può visualizzare come tabella di navigazione. Questa procedura dettagliata illustra come creare e
personalizzare una tabella di navigazione personalizzata in una lezione futura.

Selezionare la tabella Me e quindi Selezionare Trasforma dati . Si noti che alle colonne sono già stati assegnati
tipi (anche per la maggior parte). Questa è un'altra funzionalità della funzione OData.Feed sottostante. Se si
osservano le richieste in Fiddler,si vedrà che è stato recuperato il documento $metadata servizio.
L'implementazione OData del motore esegue questa operazione automaticamente per determinare lo schema, i
tipi di dati e le relazioni del servizio.

Conclusione
Questa lezione ha illustrato la creazione di un connettore semplice basato sulla funzione della libreria
OData.Feed. Come si è visto, è necessaria una logica molto piccola per abilitare un connettore completamente
funzionale sulla OData funzione di base. Altre funzioni abilitate per l'estendibilità, ad esempio ODBC.
DataSource, fornire funzionalità simili.
Nella lezione successiva si sostituirà l'uso di OData.Feed con una funzione — meno idonea Web.Contents. Ogni
lezione implementerà più funzionalità del connettore, tra cui il paging, il rilevamento di metadati/schema e la
suddivisione delle query nella sintassi di query OData, fino a quando il connettore personalizzato non
supporterà lo stesso intervallo di funzionalità di OData.Feed.

Passaggi successivi
Parte 2 di TripPin - Connettore dati per un servizio REST
TripPin - Parte 2 - Connettore dati per un servizio
REST
07/12/2021 • 7 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza, ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Creare una funzione di base che chiama un'API REST usando Web.Contents
Informazioni su come impostare le intestazioni delle richieste ed elaborare una risposta JSON
Usare Power BI Desktop per eseguire il wrangle della risposta in un formato descrittivo
Questa lezione converte il connettore basato su OData per il servizio TripPin (creato nella lezione precedente)in
un connettore simile a quello creato per qualsiasi API RESTful. OData è un'API RESTful, ma con un set fisso di
convenzioni. Il vantaggio di OData è che fornisce uno schema, un protocollo di recupero dati e un linguaggio di
query standard. L'uso di OData.Feed richiederà di compilare queste funzionalità direttamente nel connettore.

Riepilogo del connettore OData


Prima di rimuovere le funzioni OData dal connettore, è necessario esaminare rapidamente le attività
attualmente disponibili (principalmente dietro le quinte) per recuperare i dati dal servizio.
Aprire il progetto del connettore TripPin dalla parte 1 in Visual Studio. Aprire il file Query e incollare la query
seguente:

TripPin.Feed("https://services.odata.org/v4/TripPinService/Me")

Aprire Fiddler e quindi selezionare il pulsante Start in Visual Studio.


In Fiddler verranno visualizzati tre richieste al server:

/Me —l'URL effettivo richiesto.


/$metadata —Una chiamata eseguita automaticamente dalla funzione OData.Feed per determinare lo
schema e le informazioni sul tipo relative alla risposta.
/Me/BestFriend —uno dei campi di cui è stato (eagerly) estratto quando è stato elencato il singleton /Me. In
questo caso la chiamata ha restituito uno 204 No Content stato .
La valutazione M è principalmente lazy. Nella maggior parte dei casi, i valori dei dati vengono recuperati/estratti
solo quando sono necessari. Esistono scenari (ad esempio il caso /Me/BestFriend) in cui viene estratto un valore
in modo eager. Ciò si verifica in genere quando sono necessarie informazioni sul tipo per un membro e il
motore non ha altro modo per determinare il tipo se non recuperare il valore ed esaminarlo. Rendere le cose
lazy(ovvero evitare pull eager) è uno degli aspetti chiave per rendere un connettore M performante.
Prendere nota delle intestazioni della richiesta inviate insieme alle richieste e al formato JSON della risposta
della richiesta /Me.

{
"@odata.context": "https://services.odata.org/v4/TripPinService/$metadata#Me",
"UserName": "aprilcline",
"FirstName": "April",
"LastName": "Cline",
"MiddleName": null,
"Gender": "Female",
"Age": null,
"Emails": [ "April@example.com", "April@contoso.com" ],
"FavoriteFeature": "Feature1",
"Features": [ ],
"AddressInfo": [
{
"Address": "P.O. Box 555",
"City": {
"Name": "Lander",
"CountryRegion": "United States",
"Region": "WY"
}
}
],
"HomeAddress": null
}

Al termine della valutazione della query, nella finestra M Query Output (Output query M) dovrebbe essere
visualizzato il valore Record per il singleton Me.

Se si confrontano i campi nella finestra di output con i campi restituiti nella risposta JSON non elaborata, si
noterà una mancata corrispondenza. Il risultato della query include campi aggiuntivi ( Friends , , ) che non
vengono visualizzati nella risposta Trips GetFriendsTrips JSON. La funzione OData.Feed ha aggiunto
automaticamente questi campi al record in base allo schema restituito da $metadata. Questo è un buon
esempio di come un connettore può aumentare e/o riformattare la risposta del servizio per offrire un'esperienza
utente migliore.
Creazione di un connettore REST di base
Si aggiungerà ora una nuova funzione esportata al connettore che chiama Web.Contents.
Per poter effettuare richieste Web con esito positivo al servizio OData, tuttavia, è necessario impostare alcune
intestazioni OData standard. Questa operazione verrà creata definendo un set comune di intestazioni come
nuova variabile nel connettore:

DefaultRequestHeaders = [
#"Accept" = "application/json;odata.metadata=minimal", // column name and values only
#"OData-MaxVersion" = "4.0" // we only support v4
];

Si modificherà l'implementazione della funzione in modo che, anziché usare , usi TripPin.Feed OData.Feed
Web.Contents per effettuare una richiesta Web e analizza il risultato come documento JSON.

TripPinImpl = (url as text) =>


let
source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
json = Json.Document(source)
in
json;

È ora possibile testarlo in Visual Studio usando il file di query. Il risultato del record /Me è ora simile al codice
JSON non elaborato visualizzato nella richiesta di Fiddler.
Se si guarda Fiddler quando si esegue la nuova funzione, si noterà anche che la valutazione esegue ora una
singola richiesta Web, anziché tre. Le prestazioni sono aumentate — del 300%. Naturalmente, ora sono state
perse tutte le informazioni sul tipo e sullo schema, ma non è ancora necessario concentrarsi su questa parte.
Aggiornare la query per accedere ad alcune entità/tabelle TripPin, ad esempio:
https://services.odata.org/v4/TripPinService/Airlines
https://services.odata.org/v4/TripPinService/Airports
https://services.odata.org/v4/TripPinService/Me/Trips

Si noterà che i percorsi usati per restituire tabelle formattate correttamente ora restituiscono un campo "valore"
di primo livello con un [Elenco] incorporato. Sarà necessario eseguire alcune trasformazioni sul risultato per
renderlo utilizzabile per Power BI scenari.

<a name="authoring-transformations-in-power-query">Creazione di
trasformazioni in Power Query
Sebbene sia certamente possibile creare manualmente le trasformazioni M, la maggior parte delle persone
preferisce usare Power Query per modellare i dati. Si aprirà l'estensione in Power BI Desktop e la si userà per
progettare query per trasformare l'output in un formato più semplice da usare. Ricompilare la soluzione,
copiare il nuovo file di estensione nella directory Connettori dati personalizzati e quindi Power BI Desktop.
Avviare una nuova query vuota e incollare quanto segue nella barra della formula:
= TripPin.Feed(&quot;https://services.odata.org/v4/TripPinService/Airlines")

Assicurarsi di includere il segno =.


Modificare l'output fino a quando non sarà simile al feed OData originale di una tabella con — due colonne:
AirlineCode e Name.

La query risultante dovrebbe essere simile alla seguente:

let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/Airlines"),
value = Source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand

Assegnare un nome alla query ("Compagnie aeree").


Creare una nuova query vuota. Questa volta, usare la TripPin.Feed funzione per accedere all'entità /Airports.
Applicare le trasformazioni fino a ottenere un valore simile alla condivisione illustrata di seguito. La query
corrispondente è disponibile anche di seguito e assegna a questa query un — nome ("Airports").

let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/Airports"),
value = Source[value],
#"Converted to Table" = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"Name", "IcaoCode",
"IataCode", "Location"}, {"Name", "IcaoCode", "IataCode", "Location"}),
#"Expanded Location" = Table.ExpandRecordColumn(#"Expanded Column1", "Location", {"Address", "Loc",
"City"}, {"Address", "Loc", "City"}),
#"Expanded City" = Table.ExpandRecordColumn(#"Expanded Location", "City", {"Name", "CountryRegion",
"Region"}, {"Name.1", "CountryRegion", "Region"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded City",{{"Name.1", "City"}}),
#"Expanded Loc" = Table.ExpandRecordColumn(#"Renamed Columns", "Loc", {"coordinates"}, {"coordinates"}),
#"Added Custom" = Table.AddColumn(#"Expanded Loc", "Latitude", each [coordinates]{1}),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Longitude", each [coordinates]{0}),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"coordinates"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Name", type text}, {"IcaoCode", type
text}, {"IataCode", type text}, {"Address", type text}, {"City", type text}, {"CountryRegion", type text},
{"Region", type text}, {"Latitude", type number}, {"Longitude", type number}})
in
#"Changed Type"

È possibile ripetere questo processo per percorsi aggiuntivi nel servizio. Quando si è pronti, passare al
passaggio successivo della creazione di una tabella di navigazione (fittizia).

Simulazione di una tabella di navigazione


A questo punto si compila una tabella (usando il codice M) che presenta le entità TripPin ben formattate.
Avviare una nuova query vuota e visualizzare il Editor avanzato.
Incollare la query seguente:

let
source = #table({"Name", "Data"}, {
{ "Airlines", Airlines },
{ "Airports", Airports }
})
in
source

Se l'impostazione Livelli di privacy non è stata impostata su "Ignora sempre le impostazioni del livello di
privacy" (nota anche come "Combinazione rapida") verrà visualizzata una richiesta di privacy.

Le richieste di privacy vengono visualizzate quando si combinano dati provenienti da più origini e non è ancora
stato specificato un livello di privacy per le origini. Selezionare il pulsante Continua e impostare il livello di
privacy dell'origine principale su Pubblico.

Selezionare Salva per visualizzare la tabella. Anche se non si tratta ancora di una tabella di navigazione, fornisce
le funzionalità di base necessarie per trasformarla in una tabella in una lezione successiva.
I controlli delle combinazioni di dati non vengono eseguiti quando si accede a più origini dati dall'interno di
un'estensione. Poiché tutte le chiamate all'origine dati effettuate dall'interno dell'estensione ereditano lo stesso
contesto di autorizzazione, si presuppone che siano "sicure" da combinare. L'estensione verrà sempre
considerata come una singola origine dati per quanto riguarda le regole di combinazione dei dati. Gli utenti
riceveranno comunque le normali richieste di privacy quando combinano l'origine con altre origini M.
Se si esegue Fiddler e si fa clic sul pulsante Aggiorna anteprima nel Editor di query, si noteranno richieste Web
separate per ogni elemento nella tabella di navigazione. Ciò indica che è in corso una valutazione eager, che non
è ideale quando si compilano tabelle di navigazione con molti elementi. Le lezioni successive illustrano come
creare una tabella di navigazione appropriata che supporta la valutazione differita.

Conclusione
Questa lezione ha illustrato come creare un connettore semplice per un servizio REST. In questo caso,
un'estensione OData esistente è stata trasformata in un'estensione REST standard (usando Web.Contents),ma gli
stessi concetti si applicano se si crea una nuova estensione da zero.
Nella lezione successiva si prenderanno in considerazione le query create in questa lezione usando Power BI
Desktop e le si trasformerà in una vera tabella di navigazione all'interno dell'estensione.

Passaggi successivi
TripPin - Parte 3 - Tabelle di navigazione
TripPin - Parte 3 - Tabelle di navigazione
07/12/2021 • 4 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza, ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Creare una tabella di navigazione per un set fisso di query
Testare la tabella di navigazione in Power BI Desktop
In questa lezione viene aggiunta una tabella di navigazione al connettore TripPin creato nella lezione precedente.
Quando il connettore ha usato la funzione (parte 1), è stata ricevuta la tabella di navigazione "gratuitamente",
come derivata dal documento $metadata OData.Feed OData. Quando si passa alla Web.Contents funzione
(Parte 2), si perde la tabella di navigazione predefinita. In questa lezione verrà creato un set di query fisse in
Power BI Desktop e verranno aggiunti i metadati appropriati per Power Query per visualizzare la finestra di
dialogo Strumento di navigazione per la funzione dell'origine dati.
Per altre informazioni sull'uso delle tabelle di navigazione, vedere la documentazione relativa alla tabella di
navigazione.

Definizione di query fisse nel connettore


Un connettore semplice per un'API REST può essere pensato come un set fisso di query, ognuna delle quali
restituisce una tabella. Queste tabelle vengono rese individuabili tramite la tabella di navigazione del connettore.
In sostanza, ogni elemento nello strumento di navigazione è associato a un URL e a un set di trasformazioni
specifici.
Si inizierà copiando le query scritte in Power BI Desktop (nella lezione precedente) nel file del connettore. Aprire
il progetto Visual Studio TripPin e incollare le query di Compagnie aeree e aeroporti nel file TripPin.pq. È quindi
possibile trasformare tali query in funzioni che accettano un singolo parametro di testo:
GetAirlinesTable = (url as text) as table =>
let
source = TripPin.Feed(url & "Airlines"),
value = source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode",
"Name"})
in
expand;

GetAirportsTable = (url as text) as table =>


let
source = TripPin.Feed(url & "Airports"),
value = source[value],
#"Converted to Table" = Table.FromList(value, Splitter.SplitByNothing(), null, null,
ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"Name",
"IcaoCode", "IataCode", "Location"}, {"Name", "IcaoCode", "IataCode", "Location"}),
#"Expanded Location" = Table.ExpandRecordColumn(#"Expanded Column1", "Location", {"Address", "Loc",
"City"}, {"Address", "Loc", "City"}),
#"Expanded City" = Table.ExpandRecordColumn(#"Expanded Location", "City", {"Name", "CountryRegion",
"Region"}, {"Name.1", "CountryRegion", "Region"}),
#"Renamed Columns" = Table.RenameColumns(#"Expanded City",{{"Name.1", "City"}}),
#"Expanded Loc" = Table.ExpandRecordColumn(#"Renamed Columns", "Loc", {"coordinates"},
{"coordinates"}),
#"Added Custom" = Table.AddColumn(#"Expanded Loc", "Latitude", each [coordinates]{1}),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Longitude", each [coordinates]{0}),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom1",{"coordinates"}),
#"Changed Type" = Table.TransformColumnTypes(#"Removed Columns",{{"Name", type text}, {"IcaoCode",
type text}, {"IataCode", type text}, {"Address", type text}, {"City", type text}, {"CountryRegion", type
text}, {"Region", type text}, {"Latitude", type number}, {"Longitude", type number}})
in
#"Changed Type";

Successivamente si importerà la query fittizia della tabella di navigazione scritta che crea una tabella fissa
collegata a queste query del set di dati. Chiamarlo TripPinNavTable :

TripPinNavTable = (url as text) as table =>


let
source = #table({"Name", "Data"}, {
{ "Airlines", GetAirlinesTable(url) },
{ "Airports", GetAirportsTable(url) }
})
in
source;

Infine si dichiara una nuova funzione condivisa, , che verrà usata come funzione principale TripPin.Contents
dell'origine dati. Si rimuoverà anche il Publish valore da in modo che non sia più visualizzato nella finestra di
dialogo TripPin.Feed Ottieni dati.

[DataSource.Kind="TripPin"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = Value.ReplaceType(TripPinNavTable, type function (url as Uri.Type) as any);
NOTE
L'estensione può contrassegnare più funzioni shared come , con o senza associarle a un oggetto DataSource.Kind .
Tuttavia, quando si associa una funzione a un oggetto specifico, ogni funzione deve avere lo stesso set di parametri
DataSource.Kind obbligatori, con lo stesso nome e tipo. Ciò è dovuto al fatto che i parametri della funzione dell'origine
dati vengono combinati per creare una "chiave" usata per la ricerca delle credenziali memorizzate nella cache.

È possibile testare TripPin.Contents la funzione usando il file TripPin.query.pq. L'esecuzione della query di test
seguente offrirà una richiesta di credenziali e un semplice output della tabella.

TripPin.Contents("https://services.odata.org/v4/TripPinService/")

Creazione di una tabella di navigazione


Si userà la pratica funzione Table.ToNavigationTable per formattare la tabella statica in un elemento che Power
Query riconoscerà come tabella di navigazione.

Table.ToNavigationTable = (
table as table,
keyColumns as list,
nameColumn as text,
dataColumn as text,
itemKindColumn as text,
itemNameColumn as text,
isLeafColumn as text
) as table =>
let
tableType = Value.Type(table),
newTableType = Type.AddTableKey(tableType, keyColumns, true) meta
[
NavigationTable.NameColumn = nameColumn,
NavigationTable.DataColumn = dataColumn,
NavigationTable.ItemKindColumn = itemKindColumn,
Preview.DelayColumn = itemNameColumn,
NavigationTable.IsLeafColumn = isLeafColumn
],
navigationTable = Value.ReplaceType(table, newTableType)
in
navigationTable;

Dopo aver copiato questo valore nel file di estensione, si aggiornerà la TripPinNavTable funzione per
aggiungere i campi della tabella di navigazione.

TripPinNavTable = (url as text) as table =>


let
source = #table({"Name", "Data", "ItemKind", "ItemName", "IsLeaf"}, {
{ "Airlines", GetAirlinesTable(url), "Table", "Table", true },
{ "Airports", GetAirportsTable(url), "Table", "Table", true }
}),
navTable = Table.ToNavigationTable(source, {"Name"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
navTable;

Se si esegue di nuovo la query di test, verrà restituito un risultato simile all'ultima volta — con l'aggiunta di altre
colonne.

NOTE
Non verrà visualizzata la finestra Strumento di navigazione Visual Studio. La finestra M Quer y Output (Output
quer y M) visualizza sempre la tabella sottostante.

Se si copia l'estensione nel connettore personalizzato Power BI Desktop e si richiama la nuova funzione dalla
finestra di dialogo Ottieni dati, verrà visualizzato lo strumento di navigazione.

Se si fa clic con il pulsante destro del mouse sulla radice dell'albero di navigazione e si seleziona Modifica , verrà
visualizzata la stessa tabella che è stata visualizzata all'interno Visual Studio.
Conclusione
In questa esercitazione è stata aggiunta una tabella di navigazione all'estensione. Le tabelle di spostamento sono
una funzionalità chiave che semplifica l'uso dei connettori. In questo esempio la tabella di navigazione ha un
solo livello, ma l'interfaccia utente di Power Query supporta la visualizzazione di tabelle di navigazione con più
dimensioni (anche se instagliate).

Passaggi successivi
TripPin - Parte 4 - Percorsi delle origini dati
TripPin - Parte 4 - Percorsi delle origini dati
07/12/2021 • 6 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza, ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Semplificare la logica di connessione per il connettore
Migliorare l'esperienza della tabella di navigazione
Questa lezione semplifica il connettore creato nella lezione precedente rimuovendo i parametri di funzione
necessari e migliorando l'esperienza utente passando a una tabella di navigazione generata dinamicamente.
Per una spiegazione approfondita del modo in cui vengono identificate le credenziali, vedere la sezione Percorsi
delle origini dati in Gestione dell'autenticazionedi .

Percorsi delle origini dati


Quando si richiama una funzione dell'originedati , il motore M identifica le credenziali da usare durante una
valutazione eseguendo una ricerca basata sui valori Tipo origine dati e Percorso origine dati.
Nella lezione precedente sono stati condivisi due funzioni di origine dati, entrambe con un singolo parametro
Uri.Type.

[DataSource.Kind="TripPin"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = Value.ReplaceType(TripPinNavTable, type function (url as Uri.Type) as any);

La prima volta che si esegue una query che usa una delle funzioni, si riceverà una richiesta di credenziali con
elenchi a discesa che consentono di selezionare un percorso e un tipo di autenticazione.
Se si esegue di nuovo la stessa query, con gli stessi parametri, il motore M è in grado di individuare le
credenziali memorizzate nella cache e non viene visualizzata alcuna richiesta di credenziali. Se si modifica
l'argomento della funzione in modo che il percorso di base non corrisponda più, viene visualizzata una nuova
richiesta di credenziali url per il nuovo percorso.
È possibile visualizzare le credenziali memorizzate nella cache nella tabella Credentials (Credenziali) nella
finestra M Quer y Output (Output quer y M).

A seconda del tipo di modifica, la modifica dei parametri della funzione restituirà probabilmente un errore di
credenziale.

Semplificazione del connettore


A questo punto si semplificherà il connettore rimuovendo i parametri per la funzione dell'origine dati (
TripPin.Contents ). Si rimuoverà anche il shared qualificatore per TripPin.Feed e lo si lascia come funzione
solo interna.
Una delle filosofie di progettazione di Power Query è mantenere la finestra di dialogo iniziale dell'origine dati il
più semplice possibile. Se possibile, è consigliabile fornire all'utente le opzioni a livello di Strumento di
navigazione, anziché nella finestra di dialogo di connessione. Se un valore specificato dall'utente può essere
determinato a livello di codice, è consigliabile aggiungerlo come primo livello della tabella di navigazione
anziché come parametro di funzione.
Ad esempio, quando ci si connette a un database relazionale, potrebbero essere necessari nomi di server,
database e tabelle. Quando si conosce il server a cui connettersi e sono state fornite le credenziali, è possibile
usare l'API del database per recuperare un elenco di database e un elenco di tabelle contenute all'interno di ogni
database. In questo caso, per mantenere la finestra di dialogo di connessione iniziale il più semplice possibile,
solo il nome del server deve essere un parametro obbligatorio e i livelli della — Database tabella di Table
navigazione.
Poiché il servizio TripPin ha un endpoint CON URL fisso, non è necessario richiedere all'utente alcun valore. Si
rimuoverà il parametro url dalla funzione e si definirà una variabile BaseUrl nel connettore.

BaseUrl = "https://services.odata.org/v4/TripPinService/";

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = () => TripPinNavTable(BaseUrl) as table;

La funzione verrà conservata, ma non verrà più condivisa, non verrà più associata a un tipo di origine dati
TripPin.Feed e semplificherà la dichiarazione. Da questo punto in avanti, verrà utilizzato solo internamente
all'interno di questo documento della sezione.
TripPin.Feed = (url as text) =>
let
source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
json = Json.Document(source)
in
json;

Se si aggiorna TripPin.Contents() la chiamata nel file ed eseguirla in Visual Studio, verrà visualizzata una nuova
richiesta TripPin.query.pq di credenziali. Si noti che è ora disponibile un singolo valore di Percorso origine dati
— TripPin.

Miglioramento della tabella di navigazione


Nella prima esercitazione sono stati usati le funzioni incorporate OData per connettersi al servizio TripPin. In
questo modo si è vista una tabella di navigazione dall'aspetto molto gradevole, basata sul documento di servizio
TripPin, senza codice aggiuntivo. La funzione OData.Feed ha automaticamente fatto il lavoro necessario. Poiché
si sta "approssimativamente" usando Web.Contents anziché OData.Feed,sarà necessario ricreare manualmente
questa tabella di navigazione.
Verranno apportate le modifiche seguenti:
1. Definire un elenco di elementi da visualizzare nella tabella di navigazione
2. Non utilizzare le funzioni specifiche dell'entità ( GetAirlineTables e GetAirportsTable )
Generazione di una tabella di navigazione da un elenco
Verranno elencate le entità da esporre nella tabella di navigazione e verrà compilato l'URL appropriato per
accedervi. Poiché tutte le entità sono nello stesso percorso radice, sarà possibile compilare questi URL in modo
dinamico.
Per semplificare l'esempio, si esporranno solo i tre set di entità (Compagnie aeree, Aeroporti, Persone), che
verrebbero esposti come tabelle in M, e si ignora il singleton (Me) che verrebbe esposto come record. L'aggiunta
delle funzioni verrà ignorata fino a una lezione successiva.

RootEntities = {
"Airlines",
"Airports",
"People"
};

Aggiornare quindi la TripPinNavTable funzione per compilare la tabella una colonna alla volta. La colonna
[Data] per ogni entità viene recuperata chiamando TripPin.Feed con l'URL completo dell'entità.
TripPinNavTable = (url as text) as table =>
let
entitiesAsTable = Table.FromList(RootEntities, Splitter.SplitByNothing()),
rename = Table.RenameColumns(entitiesAsTable, {{"Column1", "Name"}}),
// Add Data as a calculated column
withData = Table.AddColumn(rename, "Data", each TripPin.Feed(Uri.Combine(url, [Name])), Uri.Type),
// Add ItemKind and ItemName as fixed text values
withItemKind = Table.AddColumn(withData, "ItemKind", each "Table", type text),
withItemName = Table.AddColumn(withItemKind, "ItemName", each "Table", type text),
// Indicate that the node should not be expandable
withIsLeaf = Table.AddColumn(withItemName, "IsLeaf", each true, type logical),
// Generate the nav table
navTable = Table.ToNavigationTable(withIsLeaf, {"Name"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
navTable;

Quando si compilano in modo dinamico i percorsi URL, assicurarsi di avere la certezza di avere la posizione in
cui si trova la barra (/). Si noti che Uri.Combine usa le regole seguenti quando si combinano i percorsi:
Quando il relativeUri parametro inizia con /, sostituirà l'intero percorso del baseUri parametro
Se il relativeUri parametro non inizia con / e termina baseUri con /, il percorso viene aggiunto
Se il relativeUri parametro non inizia con / baseUri e non termina con /, l'ultimo segmento del percorso
viene sostituito
L'immagine seguente mostra alcuni esempi:

Rimuovere le funzioni specifiche dell'entità


Per semplificare la manutenzione del connettore, si rimuoveranno le funzioni di formattazione specifiche
dell'entità usate nella lezione precedente — GetAirlineTables e GetAirportsTable . Si aggiornerà invece per
elaborare la risposta JSON in modo che funzioni TripPin.Feed per tutte le entità. In particolare, si prende il
campo del payload JSON OData restituito e lo si value converte da un elenco di record in una tabella.

TripPin.Feed = (url as text) =>


let
source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
json = Json.Document(source),
// The response is a JSON record - the data we want is a list of records in the "value" field
value = json[value],
asTable = Table.FromList(value, Splitter.SplitByNothing()),
// expand all columns from the record
fields = Record.FieldNames(Table.FirstValue(asTable, [Empty = null])),
expandAll = Table.ExpandRecordColumn(asTable, "Column1", fields)
in
expandAll;

NOTE
Uno svantaggio dell'uso di un approccio generico per elaborare le entità è che si perdono le informazioni di formattazione
e tipo utili per le entità. Una sezione successiva di questa esercitazione illustra come applicare lo schema nelle chiamate
API REST.
Conclusione
In questa esercitazione il connettore è stato pulito e semplificato correggendo il valore di Percorso origine dati e
passando a un formato più flessibile per la tabella di navigazione. Dopo aver completato questi passaggi (o aver
utilizzato il codice di esempio in questa directory), la funzione restituisce una tabella TripPin.Contents di
navigazione in Power BI Desktop.

Passaggi successivi
TripPin - Parte 5 - Paging
Parte 5 di TripPin - Paging
07/12/2021 • 7 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Aggiungere il supporto per il paging al connettore
Molte API Rest restituiscono dati in "pagine", richiedendo ai client di effettuare più richieste per unire i risultati.
Anche se esistono alcune convenzioni comuni per l'impaginazione (ad esempio RFC 5988),in genere varia da
API a API. Fortunatamente, TripPin è un servizio OData e lo standard OData definisce un modo per eseguire
l'impaginazione usando i valori odata.nextLink restituiti nel corpo della risposta.
Per semplificare le iterazioni precedenti del connettore, la TripPin.Feed funzione non era in grado di
riconoscere la pagina. Ha semplicemente analizzato il codice JSON restituito dalla richiesta e lo ha formattato
come tabella. Chi ha familiarità con il protocollo OData potrebbe aver notato che sono stati fatti diversi
presupposti non corretti nel formato della risposta, ad esempio presupponendo che sia presente un campo
contenente una matrice di value record.
In questa lezione si migliorerà la logica di gestione delle risposte rendendola in grado di riconoscere la pagina.
Le esercitazioni future renderanno la logica di gestione delle pagine più affidabile e in grado di gestire più
formati di risposta (inclusi gli errori del servizio).

NOTE
Non è necessario implementare la logica di paging personalizzata con i connettori basati su OData.Feed,perché gestisce
automaticamente tutto.

Elenco di controllo per il paging


Quando si implementa il supporto del paging, è necessario conoscere le informazioni seguenti sull'API:
Come si richiede la pagina di dati successiva?
Il meccanismo di paging implica il calcolo dei valori o si estrae l'URL per la pagina successiva dalla risposta?
Come è possibile sapere quando arrestare il paging?
Sono presenti parametri correlati al paging di cui è necessario tenere conto? (ad esempio"dimensioni
pagina")
La risposta a queste domande influisce sul modo in cui si implementa la logica di paging. Anche se esiste una
certa quantità di riutilizzo del codice tra le implementazioni di paging(ad esempio l'uso di
Table.GenerateByPage),la maggior parte dei connettori richiederà logica personalizzata.

NOTE
Questa lezione contiene la logica di paging per un servizio OData, che segue un formato specifico. Consultare la
documentazione dell'API per determinare le modifiche che è necessario apportare nel connettore per supportare il
formato di paging.
Panoramica del paging OData
Il paging OData è basato su annotazioni nextLink contenute nel payload della risposta. Il valore nextLink
contiene l'URL della pagina di dati successiva. È possibile sapere se è presente un'altra pagina di dati cercando
un campo nell'oggetto più odata.nextLink esterno nella risposta. Se non è presente odata.nextLink alcun
campo, sono stati letti tutti i dati.

{
"odata.context": "...",
"odata.count": 37,
"value": [
{ },
{ },
{ }
],
"odata.nextLink": "...?$skiptoken=342r89"
}

Alcuni servizi OData consentono ai client di specificare una preferenza per le dimensioni massime della
pagina,ma il servizio deve o meno rispettarlo. Power Query essere in grado di gestire le risposte di qualsiasi
dimensione, quindi non è necessario preoccuparsi di specificare una preferenza per le dimensioni della pagina
che è possibile supportare indipendentemente dal — servizio.
Altre informazioni sul paging basato su server sono disponibili nella specifica OData.
Test di TripPin
Prima di correggere l'implementazione del paging, verificare il comportamento corrente dell'estensione
dall'esercitazione precedente. La query di test seguente recupererà la tabella People e aggiungerà una colonna
di indice per visualizzare il numero di righe corrente.

let
source = TripPin.Contents(),
data = source{[Name="People"]}[Data],
withRowCount = Table.AddIndexColumn(data, "Index")
in
withRowCount

Attivare fiddler ed eseguire la query in Visual Studio. Si noterà che la query restituisce una tabella con 8 righe
(indice da 0 a 7).

Se si osserva il corpo della risposta da fiddler, si scoprirà che contiene di fatto un campo, a indicare che sono
disponibili più pagine @odata.nextLink di dati.
{
"@odata.context": "https://services.odata.org/V4/TripPinService/$metadata#People",
"@odata.nextLink": "https://services.odata.org/v4/TripPinService/People?%24skiptoken=8",
"value": [
{ },
{ },
{ }
]
}

Implementazione del paging per TripPin


A questo punto verranno apportate le modifiche seguenti all'estensione:
1. Importare la funzione Table.GenerateByPage comune
2. Aggiungere una GetAllPagesByNextLink funzione che usa per Table.GenerateByPage incollare tutte le pagine
3. Aggiungere una GetPage funzione in grado di leggere una singola pagina di dati
4. Aggiungere una GetNextLink funzione per estrarre l'URL successivo dalla risposta
5. Aggiornare TripPin.Feed per usare le nuove funzioni di lettura della pagina

NOTE
Come indicato in precedenza in questa esercitazione, la logica di paging varia a seconda delle origini dati.
L'implementazione tenta di suddividere la logica in funzioni che devono essere riutilizzabili per le origini che usano
collegamenti successivi restituiti nella risposta.

Table.GenerateByPage
La Table.GenerateByPage funzione può essere usata per combinare in modo efficiente più "pagine" di dati in una
singola tabella. A tale scopo, chiama ripetutamente la funzione passata come parametro, fino getNextPage a
quando non riceve un oggetto null . Il parametro della funzione deve accetta un singolo argomento e restituire
nullable table un oggetto .

getNextPage = (lastPage) as nullable table => ...

Ogni chiamata a getNextPage riceve l'output dalla chiamata precedente.

// The getNextPage function takes a single argument and is expected to return a nullable table
Table.GenerateByPage = (getNextPage as function) as table =>
let
listOfPages = List.Generate(
() => getNextPage(null), // get the first page of data
(lastPage) => lastPage <> null, // stop when the function returns null
(lastPage) => getNextPage(lastPage) // pass the previous page to the next function call
),
// concatenate the pages together
tableOfPages = Table.FromList(listOfPages, Splitter.SplitByNothing(), {"Column1"}),
firstRow = tableOfPages{0}?
in
// if we didn't get back any pages of data, return an empty table
// otherwise set the table type based on the columns of the first page
if (firstRow = null) then
Table.FromRows({})
else
Value.ReplaceType(
Table.ExpandTableColumn(tableOfPages, "Column1", Table.ColumnNames(firstRow[Column1])),
Value.Type(firstRow[Column1])
);
Alcune note su Table.GenerateByPage :
La funzione dovrà recuperare l'URL della pagina successiva (o il numero di pagina o qualsiasi altro valore
usato getNextPage per implementare la logica di paging). Questa operazione viene in genere eseguita
aggiungendo meta valori alla pagina prima di restituirla.
Le colonne e il tipo di tabella della tabella combinata (ovvero tutte le pagine insieme) derivano dalla prima
pagina di dati. La getNextPage funzione deve normalizzare ogni pagina di dati.
La prima chiamata a getNextPage riceve un parametro Null.
getNextPage deve restituire null quando non sono presenti pagine.

Implementazione di GetAllPagesByNextLink
Il corpo della funzione GetAllPagesByNextLink implementa l'argomento getNextPage della funzione per
Table.GenerateByPage . Chiamerà la funzione e recupererà l'URL per la pagina di dati successiva dal campo
GetPage del record dalla chiamata NextLink meta precedente.

// Read all pages of data.


// After every page, we check the "NextLink" record on the metadata of the previous request.
// Table.GenerateByPage will keep asking for more pages until we return null.
GetAllPagesByNextLink = (url as text) as table =>
Table.GenerateByPage((previous) =>
let
// if previous is null, then this is our first page of data
nextLink = if (previous = null) then url else Value.Metadata(previous)[NextLink]?,
// if NextLink was set to null by the previous call, we know we have no more data
page = if (nextLink <> null) then GetPage(nextLink) else null
in
page
);

Implementazione di GetPage
La GetPage funzione userà Web.Contents per recuperare una singola pagina di dati dal servizio TripPin e
convertire la risposta in una tabella. Passa la risposta da Web.Contents alla funzione per estrarre l'URL della
pagina successiva e impostarla sul record della tabella GetNextLink meta restituita (pagina di dati).
Questa implementazione è una versione leggermente modificata TripPin.Feed della chiamata delle
esercitazioni precedenti.

GetPage = (url as text) as table =>


let
response = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
body = Json.Document(response),
nextLink = GetNextLink(body),
data = Table.FromRecords(body[value])
in
data meta [NextLink = nextLink];

Implementazione di GetNextLink
La GetNextLink funzione controlla semplicemente il corpo della risposta per un campo e ne restituisce il
@odata.nextLink valore.

// In this implementation, 'response' will be the parsed body of the response after the call to
Json.Document.
// Look for the '@odata.nextLink' field and simply return null if it doesn't exist.
GetNextLink = (response) as nullable text => Record.FieldOrDefault(response, "@odata.nextLink");

Mettere tutto insieme


Il passaggio finale per implementare la logica di paging consiste nell'aggiornare TripPin.Feed per usare le
nuove funzioni. Per il momento, si esegue semplicemente la chiamata a , ma nelle esercitazioni successive si
aggiungeranno nuove funzionalità, ad esempio l'applicazione di uno schema e la logica dei parametri
GetAllPagesByNextLink di query.

TripPin.Feed = (url as text) as table => GetAllPagesByNextLink(url);

Se si esegue di nuovo la stessa query di test delle versioni precedenti dell'esercitazione, il lettore di pagine
dovrebbe essere in azione. Si dovrebbe anche vedere che nella risposta sono presenti 20 righe anziché 8.

Se si osservano le richieste in fiddler, dovrebbero essere ora presenti richieste separate per ogni pagina di dati.

NOTE
Si noteranno richieste duplicate per la prima pagina di dati dal servizio, che non è ideale. La richiesta aggiuntiva è il
risultato del comportamento di controllo dello schema del motore M. Ignorare questo problema per il momento e
risolverlo nell'esercitazione successiva,in cui verrà applicato uno schema esplicato.

Conclusione
Questa lezione ha illustrato come implementare il supporto di impaginazione per un'API Rest. Anche se la logica
varia probabilmente tra le API, il modello qui stabilito dovrebbe essere riutilizzabile con modifiche secondarie.
Nella lezione successiva verrà illustrato come applicare uno schema esplicito ai dati, andando oltre i tipi di dati
semplici e che si text number ottengono da Json.Document .
Passaggi successivi
Parte 6 di TripPin - Schema
TripPin - Parte 6 - Schema
07/12/2021 • 11 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza, ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Definire uno schema fisso per un'API REST
Impostare dinamicamente i tipi di dati per le colonne
Applicare una struttura di tabella per evitare errori di trasformazione dovuti a colonne mancanti
Nascondere colonne dal set di risultati
Uno dei principali vantaggi di un servizio OData rispetto a un'API REST standard è la definizione $metadata. Il
$metadata descrive i dati trovati in questo servizio, incluso lo schema per tutte le entità (tabelle) e i campi
(colonne). La funzione usa questa definizione dello schema per impostare automaticamente le informazioni sul
tipo di dati in modo che invece di ottenere tutti i campi di testo e numero (come si farebbe da ), gli utenti finali
otterranno date, numeri interi, ore e così via, offrendo una migliore esperienza utente OData.Feed —
Json.Document complessiva.

Molte API REST non hanno un modo per determinarne lo schema a livello di codice. In questi casi, è necessario
includere le definizioni dello schema all'interno del connettore. In questa lezione verrà definito uno schema
semplice e hardcoded per ogni tabella e lo schema verrà applicato ai dati letti dal servizio.

NOTE
L'approccio descritto qui dovrebbe funzionare per molti servizi REST. Le lezioni future si baseranno su questo approccio
tramite l'applicazione ricorsiva di schemi su colonne strutturate (record, elenco, tabella) e forniranno implementazioni di
esempio in grado di generare a livello di codice una tabella dello schema da documenti CSDL o JSON Schema.

In generale, l'applicazione di uno schema sui dati restituiti dal connettore offre diversi vantaggi, ad esempio:
Impostazione dei tipi di dati corretti
Rimozione di colonne che non devono essere visualizzate agli utenti finali , ad esempio ID interni o
informazioni sullo stato
Assicurarsi che ogni pagina di dati abbia la stessa forma aggiungendo colonne che potrebbero non essere
presenti in una risposta (un modo comune per le API REST per indicare che un campo deve essere Null)

Visualizzazione dello schema esistente con Table.Schema


Il connettore creato nella lezione precedente visualizza tre tabelle del servizio TripPin , — Airlines e Airports
People . Eseguire la query seguente per visualizzare la Airlines tabella:

let
source = TripPin.Contents(),
data = source{[Name="Airlines"]}[Data]
in
data

Nei risultati verranno restituite quattro colonne:


@odata.id
@odata.editLink
AirlineCode
Nome

Le colonne "*" fanno parte del protocollo OData e non devono essere visualizzate o desiderate per gli utenti
finali @odata del connettore. AirlineCode e Name sono le due colonne da mantenere. Se si osserva lo schema
della tabella (usando la pratica funzione Table.Schema), è possibile vedere che tutte le colonne della tabella
hanno un tipo di dati Any.Type .

let
source = TripPin.Contents(),
data = source{[Name="Airlines"]}[Data]
in
Table.Schema(data)

Table.Schema restituisce molti metadati sulle colonne di una tabella, inclusi nomi, posizioni, informazioni sul tipo
e molte proprietà avanzate, ad esempio Precision, Scale e MaxLength. Le lezioni future forniranno schemi
progettuali per l'impostazione di queste proprietà avanzate, ma per il momento è necessario solo avere a che
fare con il tipo ascritto ( ), il tipo primitivo ( ) e se il valore della colonna potrebbe essere TypeName Kind Null (
IsNullable ).

Definizione di una tabella di schema semplice


La tabella dello schema sarà composta da due colonne:

C O LO N N A DET TA GL I

Nome Nome della colonna. Deve corrispondere al nome nei risultati


restituiti dal servizio.
C O LO N N A DET TA GL I

Tipo Tipo di dati M che si sta per impostare. Può trattarsi di un


tipo primitivo ( , , e così via) o di un tipo ascritto text ( , e
così number datetime Int64.Type Currency.Type
via).

La tabella dello schema hardcoded per la tabella imposta le relative Airlines colonne e su e ha un aspetto
simile al AirlineCode Name text seguente:

Airlines = #table({"Name", "Type"}, {


{"AirlineCode", type text},
{"Name", type text}
});

La Airports tabella contiene quattro campi che è possibile mantenere (incluso uno di tipo record ):

Airports = #table({"Name", "Type"}, {


{"IcaoCode", type text},
{"Name", type text},
{"IataCode", type text},
{"Location", type record}
});

Infine, la tabella include sette campi, inclusi gli elenchi ( , ), una colonna che ammette i valori Null ( ) e una
colonna con un People Emails tipo AddressInfo Gender ascritto ( Concurrency ).

People = #table({"Name", "Type"}, {


{"UserName", type text},
{"FirstName", type text},
{"LastName", type text},
{"Emails", type list},
{"AddressInfo", type list},
{"Gender", type nullable text},
{"Concurrency", Int64.Type}
})

Funzione helper SchemaTransformTable


La SchemaTransformTable funzione helper descritta di seguito verrà usata per applicare schemi ai dati. È
necessario specificare i seguenti parametri:

PA RA M ET RO T IP O DESC RIZ IO N E

table table Tabella di dati su cui applicare lo


schema.

schema table Tabella dello schema da cui leggere le


informazioni sulle colonne, con il tipo
seguente:
type table [Name = text, Type =
type]
.
PA RA M ET RO T IP O DESC RIZ IO N E

enforceSchema d'acquisto (facoltativo) Enumerazione che


controlla il comportamento della
funzione.
Il valore predefinito ( ) garantisce che la
tabella di output corrisponda alla
tabella dello schema fornita
aggiungendo eventuali colonne
mancanti e
EnforceSchema.Strict = 1
rimuovendo colonne aggiuntive.
EnforceSchema.IgnoreExtraColumns
= 2
L'opzione può essere usata per
mantenere colonne aggiuntive nel
risultato.
Quando
EnforceSchema.IgnoreMissingColumns
= 3
si usa , le colonne mancanti e le
colonne aggiuntive verranno ignorate.

La logica per questa funzione è simile alla seguente:


1. Determinare se sono presenti colonne mancanti nella tabella di origine.
2. Determinare se sono presenti colonne aggiuntive.
3. Ignorare le colonne strutturate (di list tipo , e ) e le colonne impostate su record table type any .
4. Usare Table.TransformColumnTypes per impostare ogni tipo di colonna.
5. Riordinare le colonne in base all'ordine in cui vengono visualizzate nella tabella dello schema.
6. Impostare il tipo nella tabella stessa usando Value.ReplaceType.

NOTE
L'ultimo passaggio per impostare il tipo di tabella elimina la necessità che l'interfaccia utente di Power Query deduca le
informazioni sul tipo quando si visualizzano i risultati nell'editor di query. In questo modo viene rimosso il problema della
doppia richiesta che si è verificato alla fine dell'esercitazione precedente.

Il codice helper seguente può essere copiato e incollato nell'estensione:


EnforceSchema.Strict = 1; // Add any missing columns, remove extra columns, set table type
EnforceSchema.IgnoreExtraColumns = 2; // Add missing columns, do not remove extra columns
EnforceSchema.IgnoreMissingColumns = 3; // Do not add or remove columns

SchemaTransformTable = (table as table, schema as table, optional enforceSchema as number) as table =>
let
// Default to EnforceSchema.Strict
_enforceSchema = if (enforceSchema <> null) then enforceSchema else EnforceSchema.Strict,

// Applies type transforms to a given table


EnforceTypes = (table as table, schema as table) as table =>
let
map = (t) => if Type.Is(t, type list) or Type.Is(t, type record) or t = type any then null
else t,
mapped = Table.TransformColumns(schema, {"Type", map}),
omitted = Table.SelectRows(mapped, each [Type] <> null),
existingColumns = Table.ColumnNames(table),
removeMissing = Table.SelectRows(omitted, each List.Contains(existingColumns, [Name])),
primativeTransforms = Table.ToRows(removeMissing),
changedPrimatives = Table.TransformColumnTypes(table, primativeTransforms)
in
changedPrimatives,

// Returns the table type for a given schema


SchemaToTableType = (schema as table) as type =>
let
toList = List.Transform(schema[Type], (t) => [Type=t, Optional=false]),
toRecord = Record.FromList(toList, schema[Name]),
toType = Type.ForRecord(toRecord, false)
in
type table (toType),

// Determine if we have extra/missing columns.


// The enforceSchema parameter determines what we do about them.
schemaNames = schema[Name],
foundNames = Table.ColumnNames(table),
addNames = List.RemoveItems(schemaNames, foundNames),
extraNames = List.RemoveItems(foundNames, schemaNames),
tmp = Text.NewGuid(),
added = Table.AddColumn(table, tmp, each []),
expanded = Table.ExpandRecordColumn(added, tmp, addNames),
result = if List.IsEmpty(addNames) then table else expanded,
fullList =
if (_enforceSchema = EnforceSchema.Strict) then
schemaNames
else if (_enforceSchema = EnforceSchema.IgnoreMissingColumns) then
foundNames
else
schemaNames & extraNames,

// Select the final list of columns.


// These will be ordered according to the schema table.
reordered = Table.SelectColumns(result, fullList, MissingField.Ignore),
enforcedTypes = EnforceTypes(reordered, schema),
withType = if (_enforceSchema = EnforceSchema.Strict) then Value.ReplaceType(enforcedTypes,
SchemaToTableType(schema)) else enforcedTypes
in
withType;

Aggiornamento del connettore TripPin


A questo punto verranno apportate le modifiche seguenti al connettore per usare il nuovo codice di imposizione
dello schema.
1. Definire una tabella dello schema master ( SchemaTable ) che contiene tutte le definizioni dello schema.
2. Aggiornare TripPin.Feed , GetPage e per accettare un GetAllPagesByNextLink parametro schema .
3. Applicare lo schema in GetPage .
4. Aggiornare il codice della tabella di navigazione per eseguire il wrapping di ogni tabella con una chiamata a
una nuova funzione ( ) in modo da ottenere maggiore flessibilità per modificare le definizioni GetEntity —
di tabella in futuro.
Tabella dello schema master
A questo punto si consoliderà le definizioni dello schema in una singola tabella e si aggiungerà una funzione
helper ( ) che consente di cercare la definizione in base a un nome di GetSchemaForEntity entità(ad esempio,
GetSchemaForEntity("Airlines") )

SchemaTable = #table({"Entity", "SchemaTable"}, {


{"Airlines", #table({"Name", "Type"}, {
{"AirlineCode", type text},
{"Name", type text}
})},

{"Airports", #table({"Name", "Type"}, {


{"IcaoCode", type text},
{"Name", type text},
{"IataCode", type text},
{"Location", type record}
})},

{"People", #table({"Name", "Type"}, {


{"UserName", type text},
{"FirstName", type text},
{"LastName", type text},
{"Emails", type list},
{"AddressInfo", type list},
{"Gender", type nullable text},
{"Concurrency", Int64.Type}
})}
});

GetSchemaForEntity = (entity as text) as table => try SchemaTable{[Entity=entity]}[SchemaTable] otherwise


error "Couldn't find entity: '" & entity &"'";

Aggiunta del supporto dello schema alle funzioni dati


Si aggiungerà ora un parametro schema facoltativo alle TripPin.Feed funzioni , GetPage e
GetAllPagesByNextLink . In questo modo sarà possibile passare lo schema (quando si vuole) alle funzioni di
paging, in cui verrà applicato ai risultati ottenuti dal servizio.

TripPin.Feed = (url as text, optional schema as table) as table => ...


GetPage = (url as text, optional schema as table) as table => ...
GetAllPagesByNextLink = (url as text, optional schema as table) as table => ...

Si aggiorneranno anche tutte le chiamate a queste funzioni per assicurarsi di passare correttamente lo schema.
Applicazione dello schema
L'applicazione effettiva dello schema verrà eseguita nella GetPage funzione.
GetPage = (url as text, optional schema as table) as table =>
let
response = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
body = Json.Document(response),
nextLink = GetNextLink(body),
data = Table.FromRecords(body[value]),
// enforce the schema
withSchema = if (schema <> null) then SchemaTransformTable(data, schema) else data
in
withSchema meta [NextLink = nextLink];

[Nota] Questa GetPage implementazione usa Table.FromRecords per convertire l'elenco di record nella
risposta JSON in una tabella. Uno svantaggio principale dell'uso di Table.FromRecords è che presuppone che
tutti i record nell'elenco presentino lo stesso set di campi. Questa operazione funziona per il servizio TripPin,
poiché i record OData devono contenere gli stessi campi, ma questo potrebbe non essere il caso per tutte le
API REST. Un'implementazione più affidabile usa una combinazione di Table.FromList e
Table.ExpandRecordColumn. Le esercitazioni successive modificheranno l'implementazione per ottenere
l'elenco di colonne dalla tabella dello schema, assicurando che nessuna colonna andrà persa o mancante
durante la conversione da JSON a M.

Aggiunta della funzione GetEntity


La GetEntity funzione esegue il wrapping della chiamata a TripPin.Feed. Verrà cercata una definizione dello
schema in base al nome dell'entità e verrà compilato l'URL completo della richiesta.

GetEntity = (url as text, entity as text) as table =>


let
fullUrl = Uri.Combine(url, entity),
schemaTable = GetSchemaForEntity(entity),
result = TripPin.Feed(fullUrl, schemaTable)
in
result;

Si aggiornerà quindi la funzione in modo che chiami invece di TripPinNavTable eseguire tutte le chiamate
GetEntity inline. Il vantaggio principale è che consente di continuare a modificare il codice di compilazione
dell'entità, senza dover toccare la logica della tabella di spostamento.

TripPinNavTable = (url as text) as table =>


let
entitiesAsTable = Table.FromList(RootEntities, Splitter.SplitByNothing()),
rename = Table.RenameColumns(entitiesAsTable, {{"Column1", "Name"}}),
// Add Data as a calculated column
withData = Table.AddColumn(rename, "Data", each GetEntity(url, [Name]), type table),
// Add ItemKind and ItemName as fixed text values
withItemKind = Table.AddColumn(withData, "ItemKind", each "Table", type text),
withItemName = Table.AddColumn(withItemKind, "ItemName", each "Table", type text),
// Indicate that the node should not be expandable
withIsLeaf = Table.AddColumn(withItemName, "IsLeaf", each true, type logical),
// Generate the nav table
navTable = Table.ToNavigationTable(withIsLeaf, {"Name"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
navTable;

Mettere tutto insieme


Dopo aver apportato tutte le modifiche al codice, compilare ed eseguire nuovamente la query di test che chiama
Table.Schema per la tabella Delle compagnie aeree.

let
source = TripPin.Contents(),
data = source{[Name="Airlines"]}[Data]
in
Table.Schema(data)

Si può ora vedere che la tabella Delle compagnie aeree include solo le due colonne definite nel relativo schema:

Se si esegue lo stesso codice sulla tabella People...

let
source = TripPin.Contents(),
data = source{[Name="People"]}[Data]
in
Table.Schema(data)

Si noti che anche il tipo ascritto usato ( Int64.Type ) è stato impostato correttamente.

Un aspetto importante da notare è che questa implementazione di non modifica i tipi di colonne e , ma le
colonne e sono SchemaTransformTable list ancora record Emails AddressInfo digitate come list . Ciò è
dovuto al Json.Document fatto che le matrici JSON verranno mappate correttamente agli elenchi M e agli oggetti
JSON ai record M. Se si espande la colonna dell'elenco o del record in Power Query, si può vedere che tutte le
colonne espanse saranno di tipo any. Le esercitazioni future miglioreranno l'implementazione per impostare in
modo ricorsivo le informazioni sui tipi complessi annidati.

Conclusione
Questa esercitazione ha fornito un'implementazione di esempio per l'applicazione di uno schema sui dati JSON
restituiti da un servizio REST. Anche se questo esempio usa un semplice formato di tabella dello schema
hardcoded, l'approccio potrebbe essere esteso compilando dinamicamente una definizione di tabella dello
schema da un'altra origine, ad esempio un file di schema JSON o un servizio/endpoint di metadati esposto
dall'origine dati.
Oltre a modificare i tipi di colonna (e i valori), il codice imposta anche le informazioni corrette sul tipo nella
tabella stessa. L'impostazione di queste informazioni sul tipo consente di migliorare le prestazioni durante
l'esecuzione all'interno di Power Query, poiché l'esperienza utente tenta sempre di dedurre le informazioni sul
tipo per visualizzare le code dell'interfaccia utente giuste per l'utente finale e le chiamate di inferenza possono
terminare con l'attivare chiamate aggiuntive alle API dati sottostanti.
Se si visualizza la tabella People usando il connettore TripPindella lezione precedente, si può vedere che tutte le
colonne hanno un'icona "type any" (anche le colonne che contengono elenchi):

Eseguendo la stessa query con il connettore TripPin di questa lezione, si può ora vedere che le informazioni sul
tipo vengono visualizzate correttamente.

Passaggi successivi
TripPin - Parte 7 - Schema avanzato con tipi M
Parte 7 di TripPin - Schema avanzato con tipi M
07/12/2021 • 7 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Applicare uno schema di tabella usando i tipi M
Impostare i tipi per record ed elenchi annidati
Eseguire il refactoring del codice per il riutilizzo e gli unit test
Nella lezione precedente sono stati definiti gli schemi di tabella usando un semplice sistema "Schema Table".
Questo approccio alla tabella dello schema funziona per molte API REST/connettori dati, ma i servizi che
restituiscono set di dati completi o annidati in modo approfondito potrebbero trarre vantaggio dall'approccio di
questa esercitazione, che sfrutta il sistema di tipi M.
Questa lezione illustra i passaggi seguenti:
1. Aggiunta di unit test
2. Definizione di tipi M personalizzati
3. Applicazione di uno schema tramite tipi
4. Refactoring di codice comune in file separati

Aggiunta di unit test


Prima di iniziare a usare la logica dello schema avanzata, si aggiungerà un set di unit test al connettore per
ridurre la possibilità di interrompere inavvertitamente qualcosa. L'esecuzione di unit test è simile alla seguente:
1. Copiare il codice comune dall'esempio UnitTest nel TripPin.query.pq file
2. Aggiungere una dichiarazione di sezione all'inizio del TripPin.query.pq file
3. Creare un record condiviso (denominato TripPin.UnitTest )
4. Definire un Fact per ogni test
5. Chiamare Facts.Summarize() per eseguire tutti i test
6. Fare riferimento alla chiamata precedente come valore condiviso per assicurarsi che venga valutato quando il
progetto viene eseguito in Visual Studio
section TripPinUnitTests;

shared TripPin.UnitTest =
[
// Put any common variables here if you only want them to be evaluated once
RootTable = TripPin.Contents(),
Airlines = RootTable{[Name="Airlines"]}[Data],
Airports = RootTable{[Name="Airports"]}[Data],
People = RootTable{[Name="People"]}[Data],

// Fact(<Name of the Test>, <Expected Value>, <Actual Value>)


// <Expected Value> and <Actual Value> can be a literal or let statement
facts =
{
Fact("Check that we have three entries in our nav table", 3, Table.RowCount(RootTable)),
Fact("We have Airline data?", true, not Table.IsEmpty(Airlines)),
Fact("We have People data?", true, not Table.IsEmpty(People)),
Fact("We have Airport data?", true, not Table.IsEmpty(Airports)),
Fact("Airlines only has 2 columns", 2, List.Count(Table.ColumnNames(Airlines))),
Fact("Airline table has the right fields",
{"AirlineCode","Name"},
Record.FieldNames(Type.RecordFields(Type.TableRow(Value.Type(Airlines))))
)
},

report = Facts.Summarize(facts)
][report];

Facendo clic su Esegui nel progetto verranno valutati tutti i fatti e verrà visualizzato un output del report simile
al seguente:

Usando alcuni principi dello sviluppo basato su test,si aggiungerà ora un test che attualmente ha esito negativo,
ma verrà presto reimplementato e risolto (alla fine di questa esercitazione). In particolare, si aggiungerà un test
che controlla uno dei record annidati (messaggi di posta elettronica) restituiti nell'entità People.

Fact("Emails is properly typed", type text, Type.ListItem(Value.Type(People{0}[Emails])))

Se si esegue di nuovo il codice, si dovrebbe ora verificare che si è verificata un'operazione di test non riuscita.
A questo punto è sufficiente implementare la funzionalità per eseguire questa operazione.

Definizione di tipi M personalizzati


L'approccio di imposizione dello schema nella lezione precedente usava "tabelle dello schema" definite come
coppie nome/tipo. Funziona bene quando si lavora con dati flat/relazionali, ma non supporta l'impostazione dei
tipi in record/tabelle/elenchi annidati o consente di riutilizzare le definizioni dei tipi tra tabelle/entità.
Nel caso di TripPin, i dati nelle entità People e Airports contengono colonne strutturate e condividono anche un
tipo ( ) per rappresentare le informazioni Location sull'indirizzo. Anziché definire coppie nome/tipo in una
tabella dello schema, si definiranno ognuna di queste entità usando dichiarazioni di tipo M personalizzate.
Ecco un rapido aggiornamento dei tipi nel linguaggio M dalla specifica del linguaggio:

Un valore tipo è un valore che classifica altri valori. Si dice che un valore classificato in base a un tipo sia
conforme a quel tipo. Il sistema di tipi del linguaggio M è costituito dai tipi seguenti:
Tipi primitivi, che classificano i valori primitivi ( binary , date , datetime , datetimezone , duration , list
, logical , null , number , record , text , time , type ) e includono anche alcuni tipi astratti ( function ,
table , any e none )
Tipi record, che classificano i valori record in base ai nomi dei campi e ai tipi di valore
Tipi elenco, che classificano gli elenchi usando un tipo di base a elemento singolo
Tipi funzione, che classificano i valori funzione in base ai rispettivi tipi di parametri e valori restituiti
Tipi tabella, che classificano i valori tabella in base ai nomi delle colonne, ai tipi di colonna e alle chiavi
Tipi nullable, che classificano il valore Null, oltre a tutti i valori classificati a partire da un tipo di base
Tipi "tipo", che classificano i valori costituiti da tipi

Usando l'outputJSON non elaborato che si ottiene (e/o cercando le definizioni nel $metadata del servizio), è
possibile definire i tipi di record seguenti per rappresentare i tipi complessi OData:
LocationType = type [
Address = text,
City = CityType,
Loc = LocType
];

CityType = type [
CountryRegion = text,
Name = text,
Region = text
];

LocType = type [
#"type" = text,
coordinates = {number},
crs = CrsType
];

CrsType = type [
#"type" = text,
properties = record
];

Si noti come LocationType fa riferimento a e per rappresentare le colonne CityType LocType strutturate.
Per le entità di primo livello (che si desidera rappresentare come tabelle), si definiscono i tipi di tabella:

AirlinesType = type table [


AirlineCode = text,
Name = text
];

AirportsType = type table [


Name = text,
IataCode = text,
Location = LocationType
];

PeopleType = type table [


UserName = text,
FirstName = text,
LastName = text,
Emails = {text},
AddressInfo = {nullable LocationType},
Gender = nullable text,
Concurrency = Int64.Type
];

Aggiornare quindi la variabile (che viene utilizzata come "tabella di ricerca" per i mapping tra entità e tipi) per
usare SchemaTable queste nuove definizioni di tipo:

SchemaTable = #table({"Entity", "Type"}, {


{"Airlines", AirlinesType },
{"Airports", AirportsType },
{"People", PeopleType}
});

Applicazione di uno schema tramite tipi


Si affiderà a una funzione comune ( ) per applicare uno schema ai dati, in modo simile a quello
Table.ChangeType SchemaTransformTable usato nella lezione precedente. A differenza di , accetta un tipo di
tabella M effettivo come argomento e applica lo schema in modo ricorsivo SchemaTransformTable per tutti i tipi
Table.ChangeType annidati. La firma è simile alla seguente:

Table.ChangeType = (table, tableType as type) as nullable table => ...

L'elenco completo del codice per la funzione è Table.ChangeType disponibile nel file Table.ChangeType.pqm.

NOTE
Per la flessibilità, la funzione può essere usata nelle tabelle, nonché negli elenchi di record, ovvero come le tabelle
verrebbero rappresentate in un documento JSON.

È quindi necessario aggiornare il codice del connettore per modificare il parametro da schema a e aggiungere
una chiamata a in table type Table.ChangeType GetEntity .

GetEntity = (url as text, entity as text) as table =>


let
fullUrl = Uri.Combine(url, entity),
schema = GetSchemaForEntity(entity),
result = TripPin.Feed(fullUrl, schema),
appliedSchema = Table.ChangeType(result, schema)
in
appliedSchema;

GetPage viene aggiornato per usare l'elenco dei campi dello schema (per conoscere i nomi degli elementi da
espandere quando si ottengono i risultati), ma lascia l'applicazione effettiva dello schema a GetEntity .

GetPage = (url as text, optional schema as type) as table =>


let
response = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
body = Json.Document(response),
nextLink = GetNextLink(body),

// If we have no schema, use Table.FromRecords() instead


// (and hope that our results all have the same fields).
// If we have a schema, expand the record using its field names
data =
if (schema <> null) then
Table.FromRecords(body[value])
else
let
// convert the list of records into a table (single column of records)
asTable = Table.FromList(body[value], Splitter.SplitByNothing(), {"Column1"}),
fields = Record.FieldNames(Type.RecordFields(Type.TableRow(schema))),
expanded = Table.ExpandRecordColumn(asTable, fields)
in
expanded
in
data meta [NextLink = nextLink];

Conferma dell'impostazione dei tipi annidati


La definizione per ora PeopleType imposta il campo su un elenco di testo ( Emails {text} ). Se i tipi vengono
applicati correttamente, la chiamata a Type.ListItem nell'unit test dovrebbe restituire type text invece di
type any .

L'esecuzione di nuovo degli unit test mostra che sono ora tutti superati.
Refactoring di codice comune in file separati
NOTE
Il motore M avrà migliorato il supporto per fare riferimento a moduli esterni/codice comune in futuro, ma questo
approccio dovrebbe portare avanti fino ad allora.

A questo punto, l'estensione ha quasi tutto il codice "comune" del codice del connettore TripPin. In futuro queste
funzioni comuni saranno parte della libreria di funzioni standard predefinita oppure sarà possibile fare
riferimento a tali funzioni da un'altra estensione. Per il momento, eseguire il refactoring del codice nel modo
seguente:
1. Spostare le funzioni riutilizzabili in file separati (con estensione pqm).
2. Impostare la proprietà Azione di compilazione nel file su Compila per assicurarsi che venga inclusa nel
file di estensione durante la compilazione.
3. Definire una funzione per caricare il codice usando Expression.Evaluate.
4. Caricare ognuna delle funzioni comuni da usare.
Il codice a tale scopo è incluso nel frammento di codice seguente:

Extension.LoadFunction = (name as text) =>


let
binary = Extension.Contents(name),
asText = Text.FromBinary(binary)
in
Expression.Evaluate(asText, #shared);

Table.ChangeType = Extension.LoadFunction("Table.ChangeType.pqm");
Table.GenerateByPage = Extension.LoadFunction("Table.GenerateByPage.pqm");
Table.ToNavigationTable = Extension.LoadFunction("Table.ToNavigationTable.pqm");

Conclusione
Questa esercitazione ha apportato diversi miglioramenti al modo in cui si applica uno schema ai dati che si
ottengono da un'API REST. Il connettore sta attualmente codificando a livello di codice le informazioni sullo
schema, che hanno un vantaggio in termini di prestazioni in fase di esecuzione, ma non è in grado di adattarsi
alle modifiche nel tempo di straordinario dei metadati del servizio. Le esercitazioni future verranno spostate in
un approccio puramente dinamico che dedurrà lo schema dal documento $metadata servizio.
Oltre alle modifiche dello schema, questa esercitazione ha aggiunto unit test per il codice ed è stato refactoring
delle funzioni helper comuni in file separati per migliorare la leggibilità complessiva.

Passaggi successivi
Parte 8 di TripPin - Aggiunta di diagnostica
Parte 8 di TripPin - Aggiunta di diagnostica
07/12/2021 • 8 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Informazioni sulla funzione Diagnostics.Trace
Usare le funzioni helper di diagnostica per aggiungere informazioni di traccia che consentono di eseguire il
debug del connettore

Abilitazione della diagnostica


Power Query gli utenti possono abilitare la registrazione delle tracce selezionando la casella di controllo in
Opzioni | Diagnostica .

Una volta abilitate, tutte le query successive causeranno la creazione di informazioni di traccia nei file di log che
si trovano in una directory utente fissa.
Quando si eseguono query M dall'POWER QUERY SDK, la traccia è abilitata a livello di progetto. Nella pagina
delle proprietà del progetto sono disponibili tre impostazioni correlate alla traccia:
Cancella log — Quando questa proprietà è impostata su true , il log verrà reimpostato/cancellato quando
si eseguono le query. È consigliabile mantenere questa impostazione su true .
Mostra tracce motore — questa impostazione controlla l'output delle tracce predefinite dal motore M.
Queste tracce sono in genere utili solo per i membri del team di Power Query, quindi in genere è
consigliabile mantenere questa impostazione su false .
Mostra tracce utente — questa impostazione controlla l'output delle informazioni di traccia da parte del
connettore. È necessario impostare questa proprietà su true .

Una volta abilitate, si inizieranno a visualizzare le voci di log nella finestra Output query M, nella scheda Log.

Diagnostics.Trace
La funzione Diagnostics.Trace viene usata per scrivere messaggi nel log di traccia del motore M.

Diagnostics.Trace = (traceLevel as number, message as text, value as any, optional delayed as nullable
logical as any) => ...

IMPORTANT
M è un linguaggio funzionale con valutazione differita. Quando si usa , tenere presente che la funzione verrà chiamata
solo se l'espressione di cui fa Diagnostics.Trace parte viene effettivamente valutata. Alcuni esempi sono disponibili più
avanti in questa esercitazione.

Il traceLevel parametro può essere uno dei valori seguenti (in ordine decrescente):
TraceLevel.Critical
TraceLevel.Error
TraceLevel.Warning
TraceLevel.Information
TraceLevel.Verbose

Quando la traccia è abilitata, l'utente può selezionare il livello massimo di messaggi che vuole visualizzare. Tutti i
messaggi di traccia di questo livello e in verranno restituiti nel log. Ad esempio, se l'utente seleziona il livello
"Avviso", i messaggi di traccia di TraceLevel.Warning , e verranno visualizzati nei TraceLevel.Error
TraceLevel.Critical log.
Il messageparametro è il testo effettivo che verrà restituito nel file di traccia. Si noti che il testo non conterrà il
value parametro a meno che non venga incluso in modo esplicito nel testo.
Il value parametro è ciò che la funzione restituirà. Quando il parametro è impostato su , sarà una funzione di
parametro zero che restituisce il valore effettivo che delayed true si sta value valutando. Quando delayed è
impostato su , sarà il valore false value effettivo. Di seguito è riportato un esempio del funzionamento di.
Uso di Diagnostics.Trace nel connettore TripPin
Per un esempio pratico dell'uso di Diagnostics.Trace e dell'impatto del parametro , aggiornare la funzione del
connettore TripPin per eseguire delayed il wrapping GetSchemaForEntity error dell'eccezione:

GetSchemaForEntity = (entity as text) as type =>


try
SchemaTable{[Entity=entity]}[Type]
otherwise
let
message = Text.Format("Couldn't find entity: '#{0}'", {entity})
in
Diagnostics.Trace(TraceLevel.Error, message, () => error message, true);

È possibile forzare un errore durante la valutazione (a scopo di test) passando un nome di entità non valido alla
GetEntity funzione. In questo caso withData si modifica la riga nella funzione , sostituendo con
TripPinNavTable [Name] "DoesNotExist" .

TripPinNavTable = (url as text) as table =>


let
// Use our schema table as the source of top level items in the navigation tree
entities = Table.SelectColumns(SchemaTable, {"Entity"}),
rename = Table.RenameColumns(entities, {{"Entity", "Name"}}),
// Add Data as a calculated column
withData = Table.AddColumn(rename, "Data", each GetEntity(url, "DoesNotExist"), type table),
// Add ItemKind and ItemName as fixed text values
withItemKind = Table.AddColumn(withData, "ItemKind", each "Table", type text),
withItemName = Table.AddColumn(withItemKind, "ItemName", each "Table", type text),
// Indicate that the node should not be expandable
withIsLeaf = Table.AddColumn(withItemName, "IsLeaf", each true, type logical),
// Generate the nav table
navTable = Table.ToNavigationTable(withIsLeaf, {"Name"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
navTable;

Abilitare la traccia per il progetto ed eseguire le query di test. Nella scheda Errors dovrebbe essere visualizzato
il testo dell'errore generato:
Inoltre, nella Log scheda dovrebbe essere visualizzato lo stesso messaggio. Si noti che se si usano valori diversi
per message i parametri e , questi saranno value diversi.

Si noti anche che Action il campo del messaggio di log contiene il nome (Tipo origine dati) dell'estensione (in
questo caso, Engine/Extension/TripPin ). In questo modo è più semplice trovare i messaggi correlati
all'estensione quando sono coinvolte più query e/o la traccia di sistema (motore mashup) è abilitata.
Valutazione posticipata
Come esempio del funzionamento del parametro , si apportare alcune delayed modifiche ed eseguire di nuovo
le query.
Per prima cosa, delayed impostare il valore su , ma lasciare il parametro così come false value è:

Diagnostics.Trace(TraceLevel.Error, message, () => error message, false);

Quando si esegue la query, viene visualizzato un errore che indica che non è possibile convertire un valore di
tipo Function nel tipo Type e non l'errore effettivo generato. Ciò è dovuto al fatto che la chiamata ora restituisce
un function valore, anziché il valore stesso.
Rimuovere quindi la funzione dal value parametro :

Diagnostics.Trace(TraceLevel.Error, message, error message, false);

Quando si esegue la query, viene visualizzato l'errore corretto, ma se si seleziona la scheda Log non verranno
visualizzati messaggi. Ciò è dovuto al error fatto che l'oggetto viene generato/valutato durante la chiamata a ,
quindi il messaggio non Diagnostics.Trace viene mai effettivamente restituito.

Ora che si è compreso l'impatto del parametro, assicurarsi di ripristinare lo stato di funzionamento del
connettore delayed prima di procedere.

Funzioni helper di diagnostica in Diagnostics.pqm


Il file Diagnostics.pqm incluso in questo progetto contiene una serie di funzioni helper che semplificano la
traccia. Come illustrato nell'esercitazioneprecedente, è possibile includere questo file nel progetto (ricordando di
impostare l'azione di compilazione su Compila) e quindi caricarlo nel file del connettore. La parte inferiore del
file del connettore dovrebbe ora avere un aspetto simile al frammento di codice seguente. È possibile esplorare
le varie funzioni fornite da questo modulo, ma in questo esempio si usano solo le Diagnostics.LogValue
funzioni e Diagnostics.LogFailure .

// Diagnostics module contains multiple functions. We can take the ones we need.
Diagnostics = Extension.LoadFunction("Diagnostics.pqm");
Diagnostics.LogValue = Diagnostics[LogValue];
Diagnostics.LogFailure = Diagnostics[LogFailure];

Diagnostics.LogValue
La funzione è molto simile a e può essere usata per ottenere il valore di ciò Diagnostics.LogValue
Diagnostics.Trace che si sta valutando.

Diagnostics.LogValue = (prefix as text, value as any) as any => ...

Il prefix parametro viene anteposto al messaggio di log. Si userebbe questa opzione per determinare quale
chiamata restituisce il messaggio. Il parametro è ciò che la funzione restituirà e verrà scritto anche nella traccia
come value rappresentazione testuale del valore M. Ad esempio, se value è uguale a con le colonne A e
table B, il log conterrà la rappresentazione #table equivalente:
#table({"A", "B"}, {{"row1 A", "row1 B"}, {"row2 A", row2 B"}})

NOTE
La serializzazione dei valori M in testo può essere un'operazione costosa. Tenere presente le dimensioni potenziali dei
valori restituiti nella traccia.

NOTE
La maggior Power Query ambienti tronca i messaggi di traccia a una lunghezza massima.

Ad esempio, si aggiornerà la TripPin.Feed funzione per tracciare gli url argomenti e passati alla schema
funzione.
TripPin.Feed = (url as text, optional schema as type) as table =>
let
_url = Diagnostics.LogValue("Accessing url", url),
_schema = Diagnostics.LogValue("Schema type", schema),
//result = GetAllPagesByNextLink(url, schema)
result = GetAllPagesByNextLink(_url, _schema)
in
result;

Si noti che è necessario usare i valori _url new e nella chiamata a _schema GetAllPagesByNextLink . Se sono
stati usati i parametri della funzione originale, le chiamate non verrebbero mai effettivamente valutate e non
verrebbero scritti messaggi Diagnostics.LogValue nella traccia. La programmazione funzionale è divertente.
Quando si eseguono le query, nel log dovrebbero essere visualizzati nuovi messaggi.
Accesso all'URL:

Tipo di schema:
Si noti che viene visualizzata la versione serializzata del parametro , anziché quella che si ottiene quando si
esegue un'operazione semplice su un valore di tipo (il risultato schema type è Text.FromValue "type").
Diagnostics.LogFailure
La funzione può essere usata per eseguire il wrapping delle chiamate di funzione e scriverà nella traccia solo se
la chiamata di funzione ha esito negativo, ovvero Diagnostics.LogFailure restituisce un oggetto error .

Diagnostics.LogFailure = (text as text, function as function) as any => ...

Internamente, Diagnostics.LogFailure aggiunge un try operatore alla function chiamata. Se la chiamata ha


esito negativo, text il valore viene scritto nella traccia prima di restituire l'oggetto error originale. Se la
function chiamata ha esito positivo, il risultato viene restituito senza scrivere alcun elemento nella traccia.
Poiché gli errori M non contengono un'analisi dello stack completa, ovvero in genere viene visualizzato solo il
messaggio dell'errore, questo può essere utile quando si vuole individuare la posizione in cui è stato
effettivamente generato l'errore.
Come esempio (scadente), modificare la riga della funzione per withData TripPinNavTable forzare nuovamente
un errore:

withData = Table.AddColumn(rename, "Data", each Diagnostics.LogFailure("Error in GetEntity", () =>


GetEntity(url, "DoesNotExist")), type table),

Nella traccia è possibile trovare il messaggio di errore risultante contenente text , e le informazioni sull'errore
originale.
Assicurarsi di reimpostare lo stato di funzionamento della funzione prima di procedere con l'esercitazione
successiva.

Conclusione
Questa breve lezione ( ma importante! ) ha illustrato come usare le funzioni helper di diagnostica per accedere
ai Power Query di traccia. Se usate correttamente, queste funzioni sono estremamente utili per il debug dei
problemi all'interno del connettore.

NOTE
Gli sviluppatori di connettori devono assicurarsi di non registrare informazioni riservate o personali come parte della
registrazione diagnostica. È anche necessario prestare attenzione a non visualizzare troppe informazioni di traccia, in
quanto possono avere un impatto negativo sulle prestazioni.

Passaggi successivi
Parte 9 di TripPin - TestConnection
Parte 9 di TripPin - TestConnection
07/12/2021 • 4 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si:
Aggiungere un gestore TestConnection
Configurare il gateway dati locale (modalità personale)
Testare l'aggiornamento pianificato tramite Power BI servizio
Il supporto del connettore personalizzato è stato aggiunto alla versione di aprile 2018 del gateway dati locale
personale. Questa nuova funzionalità (anteprima) consente l'aggiornamento pianificato dei report che usano il
connettore personalizzato.
Questa esercitazione illustra il processo di abilitazione del connettore per l'aggiornamento e fornisce una rapida
procedura dettagliata per configurare il gateway. In particolare, si:
1. Aggiungere un gestore TestConnection al connettore
2. Installare il gateway dati locale in modalità personale
3. Abilitare il supporto del connettore personalizzato nel gateway
4. Pubblicare una cartella di lavoro che usa il connettore per PowerBI.com
5. Configurare l'aggiornamento pianificato per testare il connettore
Per altre informazioni sul gestore TestConnection, vedere Gestione del supporto del gateway.

Sfondo
Esistono tre prerequisiti per la configurazione di un'origine dati per l'aggiornamento pianificato PowerBI.com:
L'origine dati è suppor tata: Ciò significa che l'ambiente del gateway di destinazione è a conoscenza di
tutte le funzioni contenute nella query da aggiornare.
Vengono fornite le credenziali: Per presentare la finestra di dialogo di immissione delle credenziali Power
BI necessario conoscere il meccanismo di autenticazione del supporto per una determinata origine dati.
Le credenziali sono valide: Dopo aver fornito le credenziali, l'utente viene convalidato chiamando il
gestore dell'origine TestConnection dati.
I primi due elementi vengono gestiti registrando il connettore con il gateway. Quando l'utente tenta di
configurare l'aggiornamento pianificato in PowerBI.com, le informazioni sulla query vengono inviate al gateway
personale per determinare se sono disponibili origini dati non riconosciute dal servizio Power BI, ovvero quelle
personalizzate create. Il terzo elemento viene gestito richiamando il gestore TestConnection definito per l'origine
dati.

Aggiunta di un gestore TestConnection


Il gestore TestConnection viene aggiunto al record di dichiarazione Del tipo di origine dati (nella stessa posizione
in cui si dichiarano i tipi di autenticazione supportati). Il gestore è un function oggetto con un singolo
parametro di tipo , che restituisce un oggetto any list . Il primo valore nell'elenco è la funzione che verrà
chiamata per testare effettivamente la connessione. Questo è in genere lo stesso della funzione principale
dell'origine dati. In alcuni casi potrebbe essere necessario esporre una funzione separata per fornire un test di
connessione efficiente, tuttavia in genere questa operazione shared deve essere evitata.
Poiché la funzione dell'origine dati TripPin non ha argomenti obbligatori, l'implementazione per TestConnection
è piuttosto semplice:

// Data Source Kind description


TripPin = [
// TestConnection is required to enable the connector through the Gateway
TestConnection = (dataSourcePath) => { "TripPin.Contents" },
Authentication = [
Anonymous = []
],
Label = "TripPin Part 9 - TestConnection"
];

NOTE
Le versioni future di Power Query SDK offriranno un modo per convalidare il gestore TestConnection da Visual Studio.
Attualmente, l'unico meccanismo che usa TestConnection è il gateway dati locale.

Abilitazione di connettori personalizzati nel gateway personale


Scaricare e installare il gateway dati locale. Quando si esegue il programma di installazione, selezionare la
modalità personale.
Al termine dell'installazione, avviare il gateway e accedere Power BI. Il processo di accesso registrerà
automaticamente il gateway con i Power BI servizi. Dopo aver eseguito l'accesso, seguire questa procedura:
1. Selezionare la scheda Connettori .
2. Selezionare l'opzione per abilitare il supporto per i connettori dati personalizzati.
3. Selezionare la directory da cui caricare i connettori personalizzati. In genere si tratta della stessa directory
che si userebbe per Power BI Desktop, ma il valore è configurabile.
4. La pagina dovrebbe ora elencare tutti i file di estensione nella directory di destinazione.
Per altre informazioni sul gateway, vedere la documentazione online.

Test dell'aggiornamento pianificato


Aprire Power BI Desktop e creare un report che importa i dati usando il connettore TripPin.
Aggiungere uno o più oggetti visivi alla pagina del report (facoltativo) e quindi pubblicare il report in
PowerBI.com.
Dopo la pubblicazione, passare PowerBI.com e trovare il set di dati per il report appena pubblicato. Selezionare i
puntini di sospensione e quindi selezionare Pianifica aggiornamento . Espandere le sezioni Connessione
gateway e Credenziali origine dati.
NOTE
Se la pagina di configurazione del set di dati indica che il report contiene origini dati sconosciute, il gateway o il connettore
personalizzato potrebbe non essere configurato correttamente. Passare all'interfaccia utente di configurazione del gateway
personale e assicurarsi che non siano presenti errori accanto al connettore TripPin. Potrebbe essere necessario riavviare il
gateway (nella scheda Impostazioni servizio) per selezionare la configurazione più recente.

Selezionare il collegamento Modifica credenziali per visualizzare la finestra di dialogo di autenticazione e


quindi selezionare Accedi.

NOTE
Se viene visualizzato un errore simile a quello riportato di seguito ("Impossibile aggiornare le credenziali dell'origine dati"),
molto probabilmente si verifica un problema con il gestore TestConnection.

Dopo una chiamata a TestConnection riuscita, le credenziali verranno accettate. È ora possibile pianificare
l'aggiornamento oppure selezionare l'ellisse del set di dati e quindi selezionare Aggiorna ora . È possibile
selezionare il collegamento Cronologia aggiornamenti per visualizzare lo stato dell'aggiornamento, che in
genere richiede alcuni minuti per l'avvio.
Conclusione
A questo punto, È ora disponibile un connettore personalizzato pronto per la produzione che supporta
l'aggiornamento automatico tramite il Power BI servizio.

Passaggi successivi
Parte 10 di TripPin - Query Folding
TripPin Part 10 — Basic Query Folding
07/12/2021 • 16 minutes to read

Questa esercitazione in più parti illustra la creazione di una nuova estensione per l'origine dati per Power Query.
L'esercitazione deve essere eseguita in sequenza ogni lezione si basa sul connettore creato nelle lezioni
precedenti, aggiungendo in modo incrementale nuove — funzionalità al connettore.
In questa lezione si apprenderà come:
Informazioni di base sulla funzionalità di folding delle query
Informazioni sulla Table.View funzione
Replicare i gestori di folding delle query OData per:
$top
$skip
$count
$select
$orderby

Una delle potenti funzionalità del linguaggio M è la possibilità di eseguire il push del lavoro di trasformazione
nelle origini dati sottostanti. Questa funzionalità è detta folding delle query (altri strumenti/tecnologie fanno
anche riferimento a funzioni simili a Predicate Pushdown o Delega query). Quando si crea un connettore
personalizzato che usa una funzione M con funzionalità di ripiegamento delle query incorporate, ad esempio o ,
il connettore erediterà automaticamente OData.Feed Odbc.DataSource questa funzionalità gratuitamente.
In questa esercitazione verrà replicato il comportamento predefinito di ripiegamento delle query per OData
implementando gestori di funzione per la Table.View funzione. Questa parte dell'esercitazione implementerà
alcuni dei gestori più semplici da implementare, ovvero quelli che non richiedono l'analisi delle espressioni e il
rilevamento dello stato.
Per altre informazioni sulle funzionalità di query offerte da un servizio OData, vedere Convenzioni degli URL
OData v4.

NOTE
Come indicato in precedenza, OData.Feed la funzione fornirà automaticamente funzionalità di folding delle query. Poiché
la serie TripPin tratta il servizio OData come una normale API REST, usando anziché , sarà necessario implementare
manualmente i gestori di Web.Contents OData.Feed folding delle query. Per l'utilizzo reale, è consigliabile usare
OData.Feed ogni volta che è possibile.

Per altre informazioni sul ripiegamento delle query in M, vedere la documentazione di Table.View.

Uso di Table.View
La funzione Table.View consente a un connettore personalizzato di eseguire l'override dei gestori di
trasformazione predefiniti per l'origine dati. Table.View Un'implementazione di fornirà una funzione per uno o
più gestori supportati. Se un gestore non è implementato o restituisce un durante la valutazione, il motore M
restituirà il error gestore predefinito.
Quando un connettore personalizzato usa una funzione che non supporta la conversione implicita delle query,
ad esempio , i gestori di trasformazione predefiniti verranno Web.Contents sempre eseguiti in locale. Se l'API
REST a cui ci si connette supporta i parametri di query come parte della query, sarà possibile aggiungere
ottimizzazioni che consentono il push delle operazioni di trasformazione Table.View al servizio.
La Table.View funzione ha la firma seguente:

Table.View(table as nullable table, handlers as record) as table

L'implementazione esegue il wrapping della funzione dell'origine dati principale. Esistono due gestori
obbligatori per Table.View :
GetType —restituisce il valore table type previsto del risultato della query
GetRows —restituisce il risultato table effettivo della funzione dell'origine dati

L'implementazione più semplice sarà simile alla seguente:

TripPin.SuperSimpleView = (url as text, entity as text) as table =>


Table.View(null, [
GetType = () => Value.Type(GetRows()),
GetRows = () => GetEntity(url, entity)
]);

Aggiornare la TripPinNavTable funzione da chiamare anziché TripPin.SuperSimpleView GetEntity :

withData = Table.AddColumn(rename, "Data", each TripPin.SuperSimpleView(url, [Name]), type table),

Se si rieseguono gli unit test, si verificherà che il comportamento della funzione non è stato modificato. In
questo caso, l'implementazione di Table.View passa semplicemente attraverso la chiamata a GetEntity . Poiché
non è ancora stato implementato alcun gestore di trasformazione, il parametro url originale rimane invariato.

Implementazione iniziale di Table.View


L'implementazione precedente Table.View di è semplice, ma non molto utile. L'implementazione seguente
verrà usata come baseline che non implementa alcuna funzionalità di folding, ma ha lo — scaffolding
necessario.
TripPin.View = (baseUrl as text, entity as text) as table =>
let
// Implementation of Table.View handlers.
//
// We wrap the record with Diagnostics.WrapHandlers() to get some automatic
// tracing if a handler returns an error.
//
View = (state as record) => Table.View(null, Diagnostics.WrapHandlers([
// Returns the table type returned by GetRows()
GetType = () => CalculateSchema(state),

// Called last - retrieves the data from the calculated URL


GetRows = () =>
let
finalSchema = CalculateSchema(state),
finalUrl = CalculateUrl(state),

result = TripPin.Feed(finalUrl, finalSchema),


appliedType = Table.ChangeType(result, finalSchema)
in
appliedType,

//
// Helper functions
//
// Retrieves the cached schema. If this is the first call
// to CalculateSchema, the table type is calculated based on
// the entity name that was passed into the function.
CalculateSchema = (state) as type =>
if (state[Schema]? = null) then
GetSchemaForEntity(entity)
else
state[Schema],

// Calculates the final URL based on the current state.


CalculateUrl = (state) as text =>
let
urlWithEntity = Uri.Combine(state[Url], state[Entity])
in
urlWithEntity
]))
in
View([Url = baseUrl, Entity = entity]);

Se si osserva la chiamata a , verrà visualizzata una Table.View funzione wrapper aggiuntiva intorno al
handlers record — Diagnostics.WrapHandlers . Questa funzione helper si trova nel modulo Diagnostica
(introdotta in un'esercitazione precedente) e offre un modo utile per tracciare automaticamente eventuali errori
generati dai singoli gestori.
Le GetTypefunzioni e sono state aggiornate per usare due nuove funzioni helper e GetRows —
CalculateSchema CaculateUrl . Al momento le implementazioni di queste funzioni sono piuttosto semplici, si
noterà che contengono parti di quanto precedentemente — fatto dalla GetEntity funzione.
Si noterà infine che si sta definendo una funzione interna ( View ) che accetta un state parametro. Quando si
implementano più gestori, questi chiameranno in modo ricorsivo la funzione interna, aggiornando e passando
View state contemporaneamente.

Aggiornare di nuovo la funzione , sostituendo la chiamata a con una chiamata alla nuova funzione ed eseguire
TripPinNavTable TripPin.SuperSimpleView nuovamente gli unit TripPin.View test. Non saranno ancora
disponibili nuove funzionalità, ma è ora disponibile una solida baseline per i test.

Implementazione del ripiegamento delle query


Poiché il motore M esegue automaticamente il fall back all'elaborazione locale quando non è possibile ripiegare
una query, è necessario eseguire alcuni passaggi aggiuntivi per verificare che i gestori Table.View funzionino
correttamente.
Il modo manuale per convalidare il comportamento di folding è guardare le richieste URL effettuate da unit test
usando uno strumento come Fiddler. In alternativa, la registrazione diagnostica aggiunta a genera l'URL
completo in esecuzione, che deve includere i parametri della stringa di query OData che TripPin.Feed verranno
aggiunti ai gestori.
Un modo automatizzato per convalidare la folding delle query è forzare l'esecuzione unit test non riesce se una
query non si ripiega completamente. A tale scopo, aprire le proprietà del progetto e impostare Errore in caso di
errore di ripiegamento su True. Se questa impostazione è abilitata, qualsiasi query che richiede
l'elaborazione locale restituisce l'errore seguente:
Non è stato possibile ripiegare l'espressione nell'origine. Provare un'espressione più semplice.
È possibile testarlo aggiungendo un nuovo elemento al Fact file unit test che contiene una o più trasformazioni
di tabella.

// Query folding tests


Fact("Fold $top 1 on Airlines",
#table( type table [AirlineCode = text, Name = text] , {{"AA", "American Airlines"}} ),
Table.FirstN(Airlines, 1)
)

NOTE
L'impostazione Errore in caso di errore di ripiegamento è un approccio "tutto o niente". Se si vogliono testare query
che non sono progettate per essere eseguite come parte degli unit test, è necessario aggiungere una logica condizionale
per abilitare o disabilitare i test di conseguenza.

Le sezioni rimanenti di questa esercitazione aggiungeranno ognuna un nuovo gestore Table.View. Si esaminerà
un approccio TDD (Test Driven Development), in cui si aggiungeranno prima unit test non superati e quindi si
implementerà il codice M per risolverli.
Ogni sezione del gestore riportata di seguito descrive la funzionalità fornita dal gestore, la sintassi di query
equivalente OData, gli unit test e l'implementazione. Usando il codice di scaffolding descritto in precedenza, ogni
implementazione del gestore richiede due modifiche:
Aggiunta del gestore a Table.View che aggiornerà il state record.
Modifica per CalculateUrl recuperare i valori da e aggiungere ai parametri url state e/o della stringa di
query.
Gestione di Table.FirstN con OnTake
Il gestore OnTake riceve un count parametro, ovvero il numero massimo di righe da prendere. In termini
OData, è possibile tradurlo nel parametro $top query.
Si useranno gli unit test seguenti:
// Query folding tests
Fact("Fold $top 1 on Airlines",
#table( type table [AirlineCode = text, Name = text] , {{"AA", "American Airlines"}} ),
Table.FirstN(Airlines, 1)
),
Fact("Fold $top 0 on Airports",
#table( type table [Name = text, IataCode = text, Location = record] , {} ),
Table.FirstN(Airports, 0)
),

Entrambi i test usano Table.FirstN per filtrare il set di risultati sul primo numero X di righe. Se si eseguono
questi test con Errore in caso di errore di ripiegamento impostato su (impostazione predefinita), i test
dovrebbero avere esito positivo, ma se si esegue Fiddler (o si controllano i log di traccia), si verificherà che la
richiesta inviata non contiene parametri di False query OData.

Se si imposta Errore in caso di errore di ripiegamento su , l'operazione avrà esito negativo con il
messaggio True "Provare un'espressione più semplice". errore. Per risolvere questo problema, si definirà il
primo gestore Table.View per OnTake .
Il gestore OnTake è simile al seguente:

OnTake = (count as number) =>


let
// Add a record with Top defined to our state
newState = state & [ Top = count ]
in
@View(newState),

La CalculateUrl funzione viene aggiornata per estrarre il valore dal record e impostare il parametro giusto
nella stringa di Top state query.
// Calculates the final URL based on the current state.
CalculateUrl = (state) as text =>
let
urlWithEntity = Uri.Combine(state[Url], state[Entity]),

// Uri.BuildQueryString requires that all field values


// are text literals.
defaultQueryString = [],

// Check for Top defined in our state


qsWithTop =
if (state[Top]? <> null) then
// add a $top field to the query string record
defaultQueryString & [ #"$top" = Number.ToText(state[Top]) ]
else
defaultQueryString,

encodedQueryString = Uri.BuildQueryString(qsWithTop),
finalUrl = urlWithEntity & "?" & encodedQueryString
in
finalUrl

Rieseguindo gli unit test, è possibile vedere che l'URL a cui si accede ora contiene il $top parametro . Si noti che
a causa della codifica URL, $top viene visualizzato come , ma il servizio OData è sufficientemente intelligente
da %24top convertirlo automaticamente.

Gestione di Table.Skip con OnSkip


Il gestore OnSkip è molto simile a OnTake. Riceve un parametro , ovvero il numero di righe count da ignorare
dal set di risultati. Questa operazione viene conse gudata nel parametro di query OData $skip query.
Unit test:

// OnSkip
Fact("Fold $skip 14 on Airlines",
#table( type table [AirlineCode = text, Name = text] , {{"EK", "Emirates"}} ),
Table.Skip(Airlines, 14)
),
Fact("Fold $skip 0 and $top 1",
#table( type table [AirlineCode = text, Name = text] , {{"AA", "American Airlines"}} ),
Table.FirstN(Table.Skip(Airlines, 0), 1)
),
Implementazione:

// OnSkip - handles the Table.Skip transform.


// The count value should be >= 0.
OnSkip = (count as number) =>
let
newState = state & [ Skip = count ]
in
@View(newState),

Aggiornamenti corrispondenti a CalculateUrl :

qsWithSkip =
if (state[Skip]? <> null) then
qsWithTop & [ #"$skip" = Number.ToText(state[Skip]) ]
else
qsWithTop,

Gestione di Table.SelectColumns con OnSelectColumns


Il gestore OnSelectColumns viene chiamato quando l'utente seleziona o rimuove colonne dal set di risultati. Il
gestore riceve un oggetto di valori che rappresenta le colonne list text da selezionare. In termini OData,
questa operazione verrà mappata all'$select query. Il vantaggio della selezione di colonne di tipo folding diventa
evidente quando si gestiscono tabelle con molte colonne. $select L'operatore rimuoverà le colonne non
selezionate dal set di risultati, determinando query più efficienti.
Unit test:

// OnSelectColumns
Fact("Fold $select single column",
#table( type table [AirlineCode = text] , {{"AA"}} ),
Table.FirstN(Table.SelectColumns(Airlines, {"AirlineCode"}), 1)
),
Fact("Fold $select multiple column",
#table( type table [UserName = text, FirstName = text, LastName = text],{{"russellwhyte", "Russell",
"Whyte"}}),
Table.FirstN(Table.SelectColumns(People, {"UserName", "FirstName", "LastName"}), 1)
),
Fact("Fold $select with ignore column",
#table( type table [AirlineCode = text] , {{"AA"}} ),
Table.FirstN(Table.SelectColumns(Airlines, {"AirlineCode", "DoesNotExist"}, MissingField.Ignore), 1)
),

I primi due test selezionano numeri diversi di colonne con e includono una chiamata per semplificare la
Table.SelectColumns Table.FirstN test case.

NOTE
Se il test restituiva semplicemente i nomi di colonna (usando ) e non i dati, la richiesta al servizio OData non
Table.ColumnNames verrà mai effettivamente inviata. Ciò è dovuto al fatto che la chiamata a restituirà lo schema , che
contiene tutte le informazioni necessarie al motore GetType M per calcolare il risultato.

Il terzo test usa l'opzione , che indica al motore M di ignorare le colonne selezionate che MissingField.Ignore
non esistono nel set di risultati. Il gestore non deve preoccuparsi di questa opzione che verrà gestita
automaticamente dal motore M, ovvero le colonne mancanti non OnSelectColumns — verranno incluse columns
nell'elenco.
NOTE
L'altra opzione Table.SelectColumns per , , richiede un MissingField.UseNull connettore per implementare il
OnAddColumn gestore. Questa operazione verrà eseguita in una lezione successiva.

L'implementazione OnSelectColumns di per esegue due operazioni:


Aggiunge l'elenco di colonne selezionate a state .
Ricalcola il valore Schema in modo da poter impostare il tipo di tabella corretto.

OnSelectColumns = (columns as list) =>


let
// get the current schema
currentSchema = CalculateSchema(state),
// get the columns from the current schema (which is an M Type value)
rowRecordType = Type.RecordFields(Type.TableRow(currentSchema)),
existingColumns = Record.FieldNames(rowRecordType),
// calculate the new schema
columnsToRemove = List.Difference(existingColumns, columns),
updatedColumns = Record.RemoveFields(rowRecordType, columnsToRemove),
newSchema = type table (Type.ForRecord(updatedColumns, false))
in
@View(state &
[
SelectColumns = columns,
Schema = newSchema
]
),

CalculateUrl viene aggiornato per recuperare l'elenco di colonne dallo stato e combinarle (con un separatore)
per il $select parametro .

// Check for explicitly selected columns


qsWithSelect =
if (state[SelectColumns]? <> null) then
qsWithSkip & [ #"$select" = Text.Combine(state[SelectColumns], ",") ]
else
qsWithSkip,

Gestione di Table.Sort con OnSort


Il gestore OnSort riceve un oggetto list di valori record . Ogni record contiene Name un campo , che indica il
nome della colonna, e un campo uguale a o Order Order.Ascending Order.Descending . In termini di OData,
questa operazione verrà mappata all'opzione $orderby query. La $orderby sintassi ha il nome della colonna
seguito asc da o per indicare desc l'ordine crescente o decrescente. Quando si esegue l'ordinamento in base a
più colonne, i valori sono separati da una virgola. Si noti che se il parametro contiene più di un elemento, è
columns importante mantenere l'ordine in cui vengono visualizzati.

Unit test:
// OnSort
Fact("Fold $orderby single column",
#table( type table [AirlineCode = text, Name = text], {{"TK", "Turkish Airlines"}}),
Table.FirstN(Table.Sort(Airlines, {{"AirlineCode", Order.Descending}}), 1)
),
Fact("Fold $orderby multiple column",
#table( type table [UserName = text], {{"javieralfred"}}),
Table.SelectColumns(Table.FirstN(Table.Sort(People, {{"LastName", Order.Ascending}, {"UserName",
Order.Descending}}), 1), {"UserName"})
)

Implementazione:

// OnSort - receives a list of records containing two fields:


// [Name] - the name of the column to sort on
// [Order] - equal to Order.Ascending or Order.Descending
// If there are multiple records, the sort order must be maintained.
//
// OData allows you to sort on columns that do not appear in the result
// set, so we do not have to validate that the sorted columns are in our
// existing schema.
OnSort = (order as list) =>
let
// This will convert the list of records to a list of text,
// where each entry is "<columnName> <asc|desc>"
sorting = List.Transform(order, (o) =>
let
column = o[Name],
order = o[Order],
orderText = if (order = Order.Ascending) then "asc" else "desc"
in
column & " " & orderText
),
orderBy = Text.Combine(sorting, ", ")
in
@View(state & [ OrderBy = orderBy ]),

Aggiornamenti a CalculateUrl :

qsWithOrderBy =
if (state[OrderBy]? <> null) then
qsWithSelect & [ #"$orderby" = state[OrderBy] ]
else
qsWithSelect,

Gestione di Table.RowCount con GetRowCount


A differenza degli altri gestori di query implementati, il gestore GetRowCount restituirà un singolo valore del
numero di righe — previsto nel set di risultati. In una query M questo è in genere il risultato della
Table.RowCount trasformazione. Sono disponibili alcune opzioni diverse per gestire questa operazione come
parte di una query OData.
Il $count di query, che restituisce il conteggio come campo separato nel set di risultati.
Il segmento di $count/$count , che restituirà solo il conteggio totale, come valore scalare.
Lo svantaggio dell'approccio con i parametri di query è che è comunque necessario inviare l'intera query al
servizio OData. Poiché il conteggio torna inline come parte del set di risultati, sarà necessario elaborare la prima
pagina di dati dal set di risultati. Anche se è ancora più efficiente leggere l'intero set di risultati e contare le righe,
è probabilmente ancora più efficiente del necessario.
Il vantaggio dell'approccio del segmento di percorso è che si riceverà un solo valore scalare nel risultato. In
questo modo l'intera operazione è molto più efficiente. Tuttavia, come descritto nella specifica OData, il
segmento di percorso /$count restituirà un errore se si includono altri parametri di query, ad esempio o , che ne
limita $top $skip l'utilità.
In questa esercitazione si implementerà il gestore GetRowCount usando l'approccio del segmento di percorso.
Per evitare gli errori che si verificano se sono inclusi altri parametri di query, si verifica la presenza di altri valori
di stato e viene restituito un "errore non implementato" ( ) se ... presente. La restituzione di qualsiasi errore
da un gestore indica al motore M che l'operazione non può essere folded e deve invece eseguire il fallback al
gestore predefinito (che in questo caso conteggierebbe il numero totale di Table.View righe).
Aggiungere prima di tutto una semplice unit test:

// GetRowCount
Fact("Fold $count", 15, Table.RowCount(Airlines)),

Poiché il segmento di percorso restituisce un singolo valore (in formato testo normale) anziché un set di risultati
JSON, sarà necessario aggiungere anche una nuova funzione interna ( ) per effettuare la richiesta e gestire il
/$count TripPin.Scalar risultato.

// Similar to TripPin.Feed, but is expecting back a scalar value.


// This function returns the value from the service as plain text.
TripPin.Scalar = (url as text) as text =>
let
_url = Diagnostics.LogValue("TripPin.Scalar url", url),

headers = DefaultRequestHeaders & [


#"Accept" = "text/plain"
],

response = Web.Contents(_url, [ Headers = headers ]),


toText = Text.FromBinary(response)
in
toText;

L'implementazione userà quindi questa funzione (se non vengono trovati altri parametri di query in state ):

GetRowCount = () as number =>


if (Record.FieldCount(Record.RemoveFields(state, {"Url", "Entity", "Schema"}, MissingField.Ignore)) > 0)
then
...
else
let
newState = state & [ RowCountOnly = true ],
finalUrl = CalculateUrl(newState),
value = TripPin.Scalar(finalUrl),
converted = Number.FromText(value)
in
converted,

La CalculateUrl funzione viene aggiornata per l'aggiunta /$count all'URL se RowCountOnly il campo è
impostato in state .
// Check for $count. If all we want is a row count,
// then we add /$count to the path value (following the entity name).
urlWithRowCount =
if (state[RowCountOnly]? = true) then
urlWithEntity & "/$count"
else
urlWithEntity,

Il nuovo Table.RowCount unit test ora passerà.


Per testare il caso di fallback, si aggiungerà un altro test che forza l'errore. Aggiungere prima di tutto un metodo
helper che controlla il risultato di try un'operazione per un errore di compilazione.

// Returns true if there is a folding error, or the original record (for logging purposes) if not.
Test.IsFoldingError = (tryResult as record) =>
if ( tryResult[HasError]? = true and tryResult[Error][Message] = "We couldn't fold the expression to the
data source. Please try a simpler expression.") then
true
else
tryResult;

Aggiungere quindi un test che usa sia Table.RowCount che Table.FirstN per forzare l'errore.

// test will fail if "Fail on Folding Error" is set to false


Fact("Fold $count + $top *error*", true, Test.IsFoldingError(try Table.RowCount(Table.FirstN(Airlines,
3)))),

Una nota importante in questo caso è che questo test restituirà ora un errore se Error on Folding Error è
impostato su , perché l'operazione verrà eseguita il fall back al gestore locale false Table.RowCount
(predefinito). L'esecuzione dei test con Errore in caso di errore di compilazione impostata su causerà l'esito
negativo e consentirà true Table.RowCount l'esito positivo del test.

Conclusione
Table.View L'implementazione per il connettore aggiunge una notevole quantità di complessità al codice. Poiché
il motore M è in grado di elaborare tutte le trasformazioni in locale, l'aggiunta di gestori non abilita nuovi
scenari per gli utenti, ma comporta un'elaborazione più efficiente (e, potenzialmente, un numero maggiore di
Table.View utenti). Uno dei principali vantaggi dei gestori è che consente di aggiungere nuove funzionalità in
modo incrementale senza influire sulla compatibilità con le versioni precedenti Table.View del connettore.
Per la maggior parte dei connettori, un gestore importante (e di base) da implementare è (che si traduce in
OData), poiché limita la quantità OnTake $top di righe restituite. L Power Query esegue sempre un'operazione
di righe quando si visualizzano anteprime nello strumento di navigazione e nell'editor di query, pertanto gli
utenti potrebbero vedere miglioramenti significativi delle prestazioni quando si lavora con set di dati di
dimensioni OnTake 1000 maggiori.
GitHub Esempio di connettore
07/12/2021 • 7 minutes to read

L GitHub'estensione M illustra come aggiungere il supporto per un flusso di autenticazione del protocollo
OAuth 2.0. Per altre informazioni sulle specifiche del flusso di GitHub di autenticazione di GitHub Developer.
Prima di iniziare a creare un'estensione M, è necessario registrare una nuova app in GitHub e sostituire i file e
con i client_id client_secret valori appropriati per l'app.
Nota sui problemi di compatibilità Visual Studio: l'SDK Power Query usa un controllo Internet Explorer
per visualizzare popup finestre di dialogo OAuth. GitHub ha deprecato il supporto per la versione di IE usata da
questo controllo, che impedirà di completare la concessione di autorizzazioni per l'app se eseguita dall'interno
di Visual Studio. In alternativa, caricare l'estensione con Power BI Desktop e completare il primo flusso OAuth.
Dopo che all'applicazione è stato concesso l'accesso all'account, gli accessi successivi funzionano correttamente
Visual Studio.

OAuth e Power BI
OAuth è una forma di delega delle credenziali. Accedendo a GitHub e autorizzando l'"applicazione" creata per
GitHub, l'utente consente all'"applicazione" di accedere per conto dell'utente per recuperare i dati Power BI.
All'applicazione devono essere concessi i diritti per recuperare i dati (ottenere un access_token) e aggiornare i
dati in base a una pianificazione (ottenere e usare un refresh_token). L'"applicazione" in questo contesto è il
connettore dati usato per eseguire query all'interno Power BI. Power BI archivia e gestisce i access_token e
refresh_token per conto dell'utente.

NOTE
Per consentire Power BI ottenere e usare il access_token, è necessario specificare l'URL di reindirizzamento come
https://oauth.powerbi.com/views/oauthredirect.html .

Quando si specifica questo URL e GitHub esegue correttamente l'autenticazione e concede le autorizzazioni,
GitHub reindirizza all'endpoint oauthredirect di PowerBI in modo che Power BI possa recuperare il access_token
e refresh_token.

Come registrare un'app GitHub app


L Power BI appalto deve eseguire l'accesso per GitHub. Per abilitare questa funzionalità, registrare una nuova
applicazione OAuth con GitHub all'indirizzo https://github.com/settings/applications/new .
1. Application name : immettere un nome per l'applicazione per l'estensione M.
2. Authorization callback URL : immettere https://oauth.powerbi.com/views/oauthredirect.html .
3. Scope : in GitHub impostare scope su user, repo .

NOTE
A un'applicazione OAuth registrata vengono assegnati un ID client e un segreto client univoci. Il segreto client non deve
essere condiviso. È possibile ottenere l'ID client e il segreto client dalla GitHub dell'applicazione. Aggiornare i file nel
progetto Connettore dati con l'ID client_id client (file) e il segreto client client_secret (file).
Come implementare GitHub OAuth
Questo esempio illustra i passaggi seguenti:
1. Creare una definizione del tipo di origine dati che dichiara di supportare OAuth.
2. Specificare i dettagli in modo che il motore M possa avviare il flusso OAuth ( StartLogin ).
3. Convertire il codice ricevuto da GitHub in un access_token ( FinishLogin e TokenMethod ).
4. Definire funzioni che accedono all'API GitHub ( GithubSample.Contents ).
Passaggio 1: Creare una definizione di origine dati
Un connettore dati inizia con un record che descrive l'estensione, incluso il nome univoco (ovvero il nome del
record), i tipi di autenticazione supportati e un nome visualizzato descrittivo (etichetta) per l'origine dati.
Quando si supporta OAuth, la definizione contiene le funzioni che implementano il contratto OAuth — in questo
caso e StartLogin FinishLogin .

//
// Data Source definition
//
GithubSample = [
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin
]
],
Label = Extension.LoadString("DataSourceLabel")
];

Passaggio 2: Specificare i dettagli in modo che il motore M possa avviare il flusso OAuth
Il GitHub OAuth viene avviato quando si indirizzano gli utenti alla https://github.com/login/oauth/authorize
pagina. Per l'accesso dell'utente, è necessario specificare diversi parametri di query:

NOME T IP O DESC RIZ IO N E

client_id string Obbligatorio . L'ID client ricevuto dal


GitHub al momento della registrazione.

redirect_uri string URL nell'app in cui gli utenti verranno


inviati dopo l'autorizzazione. Vedere i
dettagli seguenti sugli URL di
reindirizzamento. Per le estensioni M,
redirect_uri deve essere "
https://oauth.powerbi.com/views/oaut
hredirect.html ".
NOME T IP O DESC RIZ IO N E

scope string Elenco di ambiti delimitato da virgole.


Se non viene specificato, per
impostazione predefinita l'ambito è un
elenco vuoto di ambiti per gli utenti
che non hanno un token valido per
l'app. Per gli utenti che hanno già un
token valido per l'app, all'utente non
verrà visualizzata la pagina di
autorizzazione OAuth con l'elenco di
ambiti. Questo passaggio del flusso
verrà invece completato
automaticamente con gli stessi ambiti
usati l'ultima volta che l'utente ha
completato il flusso.

state string Stringa casuale senza indovinare. Viene


usato per proteggere dagli attacchi di
falsificazione di richieste tra siti.

Il frammento di codice seguente descrive come implementare una StartLogin funzione per avviare il flusso di
accesso. Una StartLogin funzione accetta un valore , e resourceUrl state display . Nella funzione creare un
oggetto AuthorizeUrl che concatena l'URL GitHub l'URL di autorizzazione con i parametri seguenti:
client_id : si ottiene l'ID client dopo aver registrato l'estensione con GitHub dalla pagina
GitHub'applicazione.
scope : impostare l'ambito su " user, repo ". In questo modo viene impostato l'ambito di autorizzazione
(ovvero ciò a cui l'app vuole accedere) per l'utente.
state : valore interno passato dal motore M.
redirect_uri : impostata su https://oauth.powerbi.com/views/oauthredirect.html .

StartLogin = (resourceUrl, state, display) =>


let
AuthorizeUrl = "https://github.com/login/oauth/authorize?" & Uri.BuildQueryString([
client_id = client_id,
scope = "user, repo",
state = state,
redirect_uri = redirect_uri])
in
[
LoginUri = AuthorizeUrl,
CallbackUri = redirect_uri,
WindowHeight = windowHeight,
WindowWidth = windowWidth,
Context = null
];

Se questa è la prima volta che l'utente accede con l'app (identificata dal relativo valore), verrà visualizzata una
pagina in cui viene chiesto di concedere client_id l'accesso all'app. I tentativi di accesso successivi
richiederanno semplicemente le credenziali.
Passaggio 3: Convertire il codice ricevuto da GitHub in un access_token
Se l'utente completa il flusso di autenticazione, GitHub reindirizza all'URL di reindirizzamento Power BI con un
codice temporaneo in un parametro , nonché lo stato specificato nel passaggio precedente in un parametro
code state . La FinishLogin funzione estrarrà il codice dal callbackUri parametro e lo scambierà con un
token di accesso (usando la TokenMethod funzione ).
FinishLogin = (context, callbackUri, state) =>
let
Parts = Uri.Parts(callbackUri)[Query]
in
TokenMethod(Parts[code]);

Per ottenere un token GitHub di accesso, passare il codice temporaneo dall'GitHub authorize response. Nella
funzione si formula una richiesta POST per TokenMethod GitHub'endpoint access_token (
https://github.com/login/oauth/access_token ). Per l'endpoint di GitHub sono necessari i parametri seguenti:

NOME T IP O DESC RIZ IO N E

client_id string Obbligatorio . L'ID client ricevuto dal


GitHub al momento della registrazione.

client_secret string Obbligatorio . Il segreto client


ricevuto dal GitHub al momento della
registrazione.

codice string Obbligatorio . Codice ricevuto in


FinishLogin .

redirect_uri string URL nell'app in cui gli utenti verranno


inviati dopo l'autorizzazione. Vedere i
dettagli seguenti sugli URL di
reindirizzamento.

Ecco i dettagli dei parametri usati per la chiamata a Web.Contents.

A RGO M EN TO DESC RIZ IO N E VA LO RE

url URL per il sito Web. https://github.com/login/oauth/access_


token

opzioni Record per controllare il Non usato in questo caso


comportamento di questa funzione.

Query Aggiungere parametri di query all'URL Content = Text.ToBinary(


a livello di codice. Uri.BuildQueryString(
[
client_id = client_id,
client_secret = client_secret,
code = code,
redirect_uri = redirect_uri
]
))
Where
client_id : ID client dalla
GitHub dell'applicazione.
client_secret : segreto client
dalla GitHub dell'applicazione.
code : codice nella GitHub di
autorizzazione.
redirect_uri : URL nell'app in
cui gli utenti verranno inviati
dopo l'autorizzazione.
A RGO M EN TO DESC RIZ IO N E VA LO RE

Intestazioni Record con intestazioni aggiuntive per Headers= [


la richiesta HTTP. #"Content-type" =
"application/x-www-form-
urlencoded",
#"Accept" = "application/json"
]

Questo frammento di codice descrive come implementare una funzione per scambiare un codice TokenMethod
di autenticazione per un token di accesso.

TokenMethod = (code) =>


let
Response = Web.Contents("https://Github.com/login/oauth/access_token", [
Content = Text.ToBinary(Uri.BuildQueryString([
client_id = client_id,
client_secret = client_secret,
code = code,
redirect_uri = redirect_uri])),
Headers=[#"Content-type" = "application/x-www-form-urlencoded",#"Accept" =
"application/json"]]),
Parts = Json.Document(Response)
in
Parts;

La risposta JSON del servizio conterrà un campo access_token json. Il TokenMethod metodo converte la risposta
JSON in un record M usando Json.Documente la restituisce al motore.
Risposta di esempio:

{
"access_token":"e72e16c7e42f292c6912e7710c838347ae178b4a",
"scope":"user,repo",
"token_type":"bearer"
}

Passaggio 4: Definire le funzioni che accedono all'API GitHub


Il frammento di codice seguente esporta due funzioni ( e ) contrassegnandole come e le GithubSample.Contents
associa al tipo di origine GithubSample.PagedTable shared GithubSample dati.

[DataSource.Kind="GithubSample", Publish="GithubSample.UI"]
shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.Type) as any);

[DataSource.Kind="GithubSample"]
shared GithubSample.PagedTable = Value.ReplaceType(Github.PagedTable, type function (url as Uri.Type) as
nullable table);

La GithubSample.Contents funzione viene pubblicata anche nell'interfaccia utente (consentendo la


visualizzazione nella finestra di dialogo Ottieni dati). La funzione Value.ReplaceType viene usata per impostare
il parametro della funzione sul Url.Type tipo ascribed.
Associando queste funzioni al tipo di origine dati, useranno automaticamente le GithubSample credenziali
fornite dall'utente. Anche le funzioni della libreria M abilitate per l'estendibilità (ad esempio Web.Contents)
ereditano automaticamente queste credenziali.
Per altre informazioni sul funzionamento delle credenziali e dell'autenticazione, vedere Gestione
dell'autenticazione.
URL di esempio
Questo connettore è in grado di recuperare dati formattati da uno degli endpoint dell'API REST GitHub v3. Ad
esempio, la query per eseguire il pull di tutti i commit nel repo Connettori dati sarà simile alla seguente:

GithubSample.Contents("https://api.github.com/repos/microsoft/dataconnectors/commits")
Elenco di esempi
07/12/2021 • 2 minutes to read

Viene mantenuto un elenco di esempi nel repo DataConnectors in GitHub. Ognuno dei collegamenti seguenti
collega a una cartella nel repository di esempio. In genere queste cartelle includono un file Leggimi, uno o più
file con estensione pq/query.pq, un file di progetto per Visual Studio e, in alcuni casi, le icone. Per aprire questi
file in Visual Studio, assicurarsi di aver configurato correttamente l'SDK ed eseguire il file con estensione mproj
dalla cartella clonata o scaricata.

Funzionalità
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Hello World Questo semplice esempio illustra la GitHub Link


struttura di base di un connettore.

Hello World con Docs Analogamente all'Hello World GitHub Link


seguente, questo esempio illustra
come aggiungere documentazione a
una funzione condivisa.

Tabelle di navigazione Questo esempio fornisce due esempi GitHub Link


di come creare una tabella di
navigazione per il connettore dati
usando la Table.ToNavigationTable
funzione .

Testing unità Questo esempio illustra come GitHub Link


aggiungere unit test semplici al
<extension> . file query.pq.

Relazioni In questo esempio viene illustrata la GitHub Link


dichiarazione di relazioni tra tabelle che
verranno rilevate Power BI Desktop.

OAuth
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

GitHub Questo esempio corrisponde GitHub Link


all'esercitazione GitHub connettore .

ODBC
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

SQL Questo esempio di connettore funge GitHub Link


da modello per i connettori ODBC.
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Redshift Questo esempio di connettore usa il GitHub Link


driver ODBC Redshift ed è basato sul
modello di connettore.

Hive LLAP Questo esempio di connettore usa il GitHub Link


driver ODBC Hive ed è basato sul
modello di connettore.

Snowflake Questo esempio di connettore usa il GitHub Link


driver ODBC Snowflake ed è basato sul
modello di connettore.

Impala Questo esempio di connettore usa il GitHub Link


driver ODBC Di Cloudera Impala ed è
basato sul modello di connettore.

Direct Query per SQL In questo esempio viene creato un GitHub Link
connettore personalizzato basato su
ODBC che abilita Direct Query per SQL
Server.

TripPin
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Parte 1 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 1 - OData.

Parte 2 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 2 - REST.

Parte 3 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 3 - Navigation Tables.

Parte 4 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 4 - Data Source Paths.

Parte 5 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 5 - Paging.

Parte 6 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 6 - Enforcing Schema.

Parte 7 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 7 - Advanced Schema
with M Types.

Parte 8 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 8 - Adding Diagnostics.

Parte 9 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 9 - Test Connection.
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Parte 10 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 10 - Basic Query Folding.
Elenco di esempi
07/12/2021 • 2 minutes to read

Viene mantenuto un elenco di esempi nel repo DataConnectors in GitHub. Ognuno dei collegamenti seguenti
collega a una cartella nel repository di esempio. In genere queste cartelle includono un file Leggimi, uno o più
file con estensione pq/query.pq, un file di progetto per Visual Studio e, in alcuni casi, le icone. Per aprire questi
file in Visual Studio, assicurarsi di aver configurato correttamente l'SDK ed eseguire il file con estensione mproj
dalla cartella clonata o scaricata.

Funzionalità
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Hello World Questo semplice esempio illustra la GitHub Link


struttura di base di un connettore.

Hello World con Docs Analogamente all'Hello World GitHub Link


seguente, questo esempio illustra
come aggiungere documentazione a
una funzione condivisa.

Tabelle di navigazione Questo esempio fornisce due esempi GitHub Link


di come creare una tabella di
navigazione per il connettore dati
usando la Table.ToNavigationTable
funzione .

Testing unità Questo esempio illustra come GitHub Link


aggiungere unit test semplici al
<extension> . file query.pq.

Relazioni In questo esempio viene illustrata la GitHub Link


dichiarazione di relazioni tra tabelle che
verranno rilevate Power BI Desktop.

OAuth
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

GitHub Questo esempio corrisponde GitHub Link


all'esercitazione GitHub connettore .

ODBC
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

SQL Questo esempio di connettore funge GitHub Link


da modello per i connettori ODBC.
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Redshift Questo esempio di connettore usa il GitHub Link


driver ODBC Redshift ed è basato sul
modello di connettore.

Hive LLAP Questo esempio di connettore usa il GitHub Link


driver ODBC Hive ed è basato sul
modello di connettore.

Snowflake Questo esempio di connettore usa il GitHub Link


driver ODBC Snowflake ed è basato sul
modello di connettore.

Impala Questo esempio di connettore usa il GitHub Link


driver ODBC Di Cloudera Impala ed è
basato sul modello di connettore.

Direct Query per SQL In questo esempio viene creato un GitHub Link
connettore personalizzato basato su
ODBC che abilita Direct Query per SQL
Server.

TripPin
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Parte 1 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 1 - OData.

Parte 2 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 2 - REST.

Parte 3 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 3 - Navigation Tables.

Parte 4 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 4 - Data Source Paths.

Parte 5 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 5 - Paging.

Parte 6 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 6 - Enforcing Schema.

Parte 7 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 7 - Advanced Schema
with M Types.

Parte 8 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 8 - Adding Diagnostics.

Parte 9 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 9 - Test Connection.
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Parte 10 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 10 - Basic Query Folding.
Elenco di esempi
07/12/2021 • 2 minutes to read

Viene mantenuto un elenco di esempi nel repo DataConnectors in GitHub. Ognuno dei collegamenti seguenti
collega a una cartella nel repository di esempio. In genere queste cartelle includono un file Leggimi, uno o più
file con estensione pq/query.pq, un file di progetto per Visual Studio e, in alcuni casi, le icone. Per aprire questi
file in Visual Studio, assicurarsi di aver configurato correttamente l'SDK ed eseguire il file con estensione mproj
dalla cartella clonata o scaricata.

Funzionalità
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Hello World Questo semplice esempio illustra la GitHub Link


struttura di base di un connettore.

Hello World con Docs Analogamente all'Hello World GitHub Link


seguente, questo esempio illustra
come aggiungere documentazione a
una funzione condivisa.

Tabelle di navigazione Questo esempio fornisce due esempi GitHub Link


di come creare una tabella di
navigazione per il connettore dati
usando la Table.ToNavigationTable
funzione .

Testing unità Questo esempio illustra come GitHub Link


aggiungere unit test semplici al
<extension> . file query.pq.

Relazioni In questo esempio viene illustrata la GitHub Link


dichiarazione di relazioni tra tabelle che
verranno rilevate Power BI Desktop.

OAuth
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

GitHub Questo esempio corrisponde GitHub Link


all'esercitazione GitHub connettore .

ODBC
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

SQL Questo esempio di connettore funge GitHub Link


da modello per i connettori ODBC.
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Redshift Questo esempio di connettore usa il GitHub Link


driver ODBC Redshift ed è basato sul
modello di connettore.

Hive LLAP Questo esempio di connettore usa il GitHub Link


driver ODBC Hive ed è basato sul
modello di connettore.

Snowflake Questo esempio di connettore usa il GitHub Link


driver ODBC Snowflake ed è basato sul
modello di connettore.

Impala Questo esempio di connettore usa il GitHub Link


driver ODBC Di Cloudera Impala ed è
basato sul modello di connettore.

Direct Query per SQL In questo esempio viene creato un GitHub Link
connettore personalizzato basato su
ODBC che abilita Direct Query per SQL
Server.

TripPin
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Parte 1 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 1 - OData.

Parte 2 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 2 - REST.

Parte 3 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 3 - Navigation Tables.

Parte 4 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 4 - Data Source Paths.

Parte 5 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 5 - Paging.

Parte 6 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 6 - Enforcing Schema.

Parte 7 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 7 - Advanced Schema
with M Types.

Parte 8 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 8 - Adding Diagnostics.

Parte 9 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 9 - Test Connection.
ESEM P IO DESC RIZ IO N E C O L L EGA M EN TO

Parte 10 Questo esempio corrisponde a TripPin GitHub Link


Tutorial Part 10 - Basic Query Folding.
Funzionalità aggiuntive del connettore
07/12/2021 • 7 minutes to read

Questo articolo fornisce informazioni sui diversi tipi di funzionalità aggiuntive dei connettori in cui gli
sviluppatori di connettori potrebbero voler investire. Per ogni tipo, questo articolo descrive la disponibilità e le
istruzioni per abilitare la funzionalità.

Autenticazione
Anche se l'implementazione dell'autenticazione è trattata nell'articolo sull'autenticazione, esistono altri metodi
che i proprietari dei connettori potrebbero essere interessati a offrire.
Autenticazione di Windows
Windows'autenticazione è supportata. Per abilitare Windows'autenticazione basata su certificati nel connettore,
aggiungere la riga seguente nella sezione Autenticazione del connettore.

Windows = [ SupportsAlternateCredentials = true ]

Questa modifica esporrà Windows'autenticazione come opzione nell'esperienza Power BI Desktop di


autenticazione. Il flag Suppor tsAlternateCredentials esporrà l'opzione a "Connessione credenziali
alternative". Dopo aver abilitato questo flag, è possibile specificare credenziali Windows account (nome utente e
password). È possibile usare questa funzionalità per testare la rappresentazione fornendo le credenziali
dell'account.
Autenticazione Single Sign-On
Questa sezione descrive le opzioni disponibili per l'implementazione della funzionalità Single Sign-On (SSO) nel
connettore certificato. Attualmente non è disponibile alcun supporto per l'estendibilità "Plug and Play" per
l'accesso SSO. L'abilitazione dell'accesso Single Sign-On richiede modifiche e collaborazione sia sul lato
Microsoft che sull'origine dati o sul connettore, quindi contattare il contatto Microsoft prima di iniziare a
lavorare.
Azure Active Directory SSO
Azure Active Directory'accesso SSO basato Azure AD (Azure AD) è supportato negli scenari cloud. L'origine dati
deve accettare Azure AD token di accesso, in quanto il token utente Power BI Azure AD verrà scambiato con un
token di origine dati da Azure AD. Se si dispone di un connettore certificato, contattare il contatto Microsoft per
altre informazioni.
Accesso Single Sign-On Kerberos
L'accesso Single Sign-On basato su Kerberos è supportato negli scenari gateway. L'origine dati deve supportare
Windows autenticazione. In genere, questi scenari coinvolgono report basati su Direct Query e un connettore
basato su un driver ODBC. I requisiti principali per il driver sono che sia in grado di determinare le impostazioni
di configurazione Kerberos dal contesto del thread corrente e che supporti la rappresentazione utente basata su
thread. Il gateway deve essere configurato per supportare la delega vincolata Kerberos ( KCD). Un esempio è
disponibile nel connettore di esempio Impala.
Power BI le informazioni utente correnti verranno inviate al gateway. Il gateway userà la delega vincolata
Kerberos per richiamare il processo di query come utente rappresentato.
Dopo aver apportato le modifiche precedenti, il proprietario del connettore può testare gli scenari seguenti per
convalidare la funzionalità.
In Power BI Desktop: Windows di rappresentazione (utente corrente)
In Power BI Desktop: Windows rappresentazione con credenziali alternative
Nel gateway: Windows la rappresentazione usando credenziali alternative, pre-configurando l'origine dati
con le credenziali dell'account Windows nel portale di amministrazione Power BI Gateway.
Gli sviluppatori di connettori possono anche usare questa procedura per testare l'implementazione dell'accesso
SSO basato su Kerberos.
1. Configurare un gateway dati locale con l'accesso Single Sign-On abilitato usando le istruzioni riportate
nell'articolo Power BI documentazione di Kerberos SSO.
2. Convalidare la configurazione testando con SQL Server e Windows account. Configurare l'SQL Server di
configurazione Kerberos. Se è possibile usare l'accesso SSO Kerberos con SQL Server, il gateway dati
Power BI è configurato correttamente per abilitare l'accesso SSO Kerberos anche per altre origini dati.
3. Creare un'applicazione, ad esempio uno strumento da riga di comando, che si connette al server tramite
il driver ODBC. Assicurarsi che l'applicazione possa usare Windows per la connessione.
4. Modificare l'applicazione di test in modo che possa prendere un nome utente (UPN) come argomento e
usare il costruttore WindowsIdentity con esso. Al termine, con i privilegi concessi all'account gateway
configurato nel passaggio 1, sarà possibile ottenere la proprietà AccessToken dell'utente e rappresentare
questo token.
5. Dopo aver apportato le modifiche all'applicazione, assicurarsi di poter usare la rappresentazione per
caricare e connettersi al servizio tramite il driver ODBC. Assicurarsi che i dati possano essere recuperati.
Se invece si vuole usare codice C o C++ nativo, è necessario usare LsaLoginUser per recuperare un token
con solo il nome utente e usare l'opzione KERB_S4U_LOGON.
Dopo la convalida di questa funzionalità, Microsoft apportare una modifica al thread dell'UPN dal servizio
Power BI verso il basso attraverso il gateway. Una volta nel gateway, si comporta essenzialmente come
l'applicazione di test per recuperare i dati.
Contattare il contatto Microsoft prima di iniziare a lavorare per altre informazioni su come richiedere questa
modifica.
SAML SSO
L'accesso SSO basato su SAML spesso non è supportato dalle origini dati finali e non è un approccio consigliato.
Se lo scenario richiede l'uso dell'accesso SSO basato su SAML, contattare il contatto Microsoft o visitare la
documentazione per altre informazioni.

Supporto delle query native del database


Alcuni Power Query connettori offrono agli utenti finali la possibilità di specificare query di database native in
Opzioni avanzate nell'esperienza di connessione. Gli sviluppatori di connettori personalizzati possono essere
interessati a offrire il supporto per le query di database native nel connettore.
Consentire agli utenti di eseguire un'istruzione SQL personalizzata tramite un connettore personalizzato
basato su ODBC
Scenario: un utente finale può eseguire istruzioni SQL personalizzate tramite il connettore basato su ODBC.
L'istruzione verrà eseguita in modalità importazione e non è necessario che le trasformazioni si ripieghino.
Stato: questa funzionalità non è attualmente supportata nell'SDK di estendibilità. Il team del prodotto sta
esaminando la fattibilità di questo scenario. Senza l'estendibilità del modello di sicurezza, non è consigliabile che
i connettori esponga funzionalità di query native, a meno che non si oscidi una delle soluzioni alternative
riportate di seguito.
Soluzioni alternative: se l'origine dati è in grado di usare il connettore ODBC generico che attualmente
supporta query di database native, è consigliabile usare questa opzione. Tuttavia, in alcuni casi lo scenario di
connettività ODBC generico potrebbe non funzionare, ad esempio se l'autenticazione deve essere implementata
a livello di connettore.
In questi casi, lo sviluppatore del connettore può scegliere di usare la funzionalità ODBC generica con la
funzione Odbc.Query invece di un connettore personalizzato. A differenza di Odbc.DataSource, che consente al
connettore personalizzato di eseguire l'override delle impostazioni del driver e migliorare il comportamento di
folding delle query, Odbc.Quer y esegue semplicemente la query come specificato e non trae vantaggio dal
wrapper del connettore personalizzato.
Se l'origine dati può imporre l'accesso in sola lettura e si desidera procedere con l'esposizione della funzionalità
Odbc.Quer y per il connettore, è consigliabile fornire una seconda funzione dell'origine dati con il proprio
record Publish e avere due voci nella finestra di dialogo Get Data (DataSource.Database,
DataSource.Quer y ). La funzione Odbc.Quer y supporterebbe solo la modalità di importazione Power BI, non
Direct Query. La distinzione è consigliata, poiché la combinazione di Odbc.Quer y (che non supporta la
funzionalità di ripiegamento delle query) e Odbc.DataSource (che supporta la folding delle query) può
confondere gli utenti finali. Assicurarsi anche di distinguere chiaramente la denominazione dei due record
Publish per comunicare chiaramente agli utenti quale funzione usare per le query native.
Se l'origine dati non applica un accesso di sola lettura, il connettore deve sfruttare anche la funzionalità del
modello di sicurezza delle query di database nativo. Si noti che il prompt query del database nativo non
funziona in Visual Studio SDK. Quando si tenta di eseguire Extension.Query in Visual Studio, viene visualizzato
un errore.

The evaluation requires a permission that has not been provided. Data source kind: 'Extension'. Data source
path: 'test'. Permission kind: 'Native Query'

È necessario eseguire test in Power BI Desktop.


L'esempio di codice del connettore seguente espone due funzioni, una che accetta una query nativa e una che
non lo accetta.

section Extension;

// This function would call Odbc.DataSource


[DataSource.Kind = "Extension"]
shared Extension.DataSource = (server as text) => server;

// This function would call Odbc.Query


[DataSource.Kind = "Extension"]
shared Extension.Query = (server as text, query as text) => query;

Extension = [
// MakeResourcePath overrides the default Data Source Path creation logic that serializes
// all required parameters as a JSON encoded value. This is required to keep the data source
// path the same between the Extension.DataSource and Extension.Query functions. Alternatively,
// you can provide a function documentation type and use DataSource.Path = false for the query
// parameter to exclude it from the data source path calculation.
Type="Custom",
MakeResourcePath = (server) => server,
ParseResourcePath = (resource) => { resource },

// Use NativeQuery to enable a Native Database Query prompt in the Power Query user experience.
NativeQuery = (optional query) => query,
Authentication=[Anonymous=null]
];

Quando viene valutata, se è possibile eseguire il mapping dei nomi dei parametri della funzione dell'origine dati
ai nomi dei parametri della funzione nella definizione dell'origine dati e la funzione restituisce testo, il sito di
chiamata genera un prompt di NativeQuery NativeQuery query nativo. In questo caso, genera una richiesta per
il testo della query nativa, mentre non genera una richiesta Extension.Query("server", "select 1") di query
select 1 Extension.DataSource("server") nativa.

Consentire agli utenti di usare Direct Query su un'istruzione SQL personalizzata


Scenario: un utente finale può usare Direct Query su query di database native.
Stato: questa funzionalità non è attualmente supportata nell'SDK di estendibilità. Il team del prodotto sta
esaminando questo scenario e prevede che questo scenario possa essere possibile per i connettori con driver
ODBC e origini dati finali che supportano la modalità "pass-through" ANSI SQL92.
Soluzioni alternative: nessuna.
Gestione dell'autenticazione
07/12/2021 • 13 minutes to read

Tipi di autenticazione
Un'estensione può supportare uno o più tipi di autenticazione. Ogni tipo di autenticazione è un tipo diverso di
credenziale. L'interfaccia utente di autenticazione visualizzata agli utenti Power Query è basata sul tipo di
credenziali supportato da un'estensione.
L'elenco dei tipi di autenticazione supportati è definito come parte della definizione del tipo di origine dati di
un'estensione. Ogni valore di Autenticazione è un record con campi specifici. Nella tabella seguente sono
elencati i campi previsti per ogni tipo. Tutti i campi sono obbligatori, a meno che non siano contrassegnati
diversamente.

T IP O DI A UT EN T IC A Z IO N E CAMPO DESC RIZ IO N E

Implicita Il tipo di autenticazione implicita


(anonima) non ha campi.

OAuth StartLogin Funzione che fornisce l'URL e le


informazioni sullo stato per l'avvio di
un flusso OAuth.
Vedere la sezione Implementing an
OAuth Flow riportata di seguito.

FinishLogin Funzione che estrae access_token e


altre proprietà correlate al flusso
OAuth.

Aggiorna (facoltativo) Funzione che recupera


un nuovo token di accesso da un
token di aggiornamento.

Logout (facoltativo) Funzione che invalida il


token di accesso corrente dell'utente.

Label (facoltativo) Valore di testo che


consente di eseguire l'override
dell'etichetta predefinita per
AuthenticationKind.

Aad AuthorizationUri text valore o funzione che restituisce


l'endpoint Azure AD di autorizzazione
(esempio:
"https://login.microsoftonline.com/common/oauth2/authorize"
).
Vedere la sezione Azure Active
Directory di autenticazione seguente.

Risorsa text valore o funzione che restituisce


il valore Azure AD risorsa per il
servizio.

UsernamePassword UsernameLabel (facoltativo) Valore di testo per


sostituire l'etichetta predefinita per la
casella di testo Nome utente
nell'interfaccia utente delle credenziali.
T IP O DI A UT EN T IC A Z IO N E CAMPO DESC RIZ IO N E

PasswordLabel (facoltativo) Valore di testo per


sostituire l'etichetta predefinita per la
casella di testo Password nell'interfaccia
utente delle credenziali.

Label (facoltativo) Valore di testo che


consente di eseguire l'override
dell'etichetta predefinita per
AuthenticationKind.

Windows UsernameLabel (facoltativo) Valore di testo per


sostituire l'etichetta predefinita per la
casella di testo Nome utente
nell'interfaccia utente delle credenziali.

PasswordLabel (facoltativo) Valore di testo per


sostituire l'etichetta predefinita per la
casella di testo Password nell'interfaccia
utente delle credenziali.

Label (facoltativo) Valore di testo che


consente di eseguire l'override
dell'etichetta predefinita per
AuthenticationKind.

Chiave KeyLabel (facoltativo) Valore di testo per


sostituire l'etichetta predefinita per la
casella di testo Chiave API
nell'interfaccia utente delle credenziali.

Label (facoltativo) Valore di testo che


consente di eseguire l'override
dell'etichetta predefinita per
AuthenticationKind.

L'esempio seguente illustra il record di autenticazione per un connettore che supporta OAuth, Key, Windows,
Basic (nome utente e password) e credenziali anonime.
Esempio:

Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Refresh = Refresh,
Logout = Logout
],
Key = [],
UsernamePassword = [],
Windows = [],
Implicit = []
]

Accesso alle credenziali correnti


Le credenziali correnti possono essere recuperate usando la Extension.CurrentCredential() funzione .
Le funzioni dell'origine dati M abilitate per l'estendibilità erediteranno automaticamente l'ambito delle
credenziali dell'estensione. Nella maggior parte dei casi, non sarà necessario accedere in modo esplicito alle
credenziali correnti, tuttavia, esistono eccezioni, ad esempio:
Passaggio delle credenziali in un'intestazione personalizzata o in un parametro della stringa di query (ad
esempio quando si usa il tipo di autenticazione della chiave API)
Impostazione delle proprietà della stringa di connessione per ODBC o ADO.NET predefinite
Controllo delle proprietà personalizzate in un token OAuth
Uso delle credenziali come parte di un flusso OAuth v1
La Extension.CurrentCredential() funzione restituisce un oggetto record. I campi in esso contenuti saranno
specifici del tipo di autenticazione. Per informazioni dettagliate, vedere la tabella seguente.

CAMPO DESC RIZ IO N E USATO DA

AuthenticationKind Contiene il nome del tipo di Tutti


autenticazione assegnato a questa
credenziale (UsernamePassword,
OAuth e così via).

Username Valore del nome utente UsernamePassword, Windows

Password Valore della password. Usato in genere Key, UsernamePassword, Windows


con UsernamePassword, ma è
impostato anche per Chiave.

access_token Valore del token di accesso OAuth. OAuth

Proprietà Record contenente altre proprietà OAuth


personalizzate per una determinata
credenziale. Usato in genere con
OAuth per archiviare proprietà
aggiuntive (ad esempio refresh_token)
restituite con il access_token durante il
flusso di autenticazione.

Chiave Valore della chiave API. Si noti che Chiave


anche il valore della chiave è
disponibile nel campo Password. Per
impostazione predefinita, il motore
mashup lo inserirà in un'intestazione
Authorization come se questo valore
fosse una password di autenticazione
di base (senza nome utente). Se questo
non è il comportamento desiderato, è
necessario specificare l'opzione
ManualCredentials = true nel record
delle opzioni.

EncryptConnection Valore logico che ha determinato se Tutti


richiedere una connessione
crittografata all'origine dati. Questo
valore è disponibile per tutti i tipi di
autenticazione, ma verrà impostato
solo se EncryptConnection è
specificato nella definizione dell'origine
dati.

L'esempio di codice seguente accede alle credenziali correnti per una chiave API e la usa per popolare
un'intestazione personalizzata ( x-APIKey ).
Esempio:

MyConnector.Raw = (_url as text) as binary =>


let
apiKey = Extension.CurrentCredential()[Key],
headers = [

#"x-APIKey" = apiKey,
Accept = "application/vnd.api+json",
#"Content-Type" = "application/json"
],
request = Web.Contents(_url, [ Headers = headers, ManualCredentials = true ])
in
request
Implementazione di un Flow OAuth
Il tipo di autenticazione OAuth consente a un'estensione di implementare la logica personalizzata per il servizio.
A tale scopo, un'estensione fornirà funzioni per (restituzione dell'URI di autorizzazione per avviare il flusso
OAuth) e (scambio del codice di autorizzazione per StartLogin FinishLogin un token di accesso).
Facoltativamente, le estensioni possono implementare (scambiando un token di aggiornamento per un nuovo
token di accesso) e (che scadono anche i token di aggiornamento e di accesso Refresh Logout correnti).

NOTE
Power Query le estensioni vengono valutate nelle applicazioni in esecuzione nei computer client. I connettori dati non
devono usare segreti riservati nei flussi OAuth, perché gli utenti possono controllare l'estensione o il traffico di rete per
apprendere il segreto. Per altre informazioni dettagliate sulla fornitura di flussi che non si basano su segreti condivisi,
vedere proof key for Code Exchange by OAuth Public Clients RFC (Rfc dei client pubblici OAuth) (nota anche come PKCE).
Un'implementazione di esempio di questo flusso è disponibile nel sito GitHub web.

Esistono due set di firme di funzione OAuth. firma originale che contiene un numero minimo di parametri e una
firma avanzata che accetta parametri aggiuntivi. La maggior parte dei flussi OAuth può essere implementata
usando le firme originali. È anche possibile combinare e associare tipi di firma nell'implementazione. Le
chiamate di funzione sono corrispondenze in base al numero di parametri (e ai relativi tipi). I nomi dei parametri
non vengono presi in considerazione.
Per altri dettagli, vedere l'esempio github.
Firme OAuth originali

StartLogin = (dataSourcePath, state, display) => ...;

FinishLogin = (context, callbackUri, state) => ...;

Refresh = (dataSourcePath, refreshToken) => ...;

Logout = (accessToken) => ...;

Firme OAuth avanzate


Note sulle firme avanzate:
Tutte le firme accettano un clientApplication valore di record, riservato per un uso futuro.
Tutte le firme accettano un (detto anche dataSourcePath come nella maggior parte degli resourceUrl
esempi).
La Refresh funzione accetta un oldCredential parametro, ovvero il precedente record restituito dalla
funzione FinishLogin (o la chiamata precedente a Refresh ).

StartLogin = (clientApplication, dataSourcePath, state, display) => ...;

FinishLogin = (clientApplication, dataSourcePath, context, callbackUri, state) => ...;

Refresh = (clientApplication, dataSourcePath, oldCredential) => ...;

Logout = (clientApplication, dataSourcePath, accessToken) => ...;

Autenticazione di Azure Active Directory


Il Aad tipo di autenticazione è una versione specializzata di OAuth per Azure Active Directory. Usa lo stesso
client Azure AD client predefinito dei connettori Power Query che supportano l'autenticazione dell'account
dell'organizzazione.

NOTE
Se l'origine dati richiede ambiti diversi da o non è compatibile con l'uso di , è necessario user_impersonation usare il
tipo di autenticazione user_impersonation OAuth .
NOTE
Se si implementa il proprio flusso OAuth per Azure AD, gli utenti che hanno abilitato l'accesso condizionale per il tenant
potrebbero riscontrare problemi durante l'aggiornamento usando il Power BI servizio. Questo non influisce
sull'aggiornamento basato su gateway, ma influisce su un connettore certificato che supporta l'aggiornamento dal Power
BI servizio. Gli utenti potrebbero verificarsi un problema derivante dal connettore usando un'applicazione client pubblica
quando si configurano le credenziali basate sul Web tramite il Power BI servizio. Il token di accesso generato da questo
flusso verrà infine usato in un computer diverso (ovvero il servizio Power BI in un'istanza di Azure data center, non nella
rete aziendale) rispetto a quello usato per autenticare in origine (ovvero il computer dell'utente che configura le credenziali
dell'origine dati nella rete aziendale). Il tipo predefinito consente di risolvere questo problema usando un client Azure AD
diverso quando si configurano le credenziali nel Aad Power BI servizio. Questa opzione non sarà disponibile per i
connettori che usano il tipo OAuth di autenticazione.

La maggior parte dei connettori dovrà fornire valori per i AuthorizationUri campi Resource e . Entrambi i
campi possono essere text valori o una singola funzione di argomento che restituisce un oggetto text value .

AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize"

AuthorizationUri = (dataSourcePath) => FunctionThatDeterminesAadEndpointFromDataSourcePath(dataSourcePath)

Resource = "77256ee0-fe79-11ea-adc1-0242ac120002" // Azure AD resource value for your service - Guid or


URL

Resource = (dataSourcePath) => FunctionThatDeterminesResourceFromDataSourcePath(dataSourcePath)

I connettori che usano un identificatore basato su URI non devono fornire un Resource valore. Per impostazione
predefinita, il valore sarà uguale al percorso radice del parametro URI del connettore. Se la risorsa Azure AD
dell'origine dati è diversa dal valore di dominio (ad esempio, usa un GUID), è necessario Resource immettere un
valore.
Esempi di tipo di autenticazione Aad
In questo caso, l'origine dati supporta l'Azure AD cloud globale usando il tenant comune (nessun supporto di
Azure B2B).

Authentication = [
Aad = [
AuthorizationUri = "https://login.microsoftonline.com/common/oauth2/authorize",
Resource = "77256ee0-fe79-11ea-adc1-0242ac120002" // Azure AD resource value for your service - Guid
or URL
]
]

In questo caso, l'origine dati supporta l'individuazione dei tenant basata su OpenID Connessione (OIDC) o un
protocollo simile. Ciò consente al connettore di determinare l'endpoint Azure AD corretto da usare in base a uno
o più parametri nel percorso dell'origine dati. Questo approccio di individuazione dinamica consente al
connettore di supportare Azure B2B.
// Implement this function to retrieve or calculate the service URL based on the data source path parameters
GetServiceRootFromDataSourcePath = (dataSourcePath) as text => ...;

GetAuthorizationUrlFromWwwAuthenticate = (url as text) as text =>


let
// Sending an unauthenticated request to the service returns
// a 302 status with WWW-Authenticate header in the response. The value will
// contain the correct authorization_uri.
//
// Example:
// Bearer authorization_uri="https://login.microsoftonline.com/{tenant_guid}/oauth2/authorize"
responseCodes = {302, 401},
endpointResponse = Web.Contents(url, [
ManualCredentials = true,
ManualStatusHandling = responseCodes
])
in
if (List.Contains(responseCodes, Value.Metadata(endpointResponse)[Response.Status]?)) then
let
headers = Record.FieldOrDefault(Value.Metadata(endpointResponse), "Headers", []),
wwwAuthenticate = Record.FieldOrDefault(headers, "WWW-Authenticate", ""),
split = Text.Split(Text.Trim(wwwAuthenticate), " "),
authorizationUri = List.First(List.Select(split, each Text.Contains(_,
"authorization_uri=")), null)
in
if (authorizationUri <> null) then
// Trim and replace the double quotes inserted before the url
Text.Replace(Text.Trim(Text.Trim(Text.AfterDelimiter(authorizationUri, "=")), ","),
"""", "")
else
error Error.Record("DataSource.Error", "Unexpected WWW-Authenticate header format or
value during authentication."), [
#"WWW-Authenticate" = wwwAuthenticate
])
else
error Error.Unexpected("Unexpected response from server during authentication."));

<... snip ...>

Authentication = [
Aad = [
AuthorizationUri = (dataSourcePath) =>
GetAuthorizationUrlFromWwwAuthenticate(
GetServiceRootFromDataSourcePath(dataSourcePath)
),
Resource = "https://myAadResourceValue.com", // Azure AD resource value for your service - Guid or
URL
]
]

Percorsi delle origini dati


Il motore M identifica un'origine dati usando una combinazione dei relativi Tipi e Percorso. Quando viene
rilevata un'origine dati durante una valutazione della query, il motore M tenterà di trovare le credenziali
corrispondenti. Se non viene trovata alcuna credenziale, il motore restituisce un errore speciale che restituisce
una richiesta di credenziali Power Query.
Il valore Kind deriva dalla definizione del tipo di origine dati.
Il valore Path deriva dai parametri obbligatori della funzione dell'origine dati. I parametri facoltativi non
vengono fattoriati nell'identificatore del percorso dell'origine dati. Di conseguenza, tutte le funzioni dell'origine
dati associate a un tipo di origine dati devono avere gli stessi parametri. È presente una gestione speciale per le
funzioni che hanno un singolo parametro di tipo Uri.Type . Per informazioni dettagliate, vedere la sezione
seguente.
È possibile visualizzare un esempio di come vengono archiviate le credenziali nella finestra di dialogo
Impostazioni origine dati in Power BI Desktop. In questa finestra di dialogo il tipo è rappresentato da un'icona
e il valore Percorso viene visualizzato come testo.
NOTE
Se si modificano i parametri obbligatori della funzione origine dati durante lo sviluppo, le credenziali archiviate in
precedenza non funzioneranno più perché i valori del percorso non corrispondono più. È necessario eliminare le credenziali
archiviate ogni volta che si modificano i parametri della funzione dell'origine dati. Se vengono trovate credenziali
incompatibili, è possibile che venga visualizzato un errore in fase di esecuzione.

Formato percorso origine dati


Il valore Path per un'origine dati deriva dai parametri obbligatori della funzione dell'origine dati. I parametri
obbligatori possono essere esclusi dal percorso aggiungendo ai metadati della funzione
DataSource.Path = false ( vedere diseguito).

Per impostazione predefinita, è possibile visualizzare il valore stringa effettivo nella finestra di dialogo
Impostazioni origine dati in Power BI Desktop e nella richiesta di credenziali. Se la definizione Tipo origine dati
include un Label valore, verrà invece visualizzato il valore dell'etichetta.
Ad esempio, la funzione dell'origine dati nell'esempio HelloWorldWithDocs ha la firma seguente:

HelloWorldWithDocs.Contents = (message as text, optional count as number) as table => ...

La funzione ha un singolo parametro obbligatorio ( ) di tipo e verrà usata message text per calcolare il
percorso dell'origine dati. Il parametro facoltativo ( count ) verrà ignorato. Verrà visualizzato il percorso
Richiesta di credenziali:
Interfaccia utente delle impostazioni dell'origine dati:

Quando viene definito un valore Label, il valore del percorso dell'origine dati non viene visualizzato:

NOTE
È attualmente consigliabile non includere un'etichetta per l'origine dati se la funzione ha parametri obbligatori, in quanto
gli utenti non saranno in grado di distinguere le diverse credenziali immesse. Si spera di migliorare questa situazione in
futuro, ovvero consentire ai connettori di dati di visualizzare i propri percorsi di origine dati personalizzati.

Esclusione dei parametri obbligatori dal percorso dell'origine dati


Se si vuole che un parametro di funzione sia obbligatorio, ma non sia incluso come parte del percorso
dell'origine dati, è possibile aggiungere ai metadati della documentazione DataSource.Path = false della
funzione. Questa proprietà può essere aggiunta a uno o più parametri per la funzione. Questo campo rimuove il
valore dal percorso dell'origine dati,ovvero non verrà più passato alla funzione, quindi deve essere usato solo
per i parametri che non sono necessari per identificare l'origine dati o distinguere le credenziali TestConnection
utente.
Ad esempio, il connettore nell'esempio HelloWorldWithDocs richiederebbe credenziali diverse per valori
message diversi. L'aggiunta al parametro lo rimuove dal calcolo del percorso dell'origine dati, rendendo in
effetti il DataSource.Path = false message connettore un "singleton". Tutte le chiamate a vengono considerate
come la stessa origine dati e l'utente fornirà HelloWorldWithDocs.Contents le credenziali una sola volta.

HelloWorldType = type function (


message as (type text meta [
DataSource.Path = false,
Documentation.FieldCaption = "Message",
Documentation.FieldDescription = "Text to display",
Documentation.SampleValues = {"Hello world", "Hola mundo"}
]),
optional count as (type number meta [
Documentation.FieldCaption = "Count",
Documentation.FieldDescription = "Number of times to repeat the message",
Documentation.AllowedValues = { 1, 2, 3 }
]))
as table meta [
Documentation.Name = "Hello - Name",
Documentation.LongDescription = "Hello - Long Description",
Documentation.Examples = {[
Description = "Returns a table with 'Hello world' repeated 2 times",
Code = "HelloWorldWithDocs.Contents(""Hello world"", 2)",
Result = "#table({""Column1""}, {{""Hello world""}, {""Hello world""}})"
],[
Description = "Another example, new message, new count!",
Code = "HelloWorldWithDocs.Contents(""Goodbye"", 1)",
Result = "#table({""Column1""}, {{""Goodbye""}})"
]}
];

Funzioni con un parametro Uri


Poiché le origini dati con un identificatore basato su URI sono così comuni, è presente una gestione speciale
nell'interfaccia utente di Power Query quando si gestiscono percorsi di origine dati basati su URI. Quando viene
rilevata un'origine dati basata su URI, la finestra di dialogo delle credenziali fornisce un elenco a discesa che
consente all'utente di selezionare il percorso di base, anziché il percorso completo (e tutti i percorsi compresi
tra).

Come è un tipo ascritto anziché un tipo primitivo nel linguaggio M, è necessario usare la funzione Uri.Type
Value.ReplaceType per indicare che il parametro di testo deve essere considerato come URI.

shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.Type) as any);

Tipi aggiuntivi di autenticazione


Per informazioni su altri tipi di autenticazione non trattati in questo articolo, ad esempio l'accesso Single Sign-
On basato su Kerberos, vedere l'articolo sulle funzionalità aggiuntive del connettore per altre informazioni.
Gestione dell'accesso ai dati
07/12/2021 • 3 minutes to read

Funzioni dell'origine dati


Un connettore dati esegue il wrapping e personalizza il comportamento di una funzione dell'origine dati nella
libreria M. Ad esempio, un'estensione per un'API REST userebbe la funzione Web.Contents per effettuare
richieste HTTP. Attualmente è stato abilitato un set limitato di funzioni dell'origine dati per supportare
l'estendibilità.
Web.Contents
OData.Feed
Odbc.DataSource
AdoDotNet.DataSource
OleDb.DataSource
Esempio:

[DataSource.Kind="HelloWorld", Publish="HelloWorld.Publish"]
shared HelloWorld.Contents = (optional message as text) =>
let
message = if (message <> null) then message else "Hello world"
in
message;

Tipo di origine dati


Le funzioni contrassegnate come nell'estensione possono essere associate a un'origine dati specifica includendo
un record di metadati nella funzione con il nome di shared un record di definizione DataSource.Kind
dell'origine dati. Il record Origine dati definisce i tipi di autenticazione supportati dall'origine dati e le
informazioni di personalizzazione di base, ad esempio il nome visualizzato o l'etichetta. Il nome del record
diventa identificatore univoco.
Le funzioni associate a un'origine dati devono avere gli stessi parametri di funzione obbligatori (inclusi il nome,
il tipo e l'ordine). Le funzioni per un tipo di origine dati specifico possono usare solo le credenziali associate a
tale tipo. Le credenziali vengono identificate in fase di esecuzione eseguendo una ricerca basata sulla
combinazione dei parametri obbligatori della funzione. Per altre informazioni sull'identificazione delle
credenziali, vedere Percorsi dell'origine dati.
Esempio:

HelloWorld = [
Authentication = [
Implicit = []
],
Label = Extension.LoadString("DataSourceLabel")
];

Proprietà
Nella tabella seguente sono elencati i campi per il record di definizione dell'origine dati.
CAMPO T IP O DET TA GL I

Autenticazione record Specifica uno o più tipi di


autenticazione supportati dall'origine
dati. È necessario almeno un tipo. Ogni
tipo verrà visualizzato come opzione
nella richiesta Power Query credenziali.
Per altre informazioni, vedere Tipi di
autenticazione.

Label text (facoltativo) Nome visualizzato


descrittivo per questa estensione nelle
finestre di dialogo delle credenziali.

SupportsEncryption logical (facoltativo) Se true, l'interfaccia


utente presenterà l'opzione per
connettersi all'origine dati usando una
connessione crittografata. Viene in
genere usato per le origini dati con un
meccanismo di fallback non
crittografato (in genere odbc o
ADO.NET origini basate su dati).

Pubblicare nell'interfaccia utente


Analogamente al record di definizione (Origine dati)[#data-source-kind], il record Pubblica fornisce
all'interfaccia utente di Power Query le informazioni necessarie per esporre questa estensione nella finestra di
dialogo Ottieni dati.
Esempio:

HelloWorld.Publish = [
Beta = true,
ButtonText = { Extension.LoadString("FormulaTitle"), Extension.LoadString("FormulaHelp") },
SourceImage = HelloWorld.Icons,
SourceTypeImage = HelloWorld.Icons
];

HelloWorld.Icons = [
Icon16 = { Extension.Contents("HelloWorld16.png"), Extension.Contents("HelloWorld20.png"),
Extension.Contents("HelloWorld24.png"), Extension.Contents("HelloWorld32.png") },
Icon32 = { Extension.Contents("HelloWorld32.png"), Extension.Contents("HelloWorld40.png"),
Extension.Contents("HelloWorld48.png"), Extension.Contents("HelloWorld64.png") }
];

Proprietà
Nella tabella seguente sono elencati i campi per il record Publish.

CAMPO T IP O DET TA GL I

ButtonText list Elenco di elementi di testo che


verranno visualizzati accanto all'icona
dell'origine dati nella Power BI di
dialogo Ottieni dati.
CAMPO T IP O DET TA GL I

Category text Posizione in cui deve essere visualizzata


l'estensione nella finestra di dialogo
Ottieni dati. Attualmente gli unici
valori di categoria con consegna
speciale sono Azure e Database .
Tutti gli altri valori verranno visualizzati
nella categoria Altro.

Beta logical (facoltativo) Se impostata su true,


l'interfaccia utente visualizza un
identificatore di anteprima/beta
accanto al nome del connettore e una
finestra di dialogo di avviso che indica
che l'implementazione del connettore è
soggetta a modifiche di rilievo.

LearnMoreUrl text (facoltativo) URL del sito Web


contenente altre informazioni
sull'origine dati o sul connettore.

SupportsDirectQuery logical (facoltativo) Abilita Direct Query per


l'estensione.
Attualmente è suppor tato solo
per le estensioni ODBC.

SourceImage record (facoltativo) Record contenente un


elenco di immagini binarie (derivate dal
file di estensione usando il metodo
Extension.Contents). Il record
contiene due campi (Icon16, Icon32),
ognuno con un proprio elenco. Ogni
icona deve avere dimensioni diverse.

SourceTypeImage record (facoltativo) Simile a SourceImage, ad


eccezione della convenzione per molti
connettori out-of-the-box è quella di
visualizzare un'icona del foglio con
l'icona specifica dell'origine nell'angolo
in basso a destra. Avere un set diverso
di icone per SourceTypeImage è
facoltativo, molte estensioni riutilizzano
semplicemente lo stesso set di — icone
per entrambi i campi.
Abilitazione di Direct Query per un connettore
basato su ODBC
07/12/2021 • 23 minutes to read

Panoramica
L'uso della funzione Odbc.DataSource incorporata di M è il modo consigliato per creare connettori
personalizzati per le origini dati con un driver ODBC esistente e/o supportano una sintassi SQL query. Il
wrapping della funzione Odbc.DataSource consentirà al connettore di ereditare il comportamento predefinito di
ripiegamento delle query in base alle funzionalità segnalate dal driver. Questo consentirà al motore M di
generare istruzioni SQL in base ai filtri e ad altre trasformazioni definite dall'utente all'interno dell'esperienza
Power Query, senza dover fornire questa logica all'interno del connettore stesso.
Le estensioni ODBC possono facoltativamente abilitare la modalità Direct Query, consentendo Power BI
generare dinamicamente query in fase di esecuzione senza pre-memorizzare nella cache il modello di dati
dell'utente.

NOTE
L'abilitazione del supporto di Direct Query aumenta il livello di difficoltà e complessità del connettore. Quando Direct
Query è abilitato, Power BI il motore M non compenserà le operazioni di cui non è possibile eseguire completamente il
push nell'origine dati sottostante.

Questa sezione si basa sui concetti presentati nelle informazioni di riferimento sull'estendibilità M e presuppone
familiarità con la creazione di un connettore dati di base.
Vedere l'esempio SqlODBC per la maggior parte degli esempi di codice nelle sezioni seguenti. Altri esempi sono
disponibili nella directory degli esempi ODBC.

Funzioni di estendibilità ODBC


Il motore M fornisce due funzioni di origine dati odbc correlate: Odbc.DataSourcee Odbc.Query.
La funzione Odbc.DataSource fornisce una tabella di navigazione predefinita con tutti i database, le tabelle e le
viste del sistema, supporta la visualizzazione delle query e consente una gamma di opzioni di personalizzazione.
La maggior parte delle estensioni basate su ODBC userà questa funzione come funzione di estendibilità
primaria. La funzione accetta due argomenti una stringa di connessione — e un record di opzioni per fornire
sostituzioni del comportamento.
La funzione Odbc.Query consente di eseguire SQL istruzioni tramite un driver ODBC. Funge da pass-through
per l'esecuzione di query. A differenza della funzione Odbc.DataSource, non fornisce la funzionalità di folding
delle query e richiede che SQL query siano fornite dal connettore (o dall'utente finale). Quando si compila un
connettore personalizzato, questa funzione viene in genere usata internamente per eseguire query per
recuperare metadati che potrebbero non essere esposti tramite normali canali ODBC. La funzione accetta due
argomenti — una stringa di connessione e una SQL query.

Parametri per la funzione dell'origine dati


I connettori personalizzati possono accettare un numero qualsiasi di argomenti di funzione, ma per rimanere
coerenti con le funzioni dell'origine dati incorporate fornite con Power Query, sono consigliate le linee guida
seguenti:
Richiedere il set minimo di parametri usato per stabilire una connessione al server. Minore è il numero di
parametri che gli utenti finali devono fornire, più facile sarà l'uso del connettore.
Sebbene sia possibile definire parametri con un numero fisso di valori, ovvero un elenco a discesa
nell'interfaccia utente, i parametri vengono immessi prima dell'autenticazione dell'utente. Tutti i valori
individuabili a livello di codice dopo l'autenticazione dell'utente ,ad esempio il nome del catalogo o del
database, devono essere selezionabili tramite lo strumento di navigazione. Il comportamento predefinito
per la funzione Odbc.DataSource consiste nel restituire una tabella di navigazione gerarchica costituita da
nomi di catalogo (database), schema e tabella, anche se può essere sostituita all'interno del connettore.
Se si vuole che gli utenti sappiano in genere quali valori immettere per gli elementi selezionati dallo
strumento di navigazione (ad esempio il nome del database), rendere facoltativi questi parametri. I
parametri individuati a livello di codice non devono essere resi obbligatori.
L'ultimo parametro per la funzione deve essere un record facoltativo denominato "opzioni". Questo
parametro consente in genere agli utenti avanzati di impostare proprietà odbc comuni correlate (ad
esempio CommandTimeout), impostare override del comportamento specifici per il connettore e
consente l'estendibilità futura senza influire sulla compatibilità con le versioni precedenti per la funzione.
Gli argomenti correlati a sicurezza/credenziali NON DEVONO mai far parte dei parametri della funzione
dell'origine dati, poiché i valori immessi nella finestra di dialogo di connessione verranno resi persistenti
nella query dell'utente. I parametri correlati alle credenziali devono essere specificati come parte dei
metodi di autenticazione supportati dal connettore.
Per impostazione predefinita, tutti i parametri obbligatori per la funzione dell'origine dati vengono fattoriati nel
valore Percorso origine dati usato per identificare le credenziali utente.
Si noti che, mentre l'interfaccia utente per la funzione Odbc.DataSource predefinita fornisce un elenco a discesa
che consente all'utente di selezionare un DSN, questa funzionalità non è disponibile tramite estendibilità. Se la
configurazione dell'origine dati è sufficientemente complessa da richiedere una finestra di dialogo di
configurazione completamente personalizzabile, è consigliabile richiedere agli utenti finali di pre-configurare un
DSN di sistema e impostare la funzione sul nome DSN come campo di testo.

Parametri per Odbc.DataSource


La funzione Odbc.DataSource accetta due parametri connectionString per il driver e un record di opzioni che
consente di — eseguire l'override di vari comportamenti del driver. Tramite il record delle opzioni è possibile
eseguire l'override delle funzionalità e di altre informazioni segnalate dal driver, controllare il comportamento
dello strumento di navigazione e influire SQL query generate dal motore M.
I campi dei record delle opzioni supportate rientrano in due categorie, quelle pubbliche/sempre disponibili e
quelle disponibili solo in un contesto — di estendibilità.
Nella tabella seguente vengono descritti i campi pubblici nel record delle opzioni.

CAMPO DESC RIZ IO N E

CommandTimeout Valore di durata che controlla per quanto tempo è


consentita l'esecuzione della query sul lato server prima
che venga annullata.
Impostazione predefinita: 10 minuti
CAMPO DESC RIZ IO N E

ConnectionTimeout Valore di durata che controlla il tempo di attesa prima di


abbandonare un tentativo di stabilire una connessione al
server.
Impostazione predefinita: 15 secondi

CreateNavigationProperties Valore logico che imposta se generare le proprietà di


navigazione nelle tabelle restituite. Le proprietà di
navigazione sono basate sulle relazioni di chiave esterna
segnalate dal driver e vengono visualizzate come
colonne "virtuali" che possono essere espanse nell'editor
di query, creando il join appropriato.
Se il calcolo delle dipendenze di chiave esterna è
un'operazione costosa per il driver, è possibile impostare
questo valore su false.
Predefinito: true

HierarchicalNavigation Valore logico che imposta se visualizzare le tabelle


raggruppate in base ai relativi nomi di schema. Se
impostata su false, le tabelle verranno visualizzate in un
elenco semplice in ogni database.
Valore predefinito: false

SqlCompatibleWindowsAuth Valore logico che determina se generare una stringa SQL


Server di connessione compatibile quando si usa
Windows authentication — Trusted_Connection=Sì.
Se il driver supporta l Windows authentication, ma
richiede impostazioni aggiuntive o alternative nella
stringa di connessione, è necessario impostare questo
valore su false e usare il campo di record dell'opzione
CredentialConnectionString descritto di seguito.
Predefinito: true

Nella tabella seguente vengono descritti i campi di record delle opzioni disponibili solo tramite estendibilità. I
campi che non sono valori letterali semplici sono descritti nelle sezioni successive.

CAMPO DESC RIZ IO N E

AstVisitor Record contenente uno o più override per controllare la


generazione SQL query. L'utilizzo più comune di questo
campo è fornire la logica per generare una clausola
LIMIT/OFFSET per i driver che non supportano TOP.
I campi includono:
Costante
LimitClause
Per altre informazioni, vedere la sezione AstVisitor.
CAMPO DESC RIZ IO N E

CancelQueryExplicitly Valore logico che indica al motore M di annullare in


modo esplicito tutte le chiamate in esecuzione tramite il
driver ODBC prima di terminare la connessione al server
ODBC.
Questo campo è utile in situazioni in cui l'esecuzione di
query viene gestita indipendentemente dalle connessioni
di rete al server, ad esempio in alcune distribuzioni
spark. Nella maggior parte dei casi, questo valore non
deve essere impostato perché la query nel server viene
annullata quando viene terminata la connessione di rete
al server.
Valore predefinito: false

ClientConnectionPooling Valore logico che abilita il pool di connessioni sul lato


client per il driver ODBC. La maggior parte dei driver
dovrà impostare questo valore su true.
Valore predefinito: false

CredentialConnectionString Valore di testo o record utilizzato per specificare le


proprietà della stringa di connessione correlate alle
credenziali.
Per altre informazioni, vedere la sezione Credenziali.

HideNativeQuery Valore logico che controlla se il connettore consente il


SQL native da parte di una query usando la funzione
Value.NativeQuery().
Nota: questa funzionalità non è attualmente esposta
nell'esperienza Power Query'utente. Gli utenti dovranno
modificare manualmente le query per sfruttare questa
funzionalità.
Valore predefinito: false

ImplicitTypeConversions Valore di tabella contenente conversioni di tipi implicite


supportate dal driver o dal server back-end. I valori in
questa tabella sono additivi alle conversioni segnalate
dal driver stesso.
Questo campo viene in genere usato insieme al campo
SQLGetTypeInfo quando si esegue l'override delle
informazioni sul tipo di dati segnalate dal driver.
Per altre informazioni, vedere la sezione
ImplicitTypeConversions.
CAMPO DESC RIZ IO N E

OnError Funzione di gestione degli errori che riceve un


parametro errorRecord di tipo record.
Gli usi comuni di questa funzione includono la gestione
degli errori di connessione SSL, la fornitura di un
collegamento di download se il driver non viene trovato
nel sistema e la segnalazione di errori di autenticazione.
Per altre informazioni, vedere la sezione OnError.

SoftNumbers Consente al motore M di selezionare un tipo di dati


compatibile quando la conversione tra due tipi numerici
specifici non è dichiarata come supportata nelle
funzionalità SQL_CONVERT_*.
Valore predefinito: false

SqlCapabilities Record che fornisce varie sostituzioni delle funzionalità


del driver e un modo per specificare le funzionalità non
espresse tramite ODBC 3.8.
Per altre informazioni, vedere la sezione SqlCapabilities.

SQLColumns Funzione che consente di modificare i metadati della


colonna restituiti dalla funzione SQLColumns.
Per altre informazioni, vedere la sezione SQLColumns.

SQLGetFunctions Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetFunctions.
Un uso comune di questo campo è disabilitare l'uso
dell'associazione di parametri o specificare che le query
generate devono usare CAST anziché CONVERT.
Per altre informazioni, vedere la sezione
SQLGetFunctions.

SQLGetInfo Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetInfo.
Per altre informazioni, vedere la sezione SQLGetInfo.
CAMPO DESC RIZ IO N E

SQLGetTypeInfo Tabella o funzione che restituisce una tabella che esegue


l'override delle informazioni sul tipo restituite da
SQLGetTypeInfo.
Quando il valore è impostato su una tabella, il valore
sostituisce completamente le informazioni sul tipo
segnalate dal driver. SQLGetTypeInfo non verrà
chiamato.
Quando il valore è impostato su una funzione, la
funzione riceverà il risultato della chiamata originale a
SQLGetTypeInfo, consentendo di modificare la tabella.
Questo campo viene in genere usato in caso di mancata
corrispondenza tra i tipi di dati segnalati da
SQLGetTypeInfo e SQLColumns.
Per altre informazioni, vedere la sezione SQLGetTypeInfo.

SQLTables Funzione che consente di modificare i metadati della


tabella restituiti da una chiamata a SQLTables.
Per altre informazioni, vedere la sezione SQLTables.

TollerConcatOverflow Consente la concatenazione dei valori di testo anche se il


risultato potrebbe essere troncato per rientrare
nell'intervallo di un tipo disponibile.
Ad esempio, quando si concatena un campo
VARCHAR(4000) con un campo VARCHAR(4000) in un
sistema che supporta una dimensione MASSIMA DI
VARCHAR pari a 4000 e nessun tipo CLOB, la
concatenazione verrà troncato anche se il risultato
potrebbe essere troncato.
Valore predefinito: false

UseEmbeddedDriver (uso interno): Valore logico che controlla se il driver


ODBC deve essere caricato da una directory locale
(utilizzando le nuove funzionalità definite nella specifica
ODBC 4.0). Questa impostazione viene in genere
impostata solo dai connettori creati da Microsoft forniti
con Power Query.
Se impostata su false, verrà utilizzata la gestione driver
ODBC di sistema per individuare e caricare il driver.
La maggior parte dei connettori non deve impostare
questo campo.
Valore predefinito: false

Override di AstVisitor
Il campo AstVisitor viene impostato tramite il record di opzioni Odbc.DataSource. Viene usato per modificare le
SQL generate per scenari di query specifici.
NOTE
I driver che supportano le clausole e (anziché ) vogliono fornire LIMIT OFFSET un override TOP LimitClause per
AstVisitor.

Costante
L'impostazione di un override per questo valore è stata deprecata e potrebbe essere rimossa dalle
implementazioni future.
LimitClause
Questo campo è una funzione che riceve due argomenti (skip, take) e restituisce un record con due campi di
testo Int64.Type (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

Il parametro skip è il numero di righe da ignorare, ovvero l'argomento per OFFSET. Se non viene specificato un
offset, il valore skip sarà Null. Se il driver supporta , ma non supporta , la funzione LimitClause deve restituire un
errore non implementata (...) quando skip è LIMIT OFFSET maggiore di 0.
Il parametro take è il numero di righe da prendere, ovvero l'argomento per LIMIT.
Il Text campo del risultato contiene il SQL da aggiungere alla query generata.
Il Location campo specifica dove inserire la clausola . Nella tabella seguente vengono descritti i valori
supportati.

VA LO RE DESC RIZ IO N E ESEM P IO

AfterQuerySpecification La clausola LIMIT viene inserita alla SELECT a, b, c


fine del SQL.
Tabella FROM
Si tratta della sintassi LIMIT più
comunemente supportata. WHERE a > 10
LIMITE 5

BeforeQuerySpecification La clausola LIMIT viene inserita prima LIMITE DI 5 RIGHE


dell'istruzione SQL generata.
SELECT a, b, c
Tabella FROM
WHERE a > 10

AfterSelect LIMIT va dopo l'istruzione SELECT e SELECT DISTINCT LIMIT 5 a, b, c


dopo qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

AfterSelectBeforeModifiers LIMIT va dopo l'istruzione SELECT, ma SELECT LIMIT 5 DISTINCT a, b, c


prima di qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che prevede una
clausola LIMIT, con un offset facoltativo, nel formato seguente: [OFFSET <offset> ROWS] LIMIT <row_count>
LimitClause = (skip, take) =>
let
offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
in
[
Text = Text.Format("#{0} #{1}", {offset, limit}),
Location = "AfterQuerySpecification"
]

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che supporta LIMIT, ma
non OFFSET. Formato: LIMIT <row_count> .

LimitClause = (skip, take) =>


if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]

Override di SqlCapabilities
CAMPO DET TA GL I

FractionalSecondsScale Valore numerico compreso tra 1 e 7 che indica il numero


di posizioni decimali supportate per i valori dei
millisecondi. Questo valore deve essere impostato dai
connettori che vogliono abilitare la query di folding sui
valori datetime.
Impostazione predefinita: null

PrepareStatements Valore logico che indica che le istruzioni devono essere


preparate utilizzando SQLPrepare.
Valore predefinito: false

SupportsTop Valore logico che indica che il driver supporta la clausola


TOP per limitare il numero di righe restituite.
Valore predefinito: false

StringLiteralEscapeCharacters Elenco di valori di testo che specificano i caratteri da


usare per l'escape di valori letterali stringa ed espressioni
LIKE.
Ex. {""}
Impostazione predefinita: null
CAMPO DET TA GL I

SupportsDerivedTable Valore logico che indica che il driver supporta le tabelle


derivate (sub-select).
Si presuppone che questo valore sia true per i driver che
impostano il livello di conformità su
SQL_SC_SQL92_FULL (segnalato dal driver o sottoposto
a override con l'impostazione Sql92Conformance (vedere
di seguito). Per tutti gli altri livelli di conformità, il valore
predefinito è false.
Se il driver non segnala il livello SQL_SC_SQL92_FULL
conformità, ma supporta le tabelle derivate, impostare
questo valore su true.
Si noti che il supporto delle tabelle derivate è necessario
per molti scenari di Direct Query.

SupportsNumericLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali numerici. Se impostato su false, i valori
numerici verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

SupportsStringLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali stringa. Se impostato su false, i valori
stringa verranno sempre specificati usando l'associazione
di parametri.
Valore predefinito: false

SupportsOdbcDateLiterals Valore logico che indica se il valore SQL deve includere


valori letterali data. Se impostato su false, i valori di data
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimeLiterals Valore logico che indica se il valore SQL deve includere


valori letterali di ora. Se impostato su false, i valori di ora
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimestampLiterals Valore logico che indica se il valore SQL deve includere


valori letterali timestamp. Se impostato su false, i valori
timestamp verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

Override di SQLColumns
SQLColumns è un gestore di funzioni che riceve i risultati di una chiamata ODBC a SQLColumns. Il parametro
source contiene una tabella con le informazioni sul tipo di dati. Questo override viene in genere usato per
correggere le mancate corrispondenze dei tipi di dati tra le chiamate SQLGetTypeInfo a e SQLColumns .
Per informazioni dettagliate sul formato del parametro della tabella di origine, vedere Funzione SQLColumns.
Override di SQLGetFunctions
Questo campo viene usato per eseguire l'override dei valori SQLFunctions restituiti da un driver ODBC.
Contiene un record i cui nomi di campo sono uguali alle costanti FunctionId definite per la funzione ODBC
SQLGetFunctions. Le costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC.

CAMPO DET TA GL I

SQL_CONVERT_FUNCTIONS Indica le funzioni supportate durante le conversioni di tipi.


Per impostazione predefinita, il motore M tenterà di usare la
funzione CONVERT. I driver che preferiscono l'uso di CAST
possono eseguire l'override di questo valore per segnalare
che solo SQL_FN_CVT_CAST (valore numerico di 0x2) è
supportato.

SQL_API_SQLBINDCOL Valore logico (true/false) che indica se il motore Mashup


deve usare l'API SQLBindCol durante il recupero dei dati.
Se impostato su false, viene invece usato SQLGetData.
Valore predefinito: false

Il frammento di codice seguente fornisce un esempio che indica in modo esplicito al motore M di usare CAST
anziché CONVERT.

SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

Override di SQLGetInfo
Questo campo viene usato per eseguire l'override dei valori SQLGetInfo restituiti da un driver ODBC. Contiene
un record i cui campi sono nomi uguali alle costanti InfoType definite per la funzione ODBC SQLGetInfo. Le
costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC. L'elenco completo degli
InfoType verificati è disponibile nei file di traccia del motore Mashup.
La tabella seguente contiene le proprietà SQLGetInfo comunemente sottoposte a override:

CAMPO DET TA GL I

SQL_SQL_CONFORMANCE Valore intero che indica il livello di SQL-92 supportato


dal driver:
(1) SQL_SC_SQL92_ENTRY = Livello di SQL-92 conforme.
(2) SQL_SC_FIPS127_2_TRANSITIONAL = conforme al
livello di transizione FIPS 127-2.
(4) SQL_SC_ SQL92_INTERMEDIATE = livello intermedio
SQL-92.
(8) SQL_SC_SQL92_FULL = Conforme al livello SQL-92.
Si noti che in Power Query, il connettore verrà usato in
modalità sola lettura. La maggior parte dei driver vuole
segnalare un SQL_SC_SQL92_FULL di conformità ed
eseguire l'override di un comportamento di generazione
SQL specifico usando le proprietà SQLGetInfo e
SQLGetFunctions.
CAMPO DET TA GL I

SQL_SQL92_PREDICATES Maschera di bit che enumera i predicati supportati in


un'istruzione SELECT, come definito in SQL-92.
Vedere le SQL_SP_* nella specifica ODBC.

SQL_AGGREGATE_FUNCTIONS Maschera di bit che enumera il supporto per le funzioni


di aggregazione.
SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM
Vedere le SQL_AF_* nella specifica ODBC.

SQL_GROUP_BY Valore intero che specifica la relazione tra le colonne


nella clausola GROUP BY e le colonne non aggregate
nell'elenco di selezione:
SQL_GB_COLLATE = È possibile specificare una clausola
COLLATE alla fine di ogni colonna di raggruppamento.
SQL_GB_NOT_SUPPORTED = Le clausole GROUP BY non
sono supportate.
SQL_GB_GROUP_BY_EQUALS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Non può contenere
altre colonne. Ad esempio, SELECT DEPT, MAX(SALARY)
FROM EMPLOYEE GROUP BY DEPT.
SQL_GB_GROUP_BY_CONTAINS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Può contenere
colonne non presenti nell'elenco di selezione. Ad
esempio, SELECT DEPT, MAX(SALARY) FROM EMPLOYEE
GROUP BY DEPT, AGE.
SQL_GB_NO_RELATION = Le colonne nella clausola
GROUP BY e nell'elenco di selezione non sono correlate.
Il significato delle colonne non raggruppate e non
aggregate nell'elenco di selezione dipende dall'origine
dati. Ad esempio, SELECT DEPT, SALARY FROM
EMPLOYEE GROUP BY DEPT, AGE.
Vedere le SQL_GB_* nella specifica ODBC.

La funzione helper seguente può essere usata per creare valori di maschera di bit da un elenco di valori integer:
Flags = (flags as list) =>
let
Loop = List.Generate(
()=> [i = 0, Combined = 0],
each [i] < List.Count(flags),
each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
each [Combined]),
Result = List.Last(Loop, 0)
in
Result;

Override di SQLGetTypeInfo
SQLGetTypeInfo può essere specificato in due modi:

Valore table fisso che contiene le stesse informazioni sul tipo di una chiamata ODBC a SQLGetTypeInfo .
Funzione che accetta un argomento table e restituisce una tabella. L'argomento conterrà i risultati originali
della chiamata ODBC a SQLGetTypeInfo . L'implementazione della funzione può modificare o aggiungere a
questa tabella.
Il primo approccio viene usato per eseguire completamente l'override dei valori restituiti dal driver ODBC. Il
secondo approccio viene usato se si desidera aggiungere o modificare questi valori.
Per informazioni dettagliate sul formato del parametro di tabella dei tipi e sul valore restituito previsto, vedere le
informazioni di riferimento sulla funzione SQLGetTypeInfo.
SQLGetTypeInfo con una tabella statica
Il frammento di codice seguente fornisce un'implementazione statica per SQLGetTypeInfo.

SQLGetTypeInfo = #table(
{ "TYPE_NAME", "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",
"NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX",
"INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

{ "char", 1, 65535, "'", "'", "max. length",


1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "int8", -5, 19, "'", "'", null,
1, 0, 2, 0, 10, 0,
"int8", 0, 0, -5, null, 2,
0, 0 },
{ "bit", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "bool", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "date", 9, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "numeric", 3, 28, null, null, null,
1, 0, 2, 0, 0, 0,
"numeric", 0, 0, 2, null, 10,
0, 0 },
{ "float8", 8, 15, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "float8", 6, 17, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "uuid", -11, 37, null, null, null,
1, 0, 2, null, 0, null,
"uuid", null, null, -11, null, null,
0, 0 },
{ "int4", 4, 10, null, null, null,
1, 0, 2, 0, 0, 0,
"int4", 0, 0, 4, null, 2,
0, 0 },
{ "text", -1, 65535, "'", "'", null,
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "lo", -4, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"lo", null, null, -4, null, null,
0, 0 },
{ "numeric", 2, 28, null, null, "precision, scale",
1, 0, 2, 0, 10, 0,
"numeric", 0, 6, 2, null, 10,
0, 0 },
{ "float4", 7, 9, null, null, null,
1, 0, 2, 0, 10, 0,
"float4", null, null, 7, null, 2,
0, 0 },
{ "int2", 5, 19, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "int2", -6, 5, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "timestamp", 11, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "date", 91, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "timestamp", 93, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "bytea", -3, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"bytea", null, null, -3, null, null,
0, 0 },
{ "varchar", 12, 65535, "'", "'", "max. length",
1, 0, 2, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "char", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "text", -10, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "varchar", -9, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "bpchar", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
1, 1, 3, null, 0, null,
"bpchar", null, null, -9, null, null,
0, 0 } }
);

SQLGetTypeInfo con una funzione


I frammenti di codice seguenti bpchar accodare il tipo ai tipi esistenti restituiti dal driver.

SQLGetTypeInfo = (types as table) as table =>


let
newTypes = #table(
{
"TYPE_NAME",
"DATA_TYPE",
"COLUMN_SIZE",
"LITERAL_PREF",
"LITERAL_SUFFIX",
"CREATE_PARAS",
"NULLABLE",
"CASE_SENSITIVE",
"SEARCHABLE",
"UNSIGNED_ATTRIBUTE",
"FIXED_PREC_SCALE",
"AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME",
"MINIMUM_SCALE",
"MAXIMUM_SCALE",
"SQL_DATA_TYPE",
"SQL_DATETIME_SUB",
"NUM_PREC_RADIX",
"INTERNAL_PRECISION",
"USER_DATA_TYPE"
},
// we add a new entry for each type we want to add
{
{
"bpchar",
-8,
65535,
"'",
"'",
"max. length",
1,
1,
3,
null,
0,
null,
"bpchar",
null,
null,
-9,
null,
null,
0,
0
}
}),
append = Table.Combine({types, newTypes})
in
append;

Impostazione della stringa di connessione


La stringa di connessione per il driver ODBC viene impostata usando il primo argomento per le funzioni
Odbc.DataSource e/o Odbc.Query. Il valore può essere testo o un record M. Quando si usa il record, ogni campo
nel record diventerà una proprietà nella stringa di connessione. Tutte le stringhe di connessione richiedono un
campo Driver (o un campo DSN) se si richiede agli utenti di pre-configurare un DSN a livello di sistema. Le
proprietà correlate alle credenziali verranno impostate separatamente (vedere di seguito). Altre proprietà
saranno specifiche del driver.
Il frammento di codice seguente illustra la definizione di una nuova funzione dell'origine dati, la creazione del
record ConnectionString e la chiamata della funzione Odbc.DataSource.

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
let
ConnectionString = [
Driver = "SQL Server Native Client 11.0",
Server = server,
MultiSubnetFailover = "Yes",
ApplicationIntent = "ReadOnly",
APP = "PowerBICustomConnector"
],
OdbcDatasource = Odbc.DataSource(ConnectionString)
in
OdbcDatasource;

Risoluzione dei problemi e test


Per abilitare la traccia in Power BI Desktop:
1. Passare a File > Opzioni e impostazioni > Opzioni .
2. Selezionare la scheda Diagnostica.
3. Selezionare l'opzione Abilita traccia.
4. Selezionare il collegamento Apri car tella tracce (deve essere
%LOCALAPPDATA%/Microsoft/Power BI Desktop/Traces ).
5. Eliminare i file di traccia esistenti.
6. Eseguire i test.
7. Chiudere Power BI Desktop per assicurarsi che tutti i file di log siano scaricati su disco.
Ecco i passaggi che è possibile eseguire per i test iniziali in Power BI Desktop:
1. Chiudere Power BI Desktop.
2. Cancellare la directory di traccia.
3. Aprire Power BI desktop e abilitare la traccia.
4. Connessione all'origine dati e selezionare la modalità Direct Query.
5. Selezionare una tabella nello strumento di navigazione e selezionare Modifica.
6. Modificare la query in vari modi, tra cui:

Prendere le prime N righe (ad esempio, 10).


Impostare filtri di uguaglianza su tipi di dati diversi (int, string, bool e così via).
Impostare altri filtri di intervallo (maggiore di, minore di).
Filtrare in base a NULL/NOT NULL.
Consente di selezionare un set secondario di colonne.
Aggregazione/Raggruppamento per diverse combinazioni di colonne.
Aggiungere una colonna calcolata da altre colonne ([C] = [A] + [B]).
Ordinare in base a una colonna, più colonne. 7. Le espressioni che non vengono rilevate verranno
restituite in una barra di avviso. Prendere nota dell'errore, rimuovere il passaggio e passare al passaggio
test case. I dettagli sulla causa dell'errore devono essere generati nei log di traccia. 8. Chiudere Power BI
Desktop. 9. Copiare i file di traccia in una nuova directory. 10. Usare la cartella di Power BI cartella di
lavoro consigliata per analizzare i file di traccia.

Dopo aver creato query semplici, è possibile provare gli scenari di Direct Query, ad esempio la creazione di
report nelle visualizzazioni report. Le query generate in modalità Direct Query saranno notevolmente più
complesse, ovvero l'uso di sub-select, istruzioni COALESCE e aggregazioni.
Concatenazione di stringhe in modalità Direct Query
Il motore M esegue la convalida dei limiti delle dimensioni del tipo di base come parte della logica di folding
della query. Se si riceve un errore di tipo folding quando si tenta di concatenare due stringhe che
potenzialmente superano le dimensioni massime del tipo di database sottostante:
1. Assicurarsi che il database sia in grado di supportare la conversione in tipi CLOB quando si verifica l'overflow
concat della stringa.
2. Impostare TolerateConcatOverflow l'opzione per Odbc.DataSource su true .

La funzione DAX CONCATENATE non è attualmente supportata dalle Power Query/ODBC. Gli autori di
estensioni devono assicurarsi che la concatenazione delle stringhe funzioni tramite l'editor di query
aggiungendo colonne calcolate ( [stringCol1] & [stringCol2] ). Quando in futuro viene aggiunta la
possibilità di eseguire la fold dell'operazione CONCATENATE, l'operazione dovrebbe funzionare senza
problemi con le estensioni esistenti.
Abilitazione di Direct Query per un connettore
basato su ODBC
07/12/2021 • 23 minutes to read

Panoramica
L'uso della funzione Odbc.DataSource incorporata di M è il modo consigliato per creare connettori
personalizzati per le origini dati con un driver ODBC esistente e/o supportano una sintassi SQL query. Il
wrapping della funzione Odbc.DataSource consentirà al connettore di ereditare il comportamento predefinito di
ripiegamento delle query in base alle funzionalità segnalate dal driver. Questo consentirà al motore M di
generare istruzioni SQL in base ai filtri e ad altre trasformazioni definite dall'utente all'interno dell'esperienza
Power Query, senza dover fornire questa logica all'interno del connettore stesso.
Le estensioni ODBC possono facoltativamente abilitare la modalità Direct Query, consentendo Power BI
generare dinamicamente query in fase di esecuzione senza pre-memorizzare nella cache il modello di dati
dell'utente.

NOTE
L'abilitazione del supporto di Direct Query aumenta il livello di difficoltà e complessità del connettore. Quando Direct
Query è abilitato, Power BI il motore M non compenserà le operazioni di cui non è possibile eseguire completamente il
push nell'origine dati sottostante.

Questa sezione si basa sui concetti presentati nelle informazioni di riferimento sull'estendibilità M e presuppone
familiarità con la creazione di un connettore dati di base.
Vedere l'esempio SqlODBC per la maggior parte degli esempi di codice nelle sezioni seguenti. Altri esempi sono
disponibili nella directory degli esempi ODBC.

Funzioni di estendibilità ODBC


Il motore M fornisce due funzioni di origine dati odbc correlate: Odbc.DataSourcee Odbc.Query.
La funzione Odbc.DataSource fornisce una tabella di navigazione predefinita con tutti i database, le tabelle e le
viste del sistema, supporta la visualizzazione delle query e consente una gamma di opzioni di personalizzazione.
La maggior parte delle estensioni basate su ODBC userà questa funzione come funzione di estendibilità
primaria. La funzione accetta due argomenti una stringa di connessione — e un record di opzioni per fornire
sostituzioni del comportamento.
La funzione Odbc.Query consente di eseguire SQL istruzioni tramite un driver ODBC. Funge da pass-through
per l'esecuzione di query. A differenza della funzione Odbc.DataSource, non fornisce la funzionalità di folding
delle query e richiede che SQL query siano fornite dal connettore (o dall'utente finale). Quando si compila un
connettore personalizzato, questa funzione viene in genere usata internamente per eseguire query per
recuperare metadati che potrebbero non essere esposti tramite normali canali ODBC. La funzione accetta due
argomenti — una stringa di connessione e una SQL query.

Parametri per la funzione dell'origine dati


I connettori personalizzati possono accettare un numero qualsiasi di argomenti di funzione, ma per rimanere
coerenti con le funzioni dell'origine dati incorporate fornite con Power Query, sono consigliate le linee guida
seguenti:
Richiedere il set minimo di parametri usato per stabilire una connessione al server. Minore è il numero di
parametri che gli utenti finali devono fornire, più facile sarà l'uso del connettore.
Sebbene sia possibile definire parametri con un numero fisso di valori, ovvero un elenco a discesa
nell'interfaccia utente, i parametri vengono immessi prima dell'autenticazione dell'utente. Tutti i valori
individuabili a livello di codice dopo l'autenticazione dell'utente ,ad esempio il nome del catalogo o del
database, devono essere selezionabili tramite lo strumento di navigazione. Il comportamento predefinito
per la funzione Odbc.DataSource consiste nel restituire una tabella di navigazione gerarchica costituita da
nomi di catalogo (database), schema e tabella, anche se può essere sostituita all'interno del connettore.
Se si vuole che gli utenti sappiano in genere quali valori immettere per gli elementi selezionati dallo
strumento di navigazione (ad esempio il nome del database), rendere facoltativi questi parametri. I
parametri individuati a livello di codice non devono essere resi obbligatori.
L'ultimo parametro per la funzione deve essere un record facoltativo denominato "opzioni". Questo
parametro consente in genere agli utenti avanzati di impostare proprietà odbc comuni correlate (ad
esempio CommandTimeout), impostare override del comportamento specifici per il connettore e
consente l'estendibilità futura senza influire sulla compatibilità con le versioni precedenti per la funzione.
Gli argomenti correlati a sicurezza/credenziali NON DEVONO mai far parte dei parametri della funzione
dell'origine dati, poiché i valori immessi nella finestra di dialogo di connessione verranno resi persistenti
nella query dell'utente. I parametri correlati alle credenziali devono essere specificati come parte dei
metodi di autenticazione supportati dal connettore.
Per impostazione predefinita, tutti i parametri obbligatori per la funzione dell'origine dati vengono fattoriati nel
valore Percorso origine dati usato per identificare le credenziali utente.
Si noti che, mentre l'interfaccia utente per la funzione Odbc.DataSource predefinita fornisce un elenco a discesa
che consente all'utente di selezionare un DSN, questa funzionalità non è disponibile tramite estendibilità. Se la
configurazione dell'origine dati è sufficientemente complessa da richiedere una finestra di dialogo di
configurazione completamente personalizzabile, è consigliabile richiedere agli utenti finali di pre-configurare un
DSN di sistema e impostare la funzione sul nome DSN come campo di testo.

Parametri per Odbc.DataSource


La funzione Odbc.DataSource accetta due parametri connectionString per il driver e un record di opzioni che
consente di — eseguire l'override di vari comportamenti del driver. Tramite il record delle opzioni è possibile
eseguire l'override delle funzionalità e di altre informazioni segnalate dal driver, controllare il comportamento
dello strumento di navigazione e influire SQL query generate dal motore M.
I campi dei record delle opzioni supportate rientrano in due categorie, quelle pubbliche/sempre disponibili e
quelle disponibili solo in un contesto — di estendibilità.
Nella tabella seguente vengono descritti i campi pubblici nel record delle opzioni.

CAMPO DESC RIZ IO N E

CommandTimeout Valore di durata che controlla per quanto tempo è


consentita l'esecuzione della query sul lato server prima
che venga annullata.
Impostazione predefinita: 10 minuti
CAMPO DESC RIZ IO N E

ConnectionTimeout Valore di durata che controlla il tempo di attesa prima di


abbandonare un tentativo di stabilire una connessione al
server.
Impostazione predefinita: 15 secondi

CreateNavigationProperties Valore logico che imposta se generare le proprietà di


navigazione nelle tabelle restituite. Le proprietà di
navigazione sono basate sulle relazioni di chiave esterna
segnalate dal driver e vengono visualizzate come
colonne "virtuali" che possono essere espanse nell'editor
di query, creando il join appropriato.
Se il calcolo delle dipendenze di chiave esterna è
un'operazione costosa per il driver, è possibile impostare
questo valore su false.
Predefinito: true

HierarchicalNavigation Valore logico che imposta se visualizzare le tabelle


raggruppate in base ai relativi nomi di schema. Se
impostata su false, le tabelle verranno visualizzate in un
elenco semplice in ogni database.
Valore predefinito: false

SqlCompatibleWindowsAuth Valore logico che determina se generare una stringa SQL


Server di connessione compatibile quando si usa
Windows authentication — Trusted_Connection=Sì.
Se il driver supporta l Windows authentication, ma
richiede impostazioni aggiuntive o alternative nella
stringa di connessione, è necessario impostare questo
valore su false e usare il campo di record dell'opzione
CredentialConnectionString descritto di seguito.
Predefinito: true

Nella tabella seguente vengono descritti i campi di record delle opzioni disponibili solo tramite estendibilità. I
campi che non sono valori letterali semplici sono descritti nelle sezioni successive.

CAMPO DESC RIZ IO N E

AstVisitor Record contenente uno o più override per controllare la


generazione SQL query. L'utilizzo più comune di questo
campo è fornire la logica per generare una clausola
LIMIT/OFFSET per i driver che non supportano TOP.
I campi includono:
Costante
LimitClause
Per altre informazioni, vedere la sezione AstVisitor.
CAMPO DESC RIZ IO N E

CancelQueryExplicitly Valore logico che indica al motore M di annullare in


modo esplicito tutte le chiamate in esecuzione tramite il
driver ODBC prima di terminare la connessione al server
ODBC.
Questo campo è utile in situazioni in cui l'esecuzione di
query viene gestita indipendentemente dalle connessioni
di rete al server, ad esempio in alcune distribuzioni
spark. Nella maggior parte dei casi, questo valore non
deve essere impostato perché la query nel server viene
annullata quando viene terminata la connessione di rete
al server.
Valore predefinito: false

ClientConnectionPooling Valore logico che abilita il pool di connessioni sul lato


client per il driver ODBC. La maggior parte dei driver
dovrà impostare questo valore su true.
Valore predefinito: false

CredentialConnectionString Valore di testo o record utilizzato per specificare le


proprietà della stringa di connessione correlate alle
credenziali.
Per altre informazioni, vedere la sezione Credenziali.

HideNativeQuery Valore logico che controlla se il connettore consente il


SQL native da parte di una query usando la funzione
Value.NativeQuery().
Nota: questa funzionalità non è attualmente esposta
nell'esperienza Power Query'utente. Gli utenti dovranno
modificare manualmente le query per sfruttare questa
funzionalità.
Valore predefinito: false

ImplicitTypeConversions Valore di tabella contenente conversioni di tipi implicite


supportate dal driver o dal server back-end. I valori in
questa tabella sono additivi alle conversioni segnalate
dal driver stesso.
Questo campo viene in genere usato insieme al campo
SQLGetTypeInfo quando si esegue l'override delle
informazioni sul tipo di dati segnalate dal driver.
Per altre informazioni, vedere la sezione
ImplicitTypeConversions.
CAMPO DESC RIZ IO N E

OnError Funzione di gestione degli errori che riceve un


parametro errorRecord di tipo record.
Gli usi comuni di questa funzione includono la gestione
degli errori di connessione SSL, la fornitura di un
collegamento di download se il driver non viene trovato
nel sistema e la segnalazione di errori di autenticazione.
Per altre informazioni, vedere la sezione OnError.

SoftNumbers Consente al motore M di selezionare un tipo di dati


compatibile quando la conversione tra due tipi numerici
specifici non è dichiarata come supportata nelle
funzionalità SQL_CONVERT_*.
Valore predefinito: false

SqlCapabilities Record che fornisce varie sostituzioni delle funzionalità


del driver e un modo per specificare le funzionalità non
espresse tramite ODBC 3.8.
Per altre informazioni, vedere la sezione SqlCapabilities.

SQLColumns Funzione che consente di modificare i metadati della


colonna restituiti dalla funzione SQLColumns.
Per altre informazioni, vedere la sezione SQLColumns.

SQLGetFunctions Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetFunctions.
Un uso comune di questo campo è disabilitare l'uso
dell'associazione di parametri o specificare che le query
generate devono usare CAST anziché CONVERT.
Per altre informazioni, vedere la sezione
SQLGetFunctions.

SQLGetInfo Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetInfo.
Per altre informazioni, vedere la sezione SQLGetInfo.
CAMPO DESC RIZ IO N E

SQLGetTypeInfo Tabella o funzione che restituisce una tabella che esegue


l'override delle informazioni sul tipo restituite da
SQLGetTypeInfo.
Quando il valore è impostato su una tabella, il valore
sostituisce completamente le informazioni sul tipo
segnalate dal driver. SQLGetTypeInfo non verrà
chiamato.
Quando il valore è impostato su una funzione, la
funzione riceverà il risultato della chiamata originale a
SQLGetTypeInfo, consentendo di modificare la tabella.
Questo campo viene in genere usato in caso di mancata
corrispondenza tra i tipi di dati segnalati da
SQLGetTypeInfo e SQLColumns.
Per altre informazioni, vedere la sezione SQLGetTypeInfo.

SQLTables Funzione che consente di modificare i metadati della


tabella restituiti da una chiamata a SQLTables.
Per altre informazioni, vedere la sezione SQLTables.

TollerConcatOverflow Consente la concatenazione dei valori di testo anche se il


risultato potrebbe essere troncato per rientrare
nell'intervallo di un tipo disponibile.
Ad esempio, quando si concatena un campo
VARCHAR(4000) con un campo VARCHAR(4000) in un
sistema che supporta una dimensione MASSIMA DI
VARCHAR pari a 4000 e nessun tipo CLOB, la
concatenazione verrà troncato anche se il risultato
potrebbe essere troncato.
Valore predefinito: false

UseEmbeddedDriver (uso interno): Valore logico che controlla se il driver


ODBC deve essere caricato da una directory locale
(utilizzando le nuove funzionalità definite nella specifica
ODBC 4.0). Questa impostazione viene in genere
impostata solo dai connettori creati da Microsoft forniti
con Power Query.
Se impostata su false, verrà utilizzata la gestione driver
ODBC di sistema per individuare e caricare il driver.
La maggior parte dei connettori non deve impostare
questo campo.
Valore predefinito: false

Override di AstVisitor
Il campo AstVisitor viene impostato tramite il record di opzioni Odbc.DataSource. Viene usato per modificare le
SQL generate per scenari di query specifici.
NOTE
I driver che supportano le clausole e (anziché ) vogliono fornire LIMIT OFFSET un override TOP LimitClause per
AstVisitor.

Costante
L'impostazione di un override per questo valore è stata deprecata e potrebbe essere rimossa dalle
implementazioni future.
LimitClause
Questo campo è una funzione che riceve due argomenti (skip, take) e restituisce un record con due campi di
testo Int64.Type (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

Il parametro skip è il numero di righe da ignorare, ovvero l'argomento per OFFSET. Se non viene specificato un
offset, il valore skip sarà Null. Se il driver supporta , ma non supporta , la funzione LimitClause deve restituire un
errore non implementata (...) quando skip è LIMIT OFFSET maggiore di 0.
Il parametro take è il numero di righe da prendere, ovvero l'argomento per LIMIT.
Il Text campo del risultato contiene il SQL da aggiungere alla query generata.
Il Location campo specifica dove inserire la clausola . Nella tabella seguente vengono descritti i valori
supportati.

VA LO RE DESC RIZ IO N E ESEM P IO

AfterQuerySpecification La clausola LIMIT viene inserita alla SELECT a, b, c


fine del SQL.
Tabella FROM
Si tratta della sintassi LIMIT più
comunemente supportata. WHERE a > 10
LIMITE 5

BeforeQuerySpecification La clausola LIMIT viene inserita prima LIMITE DI 5 RIGHE


dell'istruzione SQL generata.
SELECT a, b, c
Tabella FROM
WHERE a > 10

AfterSelect LIMIT va dopo l'istruzione SELECT e SELECT DISTINCT LIMIT 5 a, b, c


dopo qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

AfterSelectBeforeModifiers LIMIT va dopo l'istruzione SELECT, ma SELECT LIMIT 5 DISTINCT a, b, c


prima di qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che prevede una
clausola LIMIT, con un offset facoltativo, nel formato seguente: [OFFSET <offset> ROWS] LIMIT <row_count>
LimitClause = (skip, take) =>
let
offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
in
[
Text = Text.Format("#{0} #{1}", {offset, limit}),
Location = "AfterQuerySpecification"
]

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che supporta LIMIT, ma
non OFFSET. Formato: LIMIT <row_count> .

LimitClause = (skip, take) =>


if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]

Override di SqlCapabilities
CAMPO DET TA GL I

FractionalSecondsScale Valore numerico compreso tra 1 e 7 che indica il numero


di posizioni decimali supportate per i valori dei
millisecondi. Questo valore deve essere impostato dai
connettori che vogliono abilitare la query di folding sui
valori datetime.
Impostazione predefinita: null

PrepareStatements Valore logico che indica che le istruzioni devono essere


preparate utilizzando SQLPrepare.
Valore predefinito: false

SupportsTop Valore logico che indica che il driver supporta la clausola


TOP per limitare il numero di righe restituite.
Valore predefinito: false

StringLiteralEscapeCharacters Elenco di valori di testo che specificano i caratteri da


usare per l'escape di valori letterali stringa ed espressioni
LIKE.
Ex. {""}
Impostazione predefinita: null
CAMPO DET TA GL I

SupportsDerivedTable Valore logico che indica che il driver supporta le tabelle


derivate (sub-select).
Si presuppone che questo valore sia true per i driver che
impostano il livello di conformità su
SQL_SC_SQL92_FULL (segnalato dal driver o sottoposto
a override con l'impostazione Sql92Conformance (vedere
di seguito). Per tutti gli altri livelli di conformità, il valore
predefinito è false.
Se il driver non segnala il livello SQL_SC_SQL92_FULL
conformità, ma supporta le tabelle derivate, impostare
questo valore su true.
Si noti che il supporto delle tabelle derivate è necessario
per molti scenari di Direct Query.

SupportsNumericLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali numerici. Se impostato su false, i valori
numerici verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

SupportsStringLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali stringa. Se impostato su false, i valori
stringa verranno sempre specificati usando l'associazione
di parametri.
Valore predefinito: false

SupportsOdbcDateLiterals Valore logico che indica se il valore SQL deve includere


valori letterali data. Se impostato su false, i valori di data
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimeLiterals Valore logico che indica se il valore SQL deve includere


valori letterali di ora. Se impostato su false, i valori di ora
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimestampLiterals Valore logico che indica se il valore SQL deve includere


valori letterali timestamp. Se impostato su false, i valori
timestamp verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

Override di SQLColumns
SQLColumns è un gestore di funzioni che riceve i risultati di una chiamata ODBC a SQLColumns. Il parametro
source contiene una tabella con le informazioni sul tipo di dati. Questo override viene in genere usato per
correggere le mancate corrispondenze dei tipi di dati tra le chiamate SQLGetTypeInfo a e SQLColumns .
Per informazioni dettagliate sul formato del parametro della tabella di origine, vedere Funzione SQLColumns.
Override di SQLGetFunctions
Questo campo viene usato per eseguire l'override dei valori SQLFunctions restituiti da un driver ODBC.
Contiene un record i cui nomi di campo sono uguali alle costanti FunctionId definite per la funzione ODBC
SQLGetFunctions. Le costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC.

CAMPO DET TA GL I

SQL_CONVERT_FUNCTIONS Indica le funzioni supportate durante le conversioni di tipi.


Per impostazione predefinita, il motore M tenterà di usare la
funzione CONVERT. I driver che preferiscono l'uso di CAST
possono eseguire l'override di questo valore per segnalare
che solo SQL_FN_CVT_CAST (valore numerico di 0x2) è
supportato.

SQL_API_SQLBINDCOL Valore logico (true/false) che indica se il motore Mashup


deve usare l'API SQLBindCol durante il recupero dei dati.
Se impostato su false, viene invece usato SQLGetData.
Valore predefinito: false

Il frammento di codice seguente fornisce un esempio che indica in modo esplicito al motore M di usare CAST
anziché CONVERT.

SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

Override di SQLGetInfo
Questo campo viene usato per eseguire l'override dei valori SQLGetInfo restituiti da un driver ODBC. Contiene
un record i cui campi sono nomi uguali alle costanti InfoType definite per la funzione ODBC SQLGetInfo. Le
costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC. L'elenco completo degli
InfoType verificati è disponibile nei file di traccia del motore Mashup.
La tabella seguente contiene le proprietà SQLGetInfo comunemente sottoposte a override:

CAMPO DET TA GL I

SQL_SQL_CONFORMANCE Valore intero che indica il livello di SQL-92 supportato


dal driver:
(1) SQL_SC_SQL92_ENTRY = Livello di SQL-92 conforme.
(2) SQL_SC_FIPS127_2_TRANSITIONAL = conforme al
livello di transizione FIPS 127-2.
(4) SQL_SC_ SQL92_INTERMEDIATE = livello intermedio
SQL-92.
(8) SQL_SC_SQL92_FULL = Conforme al livello SQL-92.
Si noti che in Power Query, il connettore verrà usato in
modalità sola lettura. La maggior parte dei driver vuole
segnalare un SQL_SC_SQL92_FULL di conformità ed
eseguire l'override di un comportamento di generazione
SQL specifico usando le proprietà SQLGetInfo e
SQLGetFunctions.
CAMPO DET TA GL I

SQL_SQL92_PREDICATES Maschera di bit che enumera i predicati supportati in


un'istruzione SELECT, come definito in SQL-92.
Vedere le SQL_SP_* nella specifica ODBC.

SQL_AGGREGATE_FUNCTIONS Maschera di bit che enumera il supporto per le funzioni


di aggregazione.
SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM
Vedere le SQL_AF_* nella specifica ODBC.

SQL_GROUP_BY Valore intero che specifica la relazione tra le colonne


nella clausola GROUP BY e le colonne non aggregate
nell'elenco di selezione:
SQL_GB_COLLATE = È possibile specificare una clausola
COLLATE alla fine di ogni colonna di raggruppamento.
SQL_GB_NOT_SUPPORTED = Le clausole GROUP BY non
sono supportate.
SQL_GB_GROUP_BY_EQUALS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Non può contenere
altre colonne. Ad esempio, SELECT DEPT, MAX(SALARY)
FROM EMPLOYEE GROUP BY DEPT.
SQL_GB_GROUP_BY_CONTAINS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Può contenere
colonne non presenti nell'elenco di selezione. Ad
esempio, SELECT DEPT, MAX(SALARY) FROM EMPLOYEE
GROUP BY DEPT, AGE.
SQL_GB_NO_RELATION = Le colonne nella clausola
GROUP BY e nell'elenco di selezione non sono correlate.
Il significato delle colonne non raggruppate e non
aggregate nell'elenco di selezione dipende dall'origine
dati. Ad esempio, SELECT DEPT, SALARY FROM
EMPLOYEE GROUP BY DEPT, AGE.
Vedere le SQL_GB_* nella specifica ODBC.

La funzione helper seguente può essere usata per creare valori di maschera di bit da un elenco di valori integer:
Flags = (flags as list) =>
let
Loop = List.Generate(
()=> [i = 0, Combined = 0],
each [i] < List.Count(flags),
each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
each [Combined]),
Result = List.Last(Loop, 0)
in
Result;

Override di SQLGetTypeInfo
SQLGetTypeInfo può essere specificato in due modi:

Valore table fisso che contiene le stesse informazioni sul tipo di una chiamata ODBC a SQLGetTypeInfo .
Funzione che accetta un argomento table e restituisce una tabella. L'argomento conterrà i risultati originali
della chiamata ODBC a SQLGetTypeInfo . L'implementazione della funzione può modificare o aggiungere a
questa tabella.
Il primo approccio viene usato per eseguire completamente l'override dei valori restituiti dal driver ODBC. Il
secondo approccio viene usato se si desidera aggiungere o modificare questi valori.
Per informazioni dettagliate sul formato del parametro di tabella dei tipi e sul valore restituito previsto, vedere le
informazioni di riferimento sulla funzione SQLGetTypeInfo.
SQLGetTypeInfo con una tabella statica
Il frammento di codice seguente fornisce un'implementazione statica per SQLGetTypeInfo.

SQLGetTypeInfo = #table(
{ "TYPE_NAME", "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",
"NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX",
"INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

{ "char", 1, 65535, "'", "'", "max. length",


1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "int8", -5, 19, "'", "'", null,
1, 0, 2, 0, 10, 0,
"int8", 0, 0, -5, null, 2,
0, 0 },
{ "bit", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "bool", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "date", 9, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "numeric", 3, 28, null, null, null,
1, 0, 2, 0, 0, 0,
"numeric", 0, 0, 2, null, 10,
0, 0 },
{ "float8", 8, 15, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "float8", 6, 17, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "uuid", -11, 37, null, null, null,
1, 0, 2, null, 0, null,
"uuid", null, null, -11, null, null,
0, 0 },
{ "int4", 4, 10, null, null, null,
1, 0, 2, 0, 0, 0,
"int4", 0, 0, 4, null, 2,
0, 0 },
{ "text", -1, 65535, "'", "'", null,
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "lo", -4, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"lo", null, null, -4, null, null,
0, 0 },
{ "numeric", 2, 28, null, null, "precision, scale",
1, 0, 2, 0, 10, 0,
"numeric", 0, 6, 2, null, 10,
0, 0 },
{ "float4", 7, 9, null, null, null,
1, 0, 2, 0, 10, 0,
"float4", null, null, 7, null, 2,
0, 0 },
{ "int2", 5, 19, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "int2", -6, 5, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "timestamp", 11, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "date", 91, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "timestamp", 93, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "bytea", -3, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"bytea", null, null, -3, null, null,
0, 0 },
{ "varchar", 12, 65535, "'", "'", "max. length",
1, 0, 2, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "char", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "text", -10, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "varchar", -9, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "bpchar", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
1, 1, 3, null, 0, null,
"bpchar", null, null, -9, null, null,
0, 0 } }
);

SQLGetTypeInfo con una funzione


I frammenti di codice seguenti bpchar accodare il tipo ai tipi esistenti restituiti dal driver.

SQLGetTypeInfo = (types as table) as table =>


let
newTypes = #table(
{
"TYPE_NAME",
"DATA_TYPE",
"COLUMN_SIZE",
"LITERAL_PREF",
"LITERAL_SUFFIX",
"CREATE_PARAS",
"NULLABLE",
"CASE_SENSITIVE",
"SEARCHABLE",
"UNSIGNED_ATTRIBUTE",
"FIXED_PREC_SCALE",
"AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME",
"MINIMUM_SCALE",
"MAXIMUM_SCALE",
"SQL_DATA_TYPE",
"SQL_DATETIME_SUB",
"NUM_PREC_RADIX",
"INTERNAL_PRECISION",
"USER_DATA_TYPE"
},
// we add a new entry for each type we want to add
{
{
"bpchar",
-8,
65535,
"'",
"'",
"max. length",
1,
1,
3,
null,
0,
null,
"bpchar",
null,
null,
-9,
null,
null,
0,
0
}
}),
append = Table.Combine({types, newTypes})
in
append;

Impostazione della stringa di connessione


La stringa di connessione per il driver ODBC viene impostata usando il primo argomento per le funzioni
Odbc.DataSource e/o Odbc.Query. Il valore può essere testo o un record M. Quando si usa il record, ogni campo
nel record diventerà una proprietà nella stringa di connessione. Tutte le stringhe di connessione richiedono un
campo Driver (o un campo DSN) se si richiede agli utenti di pre-configurare un DSN a livello di sistema. Le
proprietà correlate alle credenziali verranno impostate separatamente (vedere di seguito). Altre proprietà
saranno specifiche del driver.
Il frammento di codice seguente illustra la definizione di una nuova funzione dell'origine dati, la creazione del
record ConnectionString e la chiamata della funzione Odbc.DataSource.

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
let
ConnectionString = [
Driver = "SQL Server Native Client 11.0",
Server = server,
MultiSubnetFailover = "Yes",
ApplicationIntent = "ReadOnly",
APP = "PowerBICustomConnector"
],
OdbcDatasource = Odbc.DataSource(ConnectionString)
in
OdbcDatasource;

Risoluzione dei problemi e test


Per abilitare la traccia in Power BI Desktop:
1. Passare a File > Opzioni e impostazioni > Opzioni .
2. Selezionare la scheda Diagnostica.
3. Selezionare l'opzione Abilita traccia.
4. Selezionare il collegamento Apri car tella tracce (deve essere
%LOCALAPPDATA%/Microsoft/Power BI Desktop/Traces ).
5. Eliminare i file di traccia esistenti.
6. Eseguire i test.
7. Chiudere Power BI Desktop per assicurarsi che tutti i file di log siano scaricati su disco.
Ecco i passaggi che è possibile eseguire per i test iniziali in Power BI Desktop:
1. Chiudere Power BI Desktop.
2. Cancellare la directory di traccia.
3. Aprire Power BI desktop e abilitare la traccia.
4. Connessione all'origine dati e selezionare la modalità Direct Query.
5. Selezionare una tabella nello strumento di navigazione e selezionare Modifica.
6. Modificare la query in vari modi, tra cui:

Prendere le prime N righe (ad esempio, 10).


Impostare filtri di uguaglianza su tipi di dati diversi (int, string, bool e così via).
Impostare altri filtri di intervallo (maggiore di, minore di).
Filtrare in base a NULL/NOT NULL.
Consente di selezionare un set secondario di colonne.
Aggregazione/Raggruppamento per diverse combinazioni di colonne.
Aggiungere una colonna calcolata da altre colonne ([C] = [A] + [B]).
Ordinare in base a una colonna, più colonne. 7. Le espressioni che non vengono rilevate verranno
restituite in una barra di avviso. Prendere nota dell'errore, rimuovere il passaggio e passare al passaggio
test case. I dettagli sulla causa dell'errore devono essere generati nei log di traccia. 8. Chiudere Power BI
Desktop. 9. Copiare i file di traccia in una nuova directory. 10. Usare la cartella di Power BI cartella di
lavoro consigliata per analizzare i file di traccia.

Dopo aver creato query semplici, è possibile provare gli scenari di Direct Query, ad esempio la creazione di
report nelle visualizzazioni report. Le query generate in modalità Direct Query saranno notevolmente più
complesse, ovvero l'uso di sub-select, istruzioni COALESCE e aggregazioni.
Concatenazione di stringhe in modalità Direct Query
Il motore M esegue la convalida dei limiti delle dimensioni del tipo di base come parte della logica di folding
della query. Se si riceve un errore di tipo folding quando si tenta di concatenare due stringhe che
potenzialmente superano le dimensioni massime del tipo di database sottostante:
1. Assicurarsi che il database sia in grado di supportare la conversione in tipi CLOB quando si verifica l'overflow
concat della stringa.
2. Impostare TolerateConcatOverflow l'opzione per Odbc.DataSource su true .

La funzione DAX CONCATENATE non è attualmente supportata dalle Power Query/ODBC. Gli autori di
estensioni devono assicurarsi che la concatenazione delle stringhe funzioni tramite l'editor di query
aggiungendo colonne calcolate ( [stringCol1] & [stringCol2] ). Quando in futuro viene aggiunta la
possibilità di eseguire la fold dell'operazione CONCATENATE, l'operazione dovrebbe funzionare senza
problemi con le estensioni esistenti.
Abilitazione di Direct Query per un connettore
basato su ODBC
07/12/2021 • 23 minutes to read

Panoramica
L'uso della funzione Odbc.DataSource incorporata di M è il modo consigliato per creare connettori
personalizzati per le origini dati con un driver ODBC esistente e/o supportano una sintassi SQL query. Il
wrapping della funzione Odbc.DataSource consentirà al connettore di ereditare il comportamento predefinito di
ripiegamento delle query in base alle funzionalità segnalate dal driver. Questo consentirà al motore M di
generare istruzioni SQL in base ai filtri e ad altre trasformazioni definite dall'utente all'interno dell'esperienza
Power Query, senza dover fornire questa logica all'interno del connettore stesso.
Le estensioni ODBC possono facoltativamente abilitare la modalità Direct Query, consentendo Power BI
generare dinamicamente query in fase di esecuzione senza pre-memorizzare nella cache il modello di dati
dell'utente.

NOTE
L'abilitazione del supporto di Direct Query aumenta il livello di difficoltà e complessità del connettore. Quando Direct
Query è abilitato, Power BI il motore M non compenserà le operazioni di cui non è possibile eseguire completamente il
push nell'origine dati sottostante.

Questa sezione si basa sui concetti presentati nelle informazioni di riferimento sull'estendibilità M e presuppone
familiarità con la creazione di un connettore dati di base.
Vedere l'esempio SqlODBC per la maggior parte degli esempi di codice nelle sezioni seguenti. Altri esempi sono
disponibili nella directory degli esempi ODBC.

Funzioni di estendibilità ODBC


Il motore M fornisce due funzioni di origine dati odbc correlate: Odbc.DataSourcee Odbc.Query.
La funzione Odbc.DataSource fornisce una tabella di navigazione predefinita con tutti i database, le tabelle e le
viste del sistema, supporta la visualizzazione delle query e consente una gamma di opzioni di personalizzazione.
La maggior parte delle estensioni basate su ODBC userà questa funzione come funzione di estendibilità
primaria. La funzione accetta due argomenti una stringa di connessione — e un record di opzioni per fornire
sostituzioni del comportamento.
La funzione Odbc.Query consente di eseguire SQL istruzioni tramite un driver ODBC. Funge da pass-through
per l'esecuzione di query. A differenza della funzione Odbc.DataSource, non fornisce la funzionalità di folding
delle query e richiede che SQL query siano fornite dal connettore (o dall'utente finale). Quando si compila un
connettore personalizzato, questa funzione viene in genere usata internamente per eseguire query per
recuperare metadati che potrebbero non essere esposti tramite normali canali ODBC. La funzione accetta due
argomenti — una stringa di connessione e una SQL query.

Parametri per la funzione dell'origine dati


I connettori personalizzati possono accettare un numero qualsiasi di argomenti di funzione, ma per rimanere
coerenti con le funzioni dell'origine dati incorporate fornite con Power Query, sono consigliate le linee guida
seguenti:
Richiedere il set minimo di parametri usato per stabilire una connessione al server. Minore è il numero di
parametri che gli utenti finali devono fornire, più facile sarà l'uso del connettore.
Sebbene sia possibile definire parametri con un numero fisso di valori, ovvero un elenco a discesa
nell'interfaccia utente, i parametri vengono immessi prima dell'autenticazione dell'utente. Tutti i valori
individuabili a livello di codice dopo l'autenticazione dell'utente ,ad esempio il nome del catalogo o del
database, devono essere selezionabili tramite lo strumento di navigazione. Il comportamento predefinito
per la funzione Odbc.DataSource consiste nel restituire una tabella di navigazione gerarchica costituita da
nomi di catalogo (database), schema e tabella, anche se può essere sostituita all'interno del connettore.
Se si vuole che gli utenti sappiano in genere quali valori immettere per gli elementi selezionati dallo
strumento di navigazione (ad esempio il nome del database), rendere facoltativi questi parametri. I
parametri individuati a livello di codice non devono essere resi obbligatori.
L'ultimo parametro per la funzione deve essere un record facoltativo denominato "opzioni". Questo
parametro consente in genere agli utenti avanzati di impostare proprietà odbc comuni correlate (ad
esempio CommandTimeout), impostare override del comportamento specifici per il connettore e
consente l'estendibilità futura senza influire sulla compatibilità con le versioni precedenti per la funzione.
Gli argomenti correlati a sicurezza/credenziali NON DEVONO mai far parte dei parametri della funzione
dell'origine dati, poiché i valori immessi nella finestra di dialogo di connessione verranno resi persistenti
nella query dell'utente. I parametri correlati alle credenziali devono essere specificati come parte dei
metodi di autenticazione supportati dal connettore.
Per impostazione predefinita, tutti i parametri obbligatori per la funzione dell'origine dati vengono fattoriati nel
valore Percorso origine dati usato per identificare le credenziali utente.
Si noti che, mentre l'interfaccia utente per la funzione Odbc.DataSource predefinita fornisce un elenco a discesa
che consente all'utente di selezionare un DSN, questa funzionalità non è disponibile tramite estendibilità. Se la
configurazione dell'origine dati è sufficientemente complessa da richiedere una finestra di dialogo di
configurazione completamente personalizzabile, è consigliabile richiedere agli utenti finali di pre-configurare un
DSN di sistema e impostare la funzione sul nome DSN come campo di testo.

Parametri per Odbc.DataSource


La funzione Odbc.DataSource accetta due parametri connectionString per il driver e un record di opzioni che
consente di — eseguire l'override di vari comportamenti del driver. Tramite il record delle opzioni è possibile
eseguire l'override delle funzionalità e di altre informazioni segnalate dal driver, controllare il comportamento
dello strumento di navigazione e influire SQL query generate dal motore M.
I campi dei record delle opzioni supportate rientrano in due categorie, quelle pubbliche/sempre disponibili e
quelle disponibili solo in un contesto — di estendibilità.
Nella tabella seguente vengono descritti i campi pubblici nel record delle opzioni.

CAMPO DESC RIZ IO N E

CommandTimeout Valore di durata che controlla per quanto tempo è


consentita l'esecuzione della query sul lato server prima
che venga annullata.
Impostazione predefinita: 10 minuti
CAMPO DESC RIZ IO N E

ConnectionTimeout Valore di durata che controlla il tempo di attesa prima di


abbandonare un tentativo di stabilire una connessione al
server.
Impostazione predefinita: 15 secondi

CreateNavigationProperties Valore logico che imposta se generare le proprietà di


navigazione nelle tabelle restituite. Le proprietà di
navigazione sono basate sulle relazioni di chiave esterna
segnalate dal driver e vengono visualizzate come
colonne "virtuali" che possono essere espanse nell'editor
di query, creando il join appropriato.
Se il calcolo delle dipendenze di chiave esterna è
un'operazione costosa per il driver, è possibile impostare
questo valore su false.
Predefinito: true

HierarchicalNavigation Valore logico che imposta se visualizzare le tabelle


raggruppate in base ai relativi nomi di schema. Se
impostata su false, le tabelle verranno visualizzate in un
elenco semplice in ogni database.
Valore predefinito: false

SqlCompatibleWindowsAuth Valore logico che determina se generare una stringa SQL


Server di connessione compatibile quando si usa
Windows authentication — Trusted_Connection=Sì.
Se il driver supporta l Windows authentication, ma
richiede impostazioni aggiuntive o alternative nella
stringa di connessione, è necessario impostare questo
valore su false e usare il campo di record dell'opzione
CredentialConnectionString descritto di seguito.
Predefinito: true

Nella tabella seguente vengono descritti i campi di record delle opzioni disponibili solo tramite estendibilità. I
campi che non sono valori letterali semplici sono descritti nelle sezioni successive.

CAMPO DESC RIZ IO N E

AstVisitor Record contenente uno o più override per controllare la


generazione SQL query. L'utilizzo più comune di questo
campo è fornire la logica per generare una clausola
LIMIT/OFFSET per i driver che non supportano TOP.
I campi includono:
Costante
LimitClause
Per altre informazioni, vedere la sezione AstVisitor.
CAMPO DESC RIZ IO N E

CancelQueryExplicitly Valore logico che indica al motore M di annullare in


modo esplicito tutte le chiamate in esecuzione tramite il
driver ODBC prima di terminare la connessione al server
ODBC.
Questo campo è utile in situazioni in cui l'esecuzione di
query viene gestita indipendentemente dalle connessioni
di rete al server, ad esempio in alcune distribuzioni
spark. Nella maggior parte dei casi, questo valore non
deve essere impostato perché la query nel server viene
annullata quando viene terminata la connessione di rete
al server.
Valore predefinito: false

ClientConnectionPooling Valore logico che abilita il pool di connessioni sul lato


client per il driver ODBC. La maggior parte dei driver
dovrà impostare questo valore su true.
Valore predefinito: false

CredentialConnectionString Valore di testo o record utilizzato per specificare le


proprietà della stringa di connessione correlate alle
credenziali.
Per altre informazioni, vedere la sezione Credenziali.

HideNativeQuery Valore logico che controlla se il connettore consente il


SQL native da parte di una query usando la funzione
Value.NativeQuery().
Nota: questa funzionalità non è attualmente esposta
nell'esperienza Power Query'utente. Gli utenti dovranno
modificare manualmente le query per sfruttare questa
funzionalità.
Valore predefinito: false

ImplicitTypeConversions Valore di tabella contenente conversioni di tipi implicite


supportate dal driver o dal server back-end. I valori in
questa tabella sono additivi alle conversioni segnalate
dal driver stesso.
Questo campo viene in genere usato insieme al campo
SQLGetTypeInfo quando si esegue l'override delle
informazioni sul tipo di dati segnalate dal driver.
Per altre informazioni, vedere la sezione
ImplicitTypeConversions.
CAMPO DESC RIZ IO N E

OnError Funzione di gestione degli errori che riceve un


parametro errorRecord di tipo record.
Gli usi comuni di questa funzione includono la gestione
degli errori di connessione SSL, la fornitura di un
collegamento di download se il driver non viene trovato
nel sistema e la segnalazione di errori di autenticazione.
Per altre informazioni, vedere la sezione OnError.

SoftNumbers Consente al motore M di selezionare un tipo di dati


compatibile quando la conversione tra due tipi numerici
specifici non è dichiarata come supportata nelle
funzionalità SQL_CONVERT_*.
Valore predefinito: false

SqlCapabilities Record che fornisce varie sostituzioni delle funzionalità


del driver e un modo per specificare le funzionalità non
espresse tramite ODBC 3.8.
Per altre informazioni, vedere la sezione SqlCapabilities.

SQLColumns Funzione che consente di modificare i metadati della


colonna restituiti dalla funzione SQLColumns.
Per altre informazioni, vedere la sezione SQLColumns.

SQLGetFunctions Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetFunctions.
Un uso comune di questo campo è disabilitare l'uso
dell'associazione di parametri o specificare che le query
generate devono usare CAST anziché CONVERT.
Per altre informazioni, vedere la sezione
SQLGetFunctions.

SQLGetInfo Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetInfo.
Per altre informazioni, vedere la sezione SQLGetInfo.
CAMPO DESC RIZ IO N E

SQLGetTypeInfo Tabella o funzione che restituisce una tabella che esegue


l'override delle informazioni sul tipo restituite da
SQLGetTypeInfo.
Quando il valore è impostato su una tabella, il valore
sostituisce completamente le informazioni sul tipo
segnalate dal driver. SQLGetTypeInfo non verrà
chiamato.
Quando il valore è impostato su una funzione, la
funzione riceverà il risultato della chiamata originale a
SQLGetTypeInfo, consentendo di modificare la tabella.
Questo campo viene in genere usato in caso di mancata
corrispondenza tra i tipi di dati segnalati da
SQLGetTypeInfo e SQLColumns.
Per altre informazioni, vedere la sezione SQLGetTypeInfo.

SQLTables Funzione che consente di modificare i metadati della


tabella restituiti da una chiamata a SQLTables.
Per altre informazioni, vedere la sezione SQLTables.

TollerConcatOverflow Consente la concatenazione dei valori di testo anche se il


risultato potrebbe essere troncato per rientrare
nell'intervallo di un tipo disponibile.
Ad esempio, quando si concatena un campo
VARCHAR(4000) con un campo VARCHAR(4000) in un
sistema che supporta una dimensione MASSIMA DI
VARCHAR pari a 4000 e nessun tipo CLOB, la
concatenazione verrà troncato anche se il risultato
potrebbe essere troncato.
Valore predefinito: false

UseEmbeddedDriver (uso interno): Valore logico che controlla se il driver


ODBC deve essere caricato da una directory locale
(utilizzando le nuove funzionalità definite nella specifica
ODBC 4.0). Questa impostazione viene in genere
impostata solo dai connettori creati da Microsoft forniti
con Power Query.
Se impostata su false, verrà utilizzata la gestione driver
ODBC di sistema per individuare e caricare il driver.
La maggior parte dei connettori non deve impostare
questo campo.
Valore predefinito: false

Override di AstVisitor
Il campo AstVisitor viene impostato tramite il record di opzioni Odbc.DataSource. Viene usato per modificare le
SQL generate per scenari di query specifici.
NOTE
I driver che supportano le clausole e (anziché ) vogliono fornire LIMIT OFFSET un override TOP LimitClause per
AstVisitor.

Costante
L'impostazione di un override per questo valore è stata deprecata e potrebbe essere rimossa dalle
implementazioni future.
LimitClause
Questo campo è una funzione che riceve due argomenti (skip, take) e restituisce un record con due campi di
testo Int64.Type (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

Il parametro skip è il numero di righe da ignorare, ovvero l'argomento per OFFSET. Se non viene specificato un
offset, il valore skip sarà Null. Se il driver supporta , ma non supporta , la funzione LimitClause deve restituire un
errore non implementata (...) quando skip è LIMIT OFFSET maggiore di 0.
Il parametro take è il numero di righe da prendere, ovvero l'argomento per LIMIT.
Il Text campo del risultato contiene il SQL da aggiungere alla query generata.
Il Location campo specifica dove inserire la clausola . Nella tabella seguente vengono descritti i valori
supportati.

VA LO RE DESC RIZ IO N E ESEM P IO

AfterQuerySpecification La clausola LIMIT viene inserita alla SELECT a, b, c


fine del SQL.
Tabella FROM
Si tratta della sintassi LIMIT più
comunemente supportata. WHERE a > 10
LIMITE 5

BeforeQuerySpecification La clausola LIMIT viene inserita prima LIMITE DI 5 RIGHE


dell'istruzione SQL generata.
SELECT a, b, c
Tabella FROM
WHERE a > 10

AfterSelect LIMIT va dopo l'istruzione SELECT e SELECT DISTINCT LIMIT 5 a, b, c


dopo qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

AfterSelectBeforeModifiers LIMIT va dopo l'istruzione SELECT, ma SELECT LIMIT 5 DISTINCT a, b, c


prima di qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che prevede una
clausola LIMIT, con un offset facoltativo, nel formato seguente: [OFFSET <offset> ROWS] LIMIT <row_count>
LimitClause = (skip, take) =>
let
offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
in
[
Text = Text.Format("#{0} #{1}", {offset, limit}),
Location = "AfterQuerySpecification"
]

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che supporta LIMIT, ma
non OFFSET. Formato: LIMIT <row_count> .

LimitClause = (skip, take) =>


if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]

Override di SqlCapabilities
CAMPO DET TA GL I

FractionalSecondsScale Valore numerico compreso tra 1 e 7 che indica il numero


di posizioni decimali supportate per i valori dei
millisecondi. Questo valore deve essere impostato dai
connettori che vogliono abilitare la query di folding sui
valori datetime.
Impostazione predefinita: null

PrepareStatements Valore logico che indica che le istruzioni devono essere


preparate utilizzando SQLPrepare.
Valore predefinito: false

SupportsTop Valore logico che indica che il driver supporta la clausola


TOP per limitare il numero di righe restituite.
Valore predefinito: false

StringLiteralEscapeCharacters Elenco di valori di testo che specificano i caratteri da


usare per l'escape di valori letterali stringa ed espressioni
LIKE.
Ex. {""}
Impostazione predefinita: null
CAMPO DET TA GL I

SupportsDerivedTable Valore logico che indica che il driver supporta le tabelle


derivate (sub-select).
Si presuppone che questo valore sia true per i driver che
impostano il livello di conformità su
SQL_SC_SQL92_FULL (segnalato dal driver o sottoposto
a override con l'impostazione Sql92Conformance (vedere
di seguito). Per tutti gli altri livelli di conformità, il valore
predefinito è false.
Se il driver non segnala il livello SQL_SC_SQL92_FULL
conformità, ma supporta le tabelle derivate, impostare
questo valore su true.
Si noti che il supporto delle tabelle derivate è necessario
per molti scenari di Direct Query.

SupportsNumericLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali numerici. Se impostato su false, i valori
numerici verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

SupportsStringLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali stringa. Se impostato su false, i valori
stringa verranno sempre specificati usando l'associazione
di parametri.
Valore predefinito: false

SupportsOdbcDateLiterals Valore logico che indica se il valore SQL deve includere


valori letterali data. Se impostato su false, i valori di data
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimeLiterals Valore logico che indica se il valore SQL deve includere


valori letterali di ora. Se impostato su false, i valori di ora
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimestampLiterals Valore logico che indica se il valore SQL deve includere


valori letterali timestamp. Se impostato su false, i valori
timestamp verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

Override di SQLColumns
SQLColumns è un gestore di funzioni che riceve i risultati di una chiamata ODBC a SQLColumns. Il parametro
source contiene una tabella con le informazioni sul tipo di dati. Questo override viene in genere usato per
correggere le mancate corrispondenze dei tipi di dati tra le chiamate SQLGetTypeInfo a e SQLColumns .
Per informazioni dettagliate sul formato del parametro della tabella di origine, vedere Funzione SQLColumns.
Override di SQLGetFunctions
Questo campo viene usato per eseguire l'override dei valori SQLFunctions restituiti da un driver ODBC.
Contiene un record i cui nomi di campo sono uguali alle costanti FunctionId definite per la funzione ODBC
SQLGetFunctions. Le costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC.

CAMPO DET TA GL I

SQL_CONVERT_FUNCTIONS Indica le funzioni supportate durante le conversioni di tipi.


Per impostazione predefinita, il motore M tenterà di usare la
funzione CONVERT. I driver che preferiscono l'uso di CAST
possono eseguire l'override di questo valore per segnalare
che solo SQL_FN_CVT_CAST (valore numerico di 0x2) è
supportato.

SQL_API_SQLBINDCOL Valore logico (true/false) che indica se il motore Mashup


deve usare l'API SQLBindCol durante il recupero dei dati.
Se impostato su false, viene invece usato SQLGetData.
Valore predefinito: false

Il frammento di codice seguente fornisce un esempio che indica in modo esplicito al motore M di usare CAST
anziché CONVERT.

SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

Override di SQLGetInfo
Questo campo viene usato per eseguire l'override dei valori SQLGetInfo restituiti da un driver ODBC. Contiene
un record i cui campi sono nomi uguali alle costanti InfoType definite per la funzione ODBC SQLGetInfo. Le
costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC. L'elenco completo degli
InfoType verificati è disponibile nei file di traccia del motore Mashup.
La tabella seguente contiene le proprietà SQLGetInfo comunemente sottoposte a override:

CAMPO DET TA GL I

SQL_SQL_CONFORMANCE Valore intero che indica il livello di SQL-92 supportato


dal driver:
(1) SQL_SC_SQL92_ENTRY = Livello di SQL-92 conforme.
(2) SQL_SC_FIPS127_2_TRANSITIONAL = conforme al
livello di transizione FIPS 127-2.
(4) SQL_SC_ SQL92_INTERMEDIATE = livello intermedio
SQL-92.
(8) SQL_SC_SQL92_FULL = Conforme al livello SQL-92.
Si noti che in Power Query, il connettore verrà usato in
modalità sola lettura. La maggior parte dei driver vuole
segnalare un SQL_SC_SQL92_FULL di conformità ed
eseguire l'override di un comportamento di generazione
SQL specifico usando le proprietà SQLGetInfo e
SQLGetFunctions.
CAMPO DET TA GL I

SQL_SQL92_PREDICATES Maschera di bit che enumera i predicati supportati in


un'istruzione SELECT, come definito in SQL-92.
Vedere le SQL_SP_* nella specifica ODBC.

SQL_AGGREGATE_FUNCTIONS Maschera di bit che enumera il supporto per le funzioni


di aggregazione.
SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM
Vedere le SQL_AF_* nella specifica ODBC.

SQL_GROUP_BY Valore intero che specifica la relazione tra le colonne


nella clausola GROUP BY e le colonne non aggregate
nell'elenco di selezione:
SQL_GB_COLLATE = È possibile specificare una clausola
COLLATE alla fine di ogni colonna di raggruppamento.
SQL_GB_NOT_SUPPORTED = Le clausole GROUP BY non
sono supportate.
SQL_GB_GROUP_BY_EQUALS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Non può contenere
altre colonne. Ad esempio, SELECT DEPT, MAX(SALARY)
FROM EMPLOYEE GROUP BY DEPT.
SQL_GB_GROUP_BY_CONTAINS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Può contenere
colonne non presenti nell'elenco di selezione. Ad
esempio, SELECT DEPT, MAX(SALARY) FROM EMPLOYEE
GROUP BY DEPT, AGE.
SQL_GB_NO_RELATION = Le colonne nella clausola
GROUP BY e nell'elenco di selezione non sono correlate.
Il significato delle colonne non raggruppate e non
aggregate nell'elenco di selezione dipende dall'origine
dati. Ad esempio, SELECT DEPT, SALARY FROM
EMPLOYEE GROUP BY DEPT, AGE.
Vedere le SQL_GB_* nella specifica ODBC.

La funzione helper seguente può essere usata per creare valori di maschera di bit da un elenco di valori integer:
Flags = (flags as list) =>
let
Loop = List.Generate(
()=> [i = 0, Combined = 0],
each [i] < List.Count(flags),
each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
each [Combined]),
Result = List.Last(Loop, 0)
in
Result;

Override di SQLGetTypeInfo
SQLGetTypeInfo può essere specificato in due modi:

Valore table fisso che contiene le stesse informazioni sul tipo di una chiamata ODBC a SQLGetTypeInfo .
Funzione che accetta un argomento table e restituisce una tabella. L'argomento conterrà i risultati originali
della chiamata ODBC a SQLGetTypeInfo . L'implementazione della funzione può modificare o aggiungere a
questa tabella.
Il primo approccio viene usato per eseguire completamente l'override dei valori restituiti dal driver ODBC. Il
secondo approccio viene usato se si desidera aggiungere o modificare questi valori.
Per informazioni dettagliate sul formato del parametro di tabella dei tipi e sul valore restituito previsto, vedere le
informazioni di riferimento sulla funzione SQLGetTypeInfo.
SQLGetTypeInfo con una tabella statica
Il frammento di codice seguente fornisce un'implementazione statica per SQLGetTypeInfo.

SQLGetTypeInfo = #table(
{ "TYPE_NAME", "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",
"NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX",
"INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

{ "char", 1, 65535, "'", "'", "max. length",


1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "int8", -5, 19, "'", "'", null,
1, 0, 2, 0, 10, 0,
"int8", 0, 0, -5, null, 2,
0, 0 },
{ "bit", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "bool", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "date", 9, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "numeric", 3, 28, null, null, null,
1, 0, 2, 0, 0, 0,
"numeric", 0, 0, 2, null, 10,
0, 0 },
{ "float8", 8, 15, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "float8", 6, 17, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "uuid", -11, 37, null, null, null,
1, 0, 2, null, 0, null,
"uuid", null, null, -11, null, null,
0, 0 },
{ "int4", 4, 10, null, null, null,
1, 0, 2, 0, 0, 0,
"int4", 0, 0, 4, null, 2,
0, 0 },
{ "text", -1, 65535, "'", "'", null,
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "lo", -4, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"lo", null, null, -4, null, null,
0, 0 },
{ "numeric", 2, 28, null, null, "precision, scale",
1, 0, 2, 0, 10, 0,
"numeric", 0, 6, 2, null, 10,
0, 0 },
{ "float4", 7, 9, null, null, null,
1, 0, 2, 0, 10, 0,
"float4", null, null, 7, null, 2,
0, 0 },
{ "int2", 5, 19, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "int2", -6, 5, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "timestamp", 11, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "date", 91, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "timestamp", 93, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "bytea", -3, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"bytea", null, null, -3, null, null,
0, 0 },
{ "varchar", 12, 65535, "'", "'", "max. length",
1, 0, 2, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "char", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "text", -10, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "varchar", -9, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "bpchar", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
1, 1, 3, null, 0, null,
"bpchar", null, null, -9, null, null,
0, 0 } }
);

SQLGetTypeInfo con una funzione


I frammenti di codice seguenti bpchar accodare il tipo ai tipi esistenti restituiti dal driver.

SQLGetTypeInfo = (types as table) as table =>


let
newTypes = #table(
{
"TYPE_NAME",
"DATA_TYPE",
"COLUMN_SIZE",
"LITERAL_PREF",
"LITERAL_SUFFIX",
"CREATE_PARAS",
"NULLABLE",
"CASE_SENSITIVE",
"SEARCHABLE",
"UNSIGNED_ATTRIBUTE",
"FIXED_PREC_SCALE",
"AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME",
"MINIMUM_SCALE",
"MAXIMUM_SCALE",
"SQL_DATA_TYPE",
"SQL_DATETIME_SUB",
"NUM_PREC_RADIX",
"INTERNAL_PRECISION",
"USER_DATA_TYPE"
},
// we add a new entry for each type we want to add
{
{
"bpchar",
-8,
65535,
"'",
"'",
"max. length",
1,
1,
3,
null,
0,
null,
"bpchar",
null,
null,
-9,
null,
null,
0,
0
}
}),
append = Table.Combine({types, newTypes})
in
append;

Impostazione della stringa di connessione


La stringa di connessione per il driver ODBC viene impostata usando il primo argomento per le funzioni
Odbc.DataSource e/o Odbc.Query. Il valore può essere testo o un record M. Quando si usa il record, ogni campo
nel record diventerà una proprietà nella stringa di connessione. Tutte le stringhe di connessione richiedono un
campo Driver (o un campo DSN) se si richiede agli utenti di pre-configurare un DSN a livello di sistema. Le
proprietà correlate alle credenziali verranno impostate separatamente (vedere di seguito). Altre proprietà
saranno specifiche del driver.
Il frammento di codice seguente illustra la definizione di una nuova funzione dell'origine dati, la creazione del
record ConnectionString e la chiamata della funzione Odbc.DataSource.

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
let
ConnectionString = [
Driver = "SQL Server Native Client 11.0",
Server = server,
MultiSubnetFailover = "Yes",
ApplicationIntent = "ReadOnly",
APP = "PowerBICustomConnector"
],
OdbcDatasource = Odbc.DataSource(ConnectionString)
in
OdbcDatasource;

Risoluzione dei problemi e test


Per abilitare la traccia in Power BI Desktop:
1. Passare a File > Opzioni e impostazioni > Opzioni .
2. Selezionare la scheda Diagnostica.
3. Selezionare l'opzione Abilita traccia.
4. Selezionare il collegamento Apri car tella tracce (deve essere
%LOCALAPPDATA%/Microsoft/Power BI Desktop/Traces ).
5. Eliminare i file di traccia esistenti.
6. Eseguire i test.
7. Chiudere Power BI Desktop per assicurarsi che tutti i file di log siano scaricati su disco.
Ecco i passaggi che è possibile eseguire per i test iniziali in Power BI Desktop:
1. Chiudere Power BI Desktop.
2. Cancellare la directory di traccia.
3. Aprire Power BI desktop e abilitare la traccia.
4. Connessione all'origine dati e selezionare la modalità Direct Query.
5. Selezionare una tabella nello strumento di navigazione e selezionare Modifica.
6. Modificare la query in vari modi, tra cui:

Prendere le prime N righe (ad esempio, 10).


Impostare filtri di uguaglianza su tipi di dati diversi (int, string, bool e così via).
Impostare altri filtri di intervallo (maggiore di, minore di).
Filtrare in base a NULL/NOT NULL.
Consente di selezionare un set secondario di colonne.
Aggregazione/Raggruppamento per diverse combinazioni di colonne.
Aggiungere una colonna calcolata da altre colonne ([C] = [A] + [B]).
Ordinare in base a una colonna, più colonne. 7. Le espressioni che non vengono rilevate verranno
restituite in una barra di avviso. Prendere nota dell'errore, rimuovere il passaggio e passare al passaggio
test case. I dettagli sulla causa dell'errore devono essere generati nei log di traccia. 8. Chiudere Power BI
Desktop. 9. Copiare i file di traccia in una nuova directory. 10. Usare la cartella di Power BI cartella di
lavoro consigliata per analizzare i file di traccia.

Dopo aver creato query semplici, è possibile provare gli scenari di Direct Query, ad esempio la creazione di
report nelle visualizzazioni report. Le query generate in modalità Direct Query saranno notevolmente più
complesse, ovvero l'uso di sub-select, istruzioni COALESCE e aggregazioni.
Concatenazione di stringhe in modalità Direct Query
Il motore M esegue la convalida dei limiti delle dimensioni del tipo di base come parte della logica di folding
della query. Se si riceve un errore di tipo folding quando si tenta di concatenare due stringhe che
potenzialmente superano le dimensioni massime del tipo di database sottostante:
1. Assicurarsi che il database sia in grado di supportare la conversione in tipi CLOB quando si verifica l'overflow
concat della stringa.
2. Impostare TolerateConcatOverflow l'opzione per Odbc.DataSource su true .

La funzione DAX CONCATENATE non è attualmente supportata dalle Power Query/ODBC. Gli autori di
estensioni devono assicurarsi che la concatenazione delle stringhe funzioni tramite l'editor di query
aggiungendo colonne calcolate ( [stringCol1] & [stringCol2] ). Quando in futuro viene aggiunta la
possibilità di eseguire la fold dell'operazione CONCATENATE, l'operazione dovrebbe funzionare senza
problemi con le estensioni esistenti.
Abilitazione di Direct Query per un connettore
basato su ODBC
07/12/2021 • 23 minutes to read

Panoramica
L'uso della funzione Odbc.DataSource incorporata di M è il modo consigliato per creare connettori
personalizzati per le origini dati con un driver ODBC esistente e/o supportano una sintassi SQL query. Il
wrapping della funzione Odbc.DataSource consentirà al connettore di ereditare il comportamento predefinito di
ripiegamento delle query in base alle funzionalità segnalate dal driver. Questo consentirà al motore M di
generare istruzioni SQL in base ai filtri e ad altre trasformazioni definite dall'utente all'interno dell'esperienza
Power Query, senza dover fornire questa logica all'interno del connettore stesso.
Le estensioni ODBC possono facoltativamente abilitare la modalità Direct Query, consentendo Power BI
generare dinamicamente query in fase di esecuzione senza pre-memorizzare nella cache il modello di dati
dell'utente.

NOTE
L'abilitazione del supporto di Direct Query aumenta il livello di difficoltà e complessità del connettore. Quando Direct
Query è abilitato, Power BI il motore M non compenserà le operazioni di cui non è possibile eseguire completamente il
push nell'origine dati sottostante.

Questa sezione si basa sui concetti presentati nelle informazioni di riferimento sull'estendibilità M e presuppone
familiarità con la creazione di un connettore dati di base.
Vedere l'esempio SqlODBC per la maggior parte degli esempi di codice nelle sezioni seguenti. Altri esempi sono
disponibili nella directory degli esempi ODBC.

Funzioni di estendibilità ODBC


Il motore M fornisce due funzioni di origine dati odbc correlate: Odbc.DataSourcee Odbc.Query.
La funzione Odbc.DataSource fornisce una tabella di navigazione predefinita con tutti i database, le tabelle e le
viste del sistema, supporta la visualizzazione delle query e consente una gamma di opzioni di personalizzazione.
La maggior parte delle estensioni basate su ODBC userà questa funzione come funzione di estendibilità
primaria. La funzione accetta due argomenti una stringa di connessione — e un record di opzioni per fornire
sostituzioni del comportamento.
La funzione Odbc.Query consente di eseguire SQL istruzioni tramite un driver ODBC. Funge da pass-through
per l'esecuzione di query. A differenza della funzione Odbc.DataSource, non fornisce la funzionalità di folding
delle query e richiede che SQL query siano fornite dal connettore (o dall'utente finale). Quando si compila un
connettore personalizzato, questa funzione viene in genere usata internamente per eseguire query per
recuperare metadati che potrebbero non essere esposti tramite normali canali ODBC. La funzione accetta due
argomenti — una stringa di connessione e una SQL query.

Parametri per la funzione dell'origine dati


I connettori personalizzati possono accettare un numero qualsiasi di argomenti di funzione, ma per rimanere
coerenti con le funzioni dell'origine dati incorporate fornite con Power Query, sono consigliate le linee guida
seguenti:
Richiedere il set minimo di parametri usato per stabilire una connessione al server. Minore è il numero di
parametri che gli utenti finali devono fornire, più facile sarà l'uso del connettore.
Sebbene sia possibile definire parametri con un numero fisso di valori, ovvero un elenco a discesa
nell'interfaccia utente, i parametri vengono immessi prima dell'autenticazione dell'utente. Tutti i valori
individuabili a livello di codice dopo l'autenticazione dell'utente ,ad esempio il nome del catalogo o del
database, devono essere selezionabili tramite lo strumento di navigazione. Il comportamento predefinito
per la funzione Odbc.DataSource consiste nel restituire una tabella di navigazione gerarchica costituita da
nomi di catalogo (database), schema e tabella, anche se può essere sostituita all'interno del connettore.
Se si vuole che gli utenti sappiano in genere quali valori immettere per gli elementi selezionati dallo
strumento di navigazione (ad esempio il nome del database), rendere facoltativi questi parametri. I
parametri individuati a livello di codice non devono essere resi obbligatori.
L'ultimo parametro per la funzione deve essere un record facoltativo denominato "opzioni". Questo
parametro consente in genere agli utenti avanzati di impostare proprietà odbc comuni correlate (ad
esempio CommandTimeout), impostare override del comportamento specifici per il connettore e
consente l'estendibilità futura senza influire sulla compatibilità con le versioni precedenti per la funzione.
Gli argomenti correlati a sicurezza/credenziali NON DEVONO mai far parte dei parametri della funzione
dell'origine dati, poiché i valori immessi nella finestra di dialogo di connessione verranno resi persistenti
nella query dell'utente. I parametri correlati alle credenziali devono essere specificati come parte dei
metodi di autenticazione supportati dal connettore.
Per impostazione predefinita, tutti i parametri obbligatori per la funzione dell'origine dati vengono fattoriati nel
valore Percorso origine dati usato per identificare le credenziali utente.
Si noti che, mentre l'interfaccia utente per la funzione Odbc.DataSource predefinita fornisce un elenco a discesa
che consente all'utente di selezionare un DSN, questa funzionalità non è disponibile tramite estendibilità. Se la
configurazione dell'origine dati è sufficientemente complessa da richiedere una finestra di dialogo di
configurazione completamente personalizzabile, è consigliabile richiedere agli utenti finali di pre-configurare un
DSN di sistema e impostare la funzione sul nome DSN come campo di testo.

Parametri per Odbc.DataSource


La funzione Odbc.DataSource accetta due parametri connectionString per il driver e un record di opzioni che
consente di — eseguire l'override di vari comportamenti del driver. Tramite il record delle opzioni è possibile
eseguire l'override delle funzionalità e di altre informazioni segnalate dal driver, controllare il comportamento
dello strumento di navigazione e influire SQL query generate dal motore M.
I campi dei record delle opzioni supportate rientrano in due categorie, quelle pubbliche/sempre disponibili e
quelle disponibili solo in un contesto — di estendibilità.
Nella tabella seguente vengono descritti i campi pubblici nel record delle opzioni.

CAMPO DESC RIZ IO N E

CommandTimeout Valore di durata che controlla per quanto tempo è


consentita l'esecuzione della query sul lato server prima
che venga annullata.
Impostazione predefinita: 10 minuti
CAMPO DESC RIZ IO N E

ConnectionTimeout Valore di durata che controlla il tempo di attesa prima di


abbandonare un tentativo di stabilire una connessione al
server.
Impostazione predefinita: 15 secondi

CreateNavigationProperties Valore logico che imposta se generare le proprietà di


navigazione nelle tabelle restituite. Le proprietà di
navigazione sono basate sulle relazioni di chiave esterna
segnalate dal driver e vengono visualizzate come
colonne "virtuali" che possono essere espanse nell'editor
di query, creando il join appropriato.
Se il calcolo delle dipendenze di chiave esterna è
un'operazione costosa per il driver, è possibile impostare
questo valore su false.
Predefinito: true

HierarchicalNavigation Valore logico che imposta se visualizzare le tabelle


raggruppate in base ai relativi nomi di schema. Se
impostata su false, le tabelle verranno visualizzate in un
elenco semplice in ogni database.
Valore predefinito: false

SqlCompatibleWindowsAuth Valore logico che determina se generare una stringa SQL


Server di connessione compatibile quando si usa
Windows authentication — Trusted_Connection=Sì.
Se il driver supporta l Windows authentication, ma
richiede impostazioni aggiuntive o alternative nella
stringa di connessione, è necessario impostare questo
valore su false e usare il campo di record dell'opzione
CredentialConnectionString descritto di seguito.
Predefinito: true

Nella tabella seguente vengono descritti i campi di record delle opzioni disponibili solo tramite estendibilità. I
campi che non sono valori letterali semplici sono descritti nelle sezioni successive.

CAMPO DESC RIZ IO N E

AstVisitor Record contenente uno o più override per controllare la


generazione SQL query. L'utilizzo più comune di questo
campo è fornire la logica per generare una clausola
LIMIT/OFFSET per i driver che non supportano TOP.
I campi includono:
Costante
LimitClause
Per altre informazioni, vedere la sezione AstVisitor.
CAMPO DESC RIZ IO N E

CancelQueryExplicitly Valore logico che indica al motore M di annullare in


modo esplicito tutte le chiamate in esecuzione tramite il
driver ODBC prima di terminare la connessione al server
ODBC.
Questo campo è utile in situazioni in cui l'esecuzione di
query viene gestita indipendentemente dalle connessioni
di rete al server, ad esempio in alcune distribuzioni
spark. Nella maggior parte dei casi, questo valore non
deve essere impostato perché la query nel server viene
annullata quando viene terminata la connessione di rete
al server.
Valore predefinito: false

ClientConnectionPooling Valore logico che abilita il pool di connessioni sul lato


client per il driver ODBC. La maggior parte dei driver
dovrà impostare questo valore su true.
Valore predefinito: false

CredentialConnectionString Valore di testo o record utilizzato per specificare le


proprietà della stringa di connessione correlate alle
credenziali.
Per altre informazioni, vedere la sezione Credenziali.

HideNativeQuery Valore logico che controlla se il connettore consente il


SQL native da parte di una query usando la funzione
Value.NativeQuery().
Nota: questa funzionalità non è attualmente esposta
nell'esperienza Power Query'utente. Gli utenti dovranno
modificare manualmente le query per sfruttare questa
funzionalità.
Valore predefinito: false

ImplicitTypeConversions Valore di tabella contenente conversioni di tipi implicite


supportate dal driver o dal server back-end. I valori in
questa tabella sono additivi alle conversioni segnalate
dal driver stesso.
Questo campo viene in genere usato insieme al campo
SQLGetTypeInfo quando si esegue l'override delle
informazioni sul tipo di dati segnalate dal driver.
Per altre informazioni, vedere la sezione
ImplicitTypeConversions.
CAMPO DESC RIZ IO N E

OnError Funzione di gestione degli errori che riceve un


parametro errorRecord di tipo record.
Gli usi comuni di questa funzione includono la gestione
degli errori di connessione SSL, la fornitura di un
collegamento di download se il driver non viene trovato
nel sistema e la segnalazione di errori di autenticazione.
Per altre informazioni, vedere la sezione OnError.

SoftNumbers Consente al motore M di selezionare un tipo di dati


compatibile quando la conversione tra due tipi numerici
specifici non è dichiarata come supportata nelle
funzionalità SQL_CONVERT_*.
Valore predefinito: false

SqlCapabilities Record che fornisce varie sostituzioni delle funzionalità


del driver e un modo per specificare le funzionalità non
espresse tramite ODBC 3.8.
Per altre informazioni, vedere la sezione SqlCapabilities.

SQLColumns Funzione che consente di modificare i metadati della


colonna restituiti dalla funzione SQLColumns.
Per altre informazioni, vedere la sezione SQLColumns.

SQLGetFunctions Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetFunctions.
Un uso comune di questo campo è disabilitare l'uso
dell'associazione di parametri o specificare che le query
generate devono usare CAST anziché CONVERT.
Per altre informazioni, vedere la sezione
SQLGetFunctions.

SQLGetInfo Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetInfo.
Per altre informazioni, vedere la sezione SQLGetInfo.
CAMPO DESC RIZ IO N E

SQLGetTypeInfo Tabella o funzione che restituisce una tabella che esegue


l'override delle informazioni sul tipo restituite da
SQLGetTypeInfo.
Quando il valore è impostato su una tabella, il valore
sostituisce completamente le informazioni sul tipo
segnalate dal driver. SQLGetTypeInfo non verrà
chiamato.
Quando il valore è impostato su una funzione, la
funzione riceverà il risultato della chiamata originale a
SQLGetTypeInfo, consentendo di modificare la tabella.
Questo campo viene in genere usato in caso di mancata
corrispondenza tra i tipi di dati segnalati da
SQLGetTypeInfo e SQLColumns.
Per altre informazioni, vedere la sezione SQLGetTypeInfo.

SQLTables Funzione che consente di modificare i metadati della


tabella restituiti da una chiamata a SQLTables.
Per altre informazioni, vedere la sezione SQLTables.

TollerConcatOverflow Consente la concatenazione dei valori di testo anche se il


risultato potrebbe essere troncato per rientrare
nell'intervallo di un tipo disponibile.
Ad esempio, quando si concatena un campo
VARCHAR(4000) con un campo VARCHAR(4000) in un
sistema che supporta una dimensione MASSIMA DI
VARCHAR pari a 4000 e nessun tipo CLOB, la
concatenazione verrà troncato anche se il risultato
potrebbe essere troncato.
Valore predefinito: false

UseEmbeddedDriver (uso interno): Valore logico che controlla se il driver


ODBC deve essere caricato da una directory locale
(utilizzando le nuove funzionalità definite nella specifica
ODBC 4.0). Questa impostazione viene in genere
impostata solo dai connettori creati da Microsoft forniti
con Power Query.
Se impostata su false, verrà utilizzata la gestione driver
ODBC di sistema per individuare e caricare il driver.
La maggior parte dei connettori non deve impostare
questo campo.
Valore predefinito: false

Override di AstVisitor
Il campo AstVisitor viene impostato tramite il record di opzioni Odbc.DataSource. Viene usato per modificare le
SQL generate per scenari di query specifici.
NOTE
I driver che supportano le clausole e (anziché ) vogliono fornire LIMIT OFFSET un override TOP LimitClause per
AstVisitor.

Costante
L'impostazione di un override per questo valore è stata deprecata e potrebbe essere rimossa dalle
implementazioni future.
LimitClause
Questo campo è una funzione che riceve due argomenti (skip, take) e restituisce un record con due campi di
testo Int64.Type (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

Il parametro skip è il numero di righe da ignorare, ovvero l'argomento per OFFSET. Se non viene specificato un
offset, il valore skip sarà Null. Se il driver supporta , ma non supporta , la funzione LimitClause deve restituire un
errore non implementata (...) quando skip è LIMIT OFFSET maggiore di 0.
Il parametro take è il numero di righe da prendere, ovvero l'argomento per LIMIT.
Il Text campo del risultato contiene il SQL da aggiungere alla query generata.
Il Location campo specifica dove inserire la clausola . Nella tabella seguente vengono descritti i valori
supportati.

VA LO RE DESC RIZ IO N E ESEM P IO

AfterQuerySpecification La clausola LIMIT viene inserita alla SELECT a, b, c


fine del SQL.
Tabella FROM
Si tratta della sintassi LIMIT più
comunemente supportata. WHERE a > 10
LIMITE 5

BeforeQuerySpecification La clausola LIMIT viene inserita prima LIMITE DI 5 RIGHE


dell'istruzione SQL generata.
SELECT a, b, c
Tabella FROM
WHERE a > 10

AfterSelect LIMIT va dopo l'istruzione SELECT e SELECT DISTINCT LIMIT 5 a, b, c


dopo qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

AfterSelectBeforeModifiers LIMIT va dopo l'istruzione SELECT, ma SELECT LIMIT 5 DISTINCT a, b, c


prima di qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che prevede una
clausola LIMIT, con un offset facoltativo, nel formato seguente: [OFFSET <offset> ROWS] LIMIT <row_count>
LimitClause = (skip, take) =>
let
offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
in
[
Text = Text.Format("#{0} #{1}", {offset, limit}),
Location = "AfterQuerySpecification"
]

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che supporta LIMIT, ma
non OFFSET. Formato: LIMIT <row_count> .

LimitClause = (skip, take) =>


if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]

Override di SqlCapabilities
CAMPO DET TA GL I

FractionalSecondsScale Valore numerico compreso tra 1 e 7 che indica il numero


di posizioni decimali supportate per i valori dei
millisecondi. Questo valore deve essere impostato dai
connettori che vogliono abilitare la query di folding sui
valori datetime.
Impostazione predefinita: null

PrepareStatements Valore logico che indica che le istruzioni devono essere


preparate utilizzando SQLPrepare.
Valore predefinito: false

SupportsTop Valore logico che indica che il driver supporta la clausola


TOP per limitare il numero di righe restituite.
Valore predefinito: false

StringLiteralEscapeCharacters Elenco di valori di testo che specificano i caratteri da


usare per l'escape di valori letterali stringa ed espressioni
LIKE.
Ex. {""}
Impostazione predefinita: null
CAMPO DET TA GL I

SupportsDerivedTable Valore logico che indica che il driver supporta le tabelle


derivate (sub-select).
Si presuppone che questo valore sia true per i driver che
impostano il livello di conformità su
SQL_SC_SQL92_FULL (segnalato dal driver o sottoposto
a override con l'impostazione Sql92Conformance (vedere
di seguito). Per tutti gli altri livelli di conformità, il valore
predefinito è false.
Se il driver non segnala il livello SQL_SC_SQL92_FULL
conformità, ma supporta le tabelle derivate, impostare
questo valore su true.
Si noti che il supporto delle tabelle derivate è necessario
per molti scenari di Direct Query.

SupportsNumericLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali numerici. Se impostato su false, i valori
numerici verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

SupportsStringLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali stringa. Se impostato su false, i valori
stringa verranno sempre specificati usando l'associazione
di parametri.
Valore predefinito: false

SupportsOdbcDateLiterals Valore logico che indica se il valore SQL deve includere


valori letterali data. Se impostato su false, i valori di data
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimeLiterals Valore logico che indica se il valore SQL deve includere


valori letterali di ora. Se impostato su false, i valori di ora
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimestampLiterals Valore logico che indica se il valore SQL deve includere


valori letterali timestamp. Se impostato su false, i valori
timestamp verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

Override di SQLColumns
SQLColumns è un gestore di funzioni che riceve i risultati di una chiamata ODBC a SQLColumns. Il parametro
source contiene una tabella con le informazioni sul tipo di dati. Questo override viene in genere usato per
correggere le mancate corrispondenze dei tipi di dati tra le chiamate SQLGetTypeInfo a e SQLColumns .
Per informazioni dettagliate sul formato del parametro della tabella di origine, vedere Funzione SQLColumns.
Override di SQLGetFunctions
Questo campo viene usato per eseguire l'override dei valori SQLFunctions restituiti da un driver ODBC.
Contiene un record i cui nomi di campo sono uguali alle costanti FunctionId definite per la funzione ODBC
SQLGetFunctions. Le costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC.

CAMPO DET TA GL I

SQL_CONVERT_FUNCTIONS Indica le funzioni supportate durante le conversioni di tipi.


Per impostazione predefinita, il motore M tenterà di usare la
funzione CONVERT. I driver che preferiscono l'uso di CAST
possono eseguire l'override di questo valore per segnalare
che solo SQL_FN_CVT_CAST (valore numerico di 0x2) è
supportato.

SQL_API_SQLBINDCOL Valore logico (true/false) che indica se il motore Mashup


deve usare l'API SQLBindCol durante il recupero dei dati.
Se impostato su false, viene invece usato SQLGetData.
Valore predefinito: false

Il frammento di codice seguente fornisce un esempio che indica in modo esplicito al motore M di usare CAST
anziché CONVERT.

SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

Override di SQLGetInfo
Questo campo viene usato per eseguire l'override dei valori SQLGetInfo restituiti da un driver ODBC. Contiene
un record i cui campi sono nomi uguali alle costanti InfoType definite per la funzione ODBC SQLGetInfo. Le
costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC. L'elenco completo degli
InfoType verificati è disponibile nei file di traccia del motore Mashup.
La tabella seguente contiene le proprietà SQLGetInfo comunemente sottoposte a override:

CAMPO DET TA GL I

SQL_SQL_CONFORMANCE Valore intero che indica il livello di SQL-92 supportato


dal driver:
(1) SQL_SC_SQL92_ENTRY = Livello di SQL-92 conforme.
(2) SQL_SC_FIPS127_2_TRANSITIONAL = conforme al
livello di transizione FIPS 127-2.
(4) SQL_SC_ SQL92_INTERMEDIATE = livello intermedio
SQL-92.
(8) SQL_SC_SQL92_FULL = Conforme al livello SQL-92.
Si noti che in Power Query, il connettore verrà usato in
modalità sola lettura. La maggior parte dei driver vuole
segnalare un SQL_SC_SQL92_FULL di conformità ed
eseguire l'override di un comportamento di generazione
SQL specifico usando le proprietà SQLGetInfo e
SQLGetFunctions.
CAMPO DET TA GL I

SQL_SQL92_PREDICATES Maschera di bit che enumera i predicati supportati in


un'istruzione SELECT, come definito in SQL-92.
Vedere le SQL_SP_* nella specifica ODBC.

SQL_AGGREGATE_FUNCTIONS Maschera di bit che enumera il supporto per le funzioni


di aggregazione.
SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM
Vedere le SQL_AF_* nella specifica ODBC.

SQL_GROUP_BY Valore intero che specifica la relazione tra le colonne


nella clausola GROUP BY e le colonne non aggregate
nell'elenco di selezione:
SQL_GB_COLLATE = È possibile specificare una clausola
COLLATE alla fine di ogni colonna di raggruppamento.
SQL_GB_NOT_SUPPORTED = Le clausole GROUP BY non
sono supportate.
SQL_GB_GROUP_BY_EQUALS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Non può contenere
altre colonne. Ad esempio, SELECT DEPT, MAX(SALARY)
FROM EMPLOYEE GROUP BY DEPT.
SQL_GB_GROUP_BY_CONTAINS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Può contenere
colonne non presenti nell'elenco di selezione. Ad
esempio, SELECT DEPT, MAX(SALARY) FROM EMPLOYEE
GROUP BY DEPT, AGE.
SQL_GB_NO_RELATION = Le colonne nella clausola
GROUP BY e nell'elenco di selezione non sono correlate.
Il significato delle colonne non raggruppate e non
aggregate nell'elenco di selezione dipende dall'origine
dati. Ad esempio, SELECT DEPT, SALARY FROM
EMPLOYEE GROUP BY DEPT, AGE.
Vedere le SQL_GB_* nella specifica ODBC.

La funzione helper seguente può essere usata per creare valori di maschera di bit da un elenco di valori integer:
Flags = (flags as list) =>
let
Loop = List.Generate(
()=> [i = 0, Combined = 0],
each [i] < List.Count(flags),
each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
each [Combined]),
Result = List.Last(Loop, 0)
in
Result;

Override di SQLGetTypeInfo
SQLGetTypeInfo può essere specificato in due modi:

Valore table fisso che contiene le stesse informazioni sul tipo di una chiamata ODBC a SQLGetTypeInfo .
Funzione che accetta un argomento table e restituisce una tabella. L'argomento conterrà i risultati originali
della chiamata ODBC a SQLGetTypeInfo . L'implementazione della funzione può modificare o aggiungere a
questa tabella.
Il primo approccio viene usato per eseguire completamente l'override dei valori restituiti dal driver ODBC. Il
secondo approccio viene usato se si desidera aggiungere o modificare questi valori.
Per informazioni dettagliate sul formato del parametro di tabella dei tipi e sul valore restituito previsto, vedere le
informazioni di riferimento sulla funzione SQLGetTypeInfo.
SQLGetTypeInfo con una tabella statica
Il frammento di codice seguente fornisce un'implementazione statica per SQLGetTypeInfo.

SQLGetTypeInfo = #table(
{ "TYPE_NAME", "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",
"NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX",
"INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

{ "char", 1, 65535, "'", "'", "max. length",


1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "int8", -5, 19, "'", "'", null,
1, 0, 2, 0, 10, 0,
"int8", 0, 0, -5, null, 2,
0, 0 },
{ "bit", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "bool", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "date", 9, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "numeric", 3, 28, null, null, null,
1, 0, 2, 0, 0, 0,
"numeric", 0, 0, 2, null, 10,
0, 0 },
{ "float8", 8, 15, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "float8", 6, 17, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "uuid", -11, 37, null, null, null,
1, 0, 2, null, 0, null,
"uuid", null, null, -11, null, null,
0, 0 },
{ "int4", 4, 10, null, null, null,
1, 0, 2, 0, 0, 0,
"int4", 0, 0, 4, null, 2,
0, 0 },
{ "text", -1, 65535, "'", "'", null,
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "lo", -4, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"lo", null, null, -4, null, null,
0, 0 },
{ "numeric", 2, 28, null, null, "precision, scale",
1, 0, 2, 0, 10, 0,
"numeric", 0, 6, 2, null, 10,
0, 0 },
{ "float4", 7, 9, null, null, null,
1, 0, 2, 0, 10, 0,
"float4", null, null, 7, null, 2,
0, 0 },
{ "int2", 5, 19, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "int2", -6, 5, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "timestamp", 11, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "date", 91, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "timestamp", 93, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "bytea", -3, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"bytea", null, null, -3, null, null,
0, 0 },
{ "varchar", 12, 65535, "'", "'", "max. length",
1, 0, 2, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "char", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "text", -10, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "varchar", -9, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "bpchar", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
1, 1, 3, null, 0, null,
"bpchar", null, null, -9, null, null,
0, 0 } }
);

SQLGetTypeInfo con una funzione


I frammenti di codice seguenti bpchar accodare il tipo ai tipi esistenti restituiti dal driver.

SQLGetTypeInfo = (types as table) as table =>


let
newTypes = #table(
{
"TYPE_NAME",
"DATA_TYPE",
"COLUMN_SIZE",
"LITERAL_PREF",
"LITERAL_SUFFIX",
"CREATE_PARAS",
"NULLABLE",
"CASE_SENSITIVE",
"SEARCHABLE",
"UNSIGNED_ATTRIBUTE",
"FIXED_PREC_SCALE",
"AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME",
"MINIMUM_SCALE",
"MAXIMUM_SCALE",
"SQL_DATA_TYPE",
"SQL_DATETIME_SUB",
"NUM_PREC_RADIX",
"INTERNAL_PRECISION",
"USER_DATA_TYPE"
},
// we add a new entry for each type we want to add
{
{
"bpchar",
-8,
65535,
"'",
"'",
"max. length",
1,
1,
3,
null,
0,
null,
"bpchar",
null,
null,
-9,
null,
null,
0,
0
}
}),
append = Table.Combine({types, newTypes})
in
append;

Impostazione della stringa di connessione


La stringa di connessione per il driver ODBC viene impostata usando il primo argomento per le funzioni
Odbc.DataSource e/o Odbc.Query. Il valore può essere testo o un record M. Quando si usa il record, ogni campo
nel record diventerà una proprietà nella stringa di connessione. Tutte le stringhe di connessione richiedono un
campo Driver (o un campo DSN) se si richiede agli utenti di pre-configurare un DSN a livello di sistema. Le
proprietà correlate alle credenziali verranno impostate separatamente (vedere di seguito). Altre proprietà
saranno specifiche del driver.
Il frammento di codice seguente illustra la definizione di una nuova funzione dell'origine dati, la creazione del
record ConnectionString e la chiamata della funzione Odbc.DataSource.

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
let
ConnectionString = [
Driver = "SQL Server Native Client 11.0",
Server = server,
MultiSubnetFailover = "Yes",
ApplicationIntent = "ReadOnly",
APP = "PowerBICustomConnector"
],
OdbcDatasource = Odbc.DataSource(ConnectionString)
in
OdbcDatasource;

Risoluzione dei problemi e test


Per abilitare la traccia in Power BI Desktop:
1. Passare a File > Opzioni e impostazioni > Opzioni .
2. Selezionare la scheda Diagnostica.
3. Selezionare l'opzione Abilita traccia.
4. Selezionare il collegamento Apri car tella tracce (deve essere
%LOCALAPPDATA%/Microsoft/Power BI Desktop/Traces ).
5. Eliminare i file di traccia esistenti.
6. Eseguire i test.
7. Chiudere Power BI Desktop per assicurarsi che tutti i file di log siano scaricati su disco.
Ecco i passaggi che è possibile eseguire per i test iniziali in Power BI Desktop:
1. Chiudere Power BI Desktop.
2. Cancellare la directory di traccia.
3. Aprire Power BI desktop e abilitare la traccia.
4. Connessione all'origine dati e selezionare la modalità Direct Query.
5. Selezionare una tabella nello strumento di navigazione e selezionare Modifica.
6. Modificare la query in vari modi, tra cui:

Prendere le prime N righe (ad esempio, 10).


Impostare filtri di uguaglianza su tipi di dati diversi (int, string, bool e così via).
Impostare altri filtri di intervallo (maggiore di, minore di).
Filtrare in base a NULL/NOT NULL.
Consente di selezionare un set secondario di colonne.
Aggregazione/Raggruppamento per diverse combinazioni di colonne.
Aggiungere una colonna calcolata da altre colonne ([C] = [A] + [B]).
Ordinare in base a una colonna, più colonne. 7. Le espressioni che non vengono rilevate verranno
restituite in una barra di avviso. Prendere nota dell'errore, rimuovere il passaggio e passare al passaggio
test case. I dettagli sulla causa dell'errore devono essere generati nei log di traccia. 8. Chiudere Power BI
Desktop. 9. Copiare i file di traccia in una nuova directory. 10. Usare la cartella di Power BI cartella di
lavoro consigliata per analizzare i file di traccia.

Dopo aver creato query semplici, è possibile provare gli scenari di Direct Query, ad esempio la creazione di
report nelle visualizzazioni report. Le query generate in modalità Direct Query saranno notevolmente più
complesse, ovvero l'uso di sub-select, istruzioni COALESCE e aggregazioni.
Concatenazione di stringhe in modalità Direct Query
Il motore M esegue la convalida dei limiti delle dimensioni del tipo di base come parte della logica di folding
della query. Se si riceve un errore di tipo folding quando si tenta di concatenare due stringhe che
potenzialmente superano le dimensioni massime del tipo di database sottostante:
1. Assicurarsi che il database sia in grado di supportare la conversione in tipi CLOB quando si verifica l'overflow
concat della stringa.
2. Impostare TolerateConcatOverflow l'opzione per Odbc.DataSource su true .

La funzione DAX CONCATENATE non è attualmente supportata dalle Power Query/ODBC. Gli autori di
estensioni devono assicurarsi che la concatenazione delle stringhe funzioni tramite l'editor di query
aggiungendo colonne calcolate ( [stringCol1] & [stringCol2] ). Quando in futuro viene aggiunta la
possibilità di eseguire la fold dell'operazione CONCATENATE, l'operazione dovrebbe funzionare senza
problemi con le estensioni esistenti.
Abilitazione di Direct Query per un connettore
basato su ODBC
07/12/2021 • 23 minutes to read

Panoramica
L'uso della funzione Odbc.DataSource incorporata di M è il modo consigliato per creare connettori
personalizzati per le origini dati con un driver ODBC esistente e/o supportano una sintassi SQL query. Il
wrapping della funzione Odbc.DataSource consentirà al connettore di ereditare il comportamento predefinito di
ripiegamento delle query in base alle funzionalità segnalate dal driver. Questo consentirà al motore M di
generare istruzioni SQL in base ai filtri e ad altre trasformazioni definite dall'utente all'interno dell'esperienza
Power Query, senza dover fornire questa logica all'interno del connettore stesso.
Le estensioni ODBC possono facoltativamente abilitare la modalità Direct Query, consentendo Power BI
generare dinamicamente query in fase di esecuzione senza pre-memorizzare nella cache il modello di dati
dell'utente.

NOTE
L'abilitazione del supporto di Direct Query aumenta il livello di difficoltà e complessità del connettore. Quando Direct
Query è abilitato, Power BI il motore M non compenserà le operazioni di cui non è possibile eseguire completamente il
push nell'origine dati sottostante.

Questa sezione si basa sui concetti presentati nelle informazioni di riferimento sull'estendibilità M e presuppone
familiarità con la creazione di un connettore dati di base.
Vedere l'esempio SqlODBC per la maggior parte degli esempi di codice nelle sezioni seguenti. Altri esempi sono
disponibili nella directory degli esempi ODBC.

Funzioni di estendibilità ODBC


Il motore M fornisce due funzioni di origine dati odbc correlate: Odbc.DataSourcee Odbc.Query.
La funzione Odbc.DataSource fornisce una tabella di navigazione predefinita con tutti i database, le tabelle e le
viste del sistema, supporta la visualizzazione delle query e consente una gamma di opzioni di personalizzazione.
La maggior parte delle estensioni basate su ODBC userà questa funzione come funzione di estendibilità
primaria. La funzione accetta due argomenti una stringa di connessione — e un record di opzioni per fornire
sostituzioni del comportamento.
La funzione Odbc.Query consente di eseguire SQL istruzioni tramite un driver ODBC. Funge da pass-through
per l'esecuzione di query. A differenza della funzione Odbc.DataSource, non fornisce la funzionalità di folding
delle query e richiede che SQL query siano fornite dal connettore (o dall'utente finale). Quando si compila un
connettore personalizzato, questa funzione viene in genere usata internamente per eseguire query per
recuperare metadati che potrebbero non essere esposti tramite normali canali ODBC. La funzione accetta due
argomenti — una stringa di connessione e una SQL query.

Parametri per la funzione dell'origine dati


I connettori personalizzati possono accettare un numero qualsiasi di argomenti di funzione, ma per rimanere
coerenti con le funzioni dell'origine dati incorporate fornite con Power Query, sono consigliate le linee guida
seguenti:
Richiedere il set minimo di parametri usato per stabilire una connessione al server. Minore è il numero di
parametri che gli utenti finali devono fornire, più facile sarà l'uso del connettore.
Sebbene sia possibile definire parametri con un numero fisso di valori, ovvero un elenco a discesa
nell'interfaccia utente, i parametri vengono immessi prima dell'autenticazione dell'utente. Tutti i valori
individuabili a livello di codice dopo l'autenticazione dell'utente ,ad esempio il nome del catalogo o del
database, devono essere selezionabili tramite lo strumento di navigazione. Il comportamento predefinito
per la funzione Odbc.DataSource consiste nel restituire una tabella di navigazione gerarchica costituita da
nomi di catalogo (database), schema e tabella, anche se può essere sostituita all'interno del connettore.
Se si vuole che gli utenti sappiano in genere quali valori immettere per gli elementi selezionati dallo
strumento di navigazione (ad esempio il nome del database), rendere facoltativi questi parametri. I
parametri individuati a livello di codice non devono essere resi obbligatori.
L'ultimo parametro per la funzione deve essere un record facoltativo denominato "opzioni". Questo
parametro consente in genere agli utenti avanzati di impostare proprietà odbc comuni correlate (ad
esempio CommandTimeout), impostare override del comportamento specifici per il connettore e
consente l'estendibilità futura senza influire sulla compatibilità con le versioni precedenti per la funzione.
Gli argomenti correlati a sicurezza/credenziali NON DEVONO mai far parte dei parametri della funzione
dell'origine dati, poiché i valori immessi nella finestra di dialogo di connessione verranno resi persistenti
nella query dell'utente. I parametri correlati alle credenziali devono essere specificati come parte dei
metodi di autenticazione supportati dal connettore.
Per impostazione predefinita, tutti i parametri obbligatori per la funzione dell'origine dati vengono fattoriati nel
valore Percorso origine dati usato per identificare le credenziali utente.
Si noti che, mentre l'interfaccia utente per la funzione Odbc.DataSource predefinita fornisce un elenco a discesa
che consente all'utente di selezionare un DSN, questa funzionalità non è disponibile tramite estendibilità. Se la
configurazione dell'origine dati è sufficientemente complessa da richiedere una finestra di dialogo di
configurazione completamente personalizzabile, è consigliabile richiedere agli utenti finali di pre-configurare un
DSN di sistema e impostare la funzione sul nome DSN come campo di testo.

Parametri per Odbc.DataSource


La funzione Odbc.DataSource accetta due parametri connectionString per il driver e un record di opzioni che
consente di — eseguire l'override di vari comportamenti del driver. Tramite il record delle opzioni è possibile
eseguire l'override delle funzionalità e di altre informazioni segnalate dal driver, controllare il comportamento
dello strumento di navigazione e influire SQL query generate dal motore M.
I campi dei record delle opzioni supportate rientrano in due categorie, quelle pubbliche/sempre disponibili e
quelle disponibili solo in un contesto — di estendibilità.
Nella tabella seguente vengono descritti i campi pubblici nel record delle opzioni.

CAMPO DESC RIZ IO N E

CommandTimeout Valore di durata che controlla per quanto tempo è


consentita l'esecuzione della query sul lato server prima
che venga annullata.
Impostazione predefinita: 10 minuti
CAMPO DESC RIZ IO N E

ConnectionTimeout Valore di durata che controlla il tempo di attesa prima di


abbandonare un tentativo di stabilire una connessione al
server.
Impostazione predefinita: 15 secondi

CreateNavigationProperties Valore logico che imposta se generare le proprietà di


navigazione nelle tabelle restituite. Le proprietà di
navigazione sono basate sulle relazioni di chiave esterna
segnalate dal driver e vengono visualizzate come
colonne "virtuali" che possono essere espanse nell'editor
di query, creando il join appropriato.
Se il calcolo delle dipendenze di chiave esterna è
un'operazione costosa per il driver, è possibile impostare
questo valore su false.
Predefinito: true

HierarchicalNavigation Valore logico che imposta se visualizzare le tabelle


raggruppate in base ai relativi nomi di schema. Se
impostata su false, le tabelle verranno visualizzate in un
elenco semplice in ogni database.
Valore predefinito: false

SqlCompatibleWindowsAuth Valore logico che determina se generare una stringa SQL


Server di connessione compatibile quando si usa
Windows authentication — Trusted_Connection=Sì.
Se il driver supporta l Windows authentication, ma
richiede impostazioni aggiuntive o alternative nella
stringa di connessione, è necessario impostare questo
valore su false e usare il campo di record dell'opzione
CredentialConnectionString descritto di seguito.
Predefinito: true

Nella tabella seguente vengono descritti i campi di record delle opzioni disponibili solo tramite estendibilità. I
campi che non sono valori letterali semplici sono descritti nelle sezioni successive.

CAMPO DESC RIZ IO N E

AstVisitor Record contenente uno o più override per controllare la


generazione SQL query. L'utilizzo più comune di questo
campo è fornire la logica per generare una clausola
LIMIT/OFFSET per i driver che non supportano TOP.
I campi includono:
Costante
LimitClause
Per altre informazioni, vedere la sezione AstVisitor.
CAMPO DESC RIZ IO N E

CancelQueryExplicitly Valore logico che indica al motore M di annullare in


modo esplicito tutte le chiamate in esecuzione tramite il
driver ODBC prima di terminare la connessione al server
ODBC.
Questo campo è utile in situazioni in cui l'esecuzione di
query viene gestita indipendentemente dalle connessioni
di rete al server, ad esempio in alcune distribuzioni
spark. Nella maggior parte dei casi, questo valore non
deve essere impostato perché la query nel server viene
annullata quando viene terminata la connessione di rete
al server.
Valore predefinito: false

ClientConnectionPooling Valore logico che abilita il pool di connessioni sul lato


client per il driver ODBC. La maggior parte dei driver
dovrà impostare questo valore su true.
Valore predefinito: false

CredentialConnectionString Valore di testo o record utilizzato per specificare le


proprietà della stringa di connessione correlate alle
credenziali.
Per altre informazioni, vedere la sezione Credenziali.

HideNativeQuery Valore logico che controlla se il connettore consente il


SQL native da parte di una query usando la funzione
Value.NativeQuery().
Nota: questa funzionalità non è attualmente esposta
nell'esperienza Power Query'utente. Gli utenti dovranno
modificare manualmente le query per sfruttare questa
funzionalità.
Valore predefinito: false

ImplicitTypeConversions Valore di tabella contenente conversioni di tipi implicite


supportate dal driver o dal server back-end. I valori in
questa tabella sono additivi alle conversioni segnalate
dal driver stesso.
Questo campo viene in genere usato insieme al campo
SQLGetTypeInfo quando si esegue l'override delle
informazioni sul tipo di dati segnalate dal driver.
Per altre informazioni, vedere la sezione
ImplicitTypeConversions.
CAMPO DESC RIZ IO N E

OnError Funzione di gestione degli errori che riceve un


parametro errorRecord di tipo record.
Gli usi comuni di questa funzione includono la gestione
degli errori di connessione SSL, la fornitura di un
collegamento di download se il driver non viene trovato
nel sistema e la segnalazione di errori di autenticazione.
Per altre informazioni, vedere la sezione OnError.

SoftNumbers Consente al motore M di selezionare un tipo di dati


compatibile quando la conversione tra due tipi numerici
specifici non è dichiarata come supportata nelle
funzionalità SQL_CONVERT_*.
Valore predefinito: false

SqlCapabilities Record che fornisce varie sostituzioni delle funzionalità


del driver e un modo per specificare le funzionalità non
espresse tramite ODBC 3.8.
Per altre informazioni, vedere la sezione SqlCapabilities.

SQLColumns Funzione che consente di modificare i metadati della


colonna restituiti dalla funzione SQLColumns.
Per altre informazioni, vedere la sezione SQLColumns.

SQLGetFunctions Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetFunctions.
Un uso comune di questo campo è disabilitare l'uso
dell'associazione di parametri o specificare che le query
generate devono usare CAST anziché CONVERT.
Per altre informazioni, vedere la sezione
SQLGetFunctions.

SQLGetInfo Record che consente di eseguire l'override dei valori


restituiti dalle chiamate a SQLGetInfo.
Per altre informazioni, vedere la sezione SQLGetInfo.
CAMPO DESC RIZ IO N E

SQLGetTypeInfo Tabella o funzione che restituisce una tabella che esegue


l'override delle informazioni sul tipo restituite da
SQLGetTypeInfo.
Quando il valore è impostato su una tabella, il valore
sostituisce completamente le informazioni sul tipo
segnalate dal driver. SQLGetTypeInfo non verrà
chiamato.
Quando il valore è impostato su una funzione, la
funzione riceverà il risultato della chiamata originale a
SQLGetTypeInfo, consentendo di modificare la tabella.
Questo campo viene in genere usato in caso di mancata
corrispondenza tra i tipi di dati segnalati da
SQLGetTypeInfo e SQLColumns.
Per altre informazioni, vedere la sezione SQLGetTypeInfo.

SQLTables Funzione che consente di modificare i metadati della


tabella restituiti da una chiamata a SQLTables.
Per altre informazioni, vedere la sezione SQLTables.

TollerConcatOverflow Consente la concatenazione dei valori di testo anche se il


risultato potrebbe essere troncato per rientrare
nell'intervallo di un tipo disponibile.
Ad esempio, quando si concatena un campo
VARCHAR(4000) con un campo VARCHAR(4000) in un
sistema che supporta una dimensione MASSIMA DI
VARCHAR pari a 4000 e nessun tipo CLOB, la
concatenazione verrà troncato anche se il risultato
potrebbe essere troncato.
Valore predefinito: false

UseEmbeddedDriver (uso interno): Valore logico che controlla se il driver


ODBC deve essere caricato da una directory locale
(utilizzando le nuove funzionalità definite nella specifica
ODBC 4.0). Questa impostazione viene in genere
impostata solo dai connettori creati da Microsoft forniti
con Power Query.
Se impostata su false, verrà utilizzata la gestione driver
ODBC di sistema per individuare e caricare il driver.
La maggior parte dei connettori non deve impostare
questo campo.
Valore predefinito: false

Override di AstVisitor
Il campo AstVisitor viene impostato tramite il record di opzioni Odbc.DataSource. Viene usato per modificare le
SQL generate per scenari di query specifici.
NOTE
I driver che supportano le clausole e (anziché ) vogliono fornire LIMIT OFFSET un override TOP LimitClause per
AstVisitor.

Costante
L'impostazione di un override per questo valore è stata deprecata e potrebbe essere rimossa dalle
implementazioni future.
LimitClause
Questo campo è una funzione che riceve due argomenti (skip, take) e restituisce un record con due campi di
testo Int64.Type (Text, Location).

LimitClause = (skip as nullable number, take as number) as record => ...

Il parametro skip è il numero di righe da ignorare, ovvero l'argomento per OFFSET. Se non viene specificato un
offset, il valore skip sarà Null. Se il driver supporta , ma non supporta , la funzione LimitClause deve restituire un
errore non implementata (...) quando skip è LIMIT OFFSET maggiore di 0.
Il parametro take è il numero di righe da prendere, ovvero l'argomento per LIMIT.
Il Text campo del risultato contiene il SQL da aggiungere alla query generata.
Il Location campo specifica dove inserire la clausola . Nella tabella seguente vengono descritti i valori
supportati.

VA LO RE DESC RIZ IO N E ESEM P IO

AfterQuerySpecification La clausola LIMIT viene inserita alla SELECT a, b, c


fine del SQL.
Tabella FROM
Si tratta della sintassi LIMIT più
comunemente supportata. WHERE a > 10
LIMITE 5

BeforeQuerySpecification La clausola LIMIT viene inserita prima LIMITE DI 5 RIGHE


dell'istruzione SQL generata.
SELECT a, b, c
Tabella FROM
WHERE a > 10

AfterSelect LIMIT va dopo l'istruzione SELECT e SELECT DISTINCT LIMIT 5 a, b, c


dopo qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

AfterSelectBeforeModifiers LIMIT va dopo l'istruzione SELECT, ma SELECT LIMIT 5 DISTINCT a, b, c


prima di qualsiasi modificatore (ad
esempio DISTINCT). Tabella FROM
WHERE a > 10

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che prevede una
clausola LIMIT, con un offset facoltativo, nel formato seguente: [OFFSET <offset> ROWS] LIMIT <row_count>
LimitClause = (skip, take) =>
let
offset = if (skip > 0) then Text.Format("OFFSET #{0} ROWS", {skip}) else "",
limit = if (take <> null) then Text.Format("LIMIT #{0}", {take}) else ""
in
[
Text = Text.Format("#{0} #{1}", {offset, limit}),
Location = "AfterQuerySpecification"
]

Il frammento di codice seguente fornisce un'implementazione LimitClause per un driver che supporta LIMIT, ma
non OFFSET. Formato: LIMIT <row_count> .

LimitClause = (skip, take) =>


if (skip > 0) then error "Skip/Offset not supported"
else
[
Text = Text.Format("LIMIT #{0}", {take}),
Location = "AfterQuerySpecification"
]

Override di SqlCapabilities
CAMPO DET TA GL I

FractionalSecondsScale Valore numerico compreso tra 1 e 7 che indica il numero


di posizioni decimali supportate per i valori dei
millisecondi. Questo valore deve essere impostato dai
connettori che vogliono abilitare la query di folding sui
valori datetime.
Impostazione predefinita: null

PrepareStatements Valore logico che indica che le istruzioni devono essere


preparate utilizzando SQLPrepare.
Valore predefinito: false

SupportsTop Valore logico che indica che il driver supporta la clausola


TOP per limitare il numero di righe restituite.
Valore predefinito: false

StringLiteralEscapeCharacters Elenco di valori di testo che specificano i caratteri da


usare per l'escape di valori letterali stringa ed espressioni
LIKE.
Ex. {""}
Impostazione predefinita: null
CAMPO DET TA GL I

SupportsDerivedTable Valore logico che indica che il driver supporta le tabelle


derivate (sub-select).
Si presuppone che questo valore sia true per i driver che
impostano il livello di conformità su
SQL_SC_SQL92_FULL (segnalato dal driver o sottoposto
a override con l'impostazione Sql92Conformance (vedere
di seguito). Per tutti gli altri livelli di conformità, il valore
predefinito è false.
Se il driver non segnala il livello SQL_SC_SQL92_FULL
conformità, ma supporta le tabelle derivate, impostare
questo valore su true.
Si noti che il supporto delle tabelle derivate è necessario
per molti scenari di Direct Query.

SupportsNumericLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali numerici. Se impostato su false, i valori
numerici verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

SupportsStringLiterals Valore logico che indica se l'oggetto SQL deve includere


valori letterali stringa. Se impostato su false, i valori
stringa verranno sempre specificati usando l'associazione
di parametri.
Valore predefinito: false

SupportsOdbcDateLiterals Valore logico che indica se il valore SQL deve includere


valori letterali data. Se impostato su false, i valori di data
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimeLiterals Valore logico che indica se il valore SQL deve includere


valori letterali di ora. Se impostato su false, i valori di ora
verranno sempre specificati usando l'associazione di
parametri.
Valore predefinito: false

SupportsOdbcTimestampLiterals Valore logico che indica se il valore SQL deve includere


valori letterali timestamp. Se impostato su false, i valori
timestamp verranno sempre specificati usando
l'associazione di parametri.
Valore predefinito: false

Override di SQLColumns
SQLColumns è un gestore di funzioni che riceve i risultati di una chiamata ODBC a SQLColumns. Il parametro
source contiene una tabella con le informazioni sul tipo di dati. Questo override viene in genere usato per
correggere le mancate corrispondenze dei tipi di dati tra le chiamate SQLGetTypeInfo a e SQLColumns .
Per informazioni dettagliate sul formato del parametro della tabella di origine, vedere Funzione SQLColumns.
Override di SQLGetFunctions
Questo campo viene usato per eseguire l'override dei valori SQLFunctions restituiti da un driver ODBC.
Contiene un record i cui nomi di campo sono uguali alle costanti FunctionId definite per la funzione ODBC
SQLGetFunctions. Le costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC.

CAMPO DET TA GL I

SQL_CONVERT_FUNCTIONS Indica le funzioni supportate durante le conversioni di tipi.


Per impostazione predefinita, il motore M tenterà di usare la
funzione CONVERT. I driver che preferiscono l'uso di CAST
possono eseguire l'override di questo valore per segnalare
che solo SQL_FN_CVT_CAST (valore numerico di 0x2) è
supportato.

SQL_API_SQLBINDCOL Valore logico (true/false) che indica se il motore Mashup


deve usare l'API SQLBindCol durante il recupero dei dati.
Se impostato su false, viene invece usato SQLGetData.
Valore predefinito: false

Il frammento di codice seguente fornisce un esempio che indica in modo esplicito al motore M di usare CAST
anziché CONVERT.

SQLGetFunctions = [
SQL_CONVERT_FUNCTIONS = 0x2 /* SQL_FN_CVT_CAST */
]

Override di SQLGetInfo
Questo campo viene usato per eseguire l'override dei valori SQLGetInfo restituiti da un driver ODBC. Contiene
un record i cui campi sono nomi uguali alle costanti InfoType definite per la funzione ODBC SQLGetInfo. Le
costanti numeriche per ognuno di questi campi sono disponibili nella specifica ODBC. L'elenco completo degli
InfoType verificati è disponibile nei file di traccia del motore Mashup.
La tabella seguente contiene le proprietà SQLGetInfo comunemente sottoposte a override:

CAMPO DET TA GL I

SQL_SQL_CONFORMANCE Valore intero che indica il livello di SQL-92 supportato


dal driver:
(1) SQL_SC_SQL92_ENTRY = Livello di SQL-92 conforme.
(2) SQL_SC_FIPS127_2_TRANSITIONAL = conforme al
livello di transizione FIPS 127-2.
(4) SQL_SC_ SQL92_INTERMEDIATE = livello intermedio
SQL-92.
(8) SQL_SC_SQL92_FULL = Conforme al livello SQL-92.
Si noti che in Power Query, il connettore verrà usato in
modalità sola lettura. La maggior parte dei driver vuole
segnalare un SQL_SC_SQL92_FULL di conformità ed
eseguire l'override di un comportamento di generazione
SQL specifico usando le proprietà SQLGetInfo e
SQLGetFunctions.
CAMPO DET TA GL I

SQL_SQL92_PREDICATES Maschera di bit che enumera i predicati supportati in


un'istruzione SELECT, come definito in SQL-92.
Vedere le SQL_SP_* nella specifica ODBC.

SQL_AGGREGATE_FUNCTIONS Maschera di bit che enumera il supporto per le funzioni


di aggregazione.
SQL_AF_ALL
SQL_AF_AVG
SQL_AF_COUNT
SQL_AF_DISTINCT
SQL_AF_MAX
SQL_AF_MIN
SQL_AF_SUM
Vedere le SQL_AF_* nella specifica ODBC.

SQL_GROUP_BY Valore intero che specifica la relazione tra le colonne


nella clausola GROUP BY e le colonne non aggregate
nell'elenco di selezione:
SQL_GB_COLLATE = È possibile specificare una clausola
COLLATE alla fine di ogni colonna di raggruppamento.
SQL_GB_NOT_SUPPORTED = Le clausole GROUP BY non
sono supportate.
SQL_GB_GROUP_BY_EQUALS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Non può contenere
altre colonne. Ad esempio, SELECT DEPT, MAX(SALARY)
FROM EMPLOYEE GROUP BY DEPT.
SQL_GB_GROUP_BY_CONTAINS_SELECT = La clausola
GROUP BY deve contenere tutte le colonne non
aggregate nell'elenco di selezione. Può contenere
colonne non presenti nell'elenco di selezione. Ad
esempio, SELECT DEPT, MAX(SALARY) FROM EMPLOYEE
GROUP BY DEPT, AGE.
SQL_GB_NO_RELATION = Le colonne nella clausola
GROUP BY e nell'elenco di selezione non sono correlate.
Il significato delle colonne non raggruppate e non
aggregate nell'elenco di selezione dipende dall'origine
dati. Ad esempio, SELECT DEPT, SALARY FROM
EMPLOYEE GROUP BY DEPT, AGE.
Vedere le SQL_GB_* nella specifica ODBC.

La funzione helper seguente può essere usata per creare valori di maschera di bit da un elenco di valori integer:
Flags = (flags as list) =>
let
Loop = List.Generate(
()=> [i = 0, Combined = 0],
each [i] < List.Count(flags),
each [i = [i]+1, Combined =*Number.BitwiseOr([Combined], flags{i})],
each [Combined]),
Result = List.Last(Loop, 0)
in
Result;

Override di SQLGetTypeInfo
SQLGetTypeInfo può essere specificato in due modi:

Valore table fisso che contiene le stesse informazioni sul tipo di una chiamata ODBC a SQLGetTypeInfo .
Funzione che accetta un argomento table e restituisce una tabella. L'argomento conterrà i risultati originali
della chiamata ODBC a SQLGetTypeInfo . L'implementazione della funzione può modificare o aggiungere a
questa tabella.
Il primo approccio viene usato per eseguire completamente l'override dei valori restituiti dal driver ODBC. Il
secondo approccio viene usato se si desidera aggiungere o modificare questi valori.
Per informazioni dettagliate sul formato del parametro di tabella dei tipi e sul valore restituito previsto, vedere le
informazioni di riferimento sulla funzione SQLGetTypeInfo.
SQLGetTypeInfo con una tabella statica
Il frammento di codice seguente fornisce un'implementazione statica per SQLGetTypeInfo.

SQLGetTypeInfo = #table(
{ "TYPE_NAME", "DATA_TYPE", "COLUMN_SIZE", "LITERAL_PREF", "LITERAL_SUFFIX", "CREATE_PARAS",
"NULLABLE", "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX",
"INTERNAL_PRECISION", "USER_DATA_TYPE" }, {

{ "char", 1, 65535, "'", "'", "max. length",


1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "int8", -5, 19, "'", "'", null,
1, 0, 2, 0, 10, 0,
"int8", 0, 0, -5, null, 2,
0, 0 },
{ "bit", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "bool", -7, 1, "'", "'", null,
1, 1, 3, null, 0, null,
"bit", null, null, -7, null, null,
0, 0 },
{ "date", 9, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "numeric", 3, 28, null, null, null,
1, 0, 2, 0, 0, 0,
"numeric", 0, 0, 2, null, 10,
0, 0 },
{ "float8", 8, 15, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "float8", 6, 17, null, null, null,
1, 0, 2, 0, 0, 0,
"float8", null, null, 6, null, 2,
0, 0 },
{ "uuid", -11, 37, null, null, null,
1, 0, 2, null, 0, null,
"uuid", null, null, -11, null, null,
0, 0 },
{ "int4", 4, 10, null, null, null,
1, 0, 2, 0, 0, 0,
"int4", 0, 0, 4, null, 2,
0, 0 },
{ "text", -1, 65535, "'", "'", null,
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "lo", -4, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"lo", null, null, -4, null, null,
0, 0 },
{ "numeric", 2, 28, null, null, "precision, scale",
1, 0, 2, 0, 10, 0,
"numeric", 0, 6, 2, null, 10,
0, 0 },
{ "float4", 7, 9, null, null, null,
1, 0, 2, 0, 10, 0,
"float4", null, null, 7, null, 2,
0, 0 },
{ "int2", 5, 19, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "int2", -6, 5, null, null, null,
1, 0, 2, 0, 10, 0,
"int2", 0, 0, 5, null, 2,
0, 0 },
{ "timestamp", 11, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "date", 91, 10, "'", "'", null,
1, 0, 2, null, 0, null,
"date", null, null, 9, 1, null,
0, 0 },
{ "timestamp", 93, 26, "'", "'", null,
1, 0, 2, null, 0, null,
"timestamp", 0, 38, 9, 3, null,
0, 0 },
{ "bytea", -3, 255, "'", "'", null,
1, 0, 2, null, 0, null,
"bytea", null, null, -3, null, null,
0, 0 },
{ "varchar", 12, 65535, "'", "'", "max. length",
1, 0, 2, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "char", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"char", null, null, -8, null, null,
0, 0 },
{ "text", -10, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"text", null, null, -10, null, null,
0, 0 },
{ "varchar", -9, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
"varchar", null, null, -9, null, null,
0, 0 },
{ "bpchar", -8, 65535, "'", "'", "max. length",
1, 1, 3, null, 0, null,
1, 1, 3, null, 0, null,
"bpchar", null, null, -9, null, null,
0, 0 } }
);

SQLGetTypeInfo con una funzione


I frammenti di codice seguenti bpchar accodare il tipo ai tipi esistenti restituiti dal driver.

SQLGetTypeInfo = (types as table) as table =>


let
newTypes = #table(
{
"TYPE_NAME",
"DATA_TYPE",
"COLUMN_SIZE",
"LITERAL_PREF",
"LITERAL_SUFFIX",
"CREATE_PARAS",
"NULLABLE",
"CASE_SENSITIVE",
"SEARCHABLE",
"UNSIGNED_ATTRIBUTE",
"FIXED_PREC_SCALE",
"AUTO_UNIQUE_VALUE",
"LOCAL_TYPE_NAME",
"MINIMUM_SCALE",
"MAXIMUM_SCALE",
"SQL_DATA_TYPE",
"SQL_DATETIME_SUB",
"NUM_PREC_RADIX",
"INTERNAL_PRECISION",
"USER_DATA_TYPE"
},
// we add a new entry for each type we want to add
{
{
"bpchar",
-8,
65535,
"'",
"'",
"max. length",
1,
1,
3,
null,
0,
null,
"bpchar",
null,
null,
-9,
null,
null,
0,
0
}
}),
append = Table.Combine({types, newTypes})
in
append;

Impostazione della stringa di connessione


La stringa di connessione per il driver ODBC viene impostata usando il primo argomento per le funzioni
Odbc.DataSource e/o Odbc.Query. Il valore può essere testo o un record M. Quando si usa il record, ogni campo
nel record diventerà una proprietà nella stringa di connessione. Tutte le stringhe di connessione richiedono un
campo Driver (o un campo DSN) se si richiede agli utenti di pre-configurare un DSN a livello di sistema. Le
proprietà correlate alle credenziali verranno impostate separatamente (vedere di seguito). Altre proprietà
saranno specifiche del driver.
Il frammento di codice seguente illustra la definizione di una nuova funzione dell'origine dati, la creazione del
record ConnectionString e la chiamata della funzione Odbc.DataSource.

[DataSource.Kind="SqlODBC", Publish="SqlODBC.Publish"]
shared SqlODBC.Contents = (server as text) =>
let
ConnectionString = [
Driver = "SQL Server Native Client 11.0",
Server = server,
MultiSubnetFailover = "Yes",
ApplicationIntent = "ReadOnly",
APP = "PowerBICustomConnector"
],
OdbcDatasource = Odbc.DataSource(ConnectionString)
in
OdbcDatasource;

Risoluzione dei problemi e test


Per abilitare la traccia in Power BI Desktop:
1. Passare a File > Opzioni e impostazioni > Opzioni .
2. Selezionare la scheda Diagnostica.
3. Selezionare l'opzione Abilita traccia.
4. Selezionare il collegamento Apri car tella tracce (deve essere
%LOCALAPPDATA%/Microsoft/Power BI Desktop/Traces ).
5. Eliminare i file di traccia esistenti.
6. Eseguire i test.
7. Chiudere Power BI Desktop per assicurarsi che tutti i file di log siano scaricati su disco.
Ecco i passaggi che è possibile eseguire per i test iniziali in Power BI Desktop:
1. Chiudere Power BI Desktop.
2. Cancellare la directory di traccia.
3. Aprire Power BI desktop e abilitare la traccia.
4. Connessione all'origine dati e selezionare la modalità Direct Query.
5. Selezionare una tabella nello strumento di navigazione e selezionare Modifica.
6. Modificare la query in vari modi, tra cui:

Prendere le prime N righe (ad esempio, 10).


Impostare filtri di uguaglianza su tipi di dati diversi (int, string, bool e così via).
Impostare altri filtri di intervallo (maggiore di, minore di).
Filtrare in base a NULL/NOT NULL.
Consente di selezionare un set secondario di colonne.
Aggregazione/Raggruppamento per diverse combinazioni di colonne.
Aggiungere una colonna calcolata da altre colonne ([C] = [A] + [B]).
Ordinare in base a una colonna, più colonne. 7. Le espressioni che non vengono rilevate verranno
restituite in una barra di avviso. Prendere nota dell'errore, rimuovere il passaggio e passare al passaggio
test case. I dettagli sulla causa dell'errore devono essere generati nei log di traccia. 8. Chiudere Power BI
Desktop. 9. Copiare i file di traccia in una nuova directory. 10. Usare la cartella di Power BI cartella di
lavoro consigliata per analizzare i file di traccia.

Dopo aver creato query semplici, è possibile provare gli scenari di Direct Query, ad esempio la creazione di
report nelle visualizzazioni report. Le query generate in modalità Direct Query saranno notevolmente più
complesse, ovvero l'uso di sub-select, istruzioni COALESCE e aggregazioni.
Concatenazione di stringhe in modalità Direct Query
Il motore M esegue la convalida dei limiti delle dimensioni del tipo di base come parte della logica di folding
della query. Se si riceve un errore di tipo folding quando si tenta di concatenare due stringhe che
potenzialmente superano le dimensioni massime del tipo di database sottostante:
1. Assicurarsi che il database sia in grado di supportare la conversione in tipi CLOB quando si verifica l'overflow
concat della stringa.
2. Impostare TolerateConcatOverflow l'opzione per Odbc.DataSource su true .

La funzione DAX CONCATENATE non è attualmente supportata dalle Power Query/ODBC. Gli autori di
estensioni devono assicurarsi che la concatenazione delle stringhe funzioni tramite l'editor di query
aggiungendo colonne calcolate ( [stringCol1] & [stringCol2] ). Quando in futuro viene aggiunta la
possibilità di eseguire la fold dell'operazione CONCATENATE, l'operazione dovrebbe funzionare senza
problemi con le estensioni esistenti.
Gestione del percorso delle risorse
07/12/2021 • 2 minutes to read

Il motore M identifica un'origine dati usando una combinazione dei relativi Tipi e Percorso. Quando viene
rilevata un'origine dati durante una valutazione della query, il motore M tenterà di trovare le credenziali
corrispondenti. Se non viene trovata alcuna credenziale, il motore restituisce un errore speciale che restituisce
una richiesta di credenziali Power Query.
Il valore Kind deriva dalla definizione del tipo di [origine] dati.
Il valore Path deriva dai parametri obbligatori delle funzioni dell'origine dati. I parametri facoltativi non vengono
fattoriati nell'identificatore del percorso dell'origine dati. Di conseguenza, tutte le funzioni dell'origine dati
associate a un tipo di origine dati devono avere gli stessi parametri. È presente una gestione speciale per le
funzioni con un singolo parametro di tipo Uri.Type . Per altri dettagli, vedere di seguito.
È possibile visualizzare un esempio di come vengono archiviate le credenziali nella finestra di dialogo
Impostazioni origine dati Power BI Desktop. In questa finestra di dialogo il tipo è rappresentato da un'icona e
il valore Percorso viene visualizzato come testo.

[Nota] Se si modificano i parametri obbligatori della funzione origine dati durante lo sviluppo, le credenziali
archiviate in precedenza non funzioneranno più perché i valori del percorso non corrispondono più. È
necessario eliminare le credenziali archiviate ogni volta che si modificano i parametri della funzione
dell'origine dati. Se vengono trovate credenziali incompatibili, è possibile che venga visualizzato un errore in
fase di esecuzione.
Formato percorso origine dati
Il valore Path per un'origine dati deriva dai parametri obbligatori della funzione dell'origine dati.
Per impostazione predefinita, è possibile visualizzare il valore stringa effettivo nella finestra di dialogo
Impostazioni origine dati in Power BI Desktop e nella richiesta di credenziali. se la definizione Tipo origine dati
include un Label valore, verrà invece visualizzato il valore dell'etichetta.
Ad esempio, la funzione dell'origine dati [nell'esempio HelloWorldWithDocs] ha la firma seguente:

HelloWorldWithDocs.Contents = (message as text, optional count as number) as table => ...

La funzione ha un singolo parametro obbligatorio ( ) di tipo e verrà usata message text per calcolare il
percorso dell'origine dati. Il parametro facoltativo ( count ) verrà ignorato. Il percorso verrà visualizzato come
segue:
Richiesta di credenziali:

Interfaccia utente delle impostazioni dell'origine dati:


Quando viene definito un valore Label, il valore del percorso dell'origine dati non verrà visualizzato:

[Nota] È attualmente consigliabile non includere un'etichetta per l'origine dati se la funzione ha parametri
obbligatori, in quanto gli utenti non saranno in grado di distinguere le diverse credenziali immesse. Si spera
di migliorare questa situazione in futuro, ovvero consentire ai connettori di dati di visualizzare i propri
percorsi di origine dati personalizzati.

Funzioni con un parametro Uri


Poiché le origini dati con un identificatore basato su Uri sono così comuni, nell'interfaccia utente di Power Query
è presente una gestione speciale quando si gestiscono percorsi di origine dati basati su URI. Quando viene
rilevata un'origine dati basata su URI, la finestra di dialogo delle credenziali fornisce un elenco a discesa che
consente all'utente di selezionare il percorso di base, anziché il percorso completo (e tutti i percorsi compresi
tra).

Come è un tipo ascritto anziché un tipo primitivo nel linguaggio M, è necessario usare la funzione Uri.Type
Value.ReplaceType per indicare che il parametro di testo deve essere considerato come uri.
shared GithubSample.Contents = Value.ReplaceType(Github.Contents, type function (url as Uri.type) as any);
Paging
07/12/2021 • 2 minutes to read

Le API REST hanno in genere un meccanismo per trasmettere grandi volumi di record suddivisi in pagine di
risultati. Power Query offre la flessibilità necessaria per supportare molti meccanismi di paging diversi. Tuttavia,
poiché ogni meccanismo di paging è diverso, è probabile che sia necessario apportare alcune modifiche agli
esempi di paging per adattare la situazione.

Modelli tipici
La compilazione di tutti i risultati della pagina in un'unica tabella viene eseguita dalla funzione
Table.GenerateByPage() helper, che in genere può essere usata senza alcuna modifica. I frammenti di codice
presentati nella sezione Table.GenerateByPage() relativa alla funzione helper descrivono come implementare
alcuni modelli di paging comuni. Indipendentemente dal modello, è necessario comprendere:
1. Come si richiede la pagina di dati successiva?
2. Il meccanismo di paging implica il calcolo dei valori o si estrae l'URL per la pagina successiva dalla risposta?
3. Come è possibile sapere quando arrestare il paging?
4. Esistono parametri correlati al paging(ad esempio, "dimensioni pagina") di cui è necessario essere a
conoscenza?
Gestione delle trasformazioni
07/12/2021 • 3 minutes to read

Per le situazioni in cui la risposta dell'origine dati non viene presentata in un formato che Power BI può utilizzare
direttamente, Power Query può essere usata per eseguire una serie di trasformazioni.

Trasformazioni statiche
Nella maggior parte dei casi, i dati vengono presentati in modo coerente dall'origine dati: i nomi delle colonne, i
tipi di dati e la struttura gerarchica sono coerenti per un determinato endpoint. In questa situazione è opportuno
applicare sempre lo stesso set di trasformazioni per ottenere i dati in un formato accettabile per Power BI.
Un esempio di trasformazione statica è disponibile nell'esercitazione TripPin Part 2 - Data Connector for a REST
Service quando l'origine dati viene considerata un servizio REST standard:

let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/Airlines"),
value = Source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand

Le trasformazioni in questo esempio sono:


1. Source è un record restituito da una chiamata a TripPin.Feed(...) .
2. Si estrae il valore da una Source delle coppie chiave-valore. Il nome della chiave è value e si archivia il
risultato in una variabile denominata value .
3. value è un elenco, che viene convertito in una tabella. Ogni elemento in value diventa una riga della
tabella, che è possibile chiamare toTable .
4. Ogni elemento in value è un record. toTable include tutti questi elementi in una singola colonna:
"Column1" . Questo passaggio estrae tutti i dati con chiave in una colonna denominata e tutti i dati con
chiave in una colonna "AirlineCode" denominata , per ogni riga in "AirlineCode" "Name" "Name" toTable
. "Column1" viene sostituito da queste due nuove colonne.
Alla fine della giornata si rimane con i dati in un formato tabulare semplice che Power BI possibile utilizzare ed
eseguire facilmente il rendering:

È importante notare che una sequenza di trasformazioni statiche di questa specificità è applicabile solo a un
singolo endpoint. Nell'esempio precedente questa sequenza di trasformazioni funzionerà solo se ed esiste nella
risposta dell'endpoint REST, perché sono "AirlineCode" "Name" hard coded nel codice M. Pertanto, questa
sequenza di trasformazioni potrebbe non funzionare se si tenta di accedere /Event all'endpoint.
Questo livello elevato di specificità può essere necessario per eseguire il push dei dati in una tabella di
navigazione, ma per le funzioni di accesso ai dati più generali è consigliabile eseguire solo trasformazioni
appropriate per tutti gli endpoint.
NOTE
Assicurarsi di testare le trasformazioni in diverse circostanze dei dati. Se l'utente non ha dati nell'endpoint, le
trasformazioni comportano una tabella vuota /airlines con lo schema corretto? Oppure si è verificato un errore
durante la valutazione? Vedere TripPin Part 7: Advanced Schema with M Types (Parte 7: Schema avanzato con tipi M) per
una discussione sugli unit test.

Trasformazioni dinamiche
È talvolta necessaria una logica più complessa per convertire le risposte api in moduli stabili e coerenti
appropriati per Power BI di dati.
Risposte API incoerenti
Flusso di controllo M di base (istruzioni if, codici di stato HTTP, try... I blocchi catch e così via sono in genere
sufficienti per gestire situazioni in cui l'API risponde in diversi modi.
Determinazione dello schema in tempo reale
Alcune API sono progettate in modo che più informazioni devono essere combinate per ottenere il formato
tabulare corretto. Si consideri la risposta /sheets [dell'endpoint di]Smartsheet, che contiene una matrice di
nomi di colonna e una matrice di righe di dati. Smartsheet Connector è in grado di analizzare questa risposta nel
modo seguente:

raw = Web.Contents(...),
columns = raw[columns],
columnTitles = List.Transform(columns, each [title]),
columnTitlesWithRowNumber = List.InsertRange(columnTitles, 0, {"RowNumber"}),

RowAsList = (row) =>


let
listOfCells = row[cells],
cellValuesList = List.Transform(listOfCells, each if Record.HasFields(_, "value") then [value]
else null),
rowNumberFirst = List.InsertRange(cellValuesList, 0, {row[rowNumber]})
in
rowNumberFirst,

listOfRows = List.Transform(raw[rows], each RowAsList(_)),


result = Table.FromRows(listOfRows, columnTitlesWithRowNumber)

1. Gestire innanzitutto le informazioni sull'intestazione di colonna. È possibile eseguire il pull del record di ogni
colonna in un elenco, anteponendo una colonna che verrà sempre rappresentata title RowNumber come
prima colonna.
2. Successivamente è possibile definire una funzione che consente di analizzare una riga in un elenco di value
celle. È anche possibile anteporre rowNumber le informazioni.
3. Applicare la RowAsList() funzione a ognuno degli elementi row restituiti nella risposta dell'API.
4. Convertire l'elenco in una tabella, specificando le intestazioni di colonna.
Gestione delle trasformazioni
07/12/2021 • 3 minutes to read

Per le situazioni in cui la risposta dell'origine dati non viene presentata in un formato che Power BI può utilizzare
direttamente, Power Query può essere usata per eseguire una serie di trasformazioni.

Trasformazioni statiche
Nella maggior parte dei casi, i dati vengono presentati in modo coerente dall'origine dati: i nomi delle colonne, i
tipi di dati e la struttura gerarchica sono coerenti per un determinato endpoint. In questa situazione è opportuno
applicare sempre lo stesso set di trasformazioni per ottenere i dati in un formato accettabile per Power BI.
Un esempio di trasformazione statica è disponibile nell'esercitazione TripPin Part 2 - Data Connector for a REST
Service quando l'origine dati viene considerata un servizio REST standard:

let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/Airlines"),
value = Source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand

Le trasformazioni in questo esempio sono:


1. Source è un record restituito da una chiamata a TripPin.Feed(...) .
2. Si estrae il valore da una Source delle coppie chiave-valore. Il nome della chiave è value e si archivia il
risultato in una variabile denominata value .
3. value è un elenco, che viene convertito in una tabella. Ogni elemento in value diventa una riga della
tabella, che è possibile chiamare toTable .
4. Ogni elemento in value è un record. toTable include tutti questi elementi in una singola colonna:
"Column1" . Questo passaggio estrae tutti i dati con chiave in una colonna denominata e tutti i dati con
chiave in una colonna "AirlineCode" denominata , per ogni riga in "AirlineCode" "Name" "Name" toTable
. "Column1" viene sostituito da queste due nuove colonne.
Alla fine della giornata si rimane con i dati in un formato tabulare semplice che Power BI possibile utilizzare ed
eseguire facilmente il rendering:

È importante notare che una sequenza di trasformazioni statiche di questa specificità è applicabile solo a un
singolo endpoint. Nell'esempio precedente questa sequenza di trasformazioni funzionerà solo se ed esiste nella
risposta dell'endpoint REST, perché sono "AirlineCode" "Name" hard coded nel codice M. Pertanto, questa
sequenza di trasformazioni potrebbe non funzionare se si tenta di accedere /Event all'endpoint.
Questo livello elevato di specificità può essere necessario per eseguire il push dei dati in una tabella di
navigazione, ma per le funzioni di accesso ai dati più generali è consigliabile eseguire solo trasformazioni
appropriate per tutti gli endpoint.
NOTE
Assicurarsi di testare le trasformazioni in diverse circostanze dei dati. Se l'utente non ha dati nell'endpoint, le
trasformazioni comportano una tabella vuota /airlines con lo schema corretto? Oppure si è verificato un errore
durante la valutazione? Vedere TripPin Part 7: Advanced Schema with M Types (Parte 7: Schema avanzato con tipi M) per
una discussione sugli unit test.

Trasformazioni dinamiche
È talvolta necessaria una logica più complessa per convertire le risposte api in moduli stabili e coerenti
appropriati per Power BI di dati.
Risposte API incoerenti
Flusso di controllo M di base (istruzioni if, codici di stato HTTP, try... I blocchi catch e così via sono in genere
sufficienti per gestire situazioni in cui l'API risponde in diversi modi.
Determinazione dello schema in tempo reale
Alcune API sono progettate in modo che più informazioni devono essere combinate per ottenere il formato
tabulare corretto. Si consideri la risposta /sheets [dell'endpoint di]Smartsheet, che contiene una matrice di
nomi di colonna e una matrice di righe di dati. Smartsheet Connector è in grado di analizzare questa risposta nel
modo seguente:

raw = Web.Contents(...),
columns = raw[columns],
columnTitles = List.Transform(columns, each [title]),
columnTitlesWithRowNumber = List.InsertRange(columnTitles, 0, {"RowNumber"}),

RowAsList = (row) =>


let
listOfCells = row[cells],
cellValuesList = List.Transform(listOfCells, each if Record.HasFields(_, "value") then [value]
else null),
rowNumberFirst = List.InsertRange(cellValuesList, 0, {row[rowNumber]})
in
rowNumberFirst,

listOfRows = List.Transform(raw[rows], each RowAsList(_)),


result = Table.FromRows(listOfRows, columnTitlesWithRowNumber)

1. Gestire innanzitutto le informazioni sull'intestazione di colonna. È possibile eseguire il pull del record di ogni
colonna in un elenco, anteponendo una colonna che verrà sempre rappresentata title RowNumber come
prima colonna.
2. Successivamente è possibile definire una funzione che consente di analizzare una riga in un elenco di value
celle. È anche possibile anteporre rowNumber le informazioni.
3. Applicare la RowAsList() funzione a ognuno degli elementi row restituiti nella risposta dell'API.
4. Convertire l'elenco in una tabella, specificando le intestazioni di colonna.
Gestione dello schema
07/12/2021 • 7 minutes to read

A seconda dell'origine dati, le informazioni sui tipi di dati e sui nomi di colonna possono o meno essere fornite
in modo esplicito. Le API REST OData in genere gestiscono questa operazione usando la definizione $metadatae
il metodo Power Query gestisce automaticamente l'analisi di queste informazioni e l'applicazione ai dati
restituiti da OData.Feed un'origine OData.
Molte API REST non hanno un modo per determinarne lo schema a livello di codice. In questi casi è necessario
includere una definizione dello schema nel connettore.

Approccio hardcoded semplice


L'approccio più semplice consiste nel codificare una definizione di schema nel connettore. Questo è sufficiente
per la maggior parte dei casi d'uso.
In generale, l'applicazione di uno schema ai dati restituiti dal connettore offre diversi vantaggi, ad esempio:
Impostazione dei tipi di dati corretti.
Rimozione di colonne che non devono essere visualizzate agli utenti finali, ad esempio ID interni o
informazioni sullo stato.
Assicurarsi che ogni pagina di dati abbia la stessa forma aggiungendo tutte le colonne che potrebbero non
essere presenti in una risposta (le API REST indicano in genere che i campi devono essere Null omettendoli
interamente).
Visualizzazione dello schema esistente con Table.Schema

Si consideri il codice seguente che restituisce una tabella semplice dal servizio di esempio TripPin OData:

let
url = "https://services.odata.org/TripPinWebApiService/Airlines",
source = Json.Document(Web.Contents(url))[value],
asTable = Table.FromRecords(source)
in
asTable

NOTE
TripPin è un'origine OData, quindi realisticamente sarebbe più opportuno usare semplicemente la gestione automatica
OData.Feed dello schema della funzione. In questo esempio l'origine verrà trattata come una tipica API REST e verrà
utilizzata per illustrare manualmente la tecnica di Web.Contents hardcoding di uno schema.

Questa tabella è il risultato:

È possibile usare la funzione Table.Schema pratica per controllare il tipo di dati delle colonne:
let
url = "https://services.odata.org/TripPinWebApiService/Airlines",
source = Json.Document(Web.Contents(url))[value],
asTable = Table.FromRecords(source)
in
Table.Schema(asTable)

AirlineCode e Name sono di any tipo . Table.Schema restituisce molti metadati sulle colonne di una tabella,
inclusi nomi, posizioni, informazioni sul tipo e molte proprietà avanzate, ad esempio Precision, Scale e
MaxLength. Per il momento è necessario riguardare solo il tipo ascritto ( ), il tipo primitivo ( ) e se il valore della
colonna TypeName potrebbe essere Null ( Kind IsNullable ).
Definizione di una tabella di schema semplice
La tabella dello schema sarà composta da due colonne:

C O LO N N A DET TA GL I

Nome Nome della colonna. Deve corrispondere al nome nei risultati


restituiti dal servizio.

Tipo Tipo di dati M che si sta per impostare. Può trattarsi di un


tipo primitivo (text, number, datetime e così via) o di un tipo
ascritto (Int64.Type, Currency.Type e così via).

La tabella dello schema hardcoded per la tabella ne imposta le colonne Airlines e su e ha un aspetto simile al
AirlineCode Name text seguente:

Airlines = #table({"Name", "Type"}, {


{"AirlineCode", type text},
{"Name", type text}
})

Quando si osservano alcuni degli altri endpoint, prendere in considerazione le tabelle dello schema seguenti:
La Airports tabella include quattro campi che è necessario mantenere (incluso uno di tipo record ):

Airports = #table({"Name", "Type"}, {


{"IcaoCode", type text},
{"Name", type text},
{"IataCode", type text},
{"Location", type record}
})

La tabella include sette campi, tra cui s ( , ), una colonna nullable ( ) e una colonna con People list un tipo
Emails AddressInfo Gender ascritto ( Concurrency ):
People = #table({"Name", "Type"}, {
{"UserName", type text},
{"FirstName", type text},
{"LastName", type text},
{"Emails", type list},
{"AddressInfo", type list},
{"Gender", type nullable text},
{"Concurrency", Int64.Type}
})

È possibile inserire tutte queste tabelle in una singola tabella dello schema SchemaTable master:

SchemaTable = #table({"Entity", "SchemaTable"}, {


{"Airlines", Airlines},
{"Airports", Airports},
{"People", People}
})

Funzione helper SchemaTransformTable


La SchemaTransformTable funzione helper descritta di seguito verrà usata per applicare schemi ai dati. È
necessario specificare i seguenti parametri:

PA RA M ET RO T IP O DESC RIZ IO N E

table table Tabella di dati su cui applicare lo


schema.

schema table Tabella dello schema da cui leggere le


informazioni sulla colonna, con il tipo
seguente:
type table [Name = text, Type =
type]
.
PA RA M ET RO T IP O DESC RIZ IO N E

enforceSchema d'acquisto (facoltativo) Enumerazione che


controlla il comportamento della
funzione.
Il valore predefinito ( ) garantisce che la
tabella di output corrisponda alla
tabella dello schema fornita
aggiungendo eventuali colonne
mancanti e
EnforceSchema.Strict = 1
rimuovendo colonne aggiuntive.
EnforceSchema.IgnoreExtraColumns
= 2
L'opzione può essere usata per
mantenere colonne aggiuntive nel
risultato.
Quando
EnforceSchema.IgnoreMissingColumns
= 3
si usa , le colonne mancanti e le
colonne aggiuntive verranno ignorate.

La logica per questa funzione è simile alla seguente:


1. Determinare se sono presenti colonne mancanti dalla tabella di origine.
2. Determinare se sono presenti colonne aggiuntive.
3. Ignorare le colonne strutturate (di tipo list , e ) e le colonne impostate sul tipo record table any .
4. Usare Table.TransformColumnTypes per impostare ogni tipo di colonna.
5. Riordinare le colonne in base all'ordine in cui vengono visualizzate nella tabella dello schema.
6. Impostare il tipo nella tabella stessa usando Value.ReplaceType .

NOTE
L'ultimo passaggio per impostare il tipo di tabella elimina la necessità che l'interfaccia utente di Power Query deduca le
informazioni sul tipo quando si visualizzano i risultati nell'editor di query, che talvolta può comportare una doppia
chiamata all'API.

Mettere tutto insieme


Nel contesto più ampio di un'estensione completa, la gestione dello schema avrà luogo quando una tabella
viene restituita dall'API. Questa funzionalità viene in genere utilizzata al livello più basso della funzione di paging
(se presente), con le informazioni sull'entità passate da una tabella di navigazione.
Poiché gran parte dell'implementazione delle tabelle di spostamento e paging è specifica del contesto, l'esempio
completo di implementazione di un meccanismo di gestione dello schema hardcoded non verrà illustrato qui.
Questo esempio TripPin illustra l'aspetto di una soluzione end-to-end.

Approccio sofisticato
L'implementazione hardcoded descritta in precedenza consente di assicurarsi che gli schemi rimangano coerenti
per i semplici repson JSON, ma è limitato all'analisi del primo livello della risposta. I set di dati annidati in modo
approfondito traggono vantaggio dall'approccio seguente, che sfrutta i tipi M.
Ecco un rapido aggiornamento dei tipi nel linguaggio M dalla specifica del linguaggio:

Un valore tipo è un valore che classifica altri valori. Si dice che un valore classificato in base a un tipo sia
conforme a quel tipo. Il sistema di tipi del linguaggio M è costituito dai tipi seguenti:
Tipi primitivi, che classificano i valori primitivi ( , , , , , , , , , ) e includono anche diversi tipi binary date
datetime datetimezone duration list logical null number record text time type astratti ( , , ,
e function table any none ).
Tipi di record, che classificano i valori dei record in base ai nomi dei campi e ai tipi di valore.
Tipi di elenco, che classificano gli elenchi usando un singolo tipo di base dell'elemento.
Tipi di funzione, che classificano i valori delle funzioni in base ai tipi dei relativi parametri e valori
restituiti.
Tipi di tabella, che classificano i valori di tabella in base ai nomi di colonna, ai tipi di colonna e alle chiavi.
Tipi nullable, che classificano il valore Null oltre a tutti i valori classificati in base a un tipo di base.
Tipi, che classificano i valori che sono tipi.

Usando l'outputJSON non elaborato che si ottiene (e/o cercando le definizioni nel $metadata del servizio), è
possibile definire i tipi di record seguenti per rappresentare i tipi complessi OData:

LocationType = type [
Address = text,
City = CityType,
Loc = LocType
];

CityType = type [
CountryRegion = text,
Name = text,
Region = text
];

LocType = type [
#"type" = text,
coordinates = {number},
crs = CrsType
];

CrsType = type [
#"type" = text,
properties = record
];

Si noti LocationType come fa riferimento a e per rappresentare le colonne CityType LocType strutturate.
Per le entità di primo livello che si vuole rappresentare come tabelle, è possibile definire i tipi di tabella:
AirlinesType = type table [
AirlineCode = text,
Name = text
];
AirportsType = type table [
Name = text,
IataCode = text,
Location = LocationType
];
PeopleType = type table [
UserName = text,
FirstName = text,
LastName = text,
Emails = {text},
AddressInfo = {nullable LocationType},
Gender = nullable text,
Concurrency Int64.Type
];

È quindi possibile aggiornare la variabile (che è possibile usare come tabella di ricerca per i mapping da entità a
tipo) per usare SchemaTable queste nuove definizioni di tipo:

SchemaTable = #table({"Entity", "Type"}, {


{"Airlines", AirlinesType},
{"Airports", AirportsType},
{"People", PeopleType}
});

È possibile fare affidamento su una funzione comune ( ) per applicare uno schema ai dati, in modo simile a
quello Table.ChangeType SchemaTransformTable usato nell'esercizio precedente. A differenza di , accetta un tipo
di tabella M effettivo come argomento e applica lo schema in modo ricorsivo SchemaTransformTable per tutti i
tipi Table.ChangeType annidati. La firma è:

Table.ChangeType = (table, tableType as type) as nullable table => ...

NOTE
Per la flessibilità, la funzione può essere usata nelle tabelle e negli elenchi di record, ovvero come le tabelle vengono
rappresentate in un documento JSON.

Sarà quindi necessario aggiornare il codice del connettore per modificare il parametro da schema a e
aggiungere una chiamata a table type Table.ChangeType . Anche in questo caso, i dettagli per questa
operazione sono molto specifici dell'implementazione e quindi non vale la pena di entrare in dettaglio qui.
Questo esempio di connettore TripPin esteso illustra una soluzione end-to-end che implementa questo
approccio più sofisticato alla gestione dello schema.
Gestione del codice di stato con Web.Contents
07/12/2021 • 2 minutes to read

La Web.Contents funzione include alcune funzionalità incorporate per la gestione di determinati codici di stato
HTTP. Il comportamento predefinito può essere sostituito nell'estensione usando il ManualStatusHandling campo
nel record delle opzioni.

Nuovo tentativo automatico


Web.Contents ripeterà automaticamente le richieste che hanno esito negativo con uno dei codici di stato
seguenti:

C O DIC E STATO

408 Timeout richiesta

429 Troppe richieste

503 Servizio non disponibile

504 Timeout gateway

509 Larghezza di banda superata

Le richieste verranno ritentate fino a 3 volte prima dell'esito negativo. Il motore usa un algoritmo di back-off
esponenziale per determinare il tempo di attesa fino al successivo tentativo, a meno che la risposta non
contenga Retry-after un'intestazione. Quando viene trovata l'intestazione, il motore attenderà il numero
specificato di secondi prima del successivo tentativo. Il tempo di attesa minimo supportato è 0,5 secondi e il
valore massimo è 120 secondi.

NOTE
Il Retry-after formato del valore deve essere delta-seconds . Il HTTP-date formato non è attualmente supportato.

Eccezioni di autenticazione
I codici di stato seguenti generano un'eccezione per le credenziali, causando una richiesta di autenticazione che
richiede all'utente di fornire le credenziali o di eseguire nuovamente l'accesso nel caso di un token OAuth
scaduto.

C O DIC E STATO

401 Non autorizzata

403 Accesso negato


NOTE
Le estensioni possono usare l'opzione con i codici di stato ManualStatusHandling 401 e 403, che non è possibile
eseguire nelle chiamate effettuate all'esterno di un contesto di estensione, ovvero direttamente da Web.Contents Power
Query.

Reindirizzamento
I codici di stato seguenti comportano un reindirizzamento automatico all'URI specificato Location
nell'intestazione. Location Un'intestazione mancante restituirà un errore.

C O DIC E STATO

300 Più scelte

301 Spostato in modo permanente

302 Trovato

303 Vedere Altro

307 Reindirizzamento temporaneo

NOTE
Solo il codice di stato 307 manterà un POST metodo di richiesta. Tutti gli altri codici di stato di reindirizzamento
comportano il passaggio a GET .
Wait-Retry modello
07/12/2021 • 2 minutes to read

In alcune situazioni il comportamento di un'origine dati non corrisponde a quello previsto Power Query codice
HTTP predefinito di gestionedi . Gli esempi seguenti illustrano come risolvere questa situazione.
In questo scenario si lavora con un'API REST che restituisce in modo occassionale un codice di stato 500, che
indica un errore interno del server. In questi casi, è possibile attendere alcuni secondi e riprovare,
potenzialmente alcune volte prima di rinunciare.

ManualStatusHandling
Se ottiene una risposta del codice di stato Web.Contents 500, genera un'eccezione DataSource.Error per
impostazione predefinita. È possibile eseguire l'override di questo comportamento fornendo un elenco di codici
come argomento facoltativo per Web.Contents :

response = Web.Contents(url, [ManualStatusHandling={404, 500}])

Specificando i codici di stato in questo modo, Power Query la risposta Web continuerà a essere elaborata
normalmente. Tuttavia, l'elaborazione della risposta normale spesso non è appropriata in questi casi. È
necessario comprendere che è stato ricevuto un codice di risposta anomalo ed eseguire una logica speciale per
gestirlo. Per determinare il codice di risposta restituito dal servizio Web, è possibile accedervi dal meta record
che accompagna la risposta:

responseCode = Value.Metadata(response)[Response.Status]

A seconda che sia 200 o 500, è possibile elaborare il risultato come di consueto o seguire la logica di ripetizione
dei tentativi di attesa che verrà elaborata nella responseCode sezione successiva.

NOTE
È consigliabile usare per forzare Power Query memorizzare nella cache i risultati se si implementa una logica complessa, ad
esempio il modello Wait-Retry Binary.Buffer Web.Contents illustrato di seguito. Ciò impedisce Power
Query'esecuzione multi-thread di eseguire più chiamate con risultati potenzialmente incoerenti.

Value.WaitFor
Value.WaitFor() è una funzione helper standard che in genere può essere usata senza alcuna modifica.
Funziona creando un elenco di tentativi.
producer Discussione
Contiene l'attività da (possibilmente) ritentare. È rappresentato come funzione in modo che il numero di
iterazione possa essere usato nella producer logica. Il comportamento previsto è che producer restituirà null
se un nuovo tentativo viene determinato come necessario. Se un valore diverso null da viene restituito da
producer , tale valore viene a sua volta restituito da Value.WaitFor .

delay Discussione
Contiene la logica da eseguire tra i tentativi. È rappresentato come funzione in modo che il numero di iterazione
possa essere usato nella delay logica. Il comportamento previsto è che delay restituisce un oggetto Duration.
count Argomento (facoltativo )
È possibile impostare un numero massimo di tentativi specificando un numero per count l'argomento .

Mettere tutto insieme


L'esempio seguente illustra come usare e per implementare un nuovo tentativo ManualStatusHandling
Value.WaitFor ritardato in caso di risposta 500. Il tempo di attesa tra i tentativi viene visualizzato come
raddoppio a ogni tentativo, con un massimo di 5 tentativi.

let
waitForResult = Value.WaitFor(
(iteration) =>
let
result = Web.Contents(url, [ManualStatusHandling = {500}]),
buffered = Binary.Buffer(result),
status = Value.Metadata(result)[Response.Status],
actualResult = if status = 500 then null else buffered
in
actualResult,
(iteration) => #duration(0, 0, 0, Number.Power(2, iteration)),
5)
in
waitForResult,
Gestione degli unit test
07/12/2021 • 2 minutes to read

Per i connettori semplici e complessi, l'aggiunta di unit test è una procedura consigliata e altamente consigliata.
L'esecuzione di unit test viene eseguita nel contesto Visual Studio'SDK Power Query di . Ogni test è definito
come con Fact un nome, un valore previsto e un valore effettivo. Nella maggior parte dei casi, il "valore
effettivo" sarà un'espressione M che verifica parte dell'espressione.
Si consideri un'estensione molto semplice che esporta tre funzioni:

section Unittesting;

shared UnitTesting.ReturnsABC = () => "ABC";


shared UnitTesting.Returns123 = () => "123";
shared UnitTesting.ReturnTableWithFiveRows = () => Table.Repeat(#table({"a"},{{1}}),5);

Questo unit test codice è costituito da una serie di fact e da una serie di codice comune per il framework unit
test ( ValueToText , Fact , , Facts Facts.Summarize ). Il codice seguente fornisce un set di fact di esempio
(vedere UnitTesting.query.pq per il codice comune):

section UnitTestingTests;

shared MyExtension.UnitTest =
[
// Put any common variables here if you only want them to be evaluated once

// Fact(<Name of the Test>, <Expected Value>, <Actual Value>)


facts =
{
Fact("Check that this function returns 'ABC'", // name of the test
"ABC", // expected value
UnitTesting.ReturnsABC() // expression to evaluate (let or single statement)
),
Fact("Check that this function returns '123'",
"123",
UnitTesting.Returns123()
),
Fact("Result should contain 5 rows",
5,
Table.RowCount(UnitTesting.ReturnTableWithFiveRows())
),
Fact("Values should be equal (using a let statement)",
"Hello World",
let
a = "Hello World"
in
a
)
},
report = Facts.Summarize(facts)
][report];

Eseguendo l'esempio Visual Studio verranno valutati tutti i fatti e verrà visualizzato un riepilogo visivo delle
velocità di passaggio:
L'implementazione di unit test nelle prime fasi del processo di sviluppo del connettore consente di seguire i
principi dello sviluppo basato su test. Imagine è necessario scrivere una funzione denominata Uri.GetHost che
restituisce solo i dati dell'host da un URI. È possibile iniziare scrivendo un test case per verificare che la funzione
esegua correttamente la funzione prevista:

Fact("Returns host from URI",


"https://bing.com",
Uri.GetHost("https://bing.com/subpath/query?param=1&param2=hello")
),
Fact("Handles port number appropriately",
"https://bing.com:8080",
Uri.GetHost("https://bing.com:8080/subpath/query?param=1&param2=hello")
)

È possibile scrivere test aggiuntivi per assicurarsi che la funzione gestisca in modo appropriato i casi limite.
Una versione precedente della funzione potrebbe superare alcuni ma non tutti i test:

Uri.GetHost = (url) =>


let
parts = Uri.Parts(url)
in
parts[Scheme] & "://" & parts[Host]

La versione finale della funzione deve superare tutti gli unit test. In questo modo è anche facile assicurarsi che
gli aggiornamenti futuri della funzione non rimuovono accidentalmente alcuna funzionalità di base.
Funzioni di supporto
07/12/2021 • 10 minutes to read

Questo argomento contiene una serie di funzioni helper comunemente usate nelle estensioni M. Queste
funzioni possono infine essere spostate nella libreria ufficiale M, ma per il momento possono essere copiate nel
codice del file di estensione. Non contrassegnare nessuna di queste funzioni come shared all'interno del codice
dell'estensione.

Tabelle di spostamento
Table.ToNavigationTable
Questa funzione aggiunge i metadati del tipo di tabella necessari all'estensione per restituire un valore di tabella
Power Query può riconoscere come albero di navigazione. Per altre informazioni, vedere Tabelle di spostamento.

Table.ToNavigationTable = (
table as table,
keyColumns as list,
nameColumn as text,
dataColumn as text,
itemKindColumn as text,
itemNameColumn as text,
isLeafColumn as text
) as table =>
let
tableType = Value.Type(table),
newTableType = Type.AddTableKey(tableType, keyColumns, true) meta
[
NavigationTable.NameColumn = nameColumn,
NavigationTable.DataColumn = dataColumn,
NavigationTable.ItemKindColumn = itemKindColumn,
Preview.DelayColumn = itemNameColumn,
NavigationTable.IsLeafColumn = isLeafColumn
],
navigationTable = Value.ReplaceType(table, newTableType)
in
navigationTable;

PA RA M ET RO DET TA GL I

table Tabella di navigazione.

Keycolumns Elenco di nomi di colonna che fungono da chiave primaria


per la tabella di navigazione.

Namecolumn Nome della colonna da utilizzare come nome visualizzato


nello strumento di spostamento.

Datacolumn Nome della colonna che contiene la tabella o la funzione da


visualizzare.

itemKindColumn Nome della colonna da utilizzare per determinare il tipo di


icona da visualizzare. I valori validi per la colonna sono
Table e Function .
PA RA M ET RO DET TA GL I

itemNameColumn Nome della colonna da utilizzare per determinare il tipo di


descrizione comando da visualizzare. I valori validi per la
colonna sono Table e Function .

isLeafColumn Nome della colonna utilizzata per determinare se si tratta di


un nodo foglia o se il nodo può essere espanso in modo da
contenere un'altra tabella di navigazione.

Utilizzo di esempio:

shared MyExtension.Contents = () =>


let
objects = #table(
{"Name", "Key", "Data", "ItemKind", "ItemName",
"IsLeaf"},{
{"Item1", "item1", #table({"Column1"}, {{"Item1"}}), "Table", "Table", true},
{"Item2", "item2", #table({"Column1"}, {{"Item2"}}), "Table", "Table", true},
{"Item3", "item3", FunctionCallThatReturnsATable(), "Table", "Table", true},
{"MyFunction", "myfunction", AnotherFunction.Contents(), "Function", "Function", true}
}),
NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
NavTable;

Manipolazione dell'URI
Uri.FromParts
Questa funzione costruisce un URL completo in base ai singoli campi del record. Agisce come il contrario di
Uri.Parts.

Uri.FromParts = (parts) =>


let
port = if (parts[Scheme] = "https" and parts[Port] = 443) or (parts[Scheme] = "http" and parts[Port]
= 80) then "" else ":" & Text.From(parts[Port]),
div1 = if Record.FieldCount(parts[Query]) > 0 then "?" else "",
div2 = if Text.Length(parts[Fragment]) > 0 then "#" else "",
uri = Text.Combine({parts[Scheme], "://", parts[Host], port, parts[Path], div1,
Uri.BuildQueryString(parts[Query]), div2, parts[Fragment]})
in
uri;

Uri.GetHost
Questa funzione restituisce lo schema, l'host e la porta predefinita (per HTTP/HTTPS) per un URL specificato. Ad
esempio, https://bing.com/subpath/query?param=1&param2=hello diventerebbe https://bing.com:443 .
Ciò è particolarmente utile per la compilazione di ResourcePath .
Uri.GetHost = (url) =>
let
parts = Uri.Parts(url),
port = if (parts[Scheme] = "https" and parts[Port] = 443) or (parts[Scheme] = "http" and parts[Port]
= 80) then "" else ":" & Text.From(parts[Port])
in
parts[Scheme] & "://" & parts[Host] & port;

ValidateUrlScheme
Questa funzione controlla se l'utente ha immesso un URL HTTPS e genera un errore in caso di errore. Questa
operazione è necessaria per gli URL immessi dall'utente per i connettori certificati.

ValidateUrlScheme = (url as text) as text => if (Uri.Parts(url)[Scheme] <> "https") then error "Url scheme
must be HTTPS" else url;

Per applicarlo, è sufficiente eseguire il wrapping url del parametro nella funzione di accesso ai dati.

DataAccessFunction = (url as text) as table =>


let
_url = ValidateUrlScheme(url),
source = Web.Contents(_url)
in
source;

Recupero di dati
Value.WaitFor
Questa funzione è utile quando si effettua una richiesta HTTP asincrona ed è necessario eseguire il polling del
server fino al completamento della richiesta.

Value.WaitFor = (producer as function, interval as function, optional count as number) as any =>
let
list = List.Generate(
() => {0, null},
(state) => state{0} <> null and (count = null or state{0} < count),
(state) => if state{1} <> null then {null, state{1}} else {1 + state{0}, Function.InvokeAfter(()
=> producer(state{0}), interval(state{0}))},
(state) => state{1})
in
List.Last(list);

Table.GenerateByPage
Questa funzione viene usata quando un'API restituisce dati in un formato incrementale/di paginazione, che è
comune per molte API REST. L'argomento è una funzione che accetta un singolo parametro, che sarà il risultato
della chiamata precedente getNextPage a e deve restituire un oggetto getNextPage nullable table .

getNextPage = (lastPage) as nullable table => ...`

getNextPage viene chiamato ripetutamente fino a quando non restituisce null . La funzione regolerà tutte le
pagine in un'unica tabella. Quando il risultato della prima chiamata a getNextPage è Null, viene restituita una
tabella vuota.
// The getNextPage function takes a single argument and is expected to return a nullable table
Table.GenerateByPage = (getNextPage as function) as table =>
let
listOfPages = List.Generate(
() => getNextPage(null), // get the first page of data
(lastPage) => lastPage <> null, // stop when the function returns null
(lastPage) => getNextPage(lastPage) // pass the previous page to the next function call
),
// concatenate the pages together
tableOfPages = Table.FromList(listOfPages, Splitter.SplitByNothing(), {"Column1"}),
firstRow = tableOfPages{0}?
in
// if we didn't get back any pages of data, return an empty table
// otherwise set the table type based on the columns of the first page
if (firstRow = null) then
Table.FromRows({})
else
Value.ReplaceType(
Table.ExpandTableColumn(tableOfPages, "Column1", Table.ColumnNames(firstRow[Column1])),
Value.Type(firstRow[Column1])
);

Note aggiuntive:
La funzione dovrà recuperare l'URL della pagina successiva (o il numero di pagina o qualsiasi altro valore
usato getNextPage per implementare la logica di paging). Questa operazione viene in genere eseguita
aggiungendo meta valori alla pagina prima di restituirla.
Le colonne e il tipo di tabella della tabella combinata, ovvero tutte le pagine, derivano dalla prima pagina di
dati. La getNextPage funzione deve normalizzare ogni pagina di dati.
La prima chiamata a getNextPage riceve un parametro Null.
getNextPage deve restituire null quando non sono presenti pagine.

Un esempio di uso di questa funzione è disponibile nell'esempio githube nell'esempio di paging TripPin.

Github.PagedTable = (url as text) => Table.GenerateByPage((previous) =>


let
// If we have a previous page, get its Next link from metadata on the page.
next = if (previous <> null) then Value.Metadata(previous)[Next] else null,
// If we have a next link, use it, otherwise use the original URL that was passed in.
urlToUse = if (next <> null) then next else url,
// If we have a previous page, but don't have a next link, then we're done paging.
// Otherwise retrieve the next page.
current = if (previous <> null and next = null) then null else Github.Contents(urlToUse),
// If we got data back from the current page, get the link for the next page
link = if (current <> null) then Value.Metadata(current)[Next] else null
in
current meta [Next=link]);

SchemaTransformTable
EnforceSchema.Strict = 1; // Add any missing columns, remove extra columns, set table type
EnforceSchema.IgnoreExtraColumns = 2; // Add missing columns, do not remove extra columns
EnforceSchema.IgnoreMissingColumns = 3; // Do not add or remove columns

SchemaTransformTable = (table as table, schema as table, optional enforceSchema as number) as table =>
let
// Default to EnforceSchema.Strict
_enforceSchema = if (enforceSchema <> null) then enforceSchema else EnforceSchema.Strict,

// Applies type transforms to a given table


EnforceTypes = (table as table, schema as table) as table =>
let
map = (t) => if Type.Is(t, type list) or Type.Is(t, type record) or t = type any then null
else t,
mapped = Table.TransformColumns(schema, {"Type", map}),
omitted = Table.SelectRows(mapped, each [Type] <> null),
existingColumns = Table.ColumnNames(table),
removeMissing = Table.SelectRows(omitted, each List.Contains(existingColumns, [Name])),
primativeTransforms = Table.ToRows(removeMissing),
changedPrimatives = Table.TransformColumnTypes(table, primativeTransforms)
in
changedPrimatives,

// Returns the table type for a given schema


SchemaToTableType = (schema as table) as type =>
let
toList = List.Transform(schema[Type], (t) => [Type=t, Optional=false]),
toRecord = Record.FromList(toList, schema[Name]),
toType = Type.ForRecord(toRecord, false)
in
type table (toType),

// Determine if we have extra/missing columns.


// The enforceSchema parameter determines what we do about them.
schemaNames = schema[Name],
foundNames = Table.ColumnNames(table),
addNames = List.RemoveItems(schemaNames, foundNames),
extraNames = List.RemoveItems(foundNames, schemaNames),
tmp = Text.NewGuid(),
added = Table.AddColumn(table, tmp, each []),
expanded = Table.ExpandRecordColumn(added, tmp, addNames),
result = if List.IsEmpty(addNames) then table else expanded,
fullList =
if (_enforceSchema = EnforceSchema.Strict) then
schemaNames
else if (_enforceSchema = EnforceSchema.IgnoreMissingColumns) then
foundNames
else
schemaNames & extraNames,

// Select the final list of columns.


// These will be ordered according to the schema table.
reordered = Table.SelectColumns(result, fullList, MissingField.Ignore),
enforcedTypes = EnforceTypes(reordered, schema),
withType = if (_enforceSchema = EnforceSchema.Strict) then Value.ReplaceType(enforcedTypes,
SchemaToTableType(schema)) else enforcedTypes
in
withType;

Table.ChangeType

let
// table should be an actual Table.Type, or a List.Type of Records
Table.ChangeType = (table, tableType as type) as nullable table =>
// we only operate on table types
if (not Type.Is(tableType, type table)) then error "type argument should be a table type" else
// if we have a null value, just return it
// if we have a null value, just return it
if (table = null) then table else
let
columnsForType = Type.RecordFields(Type.TableRow(tableType)),
columnsAsTable = Record.ToTable(columnsForType),
schema = Table.ExpandRecordColumn(columnsAsTable, "Value", {"Type"}, {"Type"}),
previousMeta = Value.Metadata(tableType),

// make sure we have a table


parameterType = Value.Type(table),
_table =
if (Type.Is(parameterType, type table)) then table
else if (Type.Is(parameterType, type list)) then
let
asTable = Table.FromList(table, Splitter.SplitByNothing(), {"Column1"}),
firstValueType = Value.Type(Table.FirstValue(asTable, null)),
result =
// if the member is a record (as expected), then expand it.
if (Type.Is(firstValueType, type record)) then
Table.ExpandRecordColumn(asTable, "Column1", schema[Name])
else
error Error.Record("Error.Parameter", "table argument is a list, but not a
list of records", [ ValueType = firstValueType ])
in
if (List.IsEmpty(table)) then
#table({"a"}, {})
else result
else
error Error.Record("Error.Parameter", "table argument should be a table or list of
records", [ValueType = parameterType]),

reordered = Table.SelectColumns(_table, schema[Name], MissingField.UseNull),

// process primitive values - this will call Table.TransformColumnTypes


map = (t) => if Type.Is(t, type table) or Type.Is(t, type list) or Type.Is(t, type record) or t
= type any then null else t,
mapped = Table.TransformColumns(schema, {"Type", map}),
omitted = Table.SelectRows(mapped, each [Type] <> null),
existingColumns = Table.ColumnNames(reordered),
removeMissing = Table.SelectRows(omitted, each List.Contains(existingColumns, [Name])),
primativeTransforms = Table.ToRows(removeMissing),
changedPrimatives = Table.TransformColumnTypes(reordered, primativeTransforms),

// Get the list of transforms we'll use for Record types


recordColumns = Table.SelectRows(schema, each Type.Is([Type], type record)),
recordTypeTransformations = Table.AddColumn(recordColumns, "RecordTransformations", each (r) =>
Record.ChangeType(r, [Type]), type function),
recordChanges = Table.ToRows(Table.SelectColumns(recordTypeTransformations, {"Name",
"RecordTransformations"})),

// Get the list of transforms we'll use for List types


listColumns = Table.SelectRows(schema, each Type.Is([Type], type list)),
listTransforms = Table.AddColumn(listColumns, "ListTransformations", each (t) =>
List.ChangeType(t, [Type]), Function.Type),
listChanges = Table.ToRows(Table.SelectColumns(listTransforms, {"Name",
"ListTransformations"})),

// Get the list of transforms we'll use for Table types


tableColumns = Table.SelectRows(schema, each Type.Is([Type], type table)),
tableTransforms = Table.AddColumn(tableColumns, "TableTransformations", each (t) =>
@Table.ChangeType(t, [Type]), Function.Type),
tableChanges = Table.ToRows(Table.SelectColumns(tableTransforms, {"Name",
"TableTransformations"})),

// Perform all of our transformations


allColumnTransforms = recordChanges & listChanges & tableChanges,
changedRecordTypes = if (List.IsEmpty(allColumnTransforms)) then changedPrimatives else
Table.TransformColumns(changedPrimatives, allColumnTransforms, null, MissingField.Ignore),
// set final type
withType = Value.ReplaceType(changedRecordTypes, tableType)
in
if (List.IsEmpty(Record.FieldNames(columnsForType))) then table else withType meta previousMeta,

// If given a generic record type (no predefined fields), the original record is returned
Record.ChangeType = (record as record, recordType as type) =>
let
// record field format is [ fieldName = [ Type = type, Optional = logical], ... ]
fields = try Type.RecordFields(recordType) otherwise error "Record.ChangeType: failed to get
record fields. Is this a record type?",
fieldNames = Record.FieldNames(fields),
fieldTable = Record.ToTable(fields),
optionalFields = Table.SelectRows(fieldTable, each [Value][Optional])[Name],
requiredFields = List.Difference(fieldNames, optionalFields),
// make sure all required fields exist
withRequired = Record.SelectFields(record, requiredFields, MissingField.UseNull),
// append optional fields
withOptional = withRequired & Record.SelectFields(record, optionalFields, MissingField.Ignore),
// set types
transforms = GetTransformsForType(recordType),
withTypes = Record.TransformFields(withOptional, transforms, MissingField.Ignore),
// order the same as the record type
reorder = Record.ReorderFields(withTypes, fieldNames, MissingField.Ignore)
in
if (List.IsEmpty(fieldNames)) then record else reorder,

List.ChangeType = (list as list, listType as type) =>


if (not Type.Is(listType, type list)) then error "type argument should be a list type" else
let
listItemType = Type.ListItem(listType),
transform = GetTransformByType(listItemType),
modifiedValues = List.Transform(list, transform),
typed = Value.ReplaceType(modifiedValues, listType)
in
typed,

// Returns a table type for the provided schema table


Schema.ToTableType = (schema as table) as type =>
let
toList = List.Transform(schema[Type], (t) => [Type=t, Optional=false]),
toRecord = Record.FromList(toList, schema[Name]),
toType = Type.ForRecord(toRecord, false),
previousMeta = Value.Metadata(schema)
in
type table (toType) meta previousMeta,

// Returns a list of transformations that can be passed to Table.TransformColumns, or


Record.TransformFields
// Format: {"Column", (f) => ...) .... ex: {"A", Number.From}
GetTransformsForType = (_type as type) as list =>
let
fieldsOrColumns = if (Type.Is(_type, type record)) then Type.RecordFields(_type)
else if (Type.Is(_type, type table)) then
Type.RecordFields(Type.TableRow(_type))
else error "GetTransformsForType: record or table type expected",
toTable = Record.ToTable(fieldsOrColumns),
transformColumn = Table.AddColumn(toTable, "Transform", each GetTransformByType([Value][Type]),
Function.Type),
transformMap = Table.ToRows(Table.SelectColumns(transformColumn, {"Name", "Transform"}))
in
transformMap,

GetTransformByType = (_type as type) as function =>


if (Type.Is(_type, type number)) then Number.From
else if (Type.Is(_type, type text)) then Text.From
else if (Type.Is(_type, type date)) then Date.From
else if (Type.Is(_type, type datetime)) then DateTime.From
else if (Type.Is(_type, type duration)) then Duration.From
else if (Type.Is(_type, type duration)) then Duration.From
else if (Type.Is(_type, type datetimezone)) then DateTimeZone.From
else if (Type.Is(_type, type logical)) then Logical.From
else if (Type.Is(_type, type time)) then Time.From
else if (Type.Is(_type, type record)) then (t) => if (t <> null) then @Record.ChangeType(t, _type)
else t
else if (Type.Is(_type, type table)) then (t) => if (t <> null) then @Table.ChangeType(t, _type)
else t
else if (Type.Is(_type, type list)) then (t) => if (t <> null) then @List.ChangeType(t, _type) else
t
else (t) => t
in
Table.ChangeType
Gestione degli errori
07/12/2021 • 2 minutes to read

Gli errori in Power Query in genere interrondono la valutazione delle query e visualizzano un messaggio
all'utente.

Generazione di un errore con error l'espressione


La generazione di un errore in Power Query è semplice quanto richiamare error l'espressione.

let
Source = "foo",
Output = error "error message"
in
Output

La Error.Record funzione può essere usata per un maggiore controllo.

let
Source = "foo",
Output = error Error.Record("error reason", "error message", "error detail")
in
Output

Rilevamento di un errore con try e otherwise


L'espressione converte i valori e gli errori in un valore di record che indica se l'espressione ha gestito o meno un
errore, nonché il valore corretto try try del record di errore.
Se non viene trovato alcun errore, dall'espressione viene restituito il try record seguente:

try "foo"

Se viene rilevato un errore, dall'espressione viene restituito il try record seguente:

try "foo"+1
Il record Error contiene i campi Reason, Message e Detail.

A seconda dell'errore, il campo Dettagli può contenere informazioni aggiuntive.


La otherwise clausola può essere usata con try un'espressione per eseguire un'azione in caso di errore:

try "foo"+1 otherwise "There was an error"

è una forma più compatta di:

result = try "foo"+1,


if result[HasError] then "There was an error" else result[Value]
Documentazione sull'aggiunta di funzioni
07/12/2021 • 3 minutes to read

Power Query genererà automaticamente un'interfaccia utente di chiamata in base all'argomento per la funzione.
Per impostazione predefinita, questa interfaccia utente conterrà il nome della funzione e un input per ogni
parametro.

Analogamente, la valutazione del nome della funzione, senza specificare parametri, ne visualizza le informazioni.

È possibile notare che le funzioni incorporate offrono in genere un'esperienza utente migliore, con descrizioni,
descrizioni comando e anche valori di esempio. È possibile sfruttare questo stesso meccanismo definendo
metadati specifici nel tipo di funzione. Questo argomento descrive i metadati usati da Power Query e come
usarli nelle estensioni.
Tipi function
È possibile fornire la documentazione per la funzione definendo valori di tipo personalizzati. Il processo è simile
al seguente:
1. Definire un tipo per ogni parametro.
2. Definire un tipo per la funzione.
3. Aggiungere vari Documentation.* campi al record di metadati dei tipi.
4. Chiamare Value.ReplaceType per attribuire il tipo alla funzione condivisa.
Altre informazioni sui tipi e sui valori dei metadati sono disponibili in Specifica del linguaggio M.
Questo approccio consente di fornire descrizioni e nomi visualizzati per la funzione, nonché singoli parametri. È
anche possibile specificare valori di esempio per i parametri, nonché definire un elenco predefinito di valori
(trasformando il controllo casella di testo predefinito in un elenco a discesa).
L Power Query dei metadati recupera la documentazione dai metadati sul tipo della funzione, usando una
combinazione di chiamate a Value.Type, Type.FunctionParameterse Value.Metadata.
Documentazione delle funzioni
Nella tabella seguente sono elencati i campi della documentazione che è possibile impostare nei metadati per la
funzione. Tutti i campi sono facoltativi.

CAMPO T IP O DET TA GL I
CAMPO T IP O DET TA GL I

Documentation.Examples list Elenco di oggetti record con esempio


di utilizzo della funzione . Visualizzato
solo come parte delle informazioni
sulla funzione. Ogni record deve
contenere i campi di testo facoltativi
seguenti: Description Code , e
Result .

Documentation.LongDescription text Descrizione completa dell'attività della


funzione, visualizzata nelle informazioni
sulla funzione.

Documentation.Name text Testo da visualizzare nella parte


superiore della finestra di dialogo di
chiamata di funzione.

Documentazione dei parametri


Nella tabella seguente sono elencati i campi della documentazione che è possibile impostare nei metadati per i
parametri della funzione. Tutti i campi sono facoltativi.

CAMPO T IP O DET TA GL I

Documentation.AllowedValues list Elenco di valori validi per questo


parametro. Se si specifica questo
campo, l'input da una casella di testo
verrà modificato in un elenco a discesa.
Si noti che questo non impedisce a un
utente di modificare manualmente la
query per fornire valori alternativi.

Documentation.FieldCaption text Nome visualizzato descrittivo da usare


per il parametro .

Documentation.FieldDescription text Descrizione da visualizzare accanto al


nome visualizzato.

Documentation.SampleValues list Elenco di valori di esempio da


visualizzare (come testo in dissolvenza)
all'interno della casella di testo.

Formatting.IsMultiLine boolean Consente di creare un input su più


righe, ad esempio per incollare query
native.

Formatting.IsCode boolean Formatta il campo di input per il


codice, in genere con input su più
righe. Usa un tipo di carattere simile al
codice anziché il tipo di carattere
standard.

Esempio di base
Il frammento di codice seguente (e le finestre di dialogo risultanti) sono disponibili nell'esempio
HelloWorldWithDocs.
[DataSource.Kind="HelloWorldWithDocs", Publish="HelloWorldWithDocs.Publish"]
shared HelloWorldWithDocs.Contents = Value.ReplaceType(HelloWorldImpl, HelloWorldType);

HelloWorldType = type function (


message as (type text meta [
Documentation.FieldCaption = "Message",
Documentation.FieldDescription = "Text to display",
Documentation.SampleValues = {"Hello world", "Hola mundo"}
]),
optional count as (type number meta [
Documentation.FieldCaption = "Count",
Documentation.FieldDescription = "Number of times to repeat the message",
Documentation.AllowedValues = { 1, 2, 3 }
]))
as table meta [
Documentation.Name = "Hello - Name",
Documentation.LongDescription = "Hello - Long Description",
Documentation.Examples = {[
Description = "Returns a table with 'Hello world' repeated 2 times",
Code = "HelloWorldWithDocs.Contents(""Hello world"", 2)",
Result = "#table({""Column1""}, {{""Hello world""}, {""Hello world""}})"
],[
Description = "Another example, new message, new count!",
Code = "HelloWorldWithDocs.Contents(""Goodbye"", 1)",
Result = "#table({""Column1""}, {{""Goodbye""}})"
]}
];

HelloWorldImpl = (message as text, optional count as number) as table =>


let
_count = if (count <> null) then count else 5,
listOfMessages = List.Repeat({message}, _count),
table = Table.FromList(listOfMessages, Splitter.SplitByNothing())
in
table;

Questo codice genera le finestre di dialogo seguenti in Power BI.


Chiamata di funzione

Informazioni sulle funzioni


Esempio su più righe

[DataSource.Kind="HelloWorld", Publish="HelloWorld.Publish"]
shared HelloWorld.Contents =
let
HelloWorldType = type function (
message1 as (type text meta [
Documentation.FieldCaption = "Message 1",
Documentation.FieldDescription = "Text to display for message 1",
Documentation.SampleValues = {"Hello world"},
Formatting.IsMultiLine = true,
Formatting.IsCode = true
]),
message2 as (type text meta [
Documentation.FieldCaption = "Message 2",
Documentation.FieldDescription = "Text to display for message 2",
Documentation.SampleValues = {"Hola mundo"},
Formatting.IsMultiLine = true,
Formatting.IsCode = false
])) as text,
HelloWorldFunction = (message1 as text, message2 as text) as text => message1 & message2
in
Value.ReplaceType(HelloWorldFunction, HelloWorldType);

Questo codice (con le informazioni di pubblicazione associate e così via) genera la finestra di dialogo seguente
Power BI. Le nuove righe verranno rappresentate nel testo con '#(lf)' o 'line feed'.
Gestione della navigazione
07/12/2021 • 3 minutes to read

Le tabelle di spostamento (o tabelle di spostamento) sono una parte fondamentale per offrire un'esperienza
semplice per il connettore. L Power Query'esperienza li visualizza all'utente dopo aver immesso i parametri
obbligatori per la funzione dell'origine dati e averli autenticati con l'origine dati.

In background, una tabella di spostamento è semplicemente un normale valore di tabella M con campi di
metadati specifici definiti nel relativo tipo. Quando la funzione dell'origine dati restituisce una tabella con questi
campi definiti, Power Query verrà visualizzata la finestra di dialogo strumento di navigazione. È effettivamente
possibile visualizzare i dati sottostanti come valore table facendo clic con il pulsante destro del mouse sul nodo
radice e scegliendo Modifica.

Table.ToNavigationTable
È possibile usare la Table.ToNavigationTable funzione per aggiungere i metadati del tipo di tabella necessari per
creare una tabella di spostamento.

NOTE
Attualmente è necessario copiare e incollare questa funzione nell'estensione M. In futuro verrà probabilmente spostato
nella libreria standard M.

Nella tabella seguente vengono descritti i parametri per questa funzione:


PA RA M ET RO DET TA GL I

table Tabella di navigazione.

Keycolumns Elenco di nomi di colonna che fungono da chiave primaria


per la tabella di navigazione.

Namecolumn Nome della colonna da utilizzare come nome visualizzato


nello strumento di navigazione.

Datacolumn Nome della colonna che contiene la tabella o la funzione da


visualizzare.

itemKindColumn Nome della colonna da utilizzare per determinare il tipo di


icona da visualizzare. Per l'elenco dei valori validi per la
colonna, vedere di seguito.

itemNameColumn Nome della colonna da utilizzare per determinare il


comportamento di anteprima. Viene in genere impostato
sullo stesso valore di itemKind.

isLeafColumn Nome della colonna utilizzata per determinare se si tratta di


un nodo foglia o se il nodo può essere espanso in modo da
contenere un'altra tabella di navigazione.

La funzione aggiunge i metadati seguenti al tipo di tabella:

CAMPO PA RA M ET RO

NavigationTable.NameColumn Namecolumn

NavigationTable.DataColumn Datacolumn

NavigationTable.ItemKindColumn itemKindColumn

NavigationTable.IsLeafColumn isLeafColumn

Preview.DelayColumn itemNameColumn

Valori per ItemKind


Ognuno dei seguenti valori di tipo di elemento fornisce un'icona diversa nella tabella di navigazione.
Feed
Cubo
CubeDatabase
CubeView
Cartella CubeViewFolder
Database
DatabaseServer
Dimensione
Tabella
Cartella
Funzione
Visualizzazione
Foglio
Sottocubo
DefinedName
Registra
L'immagine seguente mostra le icone per i tipi di elementi in Power BI Desktop.
Esempio
Tabella di navigazione flat
Nell'esempio di codice seguente viene visualizzata una tabella di spostamento flat con tre tabelle e una funzione
.
shared NavigationTable.Simple = () =>
let
objects = #table(
{"Name", "Key", "Data", "ItemKind", "ItemName",
"IsLeaf"},{
{"Item1", "item1", #table({"Column1"}, {{"Item1"}}), "Table", "Table", true},
{"Item2", "item2", #table({"Column1"}, {{"Item2"}}), "Table", "Table", true},
{"Item3", "item3", FunctionCallThatReturnsATable(), "Table", "Table", true},
{"MyFunction", "myfunction", AnotherFunction.Contents, "Function", "Function", true}
}),
NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
NavTable;

shared FunctionCallThatReturnsATable = () =>


#table({"DynamicColumn"}, {{"Dynamic Value"}});

Questo codice comporta la visualizzazione dello strumento di navigazione seguente in Power BI Desktop:

Tabella di spostamento a più livelli


È possibile usare tabelle di navigazione annidate per creare una visualizzazione gerarchica sul set di dati. A tale
scopo, impostare il valore per la riga su (che la contrassegna come nodo che può essere espanso) e formattare
la colonna in modo che sia anche IsLeaf false un'altra tabella di Data spostamento.
shared NavigationTable.Nested = () as table =>
let
objects = #table(
{"Name", "Key", "Data", "ItemKind", "ItemName", "IsLeaf"},{
{"Nested A", "n1", CreateNavTable("AAA"), "Table", "Table", false},
{"Nested B", "n2", CreateNavTable("BBB"), "Table", "Table", false},
{"Nested C", "n3", CreateNavTable("CCC"), "Table", "Table", false}
}),
NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
NavTable;

CreateNavTable = (message as text) as table =>


let
objects = #table(
{"Name", "Key", "Data", "ItemKind", "ItemName", "IsLeaf"},{
{"Item1", "item1", #table({"Column1"}, {{message}}), "Table", "Table", true},
{"Item2", "item2", #table({"Column1"}, {{message}}), "Table", "Table", true}
}),
NavTable = Table.ToNavigationTable(objects, {"Key"}, "Name", "Data", "ItemKind", "ItemName",
"IsLeaf")
in
NavTable;

Questo codice genera la visualizzazione dello strumento di navigazione seguente in Power BI Desktop:

Tabelle di spostamento dinamico


Da queste nozioni di base è possibile creare funzionalità più complesse. Anche se tutti gli esempi precedenti
mostrano entità hard-coded nella tabella di spostamento, è facile vedere come è possibile generare
dinamicamente una tabella di spostamento in base alle entità disponibili per un determinato utente. Alcune
considerazioni chiave per le tabelle di spostamento dinamico includono:
Gestione degli errori per garantire un'esperienza ottimale per gli utenti che non hanno accesso a determinati
endpoint.
La valutazione del nodo è lazy per impostazione predefinita. I nodi foglia non vengono valutati fino a quando
il nodo padre non viene espanso. Alcune implementazioni di tabelle di spostamento dinamico a più livelli
possono comportare la valutazione eager dell'intero albero. Assicurarsi di monitorare il numero di chiamate
Power Query durante il rendering iniziale della tabella di navigazione. Ad esempio, Table.InsertRows è
"lazier" rispetto Table.FromRecords a , in quanto non è necessario valutarne gli argomenti.
Gestione del supporto del gateway
07/12/2021 • 2 minutes to read

Test della connessione


Il supporto del connettore personalizzato è disponibile in modalità personale e standard del gateway dati
locale. Entrambe le modalità gateway supportano l'impor tazione di . Direct Quer y è supportato solo in
modalità Standard. OAuth per i connettori personalizzati tramite gateway è attualmente supportato solo per
gli amministratori del gateway ma non per altri utenti dell'origine dati.

È probabile che il metodo per l'implementazione della funzionalità TestConnection cambi mentre la Power BI
connettore dati personalizzato è in anteprima.

Per supportare l'aggiornamento pianificato tramite il gateway dati locale, il connettore deve implementare un
gestore TestConnection. La funzione viene chiamata quando l'utente configura le credenziali per l'origine e viene
usata per verificare che siano valide. Il gestore TestConnection viene impostato nel record Tipo di origine dati e
ha la firma seguente:

(dataSourcePath) as list => ...

Dove dataSourcePath è il valore Percorso origine dati per la funzione e il valore restituito è un elenco costituito
da:
Nome della funzione da chiamare (questa funzione deve essere contrassegnata come e in genere #shared è
la funzione dell'origine dati primaria).
Uno o più argomenti da passare alla funzione.
Se la chiamata della funzione restituisce un errore, TestConnection viene considerato non riuscito e la
credenziale non viene mantenuta.

NOTE
Come indicato in precedenza, il nome della funzione fornito da TestConnection deve essere un shared membro.

Esempio: Connettore senza argomenti obbligatori


Il frammento di codice seguente implementa TestConnection per un'origine dati senza parametri obbligatori, ad
esempio quello disponibile nell'esercitazione su TripPin. I connettori senza parametri obbligatori (definiti
"singleton") non necessitano di alcun input fornito dall'utente per testare una connessione (diversa dalle
credenziali). In questo caso, il valore sarà uguale al nome del tipo di origine dati dataSourcePath e può essere
ignorato. La TripPin.Contents funzione viene richiamata senza parametri aggiuntivi.

TripPin = [
TestConnection = (dataSourcePath) => { "TripPin.Contents" },
Authentication = [
Anonymous = []
],
Label = "TripPin"
];
Esempio: Connettore con un parametro URL
Se la funzione dell'origine dati ha un solo parametro obbligatorio di tipo , sarà Uri.Type dataSourcePath
uguale all'URL fornito dall'utente. Il frammento di codice seguente illustra l'implementazione di TestConnection
dall'esempio github.

GithubSample = [
TestConnection = (dataSourcePath) => {"GithubSample.Contents", dataSourcePath},
Authentication = [
OAuth = [
StartLogin = StartLogin,
FinishLogin = FinishLogin,
Label = Extension.LoadString("AuthenticationLabel")
]
]
];

Esempio: Connettore con parametri obbligatori


Se la funzione dell'origine dati ha più parametri o un singolo parametro non URL, il valore sarà una stringa
dataSourcePath JSON contenente i parametri. Il frammento di codice seguente proviene dall'esempio
DirectQueryForSQL.

DirectSQL = [
TestConnection = (dataSourcePath) =>
let
json = Json.Document(dataSourcePath),
server = json[server],
database = json[database]
in
{ "DirectSQL.Database", server, database },
Authentication = [
Windows = [],
UsernamePassword = []
],
Label = "Direct Query for SQL"
];
Gestione della firma Power Query connettore
07/12/2021 • 3 minutes to read

In Power BI, il caricamento dei connettori personalizzati è limitato dall'impostazione di sicurezza scelta. Come
regola generale, quando la sicurezza per il caricamento dei connettori personalizzati è impostata su
"Consigliato", i connettori personalizzati non verranno caricati e sarà necessario abbassarli per caricarli.
L'eccezione è attendibile, "connettori firmati". I connettori firmati sono un formato speciale di connettore
personalizzato, un file con estensione pqx anziché mez, firmato con un certificato. Il firmatario può fornire
all'utente o al reparto IT dell'utente un'identificazione personale della firma, che può essere inserita nel registro
per indicare in modo sicuro l'attendibilità di un determinato connettore.
I passaggi seguenti consentono di usare un certificato (con una spiegazione su come generarne uno se non è
disponibile) e di firmare un connettore personalizzato con lo strumento "MakePQX".

NOTE
Per informazioni sulla creazione di un certificato autofirmato per testare queste istruzioni, vedere la documentazione
Microsoft in New-SelfSignedCertificate in PowerShell.

NOTE
Per informazioni sull'esportazione del certificato come file PFX, passare a Export-PfxCertificate.

1. Scaricare MakePQX.
2. Estrarre la cartella MakePQX nel file ZIP incluso nella destinazione desiderata.
3. Per eseguirlo, chiamare MakePQX nella riga di comando. Richiede le altre librerie nella cartella, quindi
non è possibile copiare solo l'eseguibile. L'esecuzione senza parametri restituirà le informazioni della
Guida.
Utilizzo: MakePQX [ opzioni] [ comando]
Opzioni:

O P Z IO N I DESC RIZ IO N E

-? |-h | --help Mostra le informazioni della Guida

Comandi:

C O M A N DO DESC RIZ IO N E

pack Creare un file pqx.

sign Firma un pqx non firmato o controfirma se pqx è già firmato.


Usare l'opzione --replace per sostituire la firma esistente.

verify Verificare lo stato della firma in un file pqx. Il valore restituito


sarà diverso da zero se la firma non è valida.
In MakePQX sono disponibili tre comandi. Usare MakePQX [ comando] --help per altre informazioni su un
comando.

Pack
Il comando Pack accetta un file mez e lo racchiude in un file pqx, che può essere firmato. Il file pqx è anche in
grado di supportare alcune funzionalità che verranno aggiunte in futuro.
Utilizzo: opzioni del [ pacchetto MakePQX ]
Opzioni:

O P Z IO N E DESC RIZ IO N E

-? |-h | --help Visualizzare le informazioni della Guida.

-mz | --mez File di estensione di input.

-c | --cer tificate Certificato (con estensione pfx) usato per firmare il file di
estensione.

-p | --password Password per il file del certificato.

-t | --target Nome del file di output. Il valore predefinito è lo stesso


nome del file di input.

Esempio
C:\Users\cpope\Downloads\MakePQX>MakePQX.exe pack -mz
"C:\Users\cpope\OneDrive\Documents\Power BI Desktop\Custom Connectors\HelloWorld.mez" -t
"C:\Users\cpope\OneDrive\Documents\Power BI Desktop\Custom
Connectors\HelloWorldSigned.pqx"

Sign
Il comando Firma firma il file pqx con un certificato, fornendo un'identificazione personale che può essere
verificata per l'attendibilità da Power BI client con l'impostazione di sicurezza superiore. Questo comando
accetta un file pqx e restituisce lo stesso file pqx firmato.
Utilizzo: opzioni per gli argomenti del segno ] [ [ MakePQX ]
Argomenti:

A RGO M EN TO DESC RIZ IO N E

<pqx file> Percorso del file pqx.

Opzioni:

O P Z IO N E DESC RIZ IO N E

-c | --cer tificate Certificato (con estensione pfx) usato per firmare il file di
estensione.

-p | --password Password per il file del certificato.


O P Z IO N E DESC RIZ IO N E

-r | --replace Sostituire la firma esistente invece della controfirma.

-? |-h | --help Visualizzare le informazioni della Guida.

Esempio
C:\Users\cpope\Downloads\MakePQX>MakePQX sign
"C:\Users\cpope\OneDrive\Documents\Power BI Desktop\Custom
Connectors\HelloWorldSigned.pqx" --cer tificate ContosoTestCer tificate.pfx --password password

Verificare
Il comando Verifica verifica che il modulo sia stato firmato correttamente e visualizza lo stato del certificato.
Utilizzo: opzioni per verificare gli argomenti di ] [ [ MakePQX ]
Argomenti:

A RGO M EN TO DESC RIZ IO N E

<pqx file> Percorso del file pqx.

Opzioni:

O P Z IO N E DESC RIZ IO N E

-q | --quiet Nasconde l'output della verifica della firma.

-? |-h | --help Visualizzare le informazioni della Guida.

Esempio
C:\Users\cpope\Downloads\MakePQX>MakePQX verify
"C:\Users\cpope\OneDrive\Documents\Power BI Desktop\Custom
Connectors\HelloWorldSigned.pqx"

{
"SignatureStatus": "Success",
"CertificateStatus": [
{
"Issuer": "CN=Colin Popell",
"Thumbprint": "16AF59E4BE5384CD860E230ED4AED474C2A3BC69",
"Subject": "CN=Colin Popell",
"NotBefore": "2019-02-14T22:47:42-08:00",
"NotAfter": "2020-02-14T23:07:42-08:00",
"Valid": false,
"Parent": null,
"Status": "UntrustedRoot"
}
]
}

Attendibilità dei connettori firmati in Power BI Desktop


Dopo aver verificato la firma, è possibile fornire l'identificazione personale all'utente finale per l'elenco come
attendibile. Per informazioni su come specificare l'identificazione personale, vedere la documentazione Power BI
.
Power Query Connector Certification
07/12/2021 • 8 minutes to read

NOTE
Questo articolo descrive i requisiti e il processo per inviare un Power Query connettore personalizzato per la certificazione.
Leggere attentamente l'intero articolo prima di avviare il processo di certificazione.

Introduzione
La certificazione di Power Query connettore personalizzato rende il connettore disponibile pubblicamente, in
modo Power BI Desktop. I connettori certificati sono supportati in PowerBI.com e in tutte le versioni di Power BI
Premium, ad eccezione dei flussi di dati. La certificazione è regolata dal Programma di certificazione connettore
di Microsoft, in cui Microsoft collabora con gli sviluppatori partner per estendere le funzionalità di connettività
dei dati Power BI.
I connettori certificati sono:
Gestito dallo sviluppatore partner
Supportato dallo sviluppatore partner
Certificato da Microsoft
Distribuito da Microsoft
Microsoft collabora con i partner per assicurarsi di avere supporto per la manutenzione, ma i problemi dei
clienti con il connettore stesso verranno indirizzati allo sviluppatore partner.
I connettori certificati vengono aggregati in modo Power BI Desktop. I connettori personalizzati devono essere
caricati in Power BI Desktop, come descritto in Caricamento dell'estensione in Power BI Desktop. Entrambi
possono essere aggiornati tramite Power BI Desktop o Power BI tramite un gateway dati locale implementando
un testConnection.
I connettori certificati con un'implementazione supportano anche l'aggiornamento end-to-end tramite il cloud
(Power BI Service) senza la necessità di TestConnection un gateway dati locale. L Power BI di servizio ospita
essenzialmente un "gateway cloud" che viene eseguito in modo simile al gateway locale. Dopo la certificazione,
il connettore verrà distribuito in questo ambiente in modo che sia disponibile per tutti Power BI clienti. Esistono
requisiti aggiuntivi per i connettori che devono usare componenti aggiuntivi, ad esempio un driver basato su
ODBC. Assicurarsi di contattare il contatto Microsoft se il connettore richiede l'uso di componenti aggiuntivi.

Sicurezza e firma dei connettori personalizzati


Poiché M è un linguaggio versatile che, come illustrato inGestione dell'autenticazione, ha la capacità di interagire
con le credenziali archiviate, è necessario offrire agli utenti un modo per consentire solo l'esecuzione di
connettori attendibili.
Dal punto di vista dello sviluppatore, gli sviluppatori devono firmare autonomamente il connettore
personalizzato e fornire agli utenti le informazioni (identificazione personale) per caricarlo in modo sicuro.
Dal punto di vista di un utente, gli utenti devono usare l'identificazione personale dello sviluppatore per
considerare attendibile e caricare in modo sicuro il connettore personalizzato per l'uso. In alternativa, gli utenti
possono scegliere di ridurre le impostazioni di sicurezza per consentire il caricamento di codice non certificato
da Microsoft o da un altro sviluppatore, ma questa operazione non è consigliata.

Panoramica della certificazione


Prerequisiti
Per garantire un'esperienza ottimale per i clienti, si considerino solo i connettori che soddisfano un set di
prerequisiti per la certificazione:
Il connettore deve essere per un prodotto pubblico.
Il connettore deve essere considerato code-complete per una versione di rilascio iniziale. Il programma
consente iterazioni e aggiornamenti frequenti. Si noti che Microsoft non offre direttamente consulenza
tecnica per lo sviluppo di connettori personalizzati. Tuttavia, come parte del programma, Microsoft può
consigliare agli sviluppatori di interagire ulteriormente. Dopo aver registrato il programma seguente,
contattare il contatto Microsoft per altre informazioni.
Lo sviluppatore deve fornire una stima per l'utilizzo. È consigliabile che gli sviluppatori di connettori per
prodotti molto importanti usino le funzionalità di autofi firma dei connettori per fornirli direttamente al
cliente.
Il connettore deve essere già reso disponibile ai clienti direttamente per soddisfare le esigenze degli
utenti o uno scenario aziendale. A tale scopo, è possibile usare un programma di anteprima privata
distribuendo il connettore completato direttamente agli utenti finali e alle organizzazioni tramite
l'autofirizzazione. Ogni utente o organizzazione deve essere in grado di fornire commenti e suggerimenti
e convalidare l'esigenza aziendale del connettore e che il connettore funzioni correttamente per
soddisfare i propri requisiti aziendali.
Il connettore deve funzionare correttamente a un livello di utilizzo previsto dai clienti.
Nel forum di Power BI Ideas deve essere presente un thread guidato dai clienti per indicare la richiesta di
rendere il connettore disponibile pubblicamente in Power BI Desktop. Non esiste una soglia di
engagement impostata. Tuttavia, maggiore è il coinvolgimento, più forte è la richiesta evidente per il
connettore.
Questi prerequisiti sono necessari per garantire che i connettori sottoposti a certificazione siano necessari per
l'uso e il supporto di clienti e aziende significativi dopo la certificazione.
Processi e sequenze temporali
I connettori certificati vengono rilasciati con versioni Power BI Desktop mensili, quindi le scadenze per ogni
versione vengono Power BI Desktop data di rilascio. La durata prevista del processo di certificazione dalla
registrazione alla versione varia a seconda della qualità e della complessità dell'invio del connettore ed è
descritta nei passaggi seguenti:
Registrazione: notifica della finalità di certificare il connettore personalizzato. Questa operazione deve
verificarsi entro il 15 del mese, due mesi prima del rilascio Power BI desktop di destinazione.
Ad esempio, per la versione Power BI Desktop aprile, la scadenza sarà il 15 febbraio.
Invio: invio dei file del connettore per la revisione Da parte di Microsoft. Questa operazione deve
verificarsi entro il primo del mese prima del rilascio Power BI desktop di destinazione.
Ad esempio, per la versione Power BI Desktop aprile, la scadenza sarà il 1° marzo.
Revisione tecnica: finalizzazione dei file del connettore, passaggio di revisione e certificazione
Microsoft. Questa operazione deve verificarsi entro il 15 del mese prima del rilascio Power BI Desktop
destinazione.
Ad esempio, per la versione Power BI Desktop aprile, la scadenza sarà il 15 marzo.
A causa della complessità delle revisioni tecniche e dei potenziali ritardi, della riarchitettura e dei problemi di
test, è consigliabile inviare anticipatamente un lungo lead time per la versione iniziale e la certificazione. Se si
desidera che il connettore sia importante da distribuire ad alcuni clienti con un sovraccarico minimo, è
consigliabile eseguire l'autofi firma e fornire il connettore in questo modo.

Requisiti di certificazione
È stato creato un determinato set di requisiti per la certificazione. Microsoft riconosce che non tutti gli
sviluppatori possono soddisfare questi requisiti ed è molto importante introdurre un set di funzionalità in grado
di gestire le esigenze degli sviluppatori in breve tempo.
File di invio (Artifacts)
Assicurarsi che i file del connettore inviati includano tutti gli elementi seguenti:
File del connettore (con estensione mez)
Il file con estensione mez deve seguire gli standard di stile e avere un nome simile al nome del
prodotto o del servizio. Non deve includere parole come "Power BI", "Connector" o "API".
Assegnare al file con estensione mez il nome seguente: ProductName.mez
Power BI Desktop file (con estensione pbix) per i test
È necessario un report di Power BI di esempio (con estensione pbix) con cui testare il connettore.
Il report deve includere almeno una query per testare ogni elemento nella tabella di navigazione.
Se non è presente alcuno schema impostato (ad esempio, database), il report deve includere una
query per ogni "tipo" di tabella che il connettore può gestire.
Testare l'account nell'origine dati
L'account di test verrà utilizzato per testare e risolvere i problemi del connettore.
Fornire un account di test persistente, in modo da poter usare lo stesso account per certificare
eventuali aggiornamenti futuri.
Istruzioni di test
Fornire qualsiasi documentazione su come usare il connettore e testarne la funzionalità.
Collegamenti a dipendenze esterne (ad esempio, driver ODBC)
Caratteristiche e stile
Il connettore deve seguire un set di regole di funzionalità e stile per soddisfare uno standard di usabilità
coerente con altri connettori certificati.
Il connettore DEVE:
Usare il formato del documento Section.
Disporre dell'area di controllo della versione nella sezione .
Fornire i metadati della documentazione della funzione.
Disporre del gestore TestConnection.
Seguire le convenzioni di denominazione (ad esempio, DataSourceKind.FunctionName ). Non deve
includere parole come "Power BI", "Connector" o "API".
dovrebbe FunctionName avere senso per il dominio,ad esempio "Contents", "Tables", "Document",
"Databases" e così via.
Il connettore DOVREBBE:
Avere icone.
Specificare una tabella di navigazione.
Inserire stringhe in un resources.resx file. Gli URL e i valori devono essere hardcoded nel codice del
connettore e non devono essere inseriti nel resources.resx file.
Sicurezza
Esistono considerazioni specifiche sulla sicurezza che il connettore deve gestire.
Se Extension.CurrentCredentials() viene usato:
L'utilizzo è obbligatorio? In tal caso, a dove vengono inviate le credenziali?
È garantito che le richieste siano effettuate tramite HTTPS?
È possibile usare la funzione helper di imposizione HTTPS.
Se le credenziali vengono inviate tramite Web.Contents() GET:
Può essere trasformato in un POST?
Se è richiesto GET, il connettore DEVE usare il CredentialQueryString record nel record delle
opzioni per passare credenziali Web.Contents() riservate.
Se vengono usate le funzioni Diagnostics.*:
Convalidare ciò che viene tracciato; i dati non devono contenere informazioni personali o
grandi quantità di dati non necessari.
Se è stata implementata una traccia significativa nello sviluppo, è necessario implementare una
variabile o un flag di funzionalità che determina se la traccia deve essere attivata. Questa opzione deve
essere disattivata prima dell'invio per la certificazione.
Se Expression.Evaluate() viene usato:
Verificare da dove proviene l'espressione e da che cosa si tratta, ovvero può costruire dinamicamente
chiamate a Extension.CurrentCredentials() e così via.
Non Expression deve essere fornito dall'utente né deve richiedere l'input dell'utente.
Expression L'oggetto non deve essere dinamico, ovvero recuperato da una chiamata Web.

Registrazione per la certificazione


Se si è interessati a eseguire la certificazione del connettore personalizzato, assicurarsi che lo scenario e il
connettore soddisfino i prerequisiti e i requisiti descritti in questo articolo. In caso negativo, si verificano ritardi
nella certificazione perché il team dovrà risolvere eventuali problemi o incoerenze prima di procedere con la
certificazione.
Assicurarsi che il connettore sia completo e che sia stato testato sia nella creazione in Power BI Desktop che
nell'aggiornamento e nell'utilizzo in Power BI Service. Assicurarsi di aver testato l'aggiornamento end-to-end
completo nel servizio Power BI tramite un gateway dati locale.
Per iniziare, completare il modulo di registrazionee contattare un contatto Microsoft per iniziare il processo.

App modello (scelta consigliata)


Dopo aver sviluppato un connettore per un'origine dati, è consigliabile aiutare i clienti a iniziare rapidamente
creando un'app modello. Un'app modello fornisce ai clienti un report predefinito connesso ai dati che possono
usare predefiniti o personalizzare in base alle esigenze.

NOTE
Le app modello non supportano i connettori che richiedono un gateway.
Power Query dell'invio del connettore
07/12/2021 • 3 minutes to read

Introduzione
Questo articolo fornisce istruzioni su come inviare il connettore personalizzato Power Query per la
certificazione. Non inviare il connettore per la certificazione a meno che non si sia stati indirizzati dal contatto
Microsoft.

Prerequisiti
Dopo aver approvato la certificazione, assicurarsi che il connettore soddisfi i requisiti di certificazione e segua
tutte le linee guida relative a funzionalità, stile e sicurezza. Preparare gli artefatti di invio per l'invio.

Invio al portale di certificazione del connettore


Il portale di certificazione dei connettori è un'esperienza all'interno di ISV Studio che consente ai partner
Microsoft e agli ISV di inviare, visualizzare e gestire i connettori inviati per la certificazione. Dopo l'invio, la
comunicazione tra Microsoft e lo sviluppatore del connettore partner verrà tramite il portale di certificazione del
connettore.
Invio iniziale
1. Passare a ISV Studio e accedere con il proprio account di account Microsoft. Gli account personali non
sono supportati in questa esperienza.
2. Selezionare la scheda Cer tificazione connettore a sinistra per avviare l'esperienza del portale di
certificazione del connettore.
3. Selezionare Power Quer y come tipo di connettore.
4. Leggere e accettare il contratto per i partner del connettore. Se è presente un contratto separato che
regola la relazione tra l'organizzazione e Microsoft, contattare il contatto Microsoft.
5. Upload .mez il file e completare il modulo con le informazioni sul connettore. Inviare il modulo per
completare il processo di invio del connettore. Dopo l'invio, è possibile usare l'esperienza di controllo
attività a destra per comunicare con il contatto Microsoft.
6. Leggere le linee guida per fornire la documentazione per il connettore personalizzato. Creare un file
Markdown ( ) seguendo le linee guida per la documentazione del connettore personalizzato, sfruttando
gli esempi della .md documentazione esistente, se necessario. Questo passaggio è fondamentale per
assicurarsi che gli utenti sappiano come usare il connettore. Al termine, inviare il file Markdown ( .md )
nel controllo attività come allegato.
7. Nel controllo attività condividere anche un paragrafo che introduce il connettore e spiegarne la proposta
di valore a utenti e clienti. Questa voce verrà inviata come parte del blog Power BI nel post del mese
prossimo, che annuncia il rilascio del connettore.
8. Se si vuole aggiungere colleghi per gestire il connettore, inseri il contatto Microsoft.
Al termine della revisione del codice del connettore, il team pianifica una demo per il team per illustrare
l'esperienza del connettore. Verranno convalidati gli scenari seguenti:
È possibile connettersi al servizio.
Il connettore visualizza correttamente le tabelle di navigazione.
Il connettore esegue correttamente l'autenticazione con il metodo di autenticazione previsto.
È possibile aggiornare correttamente il connettore.
È possibile pubblicare correttamente nel servizio.
È possibile aggiornare correttamente l'accesso end-to-end tramite il gateway.
Assicurarsi che questi scenari funzionino correttamente prima della demo in modo che la demo funzioni senza
problemi e non blocchi il rilascio del connettore.
Aggiornamenti
È possibile apportare aggiornamenti all'invio del connettore in qualsiasi momento, tranne quando il connettore
è in fase di distribuzione di produzione. Quando si invia un aggiornamento, assicurarsi di inviare un
aggiornamento all'invio esistente, anziché creare un nuovo invio.
1. Passare all'esperienza di cer tificazione del connettore all'interno di ISV Studio.
2. Nell'elenco dei connettori gestiti selezionare l'invio del connettore per visualizzarne le versioni.
3. Per un aggiornamento a un connettore certificato, selezionare il collegamento per inviare una nuova
versione nel pannello a destra, sopra le versioni del connettore esistenti. Per un aggiornamento a una
versione del connettore esistente sottoposta a certificazione, selezionare la versione più recente del
connettore e in basso a sinistra selezionare il pulsante Invia un aggiornamento.
4. È possibile caricare una nuova versione degli artefatti e completare di nuovo il modulo di invio.
5. Dopo aver inviato il modulo del connettore, nella funzionalità di chat Controllo attività a destra inviare
un breve log delle modifiche che spiega l'aggiornamento del connettore. Queste informazioni devono
essere pubbliche e scritte in modo rivolto ai clienti, perché verranno incluse nel prossimo aggiornamento
Power BI Desktop blog.
Documentazione dell'utente per il connettore
personalizzato
07/12/2021 • 4 minutes to read

Dopo aver completato la progettazione del connettore personalizzato Power Query, è necessario inviare un
articolo che fornisce istruzioni su come usare il connettore per la pubblicazione in docs.microsoft.com. Questo
articolo illustra il layout di un articolo di questo tipo e come formattare il testo dell'articolo.

Layout degli articoli


Questa sezione descrive il layout generale degli articoli relativi Power Query connettore. L'articolo sul
connettore personalizzato deve seguire questo layout generale.
Nota di supporto
Subito dopo il titolo dell'articolo, inserire la nota seguente.

NOTE
L'articolo seguente sul connettore è fornito da , il proprietario di questo connettore e un membro del programma
<company name> di certificazione microsoft Power Query Connector. In caso di domande sul contenuto di questo
articolo o in caso di modifiche da apportare a questo articolo, visitare il sito Web e usare i canali <company name> di
supporto.

Sostituire <company name> con il nome della società.


Tabella di riepilogo
Dopo la nota di supporto, fornire una tabella di riepilogo contenente le informazioni seguenti:
Stato versione: indica se il connettore è disponibile in anteprima o a carattere generale. Usare "Anteprima"
o "Disponibilità generale".
Prodotti suppor tati: elenca i prodotti che possono usare il connettore personalizzato.
Tipi di autenticazione suppor tati: elenca i tipi di autenticazione supportati dal connettore personalizzato.
Documentazione di riferimento per le funzioni: elenca tutti i documenti relativi al linguaggio delle
formule M associati al connettore personalizzato.
Se il connettore personalizzato viene implementato in vari prodotti, ma ha funzionalità diverse su questi
prodotti, includere la nota seguente o simile nell'articolo dopo la tabella di riepilogo.

NOTE
Alcune funzionalità possono essere presenti in un prodotto, ma non in altre a causa di pianificazioni della distribuzione e
funzionalità specifiche dell'host.

Prerequisiti
Se il connettore personalizzato richiede l'installazione di altre applicazioni nel sistema che esegue il connettore o
richiede l'esecuzione di una procedura di configurazione prima di usare il connettore personalizzato, è
necessario includere una sezione Prerequisiti che descrive queste procedure di installazione e configurazione.
Questa sezione includerà anche tutte le informazioni sulla configurazione di varie versioni del connettore (se
applicabile).
Funzionalità supportate
Questa sezione deve contenere un elenco delle funzionalità supportate dal connettore personalizzato. Queste
funzionalità sono in genere un elenco puntato che indica se il connettore supporta le modalità Importazione e
DirectQuery e anche eventuali opzioni avanzate disponibili nella finestra di dialogo iniziale visualizzata dopo che
l'utente ha selezionato il connettore in Recuperare i dati.
Istruzioni di connessione
Questa sezione contiene le procedure necessarie per connettersi ai dati. Se il connettore personalizzato viene
usato solo in Power Query Desktop, è necessaria una sola procedura. Tuttavia, se il connettore personalizzato
viene usato sia in Power Query Desktop che in Power Query Online, è necessario specificare una procedura
separata in sezioni separate per ogni istanza. Ciò significa che se il connettore personalizzato viene usato solo da
Power Query Desktop, sarà disponibile una procedura che inizia con un'intestazione di secondo ordine e una
singola procedura dettagliata. Se il connettore personalizzato viene usato da Power Query Desktop e Power
Query Online, saranno disponibili due procedure. Ogni procedura inizia con una seconda intestazione
dell'ordine e contiene una procedura dettagliata separata sotto ogni intestazione. Per esempi di ognuno di
questi tipi di procedure, vedere gli articoli sui connettori di esempio.
La procedura è costituito da un elenco numerato che include ogni passaggio necessario per inserire le
informazioni necessarie per fornire una connessione normale (senza richiedere opzioni avanzate) ai dati.
Connessione l'uso di opzioni avanzate (facoltativo )
Se il connettore personalizzato contiene opzioni avanzate che possono essere usate per connettersi ai dati,
queste informazioni devono essere trattate in una sezione separata della documentazione. È consigliabile
documentare ognuna delle opzioni avanzate e illustrare lo scopo di ogni opzione avanzata illustrata in questa
sezione.
Risoluzione dei problemi (facoltativo )
Se si conoscono errori comuni che possono verificarsi con il connettore personalizzato, è possibile aggiungere
una sezione di risoluzione dei problemi per descrivere i modi per correggere l'errore o risolvere l'errore. Questa
sezione può includere anche informazioni su eventuali limitazioni note del connettore o sul recupero dei dati. È
anche possibile includere eventuali problemi noti relativi all'uso del connettore per connettersi ai dati.
Istruzioni aggiuntive (facoltativo )
Tutte le altre istruzioni o informazioni sul connettore che non sono state trattate nelle sezioni precedenti
possono essere fornite in questa sezione.

Posizione e formato dell'articolo


L'articolo deve essere reso disponibile GitHub nella cartella Connectors nel Power Query docs:
https://github.com/MicrosoftDocs/powerquery-docs/tree/master/powerquery-docs/Connectors . Assicurarsi
anche di aggiungere un collegamento all'articolo nell'elenco dei connettori che fanno riferimento all'immagine
del logo corretta caricata nella /Connectors/media/index cartella. Infine, assicurarsi di aggiungere un
collegamento all'articolo nel file del sommario ( TOC.yml ). I connettori certificati saranno disponibili solo in
Power BI (set di dati).
Vedere la Microsoft Docs per i collaboratori su come contribuire al nostro repo.
L'articolo deve essere formattato e inviato come file Markdown. Deve usare lo stile Microsoft per descrivere le
procedure e il layout dell'interfaccia utente.
Gli articoli seguenti includono istruzioni sulla formattazione del documento in Markdown e sullo stile Microsoft
da seguire durante la creazione dell'articolo:
Informazioni di riferimento su Docs Markdown
Guida di stile di scrittura Microsoft

Articoli sui connettori di esempio


Ecco un paio di articoli di Power Query connettore che è possibile usare come punto di partenza:
Adobe Analytics (Power Query Desktop)
Database SQL Azure (Power Query Desktop e Power Query Online)

Potrebbero piacerti anche