# CalcDim - fonction de graphique

Lorsqu'elle est utilisée dans une expression dimension, la fonction CalcDim() remplace l'interprétation automatique du moteur quant au mode gestion en interne de l'expression. Spécifiquement, la fonction empêche la création d'un nouveau champ interne dans le modèle de données. Au lieu de cela, les sélections effectuées dans l'application sont traitées comme des sélections dans les champs applicables du modèle de données d'origine.

Cette fonction ne peut pas être utilisée dans lescript de chargement. En outre, une bonne pratique, pour préserver les performances du système, consiste à charger les champs utilisés dans la dimension calculée sous forme de champs logiques via le script de chargement lorsque cela est possible. CalcDim() offre un moyen de contrôler le comportement du moteur dans les scénarios dans lesquels il n'est pas possible de charger le champ calculé à partir du script.

Dans Qlik Sense, l'expression de dimension est réalisée par défaut comme un champ à la volée, c'est-à-dire comme un champ réel, apparent dans la barre de sélection actuelle, avec une création à la demande. Les sélections sont appliquées et déduites de ce champ, comme pour tout champ logique du script.

Une expression encapsulée dans CalcDim() se comportera de la même manière que toutes les expressions de dimension calculée dans QlikView, c'est-à-dire en mappant de manière ad hoc les valeurs calculées aux valeurs de champ sources sous-jacentes. Tous les calculs de champ à la volée peuvent être transférés dans des dimensions calculées à l'aide de la fonction CalcDim(). En effet, la dimension calculée doit remplir moins de conditions basées sur le modèle de données que le calcul de champ à la volée correspondant. Cette transformation peut être souhaitable afin de garantir un comportement similaire pour toutes les dimensions calculées lorsque le modèle de données peut empêcher l'utilisation d'un calcul de champ à la volée dans certains cas, mais pas dans d'autres.

[Champs calculés](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

CalcDim(expr)

double

Arguments

| Argument | Description |
| --- | --- |
| expr | Expression utilisée comme dimension ou comme segment dans une expression de dimension. |

## Cas d'utilisation

CalcDim() s'avère utile lorsque vous avez besoin de plus de contrôle sur la façon dont le moteur Qlik traite les champs que vous invoquez dans une expression de dimension.

Par défaut, Qlik Sense décide automatiquement de créer et de référencer des champs internes dans le modèle de données lorsque vous utilisez une expression de dimension personnalisée. Qlik Sense crée et utilise ces champs internes chaque fois que cela est possible. Lorsque cela n'est pas possible, l'expression est traitée en référence aux champs du modèle de données existant sur lesquels elle s'appuie.

Selon votre cas d'utilisation, ce traitement automatique n'est pas toujours souhaitable. Par exemple, si vous utilisez une variable dans une expression de dimension, la création automatique de nouveaux champs peut devenir problématique. Dans ce cas, utilisez CalcDim() pour forcer le traitement de l'expression sans cette méthode.

Voici quelques cas d'utilisation courants :

* Vous avez migré le contenu de QlikView vers Qlik Sense et vous souhaitez conserver la méthode de traitement de QlikView pour les dimensions calculées.

* Vous souhaitez simplifier le comportement de sélection dans votre application. Par exemple, vous préférez afficher les sélections des champs sous forme de sélections dans des champs du modèle de données d'origine, plutôt que sous forme de sélections dans de nouveaux champs.

* Votre cas d'utilisation nécessite une expression ad hoc pour des raisons de cohérence et de performances. Par exemple, si votre expression de dimension contient des paramètres de visualisation dynamique contrôlables par l'utilisateur tels qu'un formatage contrôlable, des valeurs limites ou des périodes.

Exemples de fonction

| Exemple | Résultat |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | Une sélection dans une visualisation qui utilise cette dimension sera traitée et affichée comme une sélection dans la valeur du champ Year associée provenant du modèle de données.<br><br>Inversement, supposons que vous n'encapsuliez pas l'expression dans CalcDim(). Dans ce cas, elle se présentera comme suit :<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>Une sélection dans l'expression ci-dessus sera traitée et affichée comme une sélection dans le champ interne =if(Year &lt; 2023, 'Older', Year), qui ne figure pas dans le modèle de données. |

## Exemple 1 – Comparaison simple

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemFunctions/calcdim.htm)

#### Expressions de graphique et résultats

Vue d'ensemble

Dans cet exemple, vous allez effectuer les opérations suivantes :

* Ajouter une table inline et charger des données dans une application.

* Créer une table pour visualiser les données et effectuer des calculs.

* Effectuer des sélections dans la table pour observer la différence de comportement.

Ouvrez l'Éditeur de chargement de données et ajoutez le script de chargement suivant à une nouvelle section.

Le script de chargement charge une table inline. Cette table comprend deux champs : un champ pour le prénom de la personne et un champ pour son nom de famille.

Script de chargement

```
Names:

Load * inline [
FirstName,LastName
John,Doe
Amanda,Honda
Amalia,Craig
Cart,Lynch
];
```

Création de table

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* FirstName

* LastName

Ensuite, ajoutez chacune des expressions suivantes sous forme de dimensions dans la table :

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

La table devrait ressembler à ce qui suit.

Table Qlik SenseQlik Sense avec des exemples de résultats

| FirstName | LastName | =FirstName & ' ' & LastName | =CalcDim(FirstName & ' ' & LastName) |
| --- | --- | --- | --- |
| John | Doe | John Doe | John Doe |
| Amanda | Honda | Amanda Honda | Amanda Honda |
| Amalia | Craig | Amalia Craig | Amalia Craig |
| Cart | Lynch | Cart Lynch | Cart Lynch |

Comparaison : réalisation de sélections

Dans la colonne =FirstName & ' ' & LastName de la table, sélectionnez la valeur John Doe. Notez que, dans la barre d'outils de sélection, la valeur est sélectionnée sous forme de valeur d'un champ nommé =FirstName&' '&LastName.

Effacez la sélection.

Dans la colonne =CalcDim(FirstName & ' ' & LastName) de la table, sélectionnez la valeur John Doe. Dans la barre d'outils de sélection, la valeur est sélectionnée sous forme de valeurs provenant de deux champs différents : FirstName et LastName.

Ces deux expressions présentent les mêmes informations : une concaténation des champs FirstName et LastName. La différence réside dans le fait que sans CalcDim(), un champ synthétique est créé pour stocker le calcul. Avec CalcDim(), les champs d'origine du modèle de données sont utilisés comme base pour la dimension calculée.

## Exemple 2 – Cas d'utilisation pratique pour modifier le comportement par défaut

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/SystemFunctions/calcdim.htm)

#### Expressions de graphique et résultats

Vue d'ensemble

Dans cet exemple, nous créons des expressions de dimension dynamiques faisant référence à une variable plutôt que des références à des valeurs statiques.

Dans cet exemple, vous allez effectuer les opérations suivantes :

* Ajouter une table inline et chargez des données dans une application.

* Créez une variable pour stocker dynamiquement une valeur.

* Créer une table pour visualiser les données et effectuer des calculs.

* Effectuer des sélections dans la table pour observer la différence de comportement.

Ouvrez l'Éditeur de chargement de données et ajoutez le script de chargement suivant à une nouvelle section.

Le script de chargement charge une table inline. Cette table comprend un champ de date et un champ calculé, Year, qui est dérivé des dates brutes.

Script de chargement

```
SET DateFormat='MM/DD/YYYY';
						
Transactions:

Load *,

RowNo() as ID,
Year(date) as Year
;

Load * Inline
[
date,amount
'1/19/2022',37.23
'2/28/2022',88.27
'3/16/2022',53.80
'4/1/2022',82.06
'5/16/2022',87.21
'6/26/2022',45.89
'7/9/2022',36.23
'8/2/2022',76.11
'9/26/2022',84.21
'10/29/2022',67.67
'1/1/2023',100.49
'2/24/2023',99.47
'3/6/2023',50.02
'4/10/2023',2.05
'5/20/2023',75.64
'6/25/2023',98.11
'7/19/2023',30.00
'9/27/2023',76.11
'10/26/2023',43.21
'11/12/2023',135.41
'1/15/2024',67.24
];
```

Création de variable

Chargez les données et ouvrez une feuille. Créez une variable nommée vCutoffYear et donnez-lui la Définition suivante : 2023

Création de table

Chargez les données et ouvrez une feuille. Créez une table et ajoutez ces champs comme dimensions :

* date

* Year

* amount

Ensuite, ajoutez chacune des expressions suivantes sous forme de dimensions dans la table :

* =if(Year &lt; $(vCutoffYear), 'Older', Year)

* =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year))

La table devrait ressembler à ce qui suit.

Table Qlik SenseQlik Sense avec des exemples de résultats

| date | Year | amount | if(Year &lt; $(vCutoffYear), 'Older', Year) | =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) |
| --- | --- | --- | --- | --- |
| 1/19/2022 | 2022 | 37.23 | Older | Older |
| 2/28/2022 | 2022 | 88.27 | Older | Older |
| 3/16/2022 | 2022 | 53.80 | Older | Older |
| 4/1/2022 | 2022 | 82.06 | Older | Older |
| 5/16/2022 | 2022 | 87.21 | Older | Older |
| 6/26/2022 | 2022 | 45.89 | Older | Older |
| 7/9/2022 | 2022 | 36.23 | Older | Older |
| 8/2/2022 | 2022 | 76.11 | Older | Older |
| 9/26/2022 | 2022 | 84.21 | Older | Older |
| 10/29/2022 | 2022 | 67.67 | Older | Older |
| 1/1/2023 | 2023 | 100.49 | 2023 | 2023 |
| 2/24/2023 | 2023 | 99.47 | 2023 | 2023 |
| 3/6/2023 | 2023 | 50.02 | 2023 | 2023 |
| 4/10/2023 | 2023 | 2.05 | 2023 | 2023 |
| 5/20/2023 | 2023 | 75.64 | 2023 | 2023 |
| 6/25/2023 | 2023 | 98.11 | 2023 | 2023 |
| 7/19/2023 | 2023 | 30.00 | 2023 | 2023 |
| 9/27/2023 | 2023 | 76.11 | 2023 | 2023 |
| 10/26/2023 | 2023 | 43.21 | 2023 | 2023 |
| 11/12/2023 | 2023 | 135.41 | 2023 | 2023 |
| 1/15/2024 | 2024 | 67.24 | 2024 | 2024 |

Comparaisons, partie 1 : comportement sans CalcDim()

Dans la table ci-dessus, il n'existe pas de différence entre les deux colonnes de dimensions calculées.

Dans la colonne if(Year &lt; $(vCutoffYear), 'Older', Year) de la table, sélectionnez la valeur 2023. Notez que, dans la barre d'outils de sélection, la valeur est sélectionnée sous forme de valeur d'un champ nommé =if(Year&lt;2023,'Older',Year).

Ensuite, remplacez la Définition de la variable vCutoffYear par 2024. Notez que, même si la zone de sélection =if(Year&lt;2023,'Older',Year) est identique et conserve la valeur sélectionnée 2023, les données de la table ont changé. La valeur 2023 a été remplacée par la valeur Older. Si vous sélectionnez Older dans la colonne if(Year &lt; $(vCutoffYear), 'Older', Year), la sélection Older s'effectue dans un nouveau champ : =if(Year&lt;2024,'Older',Year).

En fait, un nouveau champ est créé en interne pour chaque valeur de la variable vCutoffYear. Lorsque vous travaillez avec des sélections simultanées et changeantes, ce comportement n'est pas forcément souhaitable et peut compliquer l'interprétation des données.

Comparaisons, partie 2 : comportement avec CalcDim()

Maintenant que vous avez vu le comportement de l'expression lorsqu'elle n'est pas encapsulée dans CalcDim(), effacez toutes les sélections dans l'application. Réinitialisez la variable vCutoffYear à la valeur 2023.

Dans la colonne =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) de la table, sélectionnez la valeur 2023. Notez que, dans la barre d'outils de sélection, la valeur est sélectionnée sous forme de valeur du champ sous-jacent, Year.

Ensuite, remplacez la Définition de la variable vCutoffYear par 2024. Le champ de sélection Year est identique et conserve la valeur sélectionnée 2023, et les données de la table ont changé, comme indiqué sans CalcDim(). Toutefois, si vous sélectionnez maintenant Older dans la colonne =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)), la valeur 2024 est sélectionnée dans Year.

Toutes les sélections que vous effectuez dans une dimension calculée encapsulée dans CalcDim() seront reflétées comme des sélections dans les champs sous-jacents référencés à partir du modèle de données d'origine. Cela peut simplifier l'interprétation des données et éviter l'apparition d'expressions complexes et encombrées dans la barre d'outils de sélection lorsque les utilisateurs consultent le contenu analytique.

## En savoir plus

* [Champs calculés](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

* [Dimensions calculées](https://help.qlik.com/fr-FR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)