# CalcDim - diagramfunktion

När de används i ett dimensionsuttryck åsidosätter CalcDim() motorns automatiska tolkning av hur uttrycket hanteras internt. Specifikt förhindrar funktionen att ett nytt internt fält skapas i datamodellen. Istället behandlas urval som görs i appen som urval i tillämpliga fält från de ursprungliga datamodellen.

Denna funktion kan inte användas iladdningsskriptet. Dessutom är en bästa praxis för systemprestanda att ladda de fält som används i den beräknade dimensionen som logiska fält via laddningsskriptet när det är möjligt. CalcDim() erbjuder ett sätt att styra motorns beteende i scenarier där det inte är möjligt att ladda det beräknade fältet från skriptet.

I Qlik Sense realiseras dimensionsuttrycket som standard som ett fält i farten, det vill säga som ett faktiskt fält som syns i det aktuella urvalsfältet och som byggs upp på begäran. Urval tillämpas och härleds till det här fältet, på samma sätt som alla logiska fält i skriptet.

Ett uttryck som är inbäddat i CalcDim() kommer att fungera på samma sätt som alla uttryck för beräknade dimensioner fungerar i QlikView, vilket är en ad hoc-mappning av de beräknade värdena till de underliggande källfältsvärdena. Alla fält-i-farten-beräkningar kan överföras till beräknade dimensioner med hjälp av funktionen CalcDim() eftersom den beräknade dimensionen måste uppfylla färre krav baserat på datamodellen än motsvarande fält-i-farten-beräkning. Denna datatransformering kan vara önskvärd för att garantera ett liknande beteende för alla beräknade dimensioner där datamodellen kan förhindra användningen av en fält-i-farten-beräkning i vissa fall, men inte i andra.

[Beräknade fält](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

Syntax:

CalcDim(expr)

Returnerad datatyp: dual

Argument

| Argument | Beskrivning |
| --- | --- |
| expr | Ett uttryck som används som en dimension, eller som ett segment inom ett uttryck i en dimension. |

## Användning

CalcDim() är användbart när du behöver mer kontroll över hur Qlik-motorn hanterar de fält som du åberopar i ett uttryck för dimension.

Som standard avgör Qlik Sense automatiskt om interna fält ska skapas och refereras till i datamodellen när du använder ett uttryck för en anpassad dimension. Qlik Sense skapar och använder dessa interna fält när det är möjligt. När detta inte är möjligt hanteras uttrycket med hänvisning till de befintliga fält i datamodellen som det är beroende av.

Beroende på ditt användningsområde kanske denna automatiska behandling inte alltid är önskvärd. Om du t.ex. använder en variabel i ett uttryck för en dimension kan det automatiska skapandet av nya fält bli problematiskt. Använd i så fall CalcDim() för att tvinga fram att uttrycket hanteras utan denna metod.

Några vanliga anvädningsfall:

* Du har migrerat innehåll från QlikView till Qlik Sense och du vill behålla QlikViews bearbetningsmetod för beräknade dimensioner.

* Du vill förenkla urvalsbeteendet i din app. Du föredrar till exempel att visa fältval som val i fält från den ursprungliga datamodellen, snarare än val i nya fält.

* Ditt användningsfall kräver ett ad hoc-uttryck för konsekvens och prestanda. Till exempel om ditt dimensionsuttryck innehåller användarkontrollerbara dynamiska visualiseringsparametrar, såsom kontrollerbar formatering, avgränsningsvärden eller perioder.

Exempel på funktioner

| Exempel | Resultat |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | Om du gör ett val i en visualisering som använder den här dimensionen kommer det att behandlas och visas som ett val i det associerade Year-fältvärdet från datamodellen.<br><br>Omvänt, låt oss säga att du inte bäddar in uttrycket i CalcDim(). Då skulle det se ut så här:<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>Om du gör ett val i ovanstående uttryck skulle det behandlas och visas som ett val i det interna fältet =if(Year &lt; 2023, 'Older', Year), som inte finns i datamodellen. |

## Exempel 1 – Enkel jämförelse

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

#### Diagramuttryck och resultat

Översikt

I det här exemplet kommer du att:

* Lägg till en inline-tabell och läsa in data i en app.

* Skapa en tabell för att visualisera data och utföra beräkningar.

* Gör val i tabellen för att observera skillnaden i beteende.

Öppna Skriptredigeraren och lägg till följande laddningsskript till ett nytt delavsnitt.

Laddningsskriptet laddar en inline-tabell. Den här tabellen innehåller två fält: ett fält för personens förnamn och ett fält för personens efternamn.

Laddningsskript

```
Names:

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

Skapande av tabell

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:

* FirstName

* LastName

Lägg sedan till vart och ett av de följande uttrycken som dimensioner i tabellen:

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

Tabellen ska se ut på följande sätt.

Qlik SenseQlik Sense-tabell med exempel på resultat

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

Jämförelse: Göra urval

I kolumnen =FirstName & ' ' & LastName i tabellen väljer du värdet John Doe. Observera att i verktygsfältet för urval väljs värdet som ett värde från ett fält som heter =FirstName&' '&LastName.

Rensa urvalet.

I kolumnen =CalcDim(FirstName & ' ' & LastName) i tabellen väljer du värdet John Doe. I verktygsfältet för urval väljs värdet som värden från två olika fält: FirstName och LastName.

Dessa två uttryck presenterar samma information: en konkatenering av fälten FirstName och LastName. Skillnaden är att utan CalcDim() skapas ett syntetiskt fält för att lagra beräkningen. Med CalcDim() används de ursprungliga fälten från datamodellen som grund för den beräknade dimensionen.

## Exempel 2 – Praktiskt användningsfall för att ändra standardbeteendet

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

#### Diagramuttryck och resultat

Översikt

I det här exemplet skapar vi dynamiska uttryck för dimensionen som refererar till en variabel, i stället för referenser till statiska värden.

I det här exemplet kommer du att:

* Lägg till en inline-tabell och läsa in data i appen.

* Skapa en variabel för att dynamiskt lagra ett värde.

* Skapa en tabell för att visualisera data och utföra beräkningar.

* Gör val i tabellen för att observera skillnaden i beteende.

Öppna Skriptredigeraren och lägg till följande laddningsskript till ett nytt delavsnitt.

Laddningsskriptet laddar en inline-tabell. Denna tabell innehåller ett datumfält och ett beräknat fält, Year, som härleds från rådatumen.

Laddningsskript

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

Skapande av variabel

Ladda data och öppna ett ark. Skapa en variabel med namnet vCutoffYear, och ge den följande definition: 2023

Tabellskapande

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:

* date

* Year

* amount

Lägg sedan till vart och ett av de följande uttrycken som dimensioner i tabellen:

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

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

Tabellen ska se ut på följande sätt.

Qlik SenseQlik Sense-tabell med exempel på resultat

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

Jämförelser, del 1: Beteende utan CalcDim()

I tabellen ovan är det ingen skillnad mellan de två kolumnerna med beräknad dimension.

I kolumnen if(Year &lt; $(vCutoffYear), 'Older', Year) i tabellen väljer du värdet 2023. Observera att i verktygsfältet för urval väljs värdet som ett värde från ett fält som heter =if(Year&lt;2023,'Older',Year).

Ändra sedan definitionen för variabeln vCutoffYear till 2024. Observera att även om urvalsfältet =if(Year&lt;2023,'Older',Year) är detsamma och behåller det valda värdet 2023, har datatabellen ändrats. Värdet 2023 har ändrats till värdet Older. Om du väljer Older i kolumnen if(Year &lt; $(vCutoffYear), 'Older', Year) kommer valet Older att göras i ett nytt fält: =if(Year&lt;2024,'Older',Year).

I huvudsak skapas ett nytt fält internt för varje värde i variabeln vCutoffYear. När man arbetar med samtidiga och föränderliga val är detta beteende kanske inte önskvärt och kan göra datatolkningen mer komplicerad.

Jämförelser, del 2: Beteende med CalcDim()

Nu när du har sett hur uttrycket beter sig när det inte är inbäddat i CalcDim() raderar du alla urval i appen. Återställ variabeln vCutoffYear till värdet 2023.

I kolumnen =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) i tabellen väljer du värdet 2023. Observera att i verktygsfältet för urval väljs värdet som ett värde från det underliggande fältet Year.

Ändra sedan definitionen för variabeln vCutoffYear till 2024. Urvalsfältet Year är detsamma, det behåller det valda värdet 2023 och data i tabellen har förändrats, som syntes utan CalcDim(). Men om du nu väljer Older i kolumnen =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) kommer värdet 2024 att väljas i Year.

Alla val du gör i en beräknad dimension som är inbäddad i CalcDim() kommer att återspeglas som val i de underliggande fälten som refereras från den ursprungliga datamodellen. Detta kan förenkla tolkningen av data och förhindrar att röriga, komplexa uttryck visas i verktygsfältet för urval när användarna tar del av analysinnehållet.

## Mer information

* [Beräknade fält](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

* [Beräknade dimensioner](https://help.qlik.com/sv-SE/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)