---
schema_version: "1"
id: af73ff7c182c0e33ea5358e6853ae44eda7fd85f8238494e8abf21cda357bd27
title: Meilleures pratiques pour la création de calculs dans Tableau
collection: tableau
version: current
locale: fr-ca
portal_url: https://docs.salesforce.com/tableau/current/fr-ca/public/desktop/calculations_calculatedfields_bestpractices.md
canonical_url: https://help.tableau.com/current/public/desktop/fr-ca/calculations_calculatedfields_bestpractices.htm
source_site: help.tableau.com
content_type: documentation
content_hash: 7a60de7bcce34f70a450be5147ec7398dee1205bb022834bd4ddd0bbcb53407e
description: Tips and guidelines for creating efficient calculations in Tableau to optimize workbook performance.
---
[Passer au contenu principal](#main-content)

# Meilleures pratiques pour la création de calculs dans Tableau

## Règle générale : Éviter d’utiliser un champ calculé plusieurs fois dans un autre calcul

Le référencement du même champ calculé plusieurs fois dans un autre calcul peut entraîner des problèmes de performances. Si vous utilisez un champ calculé au sein d’un calcul (également connu comme la création d’un calcul imbriqué), essayez de le référencer une seule fois dans le calcul.

Notez que le référencement d’un champ plusieurs fois (champ terminal) dans un calcul ne devrait pas dégrader ses performances.

### Exemple

Imaginons que vous créez un champ calculé utilisant un calcul complexe à plusieurs lignes pour trouver des mentions, ou poignées Twitter, dans des gazouillis. Le champ calculé est appelé Poignée Twitter. Chaque poignée retournée commence par le signe « @ » (par exemple : @utilisateur).

Pour votre analyse, vous souhaitez supprimer le symbole « @ ».

Pour cela, vous pouvez utiliser le calcul suivant pour supprimer le premier caractère de la chaîne :

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

Ce calcul est très simple. Toutefois, étant donné qu’il référence deux fois le calcul Poignée Twitter, il exécute ce calcul deux fois pour chaque enregistrement dans votre source de données : une fois pour la fonction RIGHT et à nouveau pour la fonction LEN.

Pour éviter d’effectuer plus d’une fois le même calcul, vous pouvez réécrire le calcul en un calcul qui utilise le calcul Poignée Twitter une seule fois. Dans cet exemple, vous pouvez utiliser MID pour atteindre le même objectif :

`MID([Twitter Handle], 2)`

## Conseil 1 : Convertir plusieurs comparaisons d’égalité en une expression CASE ou un groupe

Prenons le calcul suivant, qui utilise le champ calculé, Person (calc), plusieurs fois et emploie une série de fonctions OR. Ce calcul, bien qu’il soit une expression logique simple, entraînera des problèmes de performances des requêtes parce qu’il effectue le calcul Person (calc) au moins dix fois.

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

Au lieu d’utiliser une comparaison d’égalité, essayons les solutions suivantes.

### Solution 1

Utilisez une expression CASE, Par exemple :

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

Dans cet exemple, le champ calculé, Person (calc), est référencé une seule fois. Il est donc exécuté une seule fois. Les expressions CASE peuvent également être optimisées encore davantage dans le pipeline de requête pour bénéficier de performances supplémentaires.

### Solution 2

Créez un groupe au lieu d’un champ calculé. Pour plus d’informations, consultez [Réunir vos données](https://help.tableau.com/current/public/desktop/fr-ca/sortgroup_groups_creating.htm).

## Conseil 2 : Convertir plusieurs calculs de chaînes en une seule expression REGEXP

**Remarque :** les calculs REGEXP sont disponibles uniquement lorsque vous utilisez des extraits de données Tableau ou que vous êtes connecté à des sources de données au format fichier texte, Hadoop Hive, Google BigQuery, PostgreSQL, Tableau Data Extract, Microsoft Excel, Salesforce, Vertica, Pivotal Greenplum, Teradata (version 14.1 et versions supérieures) et Oracle. Pour plus d’informations, consultez [Fonctions supplémentaires (Regex, Hadoop Hive, Google Big Query)](https://help.tableau.com/current/public/desktop/fr-ca/functions_functions_additional.htm).

  

### Exemple 1 : CONTAINS

Prenons le calcul suivant, qui utilise le champ calculé, Category (calc), plusieurs fois. Ce calcul, bien qu’il soit une expression logique simple, entraînera des problèmes de performances des requêtes parce qu’il effectue le calcul Category (calc) au moins dix fois.

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

Vous pouvez utiliser une expression REGEXP pour obtenir les mêmes résultats sans autant de répétions.

#### Solution

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

  

Avec les calculs de chaînes utilisant un modèle similaire, vous pouvez utiliser la même expression REGEXP.

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

#### Solution

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

Notez que le symbole « ^ » est utilisé dans cette solution.

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

#### Solution

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

Notez que le symbole « $ » est utilisé dans cette solution.

## Conseil 3 : Manipuler les chaînes avec REGEXP au lieu de LEFT, MID, RIGHT, FIND, LEN

Les expressions régulières peuvent être un outil très puissant. Si vous effectuez une manipulation complexe de chaînes, envisagez d’utiliser des expressions régulières. Dans de nombreux cas, l’utilisation d’une expression régulière peut entraîner un calcul plus court et plus efficace. Pour plus d’informations sur les expressions régulières, consultez le blogue [Become a regex regular and wrangle imperfect data](https://www.tableau.com/fr-ca/about/blog/2015/6/become-regular-regular-expressions-39802) dans le blogue de Tableau.

### Exemple 1

Prenons le calcul suivant, qui supprime des protocoles d’URL. Par exemple, « https://www.tableau.com » devient « 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`

#### Solution

Vous pouvez simplifier le calcul et améliorer les performances en utilisant une fonction REGEXP\_REPLACE.

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

### Exemple 2

Prenons le calcul suivant, qui retourne la seconde partie d’une adresse IPv4. Par exemple, « 172.16.0.1 » devient « 16 ».

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

#### Solution

Vous pouvez simplifier le calcul et améliorer les performances en utilisant une fonction REGEXP\_EXTRACT.

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

## Conseil 4 : N’utilisez pas d’ensembles dans des calculs

Si vous utilisez des ensembles dans un calcul, envisagez de les remplacer par une alternative, mais un calcul équivalent.

### Exemple

Prenons le calcul suivant, qui utilise l’ensemble Top Customers (set).

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

### Solution 1

Si l’ensemble est simple, vous pouvez créer un champ calculé qui retourne le même résultat que l’ensemble, Par exemple :

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

  

**Remarque :** l’utilisation du modèle WHEN TRUE … ELSE est recommandée dans ce cas pour éviter les problèmes de performances dus à l’utilisation d’ensembles. Dans la plupart des scénarios, ce modèle n’est pas recommandé.

### Solution 2

Si l’ensemble est plus complexe, envisagez de créer un groupe qui mappe tous les éléments de l’ensemble à une valeur ou un attribut spécifique, par exemple « N », puis modifiez le calcul pour vérifier cette valeur/cet attribut. Par exemple :

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

Pour plus d’informations, consultez [Réunir vos données](https://help.tableau.com/current/public/desktop/fr-ca/sortgroup_groups_creating.htm) et [Créer des ensembles](https://help.tableau.com/current/public/desktop/fr-ca/sortgroup_sets_create.htm).

## Conseil 5 : N’utilisez pas des ensembles pour réunir vos données

Les ensembles sont conçus pour effectuer des comparaisons entre des sous-ensembles de données. Les groupes sont conçus pour combiner les membres liés dans un champ. Il n’est pas recommandé de convertir des ensembles en des groupes, comme dans cet exemple :

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

Cette opération est déconseillée pour les raisons suivantes :

- **Les ensembles ne sont pas toujours exclusif**s. Certains membres peuvent apparaître dans plusieurs ensembles. Par exemple, la Russie pourrait être placée à la fois dans l’ensemble Europe et dans l’ensemble Asie.
- **Les ensembles ne peuvent pas toujours être traduits en des groupes**. Si les ensembles sont définis par l’exclusion, des conditions ou des limites, il peut être difficile, consulteze impossible, de créer un groupe équivalent.

### Solution

Réunissez vos données à l’aide de la fonctionnalité Groupe. Pour plus d’informations, consultez [Réunir vos données](https://help.tableau.com/current/public/desktop/fr-ca/sortgroup_groups_creating.htm).

## Voir également

[Types de calculs dans Tableau](https://help.tableau.com/current/public/desktop/fr-ca/calculations_calculatedfields_understand_types.htm)

[Fonctions dans Tableau](https://help.tableau.com/current/public/desktop/fr-ca/functions.htm)