Connettersi a una query SQL personalizzata
Nota: l’utilizzo di SQL personalizzato può influire sulle prestazioni di una cartella di lavoro. Collabora con il DBA per creare la migliore query SQL personalizzato possibile. Per eseguire le operazioni necessarie per creare viste in Tableau Desktop, Tableau deve essere in grado di controllare WHERE, GROUP BY e altre clausole SQL. Poiché una query SQL personalizzato può contenere tali elementi e Tableau non può inserirli nel codice SQL esistente, Tableau deve racchiudere l’istruzione SQL personalizzato all’interno di un’istruzione SELECT. Quando una connessione SQL personalizzato è lenta o restituisce un errore, il problema dipende spesso dal wrapping di SQL personalizzato eseguito da Tableau Desktop.
Per la maggior parte dei database puoi connetterti ad una query specifica anziché all’intero set di dati. Poiché i database presentano una sintassi SQL leggermente diversa, il SQL personalizzato utilizzato per connetterti a un database potrebbe essere diverso da quello che puoi utilizzare per connetterti a un altro database. Tuttavia, l’utilizzo del SQL personalizzato può risultare utile quando conosci esattamente le informazioni necessarie e sai come scrivere query SQL.
Sebbene vi siano molti motivi comuni per cui potresti usare un SQL personalizzato, puoi farlo per unire i dati tra tabelle, rifondere campi per eseguire join tra database, ristrutturare o ridurre le dimensioni dei tuoi dati per l’analisi e così via.
Per le origini dati di Excel e di file di testo, questa opzione è disponibile solo nelle cartelle di lavoro create prima di Tableau Desktop 8.2 o quando si utilizza Tableau Desktop in Windows con la connessione legacy. Per collegarti a file di Excel o di testo utilizzando la connessione legacy, connettiti al file e nella finestra di dialogo Apri, fai clic sul menu a discesa Apri e quindi seleziona Apri con connessione legacy.
NOTA: a partire da Tableau 2020.2, le connessioni legacy a Excel e file di testo non sono più supportate. Consulta il documento Legacy Connection Alternatives in Tableau Community per le alternative all’utilizzo di connessioni obsolete.
Connettersi a una query SQL personalizzata
Dopo aver eseguito la connessione ai dati, fai doppio clic sull’opzione Nuovo SQL personalizzato nella pagina Origine dati.
Digita o incolla la query nella casella di testo. La query deve essere una singola istruzione SELECT*.
Al termine, fai clic su OK.
Facendo clic su OK, la query viene eseguita e la tabella della query SQL personalizzata viene visualizzata nel livello logico del canvas. Solo i campi rilevanti della query SQL personalizzata vengono visualizzati nella griglia di dati della pagina Origine dati.
Per maggiori informazioni sui livelli logici e fisici del canvas, consulta Modello di dati di Tableau.
Esempi di query SQL personalizzate
Combina le tabelle verticalmente (unione)
Se devi aggiungere dati tra tabelle, puoi usare l’opzione di unione nel livello fisico del canvas in Tableau. In alcuni casi il database non supporta questa opzione, pertanto puoi utilizzare il SQL personalizzato.
Ad esempio, supponiamo di avere le due seguenti tabelle: novembre e dicembre.
Novembre | Dicembre |
---|---|
Puoi utilizzare la query SQL personalizzata seguente per aggiungere la seconda tabella, dicembre, alla prima tabella, novembre:
SELECT * FROM November UNION ALL SELECT * FROM December
Il risultato della query si presenta in questo modo nella griglia di dati:
Per maggiori informazioni sull’opzione unione, consulta Unificare i dati.
Modificare il tipo di dati di un campo per eseguire un join tra database
Quando desideri eseguire un join tra due tabelle nel livello fisico del canvas, il tipo di dati dei campi sottoposti a join deve essere lo stesso. Nei casi in cui il tipo di dati dei campi non è lo stesso, puoi utilizzare un SQL personalizzato per modificare il tipo di dati (cast) prima di eseguire il join.
Ad esempio, si supponga di voler unire due tabelle, Main e Sub, utilizzando rispettivamente i campi Root e ID. Il campo Root è un tipo di numero e il campo ID è un tipo di stringa. Puoi utilizzare la query SQL personalizzata seguente per modificare il tipo di dati di unità unificata da un numero a una stringa in modo da poter unire le tabelle Main e Sub utilizzando i campi Root e ID.
SELECT
[Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
FROM [Main]
Il risultato di questa query mostra il campo Root originale e la posizione del campo Root come stringa.
Per maggiori informazioni su join e join tra database, consulta Creare un join dei dati.
Ridurre le dimensioni dei dati
Quando utilizzi set di dati molto estesi, talvolta puoi risparmiare tempo durante l’utilizzo dei dati riducendone le dimensioni.
Si supponga ad esempio di avere una grande tabella denominata FischerIris. Puoi utilizzare la seguente query SQL personalizzata per recuperare le colonne e i record specificati riducendo le dimensioni del set di dati a cui ti connette da Tableau.
SELECT
[FischerIris].[Species] AS [Species],
[FischerIris].[Width] AS [Petal Width],
COUNT([FischerIris].[ID]) AS [Num of Species]
FROM [FischerIris]
WHERE [FischerIris].[Organ] = 'Petal'
AND [FischerIris].[Width] > 15.0000
GROUP BY [FischerIris].[Species], [FischerIris].[Width]
Ristrutturare i dati (pivot)
In alcuni casi potresti dover utilizzare una tabella che deve essere ristrutturata prima dell’analisi. Sebbene questo tipo di attività possa essere eseguita nel livello fisico del canvas in Tableau utilizzando opzioni come pivot, il database potrebbe non supportarlo. In questo caso, puoi utilizzare un SQL personalizzato.
Ad esempio, supponiamo di avere la seguente tabella.
Per modificare la struttura e ottimizzare i dati per l’analisi in Tableau, puoi utilizzare la query SQL seguente:
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Don't like AS [Quantity],
"Don't Like" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table.Items - Defective AS [Quantity],
"Defective" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS [Season ID],
Table1.Items - Too big AS [Quantity],
"Too Big" AS [Reason]
FROM Table1
UNION ALL
SELECT Table1.Season ID AS Season ID,
Table1.Items - Too small AS [Quantity]
"Too Small" AS [Reason]
FROM Table1
Il risultato della query si presenta in questo modo nella griglia di dati:
Per maggiori informazioni sull’opzione pivot, consulta Ruotare i dati da colonne a righe.
Combinare (unire) e aggregare i dati
Se devi combinare le tabelle e aggregare i dati, puoi utilizzare un join e le opzioni per il tipo di aggregazione predefinito nel livello fisico del canvas in Tableau. In alcuni casi potresti dover utilizzare un SQL personalizzato.
Ad esempio, supponiamo di avere le due seguenti tabelle: ordini e venditori.
Ordini | Venditori |
---|---|
Puoi utilizzare la seguente query SQL personalizzata per trovare un conteggio sul numero di ordini ed eseguire un join sinistro nelle tabelle Ordini e Venditori:
SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders
FROM Orders
LEFT JOIN Vendors
ON Orders.VendorID=Vendors.VendorID
GROUP BY Name;
Il risultato della query si presenta in questo modo nella griglia di dati:
Per maggiori informazioni sull’unione, consulta Creare un join dei dati.
Errori durante il riferimento a colonne duplicate
Se la query SQL personalizzata fa riferimento a colonne duplicate, è possibile che si verifichino errori durante il tentativo di utilizzo di una delle colonne nell’analisi in Tableau. Ciò accadrà anche se la query è valida. Considera ad esempio la query seguente:
SELECT * FROM
authors, titleauthor WHERE authors.au_id = titleauthor.au_id
La query è valida, ma il campo au_id è ambiguo perché esiste sia nella tabella "autori" che nella tabella "titleauthor". Tableau si collegherà alla query ma riceverai un errore ogni volta che proverai ad usare il campo au_id . Ciò è dovuto al fatto che Tableau non conosce la tabella a cui fai riferimento.
Nota: è consigliabile definire alias di colonna con una clausola AS quando possibile in una query SQL personalizzata. Ciò è dovuto al fatto che ogni database ha le proprie regole quando è necessario generare automaticamente un nome di colonna ogni volta che non viene utilizzato un alias.
Modificare una query SQL personalizzata
Per modificare una query SQL personalizzata
- Nella pagina dell’origine dati, nel canvas, fai doppio clic sulla query SQL personalizzata nel livello logico.
- Passa il puntatore sulla tabella SQL personalizzata nel livello fisico finché non viene visualizzata la freccia.
- Fai clic sulla freccia e quindi seleziona Modifica query SQL personalizzata.
- Nella finestra di dialogo modifica la query SQL personalizzata.
Modificare il nome di una query SQL personalizzata
Quando trascini una query SQL personalizzata nel livello logico del canvas, Tableau le assegna un nome predefinito, ovvero Query SQL personalizzata, Query SQL personalizzata1 e così via. Puoi modificare il nome predefinito in modo che sia più significativo.
- Nella pagina dell’origine dati, nel livello logico del canvas, seleziona la freccia a discesa nella tabella della query SQL personalizzata, quindi scegli Rinomina.
- Immetti il nome che desideri utilizzare per la query SQL personalizzata.
Utilizzare parametri in una query SQL personalizzata
Puoi utilizzare i parametri in un’istruzione di query SQL personalizzata per sostituire un valore costante con un valore dinamico. Quindi puoi aggiornare il parametro nella cartella di lavoro per modificare la connessione. Ad esempio, puoi connetterti a una query SQL personalizzata che fornisce dati del traffico Web per una determinata pagina specificata da un ID pagina. Anziché utilizzare un valore costante per il valore ID pagina nella query SQL, puoi inserire un parametro. Dopo aver completato la connessione, puoi visualizzare un controllo parametro nella cartella di lavoro. Utilizza il controllo parametro per estrarre i dati per ogni pagina di interesse senza dover modificare o duplicare la connessione.
In Tableau Desktop, puoi creare un parametro direttamente dalla finestra di dialogo SQL personalizzata o utilizzare i parametri inclusi nella cartella di lavoro. Se crei un nuovo parametro, questo diventa disponibile per essere utilizzato nella cartella di lavoro come qualsiasi altro parametro. Per maggiori informazioni, consulta Creare parametri.
Per il web authoring (in Tableau Cloud o Tableau Server), puoi utilizzare un parametro esistente pubblicato da Tableau Desktop. Non puoi creare un nuovo parametro nella progettazione sul Web.
Per aggiungere un parametro a una query SQL personalizzata
- Nella pagina dell’origine dati, nel canvas, passa il puntatore del mouse sulla tabella fino a visualizzare l’icona di modifica e quindi fai clic sul pulsante di modifica.
- Nella parte inferiore della finestra di dialogo, fai clic su Inserisci parametro.
- Seleziona un valore costante nell’istruzione SQL e quindi seleziona il parametro che desideri utilizzare nel menu a discesa Inserisci parametro. Se non hai ancora stato creato un parametro, seleziona Crea nuovo parametro. Segui le istruzioni in Creare parametri per creare un parametro.
Nota: i parametri possono sostituire solo valori letterali. Non possono sostituire espressioni o identificatori quali nomi tabella.
Nell’esempio seguente la query SQL personalizzata restituisce tutti gli ordini contrassegnati come priorità Urgent. Nell’istruzione SQL personalizzata la priorità dell’ordine è il valore costante. Se desideri modificare la connessione per visualizzare gli ordini di priorità alta, devi modificare l’origine dati.
Anziché creare e gestire molte varianti della stessa query, puoi sostituire il valore della priorità dell’ordine costante con un parametro. Il parametro deve contenere tutti i valori possibili per la Priorità ordine.
Dopo aver creato un parametro, puoi inserirlo nell’istruzione SQL per sostituire il valore costante.
Dopo aver completato la modifica della connessione, il nuovo parametro viene elencato nell’area Parametri nella parte inferiore del riquadro Dati e il controllo del parametro compare sul lato destro della vista. Quando selezioni valori diversi, la connessione viene aggiornata.
Nota: se utilizzi un’estrazione, devi aggiornare l’estrazione per riflettere le modifiche apportate al parametro. La pubblicazione di un’origine dati che utilizza parametri SQL personalizzati include i parametri. I parametri vengono trasferiti in tutte le cartelle di lavoro che si connettono all’origine dati.
Supporto di Tableau Catalog per SQL personalizzato
Il supporto per SQL personalizzato in Tableau Catalog dipende dalla query di SQL personalizzato.
Tableau Catalog è disponibile nell’offerta di Data Management per Tableau Server e Tableau Cloud. Per maggiori informazioni su Tableau Catalog, consulta "Informazioni su Tableau Catalog" nella Guida di Tableau Server o Tableau Cloud.
Query supportate
Catalog supporta le query SQL personalizzate che soddisfano lo standard ANSI SQL-2003, con tre eccezioni note:
- Espressioni fuso orario
- Espressioni Multiset
- Parametri di Tableau
A partire dalla versione 2021.4, Tableau Catalog supporta anche l’utilizzo del dialetto Transact-SQL (T-SQL) in SQL personalizzato, con le seguenti eccezioni:
- Suggerimenti
- Clausole FOR
- Funzioni OPENROWSET, OPENXML e OPENJSON
- Funzioni scalari ODBC
- FOR SYSTEM_TIME
- TABLESAMPLE
- Espressione MATCH
- Espressione CONTAINS
- Espressione FREETEXT
A partire da Tableau Cloud di ottobre 2023 e Tableau Server 2023.3, Tableau Catalog offre anche il supporto per query di SQL personalizzato che utilizzano PostgreSQL, con le seguenti eccezioni:
- Funzione XML
- Funzioni e operatori JSON
Funzionalità e funzioni supportate
Catalog supporta le seguenti funzionalità aggiuntive per le origini dati, le cartelle di lavoro e i flussi con connessioni che utilizzano i driver MySQL o PostgreSQL, ad esempio Amazon Aurora per MySQL, Amazon RedShift, Pivotal Greenplum Database, MemSQL, Denodo e altri.
- Funzione GROUP_CONCAT MySQL
- Matrici PostgreSQL
- Funzione EXTRACT() PostgreSQL
Gli altri scenari e funzionalità di SQL personalizzati potrebbero funzionare, ma Tableau non offre test o supporto a riguardo.
Distribuzione supportata
Quando una risorsa utilizza SQL personalizzato, nella scheda Derivazione della pagina della risorsa viene visualizzato un messaggio con un pulsante Mostra query SQL personalizzata. Fai clic sul pulsante per visualizzare il codice SQL personalizzato utilizzato nella connessione. Se desideri copiare negli Appunti il codice SQL personalizzato, fai clic su Copia.
Alcuni tipi di SQL personalizzato possono rendere incompleta la discendenza a monte. In tal caso, viene visualizzato un messaggio con tali informazioni. Le schede dei dettagli dei campi potrebbero non contenere collegamenti a colonne collegate o non mostrare alcuna colonna collegata. Le schede dei dettagli delle colonne potrebbero non contenere collegamenti ai campi che utilizzano la colonna o non mostrare alcun campo.
Se stai esaminando la derivazione di una tabella, tieni presente che Catalog non supporta la visualizzazione delle informazioni delle colonne nella derivazione per i metadati delle tabelle raccolti tramite SQL personalizzato. Tuttavia, se altre risorse utilizzano la stessa tabella e non usano SQL personalizzato, Tableau Catalog potrebbe essere in grado di visualizzare informazioni sulle colonne rilevate tramite queste altre risorse.
Nello screenshot mostrato di seguito, la tabella factAccountOpportunityByQuarter è stata indicizzata in quanto utilizzata da un’origine dati. Tuttavia, poiché fa riferimento a una query SQL personalizzata, le informazioni sulla colonna non sono disponibili.
Nel caso in cui più origini dati, cartelle di lavoro o flussi utilizzino una tabella, quando vengono applicati filtri a livello di colonna, qualsiasi risorsa a valle di tale tabella che utilizza una query SQL personalizzata viene esclusa. Di conseguenza, nella distribuzione viene visualizzato un numero di risorse a valle inferiore rispetto a quelle effettivamente utilizzate.
Per maggiori informazioni sull’utilizzo della derivazione, consulta "Utilizzare la derivazione per l’analisi d’impatto" nella Guida di Tableau Server(Il collegamento viene aperto in una nuova finestra) o Tableau Cloud(Il collegamento viene aperto in una nuova finestra).