# CalcDim - diagramfunctie

Als ze worden gebruikt in een dimensieuitdrukking, overschrijft CalcDim() de automatische interpretatie van de engine voor de interne afhandeling van de uitdrukking. De functie voorkomt dat er een nieuw intern veld wordt gemaakt in het gegevensmodel. In plaats daarvan worden selecties die zijn gemaakt in de app behandeld als selecties in toepasselijke velden van het originele gegevensmodel.

Deze functie kan niet worden gebruikt in het load-script. Bovendien is het voor systeemprestaties een best practice om, indien mogelijk, de velden die in de berekende dimensie worden gebruikt, als logische velden via het load-script te laden. CalcDim() biedt een manier om het gedrag van de engine te regelen in scenario's waarin het laden van het berekende veld vanuit het script niet mogelijk is.

In Qlik Sense wordt de dimensie-uitdrukking standaard gerealiseerd als een veld-on-the-fly—dat wil zeggen, als een daadwerkelijk veld, zichtbaar in de huidige selectiestaaf, dat op aanvraag wordt gebouwd. Selecties worden toegepast en afgeleid op dit veld, vergelijkbaar met elk logisch veld uit de script.

Een expressie verpakt in CalcDim() zal zich op dezelfde manier gedragen als alle berekende dimensie-expressies werken in QlikView 12, wat een ad-hoc toewijzing is van de berekende waarden aan de onderliggende bronveldwaarden. Alle on-the-fly veldberekeningen kunnen worden overgezet naar berekende dimensies met behulp van de CalcDim() functie, aangezien de berekende dimensie aan minder vereisten hoeft te voldoen op basis van het gegevensmodel dan de overeenkomstige on-the-fly veldberekening. Deze transformatie kan wenselijk zijn om een vergelijkbaar gedrag te garanderen voor alle berekende dimensies, waar het gegevensmodel het gebruik van een 'field-on-the-fly'-berekening in sommige gevallen kan verhinderen, maar in andere niet.

[Berekende velden](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

Syntaxis:

CalcDim(expr)

Retourgegevenstypen: dubbele waarde

Argumenten

| Argument | Beschrijving |
| --- | --- |
| expr | Een expressie die wordt gebruikt als een dimensie, of als een segment binnen een dimensie-expressie. |

## Wanneer gebruiken

CalcDim() is nuttig wanneer u meer controle nodig heeft over hoe de Qlik engine omgaat met de velden die u aanroept in een dimensie-uitdrukking.

Standaard bepaalt Qlik Sense automatisch of interne velden in het gegevensmodel moeten worden aangemaakt en ernaar moet worden verwezen wanneer u een aangepaste dimensie-uitdrukking gebruikt. Qlik Sense maakt en gebruikt deze interne velden wanneer dit mogelijk is. Wanneer dit niet mogelijk is, wordt de expressie afgehandeld met verwijzing naar de bestaande gegevensmodelvelden waarop deze berust.

Afhankelijk van uw gebruiksscenario is deze automatische verwerking mogelijk niet altijd wenselijk. Bijvoorbeeld, als u een variabele gebruikt in een dimensie-uitdrukking, kan het automatisch aanmaken van nieuwe velden problematisch worden. In dit geval, gebruik CalcDim() om de expressie te dwingen verwerkt te worden zonder deze methode.

Hier volgen enkele van de meest voorkomende gebruiksscenario's:

* U hebt QlikView 12 inhoud gemigreerd naar Qlik Sense en u wilt de QlikView 12 verwerkingsmethode voor berekende dimensies behouden.

* U wilt het selectiegedrag in uw app vereenvoudigen. U wilt bijvoorbeeld veldselecties weergeven als selecties in velden uit het oorspronkelijke gegevensmodel, in plaats van selecties in nieuwe velden.

* Uw gebruiksscenario vereist een ad-hoc expressie voor consistentie en prestaties. Bijvoorbeeld, als uw dimensie-uitdrukking gebruikersgestuurde dynamische visualisatieparameters bevat, zoals configureerbare opmaak, afkapwaarden of perioden.

Voorbeelden van functies

| Voorbeeld | Resultaat |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | Een selectie maken in een visualisatie die deze dimensie gebruikt, wordt verwerkt en weergegeven als een selectie in de bijbehorende Year veldwaarde uit het gegevensmodel.<br><br>Omgekeerd, stel dat u de expressie niet omhult in CalcDim(). In dit geval zou het er zo uitzien:<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>Een selectie maken in de bovenstaande expressie zou worden verwerkt en weergegeven als een selectie in het interne veld =if(Year &lt; 2023, 'Older', Year), dat niet in het gegevensmodel zit. |

## Voorbeeld 1 – Eenvoudige vergelijking

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

#### Diagramuitdrukkingen en resultaten

Overzicht

In dit voorbeeld zult u:

* Voeg een uitgelijnde tabel toe en laad gegevens in een app.

* Maak een tabel om de gegevens te visualiseren en berekeningen uit te voeren.

* Maak selecties in de tabel om het verschil in gedrag te observeren.

Open de Editor voor laden van gegevens en voeg het volgende load-script toe aan een nieuwe sectie.

De load-script laadt een uitgelijnde tabel. Deze tabel bevat twee velden: een veld voor de voornaam van de persoon, en een veld voor de achternaam van de persoon.

Load-script

```
Names:

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

Tabel aanmaken

Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:

* FirstName

* LastName

Vervolgens, voeg elk van de volgende uitdrukkingen toe als dimensies in de tabel:

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

De tabel moet er als volgt uitzien.

Qlik SenseQlik Sense tabel met voorbeeldresultaten

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

Vergelijking: Selecties maken

Selecteer in de =FirstName & ' ' & LastName kolom van de tabel de waarde John Doe. Merk op dat in de selectiewerkbalk de waarde is geselecteerd als een waarde uit een veld genaamd =FirstName&' '&LastName.

Wis de selectie.

Selecteer in de =CalcDim(FirstName & ' ' & LastName) kolom van de tabel de waarde John Doe. In de selectiewerkbalk wordt de waarde geselecteerd als waarden uit twee verschillende velden: FirstName en LastName.

Deze twee expressies presenteren dezelfde informatie: een concatenatie van de FirstName en LastName velden. Het verschil is dat zonder CalcDim() een synthetisch veld wordt aangemaakt om de berekening op te slaan. Met CalcDim() worden de oorspronkelijke velden uit het gegevensmodel gebruikt als basis voor de berekende dimensie.

## Voorbeeld 2 – Praktische use case om het standaardgedrag te wijzigen

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

#### Diagramuitdrukkingen en resultaten

Overzicht

In dit voorbeeld creëren we dynamische dimensie-uitdrukkingen die verwijzen naar een variabele, in plaats van verwijzingen naar statische waarden.

In dit voorbeeld zult u:

* Voeg een uitgelijnde tabel toe en laad gegevens in de app.

* Maak een variabele om dynamisch een waarde op te slaan.

* Maak een tabel om de gegevens te visualiseren en berekeningen uit te voeren.

* Maak selecties in de tabel om het verschil in gedrag te observeren.

Open de Editor voor laden van gegevens en voeg het volgende load-script toe aan een nieuwe sectie.

De load-script laadt een uitgelijnde tabel. Deze tabel bevat een datumveld en een berekend veld, Year, dat is afgeleid van de ruwe datums.

Load-script

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

Variabelecreatie

Laad de gegevens en open een werkblad. Maak een variabele met de naam vCutoffYear, en geef deze de volgende Definitie: 2023

Tabel aanmaken

Laad de gegevens en open een werkblad. Maak een nieuwe tabel en voeg deze velden toe als dimensies:

* date

* Year

* amount

Vervolgens, voeg elk van de volgende uitdrukkingen toe als dimensies in de tabel:

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

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

De tabel moet er als volgt uitzien.

Qlik SenseQlik Sense tabel met voorbeeldresultaten

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

Vergelijkingen, deel 1: Gedrag zonder CalcDim()

In de bovenstaande tabel is er geen verschil tussen de twee berekende dimensiekolommen.

Selecteer in de if(Year &lt; $(vCutoffYear), 'Older', Year) kolom van de tabel de waarde 2023. Merk op dat in de selectiewerkbalk de waarde is geselecteerd als een waarde uit een veld met de naam =if(Year&lt;2023,'Older',Year).

Vervolgens wijzigt u de Definitie van de vCutoffYear variabele naar 2024. Merk op dat hoewel het selectieveld =if(Year&lt;2023,'Older',Year) hetzelfde is en de geselecteerde waarde 2023 behoudt, de gegevens in de tabel zijn gewijzigd. De waarde 2023 is gewijzigd naar de waarde Older. Als u Older selecteert in de if(Year &lt; $(vCutoffYear), 'Older', Year) kolom, wordt de selectie Older gemaakt in een nieuw veld: =if(Year&lt;2024,'Older',Year).

In wezen wordt intern een nieuw veld aangemaakt voor elke waarde van de vCutoffYear variabele. Bij het werken met gelijktijdige en veranderende selecties is dit gedrag mogelijk niet wenselijk en kan het de interpretatie van gegevens complexer maken.

Vergelijkingen, deel 2: Gedrag met CalcDim()

Nu u het gedrag van de expressie hebt gezien wanneer deze niet is ingesloten in CalcDim(), wis alle selecties in de app. Reset de vCutoffYear variabele op de waarde 2023.

Selecteer in de =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) kolom van de tabel de waarde 2023. Merk op dat in de selectiewerkbalk de waarde wordt geselecteerd als een waarde uit het onderliggende veld, Year.

Vervolgens wijzigt u de Definitie van de vCutoffYear variabele naar 2024. Het selectieveld Year is hetzelfde, het behoudt de geselecteerde waarde 2023, en de gegevens in de tabel zijn gewijzigd, zoals te zien is zonder CalcDim(). Als u echter nu Older selecteert in de =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) kolom, wordt de waarde 2024 geselecteerd in Year.

Alle selecties die u maakt in een berekende dimensie omwikkeld met CalcDim() worden weergegeven als selecties in de onderliggende velden waarnaar wordt verwezen vanuit het oorspronkelijke gegevensmodel. Dit kan de gegevensinterpretatie vereenvoudigen en voorkomt dat rommelige, complexe uitdrukkingen verschijnen in de selectiestaaf wanneer gebruikers de analyse-inhoud consumeren.

## Meer informatie

* [Berekende velden](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

* [Berekende dimensies](https://help.qlik.com/nl-NL/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)