Köra inledande SQL

Obs! Tableau Prep Builder version 2019.2.2 och senare stöder att använda inledande SQL, men stöder ännu inte alla liknande alternativ som stöds av Tableau Desktop. Mer information om hur du använder inledande SQL med Tableau Prep Builder finns i Använda inledande SQL för att skicka frågor till dina anslutningar(Länken öppnas i ett nytt fönster) i Tableau Prep Builder onlinehjälpsystemet.

När du ansluter till vissa databaser kan du ange ett inledande SQL-kommando som körs när en anslutning görs till databasen, till exempel när du öppnar arbetsboken, uppdaterar ett extrakt, loggar in på Tableau Server eller publicerar på Tableau Server. Inledande SQL körs inte när du uppdaterar vyn. Observera att denna inledande SQL skiljer sig från en anpassad SQL-anslutning. En anpassad SQL-anslutning definierar en relation (eller tabell) som man kan göra sökningar mot. Mer information finns i Ansluta till en anpassad SQL-fråga.

Du kan använda det här kommandot för att:

  • Konfigurera tillfälliga tabeller som används under sessionen.

  • Konfigurera en anpassad datamiljö.

Du kan lägga till ett inledande SQL-kommando i dialogrutan Serveranslutning eller på sidan Datakälla.

Obs! Om datakällan stöder körning av en inledande SQL-sats visas länken inledande SQL i det nedre vänstra hörnet av dialogrutan Serveranslutning. Information om datakällan finns i Kopplingar som stöds.

Så här använder du inledande SQL

  1. Klicka på Inledande SQL i dialogrutan Serveranslutning. Välj annars Data > Inledande SQL eller Data > Frågemärkning och inledande SQL på sidan Datakälla, beroende på vilken databas du ansluter till.

  2. Ange SQL-kommandot i dialogrutan Inledande SQL. Du kan använda listrutemenyn Infoga för att skicka parametrar till datakällan.

Obs! Tableau undersöker inte om satsen innehåller några fel. Denna SQL-sats skickas helt enkelt till databasen när du ansluter.

Din programvarulicens kan begränsa dig från att använda inledande SQL med din anslutning. Om du publicerar på Tableau Server måste servern vara konfigurerad för att tillåta inledande SQL-satser. Serverprogramvaran är som standard konfigurerad så att dessa satser kan köras när arbetsboken laddas i en webbläsare.

Administratörer kan konfigurera servern så att den ignorerar inledande SQL-satser genom att använda kommandot tsm configuration set:

tsm configuration set -k vizqlserver.initialsql.disabled -v true

Om servern inte tillåter inledande SQL-satser öppnas arbetsboken, men de inledande SQL-kommandona skickas inte.

Mer information om kommandot tsm configuration set finns i Tableau Server-hjälpen(Länken öppnas i ett nytt fönster).

Parametrar i en inledande SQL-sats

Du kan skicka parametrar till datakällan i en inledande SQL-sats. Detta är användbart av flera anledningar:

  • Du kan konfigurera impersonering med parametrarna TableauServerUser eller TableauServerUserFull.

  • Om datakällan stöder det kan du ställa in säkerhet på radnivå (till exempel för Oracle VPD eller SAP Sybase ASE), för att se till att användarna bara ser de data som de har behörighet att se.

  • Du kan ge mer information vid loggföring, till exempel Tableau-versionen eller arbetsbokens namn.

Följande parametrar stöds i en inledande SQL-sats:

ParameterBeskrivningExempel på returnerat värde
TableauServerUserAnvändarnamn för aktuell serveranvändare. Använd den här parametern när du konfigurerar impersonering på servern. Returnerar en tom sträng om användaren inte är inloggad i Tableau Server.jjohansson
TableauServerUserFullAnvändarnamn och domän för aktuell serveranvändare. Använd den här parametern när du konfigurerar impersonering på servern. Returnerar en tom sträng om användaren inte är inloggad i Tableau Server.domän.johan\jjohansson
TableauAppNamnet på Tableau-programmet.

Tableau Desktop Professional

Tableau Server

TableauVersionVersion av Tableau-programmet.9,3
WorkbookNameNamn på Tableau-arbetsboken. Används endast i arbetsböcker med en inbäddad datakälla.Ekonomisk-analys

Varning: Tableau Desktop inkluderar inte en domän. Du kan inkludera en om du inte använder delegering och ställer in tsm configuration set -k DelegationUseFullDomainName=-v true--force-nycklar

Följande exempel visar olika sätt du kan använda parametrarna i en inledande SQL-sats på.

  • Det här exemplet ställer in säkerhetskontexten på Microsoft SQL Server:

    EXECUTE AS USER = [TableauServerUser] WITH NO REVERT;

  • Det här exemplet visar hur du i en DataStax-datakälla kan använda parametrar för att lägga till information för loggföringen eller för att konfigurera en sessionsvariabel för att hålla koll på dina data:

    SET TABLEAUVERSION [TableauVersion];

  • Det här exemplet kan användas för att hjälpa till att konfigurera säkerhet på radnivå för Oracle VPD:

    begin

     DBMS_SESSION.SET_IDENTIFIER([TableauServerUser]);

    end;

    Obs! Oracle PL/SQL-block kräver ett efterföljande semikolon för att avsluta blocket. Se Oracle-dokumentationen för korrekt syntax.

Skjuta upp exekvering till servern

Du kan skjuta upp en inledande SQL-sats, så att den endast exekveras på servern. En anledning till att skjuta upp exekveringen till servern är om du inte har behörighet att exekvera de kommandon som konfigurerar impersoneringen. Använd taggarna <ServerOnly></ServerOnly> för att bifoga kommandon som endast ska exekveras på servern.

Exempel:

CREATE TEMP TABLE TempTable(x varchar(25));
INSERT INTO TempTable VALUES (1);
<ServerOnly>INSERT INTO TempTable Values(2);</ServerOnly>

Säkerhet och impersonering

Om du använder parametern TableauServerUser eller TableauServerUserFull i en inledande SQL-sats, skapar du en dedikerad anslutning som inte kan delas med andra användare. Detta kommer också att begränsa delningen av cacheminnet, vilket kan förbättra säkerheten, men även göra prestandan långsammare.

Felsöka ”skapa tabell” för MySQL- och Oracle-anslutningar

För MySQL-anslutningar listas inte tabellerna när inledande SQL har använts för att skapa tabellen

När du ansluter till MySQL kan det hända att tabellerna inte visas på grund av hur Tableau skapar sökningen, om du kör en inledande SQL-sats som denna:

CREATE TABLE TestV1.testtable77(testID int);

Om du vill lösa problemet lägger du till IF NOT EXISTS i SQL-satsen:

CREATE TABLE IF NOT EXISTS TestV1.TestTable(testID int);

För Oracle-anslutningar leder användningen av inledande SQL för att skapa tabeller till att Tableau stannar

När du ansluter till Oracle och kör en inledande SQL-sats som denna, stannar Tableau med ett snurrande hjul på grund av hur Tableau skapar sökningen:

CREATE TABLE TEST_TABLE (TESTid int)

Använd följande SQL-sats och se om det löser problemet:

BEGIN
EXECUTE IMMEDIATE 'create table test_table(testID int)';
EXCEPTION
WHEN OTHERS THEN NULL;
END;

 

Tack för din feedback!Din feedback har skickats in. Tack!