---
schema_version: "1"
id: e11ffdefc639c29c4a700ea22fdb733ea01a9b35999a354ba115d1d44ae461fc
title: Bästa praxis för att skapa beräkningar i Tableau
collection: tableau
version: next
locale: sv-se
portal_url: https://docs.salesforce.com/tableau/next/sv-se/public/desktop/calculations_calculatedfields_bestpractices.md
canonical_url: https://help.tableau.com/v0.0/public/desktop/sv-se/calculations_calculatedfields_bestpractices.htm
source_site: help.tableau.com
content_type: documentation
content_hash: ad04fc463b2c7b35cb91a8cf4770e02a20361ff159028cfe3c47b664c1d6ba68
description: Tips and guidelines for creating efficient calculations in Tableau to optimize workbook performance.
---
[Hoppa till huvudinnehåll](#main-content)

# Bästa praxis för att skapa beräkningar i Tableau

## Allmän regel: Undvik att använda ett beräknat fält flera gånger i en annan beräkning

Att referera till samma beräknade fält flera gånger inom en annan beräkning kommer att resultera i prestandaproblem. Om du använder ett beräknat fält i en beräkning (även känt som att skapa en inkapslad beräkning), försök då att referera till det endast en gång i beräkningen.

Observera att referenser till ett fält (terminalfält) flera gånger i en beräkning inte bör försämra prestandan.

### Exempel

Låt oss säga att du skapar ett beräknat fält som använder en komplicerad flerradig beräkning för att hitta omnämnanden, eller ”Twitter-handtag”, i tweets. Det beräknade fältet heter ”Twitter Handle”. Varje handtag som returneras börjar med tecknet ”@” (till exempel: @user).

För din analys vill du ta bort symbolen ”@”.

För att göra detta kan du använda följande beräkning för att ta bort det första tecknet från strängen:

`RIGHT([Twitter Handle], LEN([Twitter Handle]) -1)`

Denna beräkning är ganska enkel. Eftersom den refererar till Twitter-handtagsberäkningen två gånger utför den emellertid beräkningen två gånger för varje post i datakällan: en gång för funktionen RIGHT och en gång för funktionen LEN.

För att undvika att beräkna samma beräkning mer än en gång kan du skriva om beräkningen till en som endast använder beräkningen för Twitter-handtag en gång. I det här exemplet kan du använda MID för att uppnå samma mål:

`MID([Twitter Handle], 2)`

## Tips 1: Konvertera flera jämlikhetsjämförelser till ett skiftlägesuttryck (CASE) eller en grupp

Låt oss säga att du har följande beräkning, som använder det beräknade fältet, Person (calc), flera gånger och använder en rad OR-funktioner. Denna beräkning, även om det är ett enkelt logiskt uttryck, kommer att orsaka frågeprestandaproblem eftersom den utför personberäkningen (calc) minst tio gånger.

`IF [Person (calc)] = 'Henry Wilson'   OR [Person (calc)] = 'Jane Johnson'   OR [Person (calc)] = 'Michelle Kim'   OR [Person (calc)] = 'Fred Suzuki'   OR [Person (calc)] = 'Alan Wang'   THEN 'Lead'   ELSEIF [Person (calc)] = 'Susan Nguyen'   OR [Person (calc)] = 'Laura Rodriguez'   OR [Person (calc)] = 'Ashley Garcia'   OR [Person (calc)] = 'Andrew Smith'   OR [Person (calc)] = 'Adam Davis'   THEN 'IC'   END`

Istället för att använda en jämlikhetsjämförelse, prova följande lösningar.

### Lösning 1

Använd ett skiftlägesuttryck (CASE). Till exempel:

`CASE [Person (calc)]   WHEN 'Henry Wilson' THEN 'Lead'   WHEN 'Jane Johnson' THEN 'Lead'   WHEN 'Michelle Kim' THEN 'Lead'   WHEN 'Fred Suzuki' THEN 'Lead'   WHEN 'Alan Wang' THEN 'Lead'      WHEN 'Susan Nguyen' THEN 'IC'   WHEN 'Laura Rodriguez' THEN 'IC'   WHEN 'Ashley Garcia' THEN 'IC'   WHEN 'Andrew Smith' THEN 'IC'   WHEN 'Adam Davis' THEN 'IC'   END`

I det här exemplet refereras det beräknade fältet, Person (calc), endast en gång. Därför utförs det endast en gång. CASE-uttrycken optimeras också ytterligare i förfrågningspipelinen, detta så att du får en ytterligare prestationsfördel.

### Lösning 2

Skapa en grupp istället för ett beräknat fält. Du hittar mer information i [Gruppera dina data](https://help.tableau.com/v0.0/public/desktop/sv-se/sortgroup_groups_creating.htm).

## Tips 2: Konvertera flera strängberäkningar till ett enda REGEXP-uttryck

**Obs!** Den här funktionen är endast tillgänglig för Tableau-dataextrakt eller vid koppling till Textfil, Hadoop Hive, Google BigQuery, PostgreSQL, Tableau-dataextrakt, Microsoft Excel, Salesforce, Vertica, Pivotal Greenplum, Teradata (version 14.1 och senare) samt Oracle-datakällor. Du hittar mer information i [Ytterligare funktioner (regex, Hadoop Hive, Google Big Query)](https://help.tableau.com/v0.0/public/desktop/sv-se/functions_functions_additional.htm).

  

### Exempel 1: CONTAINS

Låt oss säga att du har följande beräkning, som använder det beräknade fältet, Kategori (calc), flera gånger. Denna beräkning, även om den också är ett enkelt logiskt uttryck, kommer att orsaka frågeprestandaproblem eftersom den utför beräkningen av kategorin (Calc) flera gånger.

`IF CONTAINS([Segment (calc)],'UNKNOWN')   OR CONTAINS([Segment (calc)],'LEADER')   OR CONTAINS([Segment (calc)],'ADVERTISING')   OR CONTAINS([Segment (calc)],'CLOSED')   OR CONTAINS([Segment (calc)],'COMPETITOR')   OR CONTAINS([Segment (calc)],'REPEAT')   THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

Du kan använda ett REGEXP-uttryck för att få samma resultat utan lika mycket upprepning.

#### Lösning

`IF REGEXP_MATCH([Segment (calc)], 'UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT') THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

  

Med strängberäkningar som använder ett liknande mönster kan du använda samma REGEXP-uttryck.

### Exempel 2: STARTSWITH

`IF STARTSWITH([Segment (calc)],'UNKNOWN')   OR STARTSWITH([Segment (calc)],'LEADER')   OR STARTSWITH([Segment (calc)],'ADVERTISING')   OR STARTSWITH([Segment (calc)],'CLOSED')   OR STARTSWITH([Segment (calc)],'COMPETITOR')   OR STARTSWITH([Segment (calc)],'REPEAT')   THEN 'UNKNOWN'`

#### Lösning

`IF REGEXP_MATCH([Segment (calc)], '^(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)') THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

Observera att symbolen ”^” används i denna lösning.

### Exempel 3: ENDSWITH

`IF ENDSWITH([Segment (calc)],'UNKNOWN')   OR ENDSWITH([Segment (calc)],'LEADER')   OR ENDSWITH([Segment (calc)],'ADVERTISING')   OR ENDSWITH([Segment (calc)],'CLOSED')   OR ENDSWITH([Segment (calc)],'COMPETITOR')   OR ENDSWITH([Segment (calc)],'REPEAT')   THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

#### Lösning

`IF REGEXP_MATCH([Segment (calc)], '(UNKNOWN|LEADER|ADVERTISING|CLOSED|COMPETITOR|REPEAT)$') THEN 'UNKNOWN'   ELSE [Segment (calc)] END`

Observera att symbolen ”$” används i denna lösning.

## Tips 3: Manipulera strängar med REGEXP istället för LEFT, MID, RIGHT, FIND, LEN

Regelbundna uttryck kan vara ett mycket kraftfullt verktyg. När du utför komplex strängmanipulering, överväg då att använda reguljära uttryck. I många fall kommer användningen av ett reguljärt uttryck att resultera i en kortare och effektivare beräkning. För mer information om reguljära uttryck, se inlägget [Bli van vid regex och brottas med icke-perfekta data](https://www.tableau.com/sv-se/about/blog/2015/6/become-regular-regular-expressions-39802) i Tableau-bloggen.

### Exempel 1

Låt oss säga att du har följande beräkning, som tar bort protokoll från webbadresser. Till exempel: ”https://www.tableau.com” blir ”www.tableau.com”.

`IF (STARTSWITH([Server], "http://")) THEN   MID([Server], Len("http://") + 1)   ELSEIF(STARTSWITH([Server], "https://")) THEN   MID([Server], Len("https://") + 1)   ELSEIF(STARTSWITH([Server], "tcp:")) THEN   MID([Server], Len("tcp:") + 1)   ELSEIF(STARTSWITH([Server], "\\")) THEN   MID([Server], Len("\\") + 1)   ELSE [Server]   END`

#### Lösning

Du kan förenkla beräkningen och förbättra prestandan genom att använda en REGEXP\_REPLACE-funktion.

`REGEXP_REPLACE([Server], "^(http://|https://|tcp:|\\\\)", " )`

### Exempel 2

Låt oss säga att du har följande beräkning, som returnerar den andra delen av en IPv4-adress. Till exempel: ”172.16.0.1” blir ”16”.

`IF (FINDNTH([Server], ".", 2) > 0) THEN   MID([Server],   FIND([Server], ".") + 1,   FINDNTH([Server], ".", 2) - FINDNTH([Server], ".", 1) - 1   )   END`

#### Lösning

Du kan förenkla beräkningen och förbättra prestandan genom att använda en REGEXP\_EXTRACT-funktion.

`REGEXP_EXTRACT([Server], "\.([^\.]*)\.")`

## Tips 4: Använd inte uppsättningar i beräkningar

Om du använder uppsättningar i en beräkning, överväg då att ersätta dem med en alternativ men likvärdig beräkning.

### Exempel

Låt oss säga att du har följande beräkning som använder uppsättningen Toppkunder (uppsättning).

`IF ISNULL([Customer Name]) OR [Top customers (set)] THEN [Segment] ELSE [Customer Name] END`

### Lösning 1

Om uppsättningen är enkel kan du skapa ett beräknat fält som returnerar samma resultat som uppsättningen. Till exempel:

`CASE [Customer Name]   WHEN 'Henry Wilson' THEN True   WHEN 'Jane Johnson' THEN True   WHEN 'Michelle Kim' THEN True   WHEN 'Fred Suzuki' THEN True   WHEN 'Alan Wang' THEN True   ELSE False   END`

  

**Obs!** Användning av mönstret WHEN TRUE … ELSE rekommenderas i denna situation för att undvika prestandaproblem på grund av användning av uppsättningar. Det är inte ett rekommenderat mönster i de flesta scenarier.

### Lösning 2

Om uppsättningen är mer komplex kan du överväga att skapa en grupp som kartlägger alla element i uppsättningen till ett givet värde eller attribut, t.ex. ”IN”, och sedan ändra beräkningen för att söka efter det värdet/attributet. Till exempel:

`IF ISNULL([Customer Name]) OR [Top Customers(group)]='IN' THEN [Segment] ELSE [Customer Name] END`

Mer information finns i [Gruppera dina data](https://help.tableau.com/v0.0/public/desktop/sv-se/sortgroup_groups_creating.htm) och [Skapa uppsättningar](https://help.tableau.com/v0.0/public/desktop/sv-se/sortgroup_sets_create.htm).

## Tips 5: Använd inte uppsättningar för att gruppera dina data

Uppsättningar är avsedda att göra jämförelser på delmängder av data. Grupper är avsedda att kombinera relaterade medlemmar i ett fält. Konvertering av uppsättningar till grupper, till exempel med följande exempel, rekommenderas inte:

`IF [Americas Set] THEN "Americas"   ELSEIF [Africa Set] THEN "Africa"   ELSEIF [Asia Set] THEN "Asia"   ELSEIF [Europe Set] THEN "Europe"   ELSEIF [Oceania Set] THEN "Oceania"   ELSE "Unknown"   END`

Detta rekommenderas inte av följande skäl:

- **Uppsättningar är inte alltid exklusiva**. Vissa medlemmar kan visas i flera uppsättningar. Ryssland skulle till exempel kunna placeras både i Europa och Asien.
- **Uppsättningar kan inte alltid översättas till grupper**. Om uppsättningarna definieras genom uteslutning, villkor eller begränsningar kan det vara svårt eller till och med omöjligt att skapa en motsvarande grupp.

### Lösning

Gruppera dina data med hjälp av funktionen Gruppera. Du hittar mer information i [Gruppera dina data](https://help.tableau.com/v0.0/public/desktop/sv-se/sortgroup_groups_creating.htm).

## Se även

[Beräkningstyper i Tableau](https://help.tableau.com/v0.0/public/desktop/sv-se/calculations_calculatedfields_understand_types.htm)

[Funktioner i Tableau](https://help.tableau.com/v0.0/public/desktop/sv-se/functions.htm)