# 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 applikationen som urval i tillämpliga fält från den 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 dimensionuttrycket som standard som ett fält-i-farten – det vill säga som ett faktiskt fält, synligt i det aktuella urvalsfältet, byggt på begäran. Urval tillämpas och härleds till detta fält, liknande alla logiska fält från skriptet.

Ett uttryck som är omslutet av CalcDim() kommer att bete sig på samma sätt som alla beräknade dimensionuttryck fungerar i QlikView, vilket är en ad hoc-mappning av de beräknade värdena till de underliggande källfältvä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 omvandling kan vara önskvärd för att garantera ett liknande beteende för alla beräknade dimensioner där datamodellen i vissa fall kan förhindra användningen av en fält-i-farten-beräkning, men inte i andra.

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

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 fälten du anropar i ett dimension-uttryck.

Som standard bestämmer Qlik Sense automatiskt om interna fält ska skapas och refereras i datamodellen när du använder ett anpassat dimension-uttryck. Qlik Sense skapar och använder dessa interna fält närhelst 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 till exempel använder en variabel i ett dimension-uttryck kan den automatiska skapandet av nya fält bli problematiskt. I det här fallet använder du CalcDim() för att tvinga uttrycket att hanteras utan denna metod.

Här är några vanliga användningsfall:

* Du har migrerat QlikView-innehåll till Qlik Sense och du vill bevara QlikView-bearbetningsmetoden för beräknade dimensioner.

* Du vill förenkla urvalsbeteendet i din applikation. 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 dimensionuttryck innehåller användarkontrollerbara dynamiska visualiseringsparametrar, såsom kontrollerbar formatering, avskärningsvä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>Att göra ett val i ovanstående uttryck skulle bearbetas och visas som ett val i det interna fältet =if(Year &lt; 2023, 'Older', Year), vilket 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äs in data i en applikation.

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

Tabellskapande

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 följande uttryck 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 val

I kolumnen =FirstName & ' ' & LastName i tabellen väljer du värdet JohnDoe. 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 JohnDoe. I urvalsverktygsfältet 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äs in data i applikationen.

* 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 följande uttryck som dimensioner i tabellen:

* =if(Year $(vCutoffYear), 'Older', Year)

* =CalcDim(if(Year $(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 $(vCutoffYear), 'Older', Year) | =CalcDim(if(Year $(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 $(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(Year2023,'Older',Year).

Ändra sedan Definition av vCutoffYear variabeln till 2024. Observera att även om urvalsfältet =if(Year2023,'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 $(vCutoffYear), 'Older', Year), görs valet Older i ett nytt fält: =if(Year2024,'Older',Year).

I huvudsak skapas ett nytt fält internt för varje värde av vCutoffYear variabeln. 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 uttryckets beteende när det inte är omslutet av CalcDim(), radera alla urval i applikationen. Återställ variabeln vCutoffYear till värdet 2023.

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

Ändra sedan Definition av vCutoffYear variabeln 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 =CalcDim(if(Year $(vCutoffYear), 'Older', Year)) kolumnen, väljs värdet 2024 i Year.

Alla val du gör i en beräknad dimension omsluten av CalcDim() kommer att återspeglas som val i de underliggande fälten som refereras från den ursprungliga datamodellen. Detta kan förenkla datatolkningen och förhindrar att röriga, komplexa uttryck visas i urvalsstapeln när användare konsumerar analysinnehållet.

* [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/May2026/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)