---
schema_version: "1"
id: 686a7832261f5668fcbbb861e492835d83aa68f0cb4885eea64b53414e2516e8
title: Best practices voor het maken van berekeningen in Tableau
collection: tableau
version: next
locale: nl-nl
portal_url: https://docs.salesforce.com/tableau/next/nl-nl/pro/desktop/calculations_calculatedfields_bestpractices.md
canonical_url: https://help.tableau.com/v0.0/pro/desktop/nl-nl/calculations_calculatedfields_bestpractices.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 8b539de941493271d833675edb328b7ea9ec0c9ba2765de1e548f4bb65cbd275
description: Tips and guidelines for creating efficient calculations in Tableau to optimize workbook performance.
---
[Doorgaan naar hoofdinhoud](#main-content)

# Best practices voor het maken van berekeningen in Tableau

Dit artikel beschrijft verschillende tips en richtlijnen voor het maken van efficiënte berekeningen in Tableau. Deze richtlijnen zijn bedoeld om u te helpen de prestaties van uw werkmap te optimaliseren. Raadpleeg het gedeelte [Werkmapprestaties optimaliseren](https://help.tableau.com/v0.0/pro/desktop/nl-nl/performance_tips.htm) voor meer informatie over alle manieren waarop u de prestaties van werkmappen kunt verbeteren.

## Algemene regel: vermijd meermalig gebruik van een berekend veld in een andere berekening

Als u meerdere keren naar hetzelfde berekende veld verwijst binnen een andere berekening, gaat dit ten koste van de prestaties. Als u een berekend veld binnen een berekening gebruikt (ofwel een geneste berekening maakt), is het raadzaam hiernaar slechts één keer in de berekening te verwijzen.

Het meermalig verwijzen naar een veld (eindveld) in een berekening zal de prestaties normalerwijs niet verslechteren.

### Voorbeeld

Stel dat u een berekend veld maakt dat een ingewikkelde berekening van meerdere regels gebruikt om vermeldingen of Twitter-handles in tweets te vinden. Het berekende veld heet Twitter Handle. Elke handle die wordt geretourneerd, begint met het teken @ (bijvoorbeeld: @gebruiker).

Voor uw analyse wilt u het symbool @ verwijderen.

Dit doet u door de volgende berekening te gebruiken om het eerste teken uit de string te verwijderen:

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

Deze berekening is vrij eenvoudig. Omdat er echter twee keer naar de berekening Twitter Handle wordt verwezen, wordt die berekening tweemaal uitgevoerd voor elke record in uw databron: één keer voor de RIGHT-functie en nogmaals voor de LEN-functie.

Om te voorkomen dat dezelfde berekening meermaals wordt uitgevoerd, kunt u de berekening wijzigen in een berekening die slechts eenmaal gebruikmaakt van de Twitter Handle-berekening. In dit voorbeeld kunt u MID gebruiken om hetzelfde doel te bereiken:

`MID([Twitter Handle], 2)`

## Tip 1: converteer meerdere gelijkheidsvergelijkingen naar een CASE-expressie of een groep

Stel dat u de volgende berekening hebt, waarbij het berekende veld Person (calc) meerdere keren wordt gebruikt en waarbij een reeks OR-functies wordt gebruikt. Hoewel deze berekening een eenvoudige logische expressie is, veroorzaakt deze prestatieproblemen bij query's, omdat de berekening Person (calc) minstens tien keer wordt uitgevoerd.

`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`

Probeer de volgende oplossingen in plaats van een gelijkheidsvergelijking te gebruiken.

### Oplossing 1

Gebruik een CASE-expressie. Bijvoorbeeld:

`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`

In dit voorbeeld wordt slechts één keer verwezen naar het berekende veld Person (calc). Daarom wordt het slechts één keer uitgevoerd. CASE-expressies zijn ook verder geoptimaliseerd in de querypijplijn, zodat u een extra prestatievoordeel krijgt.

### Oplossing 2

Maak een groep in plaats van een berekend veld. Zie [Uw data groeperen](https://help.tableau.com/v0.0/pro/desktop/nl-nl/sortgroup_groups_creating.htm) voor meer informatie.

## Tip 2: converteer meerdere tekenreeksberekeningen naar één REGEXP-expressie

**Opmerking**: REGEXP-berekeningen zijn alleen beschikbaar bij gebruik van Tableau-data-extracten of bij verbinding met databronnen van de volgende typen: tekstbestand, Hadoop Hive, Google BigQuery, PostgreSQL, Tableau-data-extract, Microsoft Excel, Salesforce, Vertica, Pivotal Greenplum, Teradata (versie 14.1 en hoger) en Oracle. Zie [Aanvullende functies (Regex, Hadoop Hive, Google BigQuery)](https://help.tableau.com/v0.0/pro/desktop/nl-nl/functions_functions_additional.htm) voor meer informatie.

  

### Voorbeeld 1: CONTAINS

Stel dat u de volgende berekening hebt, waarbij het berekende veld Category (calc) meerdere keren wordt gebruikt. Hoewel deze berekening ook een eenvoudige logische expressie is, worden de prestaties van query's erdoor aangetast, omdat de berekening Category (calc) meermaals wordt uitgevoerd.

`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`

U kunt een REGEXP-expressie gebruiken om dezelfde resultaten te krijgen met minder herhaling.

#### Oplossing

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

  

Bij tekenreeksberekeningen die een soortgelijk patroon gebruiken, kunt u dezelfde REGEXP-expressie gebruiken.

### Voorbeeld 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'`

#### Oplossing

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

Houd er rekening mee dat het symbool ^ in deze oplossing wordt gebruikt.

### Voorbeeld 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`

#### Oplossing

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

Houd er rekening mee dat het symbool $ in deze oplossing wordt gebruikt.

## Tip 3: manipuleer tekenreeksen met REGEXP in plaats van LEFT, MID, RIGHT, FIND, LEN

Reguliere expressies kunnen een zeer krachtig hulpmiddel zijn. Overweeg het gebruik van reguliere expressies bij complexe tekenreeksmanipulatie. In veel gevallen zal het gebruik van een reguliere expressie resulteren in een kortere en efficiëntere berekening. Zie de blogpost [Vertrouwd raken met regex en werken met imperfecte data](https://www.tableau.com/nl-nl/about/blog/2015/6/become-regular-regular-expressions-39802) (in het Engels) op de Tableau-blog voor meer informatie over reguliere expressies.

### Voorbeeld 1

Stel dat u de volgende berekening hebt, waarbij protocollen uit URL's worden verwijderd. Bijvoorbeeld: "https://www.tableau.com" wordt "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`

#### Oplossing

U kunt de berekening vereenvoudigen en de prestaties verbeteren door een REGEXP\_REPLACE-functie te gebruiken.

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

### Voorbeeld 2

Stel dat u de volgende berekening hebt, die het tweede deel van een IPv4-adres retourneert. Bijvoorbeeld: "172.16.0.1" wordt "16".

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

#### Oplossing

U kunt de berekening vereenvoudigen en de prestaties verbeteren door een REGEXP\_EXTRACT-functie te gebruiken.

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

## Tip 4: gebruik geen sets in berekeningen

Als u sets in een berekening gebruikt, overweeg dan om deze te vervangen door een alternatieve maar gelijkwaardige berekening.

### Voorbeeld

Stel dat u de volgende berekening hebt, waarbij gebruik wordt gemaakt van de set Top Customers (set).

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

### Oplossing 1

Als de set eenvoudig is, kunt u een berekend veld maken dat hetzelfde resultaat retourneert als de set. Bijvoorbeeld:

`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`

  

**Opmerking**: gebruik van het patroon WHEN TRUE … ELSE wordt in deze situatie aanbevolen om prestatieproblemen als gevolg van het gebruik van sets te voorkomen. In de meeste scenario's is dit geen aanbevolen patroon.

### Oplossing 2

Als de set complexer is, kunt u overwegen een groep te maken die alle elementen in de set toewijst aan een bepaalde waarde of een bepaald kenmerk, zoals 'IN', en vervolgens de berekening aan te passen om te controleren op die waarde of dat kenmerk. Bijvoorbeeld:

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

Zie [Uw data groeperen](https://help.tableau.com/v0.0/pro/desktop/nl-nl/sortgroup_groups_creating.htm) en [Sets maken](https://help.tableau.com/v0.0/pro/desktop/nl-nl/sortgroup_sets_create.htm) voor meer informatie.

## Tip 5: gebruik geen sets om uw data te groeperen

Sets zijn bedoeld om vergelijkingen te maken op subsets van data. Groepen zijn bedoeld om verwante leden in een veld te combineren. Het converteren van sets naar groepen, zoals in het volgende voorbeeld, wordt niet aanbevolen:

`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`

Dit wordt niet aanbevolen om de volgende redenen:

- **Sets zijn niet altijd exclusief**. Sommige leden kunnen in meerdere sets voorkomen. Rusland zou bijvoorbeeld zowel in de set Europe als in de set Asia kunnen worden geplaatst.
- **Sets kunnen niet altijd naar groepen worden vertaald**. Als de sets worden gedefinieerd door uitsluiting, voorwaarden of limieten, kan het moeilijk of zelfs onmogelijk zijn om een gelijkwaardige groep te creëren.

### Oplossing

Groepeer uw data met behulp van de functie Groep. Zie [Uw data groeperen](https://help.tableau.com/v0.0/pro/desktop/nl-nl/sortgroup_groups_creating.htm) voor meer informatie.

## Zie ook

[Efficiënte berekeningen maken](https://help.tableau.com/v0.0/pro/desktop/nl-nl/perf_efficient_calcs.htm)

[Werkmapprestaties optimaliseren](https://help.tableau.com/v0.0/pro/desktop/nl-nl/performance_tips.htm)

[Berekeningstypen in Tableau](https://help.tableau.com/v0.0/pro/desktop/nl-nl/calculations_calculatedfields_understand_types.htm)

[Functies in Tableau](https://help.tableau.com/v0.0/pro/desktop/nl-nl/functions.htm)