Använda en lagrad procedur

En lagrad procedur är en subrutin som finns tillgänglig för applikationer som har åtkomst till ett relationsdatabassystem. När du ansluter till en SAP Sybase ASE-, Microsoft SQL Server- eller Teradata-databas med Tableau kan du använda en lagrad procedur för att definiera anslutningen.

För Oracle kan du använda en tabellfunktion för att definiera anslutningen. Oracles tabellfunktioner fungerar på samma sätt som lagrade procedurer och listas under Lagrade procedurer på sidan Datakälla.

När en datakälla skapas med en av dessa datatyper listas tillgängliga procedurer under Lagrade procedurer, såsom visas i exemplet med Microsoft SQL Server:

Dra proceduren från den vänstra rutan till arbetsytan eller dubbelklicka på en av de listade procedurerna. Om parametrar finns tillgängliga i proceduren visas dialogrutan Parametrar automatiskt. 

Istället för att ange ett värde kan du använda en befintlig Tableau-parameter eller skapa en ny Tableau-parameter för värdet:

Om du sedan visar Tableau-parametern i vyn kan användare interaktivt modifiera värdet på parametern.

Lagrade procedurer har inte stöd för federation, relationer eller kopplingar. De finns i en enskild logisk tabell i det logiska lagret och ger inte åtkomst till arbetsytan Koppla/förena (fysiskt lager).

Observationer om Lagrade procedurer

Tänk på följande om du använder lagrade procedurer för att definiera en datakälla i Tableau:

  • Om en lagrad procedur returnerar mer än en uppsättning resultat läser Tableau den första och ignorerar resten.

  • Om en lagrad procedur har utdataparametrar filtrerar Tableau bort den lagrade proceduren.

  • Lagrade procedurer exkluderas om de har parametrar som inte kan skalas.

  • Kolumner med resultatuppsättningar loggas om de inte har matchande typer i Tableau (såsom varbinary, geometri och hierarki). Om alla kolumner med resultatuppsättningar tillämpas på okända datatyper visar Tableau ett meddelande:

    ”Resultatuppsättningen ... har inga användbara kolumner”.

  • Lagrade procedurer som inte returnerar några resultatuppsättningar listas på sidan Datakälla men fungerar inte om de väljs.

  • Ett fel uppstår om inget värde anges för en parameter, såsom den lagrade proceduren kräver. Tableau kan inte i förväg avgöra om parametrar krävs.

  • Tableau utför ingen transaktionshantering för lagrade procedurer. Lagrade procedurer får därför inte vara beroende av Tableau för att starta transaktioner innan de åberopar lagrade procedurer, eller för att tillämpa dem efteråt.

  • Kolumnnamn måste vara unika för att lagrade procedurer ska fungera. Proceduren kan resultera i ett fel om två kolumner har samma namn eller om inget namn anges.

  • Om det finns flera frågor i en lagrad procedur (för att till exempel läsa värden från en annan tabell eller för att hålla temporära kombinationer) måste var och en av frågorna returnera samma uppsättningar kolumner och i samma ordning (samma namn och datatyper). För att garantera att kolumnordningen och namnen matchar i frågeresultaten kan du uttryckligen behöva CAST för att säkerställa att datatypen är korrekt. Till exempel CAST(Username as VARCHAR(20)), och uttryckligen namnge kolumnerna. Ett felmeddelande kan uppstå om en lagrad procedur inte följer dessa riktlinjer:

    ”InsertData: unbound column error” (nsertData: obundet kolumnfel)

  • Om det finns flera frågor i en lagrad procedur (för att till exempel läsa värden från en annan tabell eller för att hålla temporära kombinationer) och proceduren genererar ett fel kan du försöka lägga till SET NOCOUNT ON överst i proceduren. Detta förhindrar meddelandet, som visar antalet rader som påverkas av en Transact-SQL-sats, från att returneras som en del av resultatuppsättningen för en fråga.

Dessutom gäller följande begränsningar för specifika databaser.

Begränsningar gällande lagrade procedurer för Teradata-databaser

Följande begränsningar gäller för lagrade procedurer på Teradata-databaser.

  • Värden måste anges för varje parameter. Om användaren inte anger ett värde för en eller flera parametrar visar Tableau ett fel i Teradata-databasen som anger att det finns för få värden för den lagrade proceduren.

Begränsningar gällande lagrade procedurer för SQL Server-databaser

Följande begränsningar gäller för lagrade procedurer på SQL Server-databaser.

  • Om resultatuppsättningen för en lagrad procedur innehåller kolumner av typen IMAGE eller TEXT fungerar inte den lagrade proceduren och ett felmeddelande visas med ”Incorrect syntax” (Felaktig syntax).

  • Den lagrade proceduren fungerar inte om den totala bredden på resultatuppsättningen (antal byte i varje rad) överstiger 8060. Detta kan inträffa med mycket breda tabeller (hundratals kolumner) eller tabeller som har stora textkolumner. Dessa avses vanligtvis till att innehålla text med tusentals tecken.

  • Tableau visar inte lagrade procedurer från schemat ”sys”.

  • Om användaren inte anger ett värde för en eller flera parametrar, såsom proceduren kräver, visar Tableau följande SQL Server-databasfel, ”The procedure requires a value for parameter @x but one was not provided” (Proceduren kräver ett värde för parameter @x, men inget angavs).

  • Lagrade procedurer som innehåller flera olika frågor bör följa riktlinjerna i Observationer om Lagrade procedurer (ovan).

  • Tableau Desktop har inte stöd för datatypen Microsoft SQL Server TIME. När den här typen av fält ingår i en lagrad procedur på en Microsoft SQL Server-databas importeras de inte av Tableau Desktop.

Begränsningar gällande lagrade procedurer för SAP Sybase ASE-databaser

Följande begränsningar gäller för lagrade procedurer på SAP Sybase ASE-databaser (endast Windows).

  • Databasen måste ha en korrekt konfigurerad fjärrserver.

  • Om användaren inte anger ett värde för en eller flera parametrar, såsom proceduren kräver, visar Tableau följande Sybase ASE-databasfel, ”The procedure requires a value for parameter @x but one was not provided” (Proceduren kräver ett värde för parameter @x, men inget angavs).

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