Var inte rädd för beräkningar i relationer

Beräkningar kan vara skrämmande. Beräkningar i en datakälla som använder relationer kan verka än mer skrämmande. Men det finns ingen anledning att vara rädd för beräkningar i relationer.

Obs! Om du inte känner till principerna bakom datakällor som använder relationer rekommenderar vi att du läser Var inte rädd för relationer innan du sätter igång med det här avsnittet.

Beräkningstyper

En radnivåberäkning är något som beräknas för varje enskild post i datan. Till exempel har varje försäljningstransaktion ett försäljningsbelopp, priset, eventuellt justerat med rabattprocenten: Price * (1- ZN([Discount])). Detta beräknas rad för rad för varje transaktion - resultaten kan ses som att lägga till en ny kolumn i datakällan för försäljningsbelopp.

Det finns också aggregerade beräkningar. Aggregerade beräkningar beräknas på detaljnivån för visualiseringen och deras värde beror på vyns struktur. Räkningar är ett exempel på en aggregerad beräkning. Värdet för Count([Title]) beror på om vi tittar på antalet efter format, författare eller försäljningsdag.

Se vår blogg(Länken öppnas i ett nytt fönster) för mer information om olika typer av beräkningar.

Detaljnivå för tabell

Eftersom varje tabell i Tableau-datakällan kan ha sin egen detaljnivå har den tabell en beräkning är kopplad till en stor inverkan. Till exempel var det förr möjligt att i Tableau (före 2020.2, före relationer) räkna antalet poster i datakällan genom att skapa en beräkning med det konstanta värdet 1 och summera det. 1 tilldelades varje rad i datakällan så att summan var lika med antalet rader.

Nu skulle emellertid denna beräkning ha ett värde på 1. Det finns ingen global detaljnivå för hela datakällan, och en konstant beräkning finns i det icke-tilldelade området längst ned i rutan Data. Den har sin egen detaljnivå. Att summera 1 blir helt enkelt 1.

Som tidigare nämnts hör beräkningar som har samma detaljnivå som en tabell - vanligtvis för att de innehåller ett fält från tabellen - hemma i den tabellen i rutan Data. Exempelvis placeras sammanfogningen av förnamn och efternamn för att få det fullständiga namnet på respektive författare (det vill säga [First Name] + " " + [Last Name]) i författartabellen.

Om vi emellertid skulle använda fält från flera tabeller i en och samma beräkning, skulle beräkningen gå till det icke-tilldelade området längst ner i rutan Data. Detta kallas en ”tabellövergripande radnivåberäkning”; den kräver en radnivåsammanfogning av de berörda tabellerna, vilket kan påverka prestandan. (Se till att rätt kardinalitet är inställd i relationens prestandaval).

Tilldela detaljnivå

Eftersom detaljnivån i en tabell styr vad en beräknings resultat representerar, är det viktigt att ha beräkningar i lämpliga tabeller. LOD-uttryck av typen FIXED kan användas för att dra en beräkning till en specifik tabell. Det fält som uttrycket är fixerat vid (dimensionsdeklarationen(Länken öppnas i ett nytt fönster)) avgör detaljgraden för resultaten.

Exempel: Bokturnéer för författare

F: Hur många bokturnéevenemang deltar varje författare i?

S: Detta antal ska ”tillhöra” respektive författare, varför det ska gå i författartabellen.

  • Bokturnéevenemang för författare = {FIXED [Author Name] : SUM([Book Tour Events])}
  • (Detta kan ses i klartext som ”för respektive författare, totalt antal bokturnéevenamang associerade med dem”)

F: Hur många författare åker aldrig på bokturné?

S: Det är frestande att prova en beräkning som

  • COUNTD(IF ISNULL([Book Tour Events]) THEN ([Author Name]) END).
  • (Detta kan ses i klartext som “om bokturnéevenemang är lika med null, returnera då författarens namn. Räkna varje unikt författarnamn”)

Detta är dock en tabellövergripande beräkning på radnivå eftersom bokturnéevenemangen kommer från tabellen Serie och Författarnamnkommer från tabellen Författare. Och tabellövergripande beräkningar som denna använder interna kopplingar, vilket innebär att när det inte finns något motsvarande värde från båda tabeller, så elimineras raden från kopplingsresultaten. Vilket i sin tur betyder att vi ber Tableau att räkna något som inte existerar. Observera dock att om de två fälten fanns i samma tabell, så skulle detta vara ett bra sätt att göra det på. Det är inget fel med beräkningen i sig, förutom det faktum att den inte fungerar så väl med tanke på datakällans struktur.

Istället måste vi ange närvaro eller frånvaro av bokturnéevenemang för respektive författare - och behålla dessa resultat i författartabellen. När varje enskild författare flaggas som ”deltar i en bokturné” eller inte, kan vi beräkna det antal som inte gör bokresor.

  • Boka turnédeltagare? = IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN "No" ELSE "Yes" END
  • (Detta kan ses i klartext som ”För varje författare, räkna antalet bokturnéhändelser. Om den siffran är noll, etikettera då författaren med ”Nej”, annars märk dem med ”Ja”. Genom att namnge fältet ”Bokturnédeltagare?” kommer alla nej och ja kommer att räknas upp.)

Vi kan nu räkna antalet ”Nej” och besvara den ursprungliga frågan.

Om vår beräkning är Författare utan bokturnéer = IF [Book tour participant?]= "No" THEN ([Author Name]) END får vi en lista över författare som inte åker på bokturné. (Detta kan ses i klartext som ”för varje författare där bokturnédeltagare? är nej, lista författarens namn.”)

Om vår beräkning är COUNTD(IF [Book tour participant?]= "No" THEN ([Author Name]) END) får vi ett numeriskt svar som kommer att bo i det icke tilldelade området längst ner i rutan Data. Varför? Eftersom denna beräkning är aggregerad.

Bonusfråga:

Det är också möjligt att använda strukturen för Bokturnédeltagare?-beräkning direkt för att returnera listan över författarnamn. IF {FIXED [Author Name]: COUNT([Book Tour Events])} = 0 THEN ([Author Name]) END. Vart skulle denna beräkning ta vägen i rutan Data? Varför? Prova det i ditt eget exemplar av Tableau Desktop, eller ladda ner den här arbetsboken för att se efter. (Kräver Tableau Desktop 2020.2 eller högre. Väl i arbetsböckerna högerklickar du på beräkningen i rutan Data och väljer Redigera för att öppna beräkningsredigeraren och se en förklaring i beräkningskommentarerna.)

Relaterade resurser

Känns det överväldigande? Vill du gå tillbaka ett steg? Läs avsnittet Var inte rädd för relationer.

Är du redo att se hur du kan utföra komplexa analyser med relationer? Läs Var inte rädd för djupare relationer.

Vill du veta mer om tekniken bakom relationer – direkt från produkthanteringsteamet? I så fall får du inte missa serien om relationer i Tableau-bloggen.

Du kan också titta på videopoddar om relationer från Action Analytics(Länken öppnas i ett nytt fönster), t.ex. Why did Tableau Invent Relationships?(Länken öppnas i ett nytt fönster) Klicka på ”Video Podcast” (Videopodd) under Library(Länken öppnas i ett nytt fönster) (Bibliotek) om du vill veta mer.

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