Tableau Extract API – Ta full kontroll över dina extrakt

28 april 2019

Tableau är nu för tiden väldigt mycket mer än bara ett verktyg för visualisering. Speciellt hanteringen av data, servern och utbyggbarhet är något Tableau satsat på. I denna bloggpost tänkte jag slå ett slag för Tableau Extract API vilket är ett av flera APIer som Tableau släppt och som möjliggör att man utanför Tableau-klienten kan skapa Extrakt med hjälp av valfritt programmeringsspråk.

Varför använda ett API för att skapa extrakt?

Vad är då anledningen till att Tableau tagit fram detta API? Det finns en rad anledningar, men framför allt för att landskapet inom data ser ut som det gör och att man ofta kan hamna i scenarion till ett grafiskt gränssnitt inte räcker. Det kan vara allt ifrån att man automatiskt från sin Pythonkod vill skriva resultatet från sin modell till en dashboard eller att just den där integrationen med affärssystemet måste göras med Java. Så då är det perfekt att kunna prata med Tableau direkt från dessa.

En annan fördel är att maskinen som extrakt-genereringen körs på inte behöver vara din Tableauserver. Det gör att man varken behöver belasta  Tableauservern eller begränsas av dess specifikationer.

Vad är Tableau Extract API?

I korthet är det en kombination av en lokal version av Hyper, Tableaus databas, och en rad APIer som kan användas för att kommunicera med denna. Det gör att man på vilken dator som helst kan skapa, skriva och lägga till data till Extrakt utan att behöva Tableau installerat. Programmeringsspråken som stöds är bla Python, Java, C++ m.fl och för operativssystem är alla täckta, så både Windows, Linux och MacOS.

För att komma igång kan du här ladda ner den version som passar dig.
https://onlinehelp.tableau.com/current/api/extract_api/en-us/Extract/extract_api_installing.htm

KODEXEMPEL – Hur använder man Tableau Extract API?

När man installerat api:et är flödet i stort sett enligt nedan oavsett val av språk. Nedan följer ett enkelt exempel i Python.

Man får börja med att importera biblioteken

from tableausdk import *
from tableausdk.HyperExtract import *

 

När man gjort det förbereds API:et genom att initiera det:

# initiera Tableau Extract API
ExtractAPI.initialize()

Nu när vi har ett API att prata med kan vi göra första steget vilket är att skapa vår Hyper fil som lagrar vårt extrakt.

# Skapa filen
extract = Extract(“c:/MinForsäljning.hyper”)

När detta är gjort är nästa steg att definiera den tabell som data ska lagras i inom extraktet. Det görs genom två steg, dels skapa tabellen och dess kolumner och sedan lägga till den i Extraktet. Så nedan ses hur en tabell skapas och de tre kolumnerna TransaktionsID, ProduktNamn och Belopp läggs till.

 # Skapa en ny tabelldefinition

tabelDef = TableDefinition()

schema.setDefaultCollation(Collation.BINARY)

schema.addColumn(“TransaktionsID”, Type.INTEGER)

schema.addColumn(“ProduktNamn”, Type.UNICODE_STRING)

schema.addColumn(“Belopp”, Type.DOUBLE)


När vi skapat tabelldefinitionen är det bara lägga till den till vårat extrakt så att en tabell skapas. Det gör vi nedan och får då tillbaka en referens till tabellen som vi sedan kommer lägga in data i. Namnet som sedan syns i Tableau är första parametern, dvs Tabell_XYZ.

# Lägg till tabell i extraktet
table = extract.addTable( ”Tabell_XYZ”, schema )

Nu är vi redo att börja lägga till data. Det görs genom att skapa ett nytt objekt av typen Row utifrån schemat vi skapade ovan. Sedan fyller man kolumnerna i raden med värden utifrån deras position, dvs för vårat exempel 0-2. För varje datatyp finns en så kallad set-funktion som används för att sätta dess värde. Här är ett exempel på användningen av tre olika set-funktioner då vi i schemat ovan definierade de som olika datatyper.

# Skapa en rad

tabRow = Row(schema)

tabRow.setString (0, 12345)

tabRow.setInteger (1, “ProduktX”)

tabRow.setDouble (2, 25.50)

När vi nu skapat en rad är den redo att lagras i Tableau extraktet. Det görs enklast genom exemplet nedan. En sak att ha koll på dock är att ovan process, att skapa raderna, är det tyngsta i processen, pga av stränghantering etc. Så denna kan med fördel, om man har möjlighet, parallelliseras och mellanlagras i t.ex. en lista och sedan med jämna mellanrum skrivas till Tableau. Tänk dock på att APIet inte är trådsäkert så detta behöver lösas i din kod.

# Lägg till rad i extrakt
table.insert( row )

När vi nu har skrivit våra rader är allt som är kvar att stänga ned API:et och skriva vår fil till disk. Det görs med nedan två steg.

# Close the Tableau Extract API
extract.close()

# Flush the Extract to Disk
ExtractAPI.cleanup()

 

Det var allt, vi har nu en fil kallad “c:/MinForsäljning.hyper” som vi kan öppna i Tableau och fortsätta vår analys med. Hoppas detta inspirerat till ett nytt verktyg i verktygslådan som kanske kan användas någonstans i din organisation för att få ännu mer värde av Tableau. Som vanligt är det bara höra av er till oss på Sparks om du har några frågor eller behöver hjälp med er data.