Ansluta till en anpassad SQL-fråga
Obs! Användning av anpassad SQL kan påverka en arbetsboks prestanda. Att arbeta med DBA säkerställer bästa möjliga anpassade SQL-fråga. För att utföra de operationer som krävs för att skapa vyer i Tableau Desktop måste Tableau kunna kontrollera WHERE, GROUP BY och andra SQL-satser. Eftersom en anpassad SQL-fråga kan innehålla dessa element, och Tableau inte kan föra in dem i befintlig SQL, måste Tableau omsluta den anpassade SQL-satsen i en select-sats. När en anpassad SQL-anslutning fungerar långsamt, eller ger ett fel, är det ofta resultatet av den anpassade SQL-omslutningen som Tableau Desktop utför.
Med de flesta databaser kan du ansluta till en specifik fråga i stället för till hela datauppsättningen. Eftersom databasernas SQL-syntax skiljer sig åt en aning kan den anpassade SQL-fråga som du använder för att ansluta till en databas skilja sig från den som du använder för att ansluta till en annan. Anpassad SQL kan dock vara användbart om du vet exakt vilken information du behöver och om du vet hur man skriver SQL-frågor.
Anpassad SQL kan vara bra i många fall, till exempel för att förena data från olika tabeller, omarbeta fält för att skapa korsdatabaskopplingar, strukturera om eller minska storleken på data för analysändamål och mycket mer.
För datakällor i form av Excel- och textfiler är det här alternativet endast tillgängligt i arbetsböcker som skapats före Tableau Desktop 8.2 eller om Tableau Desktop för Windows används med den äldre anslutningen. Om du vill ansluta till Excel eller textfiler med den äldre anslutningen ansluter du till filen och klickar sedan på listrutemenyn Öppna i dialogrutan Öppna och väljer Öppna med Äldre anslutning.
OBS! Från och med Tableau 2020.2 stöds inte längre äldre Excel- och textanslutningar. Se dokumentet Legacy Connection Alternatives (Äldre anslutningsalternativ) i vårt Tableau-community för alternativ till att använda den äldre anslutningen.
Ansluta till en anpassad SQL-fråga
När du har anslutit till dina data dubbelklickar du på alternativet Ny anpassad SQL på sidan Datakälla.
Skriv eller klistra in frågan i textrutan. Frågan måste vara en enskild SELECT*-sats.
Klicka på OK när du är klar.
När du klickar på OK körs frågan och tabellen för den anpassade SQL-frågan visas i arbetsytans logiska lager. Endast relevanta fält från den anpassade SQL-frågan visas i datarutnätet på sidan Datakälla.
Mer information om arbetsytans logiska och fysiska lager finns i Tableaus datamodell.
Exempel på anpassade SQL-frågor
Kombinera tabeller lodrätt (förening)
Om du behöver föra samman olika data kan du använda alternativet för att förena data i arbetsytans fysiska lager i Tableau. I vissa fall stöder inte databasen det här alternativet. Då kan du använda anpassad SQL i stället.
Låt säga att du har följande två tabeller: November och December.
November | December |
---|---|
Du kan använda följande anpassade SQL-fråga för att lägga till den andra tabellen, December, till den första tabellen, November:
SELECT * FROM November UNION ALL SELECT * FROM December
Resultatet från frågan ser ut så här i datarutnätet:
Mer information om föreningar finns i Förena dina data.
Ändra datatypen för ett fält för att skapa en korsdatabaskoppling
Om du vill skapa en koppling mellan två tabeller i arbetsytans fysiska lager måste fälten som du kopplar ha samma datatyp. Om fälten inte har samma datatyp kan du använda anpassad SQL för att ändra fältets datatyp (cast-funktionen) innan du skapar kopplingen.
Anta till exempel att du vill koppla två tabeller, Main (Primär) och Sub (Underordnad), med fältet Root (Rot) respektive fältet ID. Fältet Root (Rot) är ett numeriskt fält och fältet ID är ett strängfält. Du kan använda följande anpassade SQL-fråga för att ändra datatypen för Root (Rot) från ett numeriskt värde till en sträng, så att du kan koppla tabellerna Main (Primär) och Sub (Underordnad) med fälten Root (Rot) och ID.
SELECT
[Main].[Root] AS [Root_Number]
CAST([Main].[Root] AS INT] AS [Root_String]
FROM [Main]
Den här frågan returnerar det ursprungliga Root-fältet (Rot) och samma fält när det har konverterats till en sträng.
Mer information om kopplingar och korsdatabaskopplingar finns i Koppla dina data.
Minska storleken på data
Ibland när du arbetar med väldigt stora datauppsättningar kan du spara tid genom att först minska storleken på dina data.
Anta till exempel att du har en stor tabell med namnet FischerIris. Med följande anpassade SQL-fråga kan du hämta de angivna kolumnerna och posterna och därigenom minska storleken på datauppsättningen som du ansluter till från 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]
Strukturera om data (pivotera)
Ibland kanske du arbetar med en tabell som behöver struktureras om före analysen. Den här typen av uppgift kan utföras i arbetsytans fysiska lager i Tableau med hjälp av alternativ som till exempel pivotering, men det är möjligt att din databas inte stöder detta. I så fall kan du använda anpassad SQL i stället.
Anta till exempel att du har följande tabell:
Om du vill ändra tabellens struktur och optimera data för analys i Tableau kan du använda följande anpassade SQL-fråga:
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
Resultatet från frågan ser ut så här i datarutnätet:
Mer information om hur du pivoterar data finns i Pivotera data från kolumner till rader.
Kombinera (koppla) och aggregera data
Om du behöver kombinera tabeller och aggregera data kan du använda både en koppling och alternativen för standardaggregeringstyp i det fysiska lagret för arbetsytan i Tableau. I vissa fall kan du behöva använda anpassad SQL i stället.
Låt säga att du har följande två tabeller: Orders (Order) och Vendors (Leverantörer).
Orders (Order) | Vendors (Leverantörer) |
---|---|
Du kan använda följande anpassade SQL-fråga om du vill visa antalet order och skapa en vänsterkoppling i tabellerna Orders (Order) och Vendors (Leverantörer):
SELECT Vendors.Name,COUNT(Orders.Order) AS Number Of Orders
FROM Orders
LEFT JOIN Vendors
ON Orders.VendorID=Vendors.VendorID
GROUP BY Name;
Resultatet från frågan ser ut så här:
Mer information om kopplingar finns i Koppla dina data.
Fel när en fråga refererar till dubblettkolumner
Om din anpassade SQL-fråga refererar till dubblettkolumner kan du få fel när du försöker använda en av kolumnerna i en analys i Tableau. Detta händer även om frågan är giltig. Titta till exempel på följande fråga:
SELECT * FROM
authors, titleauthor WHERE authors.au_id = titleauthor.au_id
Frågan är giltig men fältet au_id är tvetydigt eftersom det i detta fall finns både i tabellen ”authors” och tabellen ”titleauthor”. Tableau ansluter till frågan men ett fel returneras när du försöker använda fältet au_id . Det beror på att Tableau inte vet vilken tabell du refererar till.
Obs! Som bästa praxis bör du om möjligt definiera kolumnalias med en AS-sats i en anpassad SQL-fråga. Det beror på att varje databas har sina egna regler för att automatiskt generera ett kolumnnamn när inget alias används.
Redigera en anpassad SQL-fråga
Så här redigerar du en anpassad SQL-fråga
- Dubbelklicka på den anpassade SQL-frågan i det logiska lagret på arbetsytan på sidan Datakälla.
- Hovra över den anpassade SQL-tabellen i det fysiska lagret tills pilarna visas.
- Klicka på pilen och välj Redigera anpassad SQL-fråga.
- Redigera den anpassade SQL-frågan i dialogrutan.
Så här byter du namn på en anpassad SQL-fråga
När du drar en anpassad SQL-fråga till arbetsytans logiska lager tilldelas den ett standardnamn av Tableau: Anpassad SQL-fråga, Anpassad SQL-fråga1 och så vidare. Du kan ändra standardnamnet till något mer beskrivande.
- Välj pilen vid listrutan i tabellen för den anpassade SQL-frågan i arbetsytans logiska lager, fortfarande på sidan Datakälla, och välj Byt namn.
- Ange önskat namn för den anpassade SQL-frågan.
Använda parametrar i en anpassad SQL-fråga
Du kan använda parametrar i en sats med en anpassad SQL-fråga om du vill byta ett konstant värde mot ett dynamiskt. Sedan kan du ändra anslutningen genom att uppdatera parametern i arbetsboken. Du kan till exempel ansluta till en anpassad SQL-fråga som returnerar data om webbtrafik för en särskild sida som anges med ett pageID (sid-ID). I stället för att använda ett konstant värde för pageID i en SQL-fråga kan du lägga till en parameter. Sedan, när anslutningen är klar, kan du visa en parameterkontroll i arbetsboken. Använd parameterkontrollen för att byta ut pageID och hämta in data för varje relevant sida utan att behöva redigera eller duplicera anslutningen.
I Tableau Desktop kan du skapa en parameter direkt från dialogrutan Anpassad SQL eller använda valfria parametrar som är en del av arbetsboken. Om du skapar en ny parameter blir den tillgänglig och kan användas i arbetsboken på samma sätt som andra parametrar. Läs mer i Skapa parametrar.
För webbredigering (i Tableau Cloud eller Tableau Server) kan du använda en befintlig parameter som publicerats från Tableau Desktop. Du kan inte skapa en ny parameter med webbredigering.
Så här lägger du till en parameter i en anpassad SQL-fråga
- Hovra över tabellen på arbetsytan på sidan Datakälla. När redigeringsikonen visas klickar du på redigeringsknappen.
- Klicka på Infoga parameter längst ned i dialogrutan.
- Välj ett konstant värde i SQL-satsen och välj den parameter som du vill använda i stället på listrutemenyn Infoga parameter. Om du inte har skapat någon parameter än väljer du Skapa en ny parameter. Skapa en parameter genom att följa anvisningarna i Skapa parametrar.
Obs! Parametrar kan bara ersätta literaler. De kan inte ersätta uttryck eller identifierare som till exempel tabellnamn.
I exemplet nedan returnerar den anpassade SQL-frågan alla ordrar som har markerats som brådskande. I den anpassade SQL-satsen är orderprioriteten det konstanta värdet. Om du vill ändra anslutningen för att se order med hög prioritet måste du redigera datakällan.
I stället för att skapa och underhålla många variationer av samma fråga kan du ersätta det konstanta värdet för orderprioriteten med en parameter. Parametern bör innehålla alla möjliga värden för orderprioritet.
När du har skapat en parameter kan du lägga till den i SQL-satsen för att ersätta det konstanta värdet.
När du har redigerat anslutningen visas den nya parametern i området Parametrar längst ned i fönstret Data och parameterkontrollen visas till höger i vyn. Anslutningen uppdateras när du väljer olika värden.
Obs! Om du använder ett extrakt måste du uppdatera extraktet för att återspegla ändringarna i parametern. När du publicerar en datakälla som använder anpassade SQL-parametrar inkluderas parametrarna. Parametrarna överförs till alla arbetsböcker som ansluter till datakällan.
Tableau Catalog-stöd för anpassad SQL
Stöd för anpassad SQL i Tableau Catalog beror på den anpassade SQL-frågan.
Tableau Catalog ingår i Datahantering för Tableau Server och Tableau Cloud. Mer information om Tableau Catalog finns i "Om Tableau Catalog" i hjälpen för Tableau Server och Tableau Cloud.
Frågor som stöds
Catalog stöder anpassade SQL-frågor som uppfyller ANSI SQL-2003-standarden, med tre kända undantag:
- uttryck för tidszoner
- multiset-uttryck
- Tableau-parametrar.
Från och med 2021.4 har Tableau Catalog även stöd för T-SQL-dialekten (Transact-SQL) i anpassad SQL, med följande undantag:
- hints (ledtrådar)
- FOR-satser
- OPENROWSET-, OPENXML- och OPENJSON-funktioner
- ODBC-skalärfunktioner
- FOR SYSTEM_TIME
- TABLESAMPLE
- MATCH-uttryck
- CONTAINS-uttryck
- FREETEXT-uttryck.
Från och med Tableau Cloud från oktober 2023 och Tableau Server 2023.3 har Tableau Catalog även stöd för anpassade SQL-frågor som använder PostgreSQL, med följande undantag:
- XML-funktion
- JSON-funktioner och -operatorer
Funktioner som stöds
Catalog stöder följande ytterligare funktioner för datakällor, arbetsböcker och flöden med anslutningar som använder MySQL- eller PostgreSQL-drivrutiner, t.ex. Amazon Aurora for MySQL, Amazon RedShift, Pivotal Greenplum Database, MemSQL, Denodo med flera.
- GROUP_CONCAT-funktionen i MySQL
- PostgreSQL-matriser
- funktionen EXTRACT() i PostgreSQL.
Andra anpassade SQL-scenarier och SQL-funktioner kan fungera, men Tableau testar dem inte och ger inte specifikt stöd för dem.
Ursprung som stöds
När en resurs använder anpassad SQL visas ett meddelande med en knapp av typen Visa anpassad SQL-fråga på fliken Ursprung på sidan för resurser. Klicka på knappen om du vill se den anpassade SQL-frågan som används i anslutningen. Klicka på Kopiera om du vill kopiera den anpassade SQL-frågan till Urklipp.
Vissa typer av anpassade SQL-frågor kan göra att ursprunget uppströms blir ofullständigt. När det händer visas ett meddelande med den informationen. Kort med fältinformation kanske inte innehåller länkar till kopplade kolumner, eller kanske inte visar några kopplade kolumner över huvud taget. Kort med kolumninformation kanske inte innehåller länkar till fält som använder kolumnen, eller kanske inte visar några fält över huvud taget.
När du utforskare en tabells ursprung i Catalog kan du inte visa kolumninformation i ursprunget för tabellmetadata som samlas in med en anpassad SQL-fråga. Om andra resurser använder samma tabell och inte använder en anpassad SQL-fråga är det dock möjligt att Tableau Catalog kan visa information om de kolumner som har identifierats med hjälp av dessa andra resurser.
I följande skärmbild indexerades tabellen factAccountOpportunityByQuarter eftersom den används av en datakälla. Dock är kolumninformationen inte tillgänglig eftersom en anpassad SQL-fråga refererar till den.
Om flera datakällor, arbetsböcker eller flöden använder en tabell så utelämnas alla resurser nedströms från tabellen som använder en anpassad SQL-fråga när filter på kolumnnivå tillämpas. Det innebär att färre nedströmsresurser visas i ursprunget än vad som egentligen används.
Mer information om hur du använder ursprung finns i ”Använda ursprung för effektutvärdering" i hjälpen för Tableau Server(Länken öppnas i ett nytt fönster) och Tableau Cloud(Länken öppnas i ett nytt fönster).