# CalcDim - funzione per grafici

Quando si utilizza in un'espressione di dimensione, CalcDim() sovrascrive l'interpretazione automatica del motore su come gestire internamente l'espressione. Nello specifico, la funzione impedisce che venga creato un nuovo campo interno nel modello dati. Invece, le selezioni effettuate nell'applicazione vengono considerate come selezioni nei campi applicabili dal modello dati originale.

Questa funzione non può essere utilizzata nello script di caricamento. Inoltre, una best practice per le prestazioni del sistema è caricare i campi utilizzati nella dimensione calcolata come campi logici tramite lo script di caricamento quando possibile. CalcDim() offre un modo per controllare il comportamento del motore in scenari in cui il caricamento del campo calcolato dallo script non è possibile.

In Qlik Sense, l'espressione della dimensione è per impostazione predefinita realizzata come un campo al volo, ovvero come un campo effettivo, visibile nella barra di selezione corrente, costruito su richiesta. Le selezioni vengono applicate e inferite a questo campo, in modo simile a qualsiasi campo logico dallo script.

Un'espressione racchiusa in CalcDim() si comporterà allo stesso modo in cui funzionano tutte le espressioni di dimensione calcolata in QlikView, ovvero una mappatura ad hoc dei valori calcolati ai valori del campo di origine sottostante. Tutti i calcoli field-on-the-fly possono essere trasferiti in dimensioni calcolate utilizzando la funzione CalcDim() poiché la dimensione calcolata deve soddisfare meno requisiti basati sul modello dati rispetto al corrispondente calcolo field-on-the-fly. Questa trasformazione può essere desiderabile per garantire un comportamento simile per tutte le dimensioni calcolate, laddove il modello dati potrebbe impedire l'uso di un calcolo field-on-the-fly in alcuni casi, ma non in altri.

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

CalcDim(expr)

Tipo di dati restituiti: Duale

Argomenti

| Argomento | Descrizione |
| --- | --- |
| expr | Un'espressione utilizzata come dimensione o come segmento all'interno di un'espressione di dimensione. |

## Casi di utilizzo

CalcDim() è utile quando è necessario un maggiore controllo su come il motore Qlik gestisce i campi richiamati in un'espressione di dimensione.

Per impostazione predefinita, Qlik Sense decide automaticamente se creare e fare riferimento a campi interni nel modello dati quando si utilizza un'espressione di dimensione personalizzata. Qlik Sense crea e utilizza questi campi interni ogni volta che è possibile. Quando non è possibile, l'espressione viene gestita con riferimento ai campi del modello dati esistenti su cui si basa.

A seconda del caso d'uso, questa elaborazione automatica potrebbe non essere sempre desiderabile. Ad esempio, se si sta utilizzando una variabile in un'espressione di dimensione, la creazione automatica di nuovi campi può diventare problematica. In questo caso, utilizzare CalcDim() per forzare la gestione dell'espressione senza questo metodo.

Di seguito sono riportati alcuni casi d'uso comuni:

* È stata eseguita la migrazione del contenuto QlikView in Qlik Sense e si desidera conservare il metodo di elaborazione QlikView per le dimensioni calcolate.

* Si desidera semplificare il comportamento di selezione nell'applicazione. Ad esempio, si preferisce mostrare le selezioni di campo come selezioni nei campi del modello dati originale, piuttosto che selezioni in nuovi campi.

* Il tuo caso d'uso richiede un'espressione ad hoc per coerenza e prestazioni. Ad esempio, se l'espressione della tua dimensione contiene parametri di visualizzazione dinamici controllabili dall'utente, come formattazione controllabile, valori di cut-off o periodi.

Esempi di funzioni

| Esempio | Risultato |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | Effettuare una selezione in una visualizzazione che utilizza questa dimensione verrà elaborato e visualizzato come una selezione nel valore del campo Year associato dal modello dati.<br><br>Al contrario, supponiamo che tu non racchiuda l'espressione in CalcDim(). In questo caso, apparirebbe così:<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>Effettuare una selezione nell'espressione precedente verrebbe elaborata e visualizzata come una selezione nel campo interno =if(Year &lt; 2023, 'Older', Year), che non è presente nel modello dati. |

## Esempio 1 – Confronto semplice

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

#### Espressione del grafico e risultati

Panoramica

In questo esempio, si procederà come segue:

* Aggiungere una tabella inline e caricare i dati in un'applicazione.

* Crea una tabella per visualizzare i dati ed eseguire calcoli.

* Effettua selezioni nella tabella per osservare la differenza di comportamento.

Aprire Editor caricamento dati, quindi aggiungere il seguente script di caricamento in una nuova sezione.

Lo script di caricamento carica una tabella inline. Questa tabella include due campi: un campo per il nome dell'individuo e un campo per il cognome dell'individuo.

Script di caricamento

```
Names:

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

Creazione tabella

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

* FirstName

* LastName

Successivamente, aggiungi ciascuna delle seguenti espressioni come dimensioni nella tabella:

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

La tabella dovrebbe apparire come segue.

Qlik SenseQlik Sense tabella con risultati di esempio

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

Confronto: Effettuare selezioni

Nella colonna =FirstName & ' ' & LastName della tabella, selezionare il valore JohnDoe. Si noti che nella barra degli strumenti di selezione, il valore è selezionato come valore da un campo denominato =FirstName' 'LastName.

Cancella la selezione.

Nella colonna =CalcDim(FirstName ' ' LastName) della tabella, selezionare il valore JohnDoe. Nella barra di selezione, il valore è selezionato come valori da due campi diversi: FirstName e LastName.

Queste due espressioni presentano le stesse informazioni: una concatenazione dei campi FirstName e LastName. La differenza è che senza CalcDim(), viene creato un campo sintetico per memorizzare il calcolo. Con CalcDim(), i campi originali dal modello dati vengono usati come base per la dimensione calcolata.

## Esempio 2 – Caso d'uso pratico per modificare il comportamento predefinito

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

#### Espressione del grafico e risultati

Panoramica

In questo esempio, creiamo espressioni di dimensione dinamiche che fanno riferimento a una variabile, anziché a valori statici.

In questo esempio, si procederà come segue:

* Aggiungere una tabella inline e caricare i dati nell'applicazione.

* Crea una variabile per archiviare dinamicamente un valore.

* Crea una tabella per visualizzare i dati ed eseguire calcoli.

* Effettua selezioni nella tabella per osservare la differenza di comportamento.

Aprire Editor caricamento dati, quindi aggiungere il seguente script di caricamento in una nuova sezione.

Lo script di caricamento carica una tabella inline. Questa tabella include un campo data e un campo calcolato, Year, che è derivato dalle date grezze.

Script di caricamento

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

Creazione di variabili

Caricare i dati e aprire un foglio. Crea una variabile denominata vCutoffYear e assegnale la seguente Definizione: 2023

Creazione tabella

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

* date

* Year

* amount

Successivamente, aggiungi ciascuna delle seguenti espressioni come dimensioni nella tabella:

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

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

La tabella dovrebbe apparire come segue.

Qlik SenseQlik Sense tabella con risultati di esempio

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

Confronti, parte 1: Comportamento senza CalcDim()

Nella tabella precedente, non vi è alcuna differenza tra le due colonne di dimensione calcolata.

Nella colonna if(Year $(vCutoffYear), 'Older', Year) della tabella, selezionare il valore 2023. Si noti che nella barra degli strumenti di selezione, il valore è selezionato come valore da un campo denominato =if(Year2023,'Older',Year).

Successivamente, modificare la Definizione della vCutoffYear variabile in 2024. Si noti che mentre il campo di selezione =if(Year2023,'Older',Year) è lo stesso e mantiene il valore selezionato 2023, i dati nella tabella sono cambiati. Il valore 2023 è cambiato nel valore Older. Se si seleziona Older nella if(Year $(vCutoffYear), 'Older', Year) colonna, la selezione Older viene effettuata in un nuovo campo: =if(Year2024,'Older',Year).

In sostanza, viene creato internamente un nuovo campo per ogni valore della vCutoffYear variabile. Quando si lavora con selezioni concorrenti e mutevoli, questo comportamento potrebbe non essere desiderabile e può aggiungere complessità all'interpretazione dei dati.

Confronti, parte 2: Comportamento con CalcDim()

Ora che hai visto il comportamento dell'espressione quando non è racchiusa in CalcDim(), cancella tutte le selezioni nell'applicazione. Reimposta la vCutoffYear variabile al valore 2023.

Nella colonna =CalcDim(if(Year $(vCutoffYear), 'Older', Year)) della tabella, selezionare il valore 2023. Nota che nella barra degli strumenti di selezione, il valore è selezionato come valore dal campo sottostante, Year.

Successivamente, modificare la Definizione della vCutoffYear variabile in 2024. Il campo di selezione Year è lo stesso, mantiene il valore selezionato 2023 e i dati nella tabella sono cambiati, come si vede senza CalcDim(). Tuttavia, se ora si seleziona Older nella colonna =CalcDim(if(Year $(vCutoffYear), 'Older', Year)), il valore 2024 viene selezionato in Year.

Tutte le selezioni effettuate in una dimensione calcolata racchiusa con CalcDim() verranno riflesse come selezioni nei campi sottostanti a cui si fa riferimento dal modello dati originale. Ciò può semplificare l'interpretazione dei dati e impedisce che espressioni complesse e disordinate appaiano nella barra degli strumenti di selezione quando gli utenti utilizzano il contenuto analitico.

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

* [Dimensioni calcolate](https://help.qlik.com/it-IT/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)