# CalcDim - función de gráfico

Cuando se utiliza en una expresión de dimensión, CalcDim() anula la interpretación automática del motor sobre cómo manejar internamente la expresión. Específicamente, la función evita que se cree un nuevo campo interno en el modelo de datos. En su lugar, las selecciones realizadas en la app se tratan como selecciones en los campos aplicables del modelo de datos original.

Esta función no puede utilizarse en el script de carga. Además, una práctica recomendada para el rendimiento del sistema es cargar los campos que se utilizan en la dimensión calculada como campos lógicos a través del script de carga siempre que sea posible. CalcDim() ofrece una forma de controlar el comportamiento del motor en aquellos casos en los que no es posible cargar el campo calculado desde el script.

En Qlik Sense, la expresión de dimensión se realiza por defecto como un campo sobre la marcha, es decir, como un campo real, aparente en la barra de selección actual, creado bajo demanda. Las selecciones se aplican e infieren a este campo, de forma similar a cualquier campo lógico del script.

Una expresión incluida en CalcDim() se comportará de la misma manera que todas las expresiones de dimensión calculada funcionan en QlikView, que es una asociación ad-hoc de los valores calculados a los valores del campo fuente subyacente. Todos los cálculos de campo sobre la marcha pueden transferirse a dimensiones calculadas utilizando la función CalcDim(), ya que la dimensión calculada tiene que cumplir menos requisitos basados en el modelo de datos que el correspondiente cálculo de campo sobre la marcha. Esta transformación puede ser deseable para garantizar un comportamiento similar para todas las dimensiones calculadas cuando el modelo de datos pueda impedir el uso de un cálculo de campo sobre la marcha en algunos casos, pero no en otros.

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

Sintaxis:

CalcDim(expr)

Tipo de datos que devuelve: dual

Argumentos

| Argumento | Descripción |
| --- | --- |
| expr | Una expresión que se utiliza como dimensión, o como segmento dentro de una expresión de dimensión. |

## Cuándo se utiliza

CalcDim() resulta útil cuando necesita un mayor control sobre la forma en que el motor Qlik gestiona los campos que invoca en una expresión de dimensión.

De manera predeterminada, Qlik Sense decide automáticamente si crea y referencia campos internos en el modelo de datos cuando utiliza una expresión de dimensión personalizada. Qlik Sense crea y utiliza estos campos internos siempre que sea posible. Cuando no es posible, la expresión se trata con referencia a los campos existentes en el modelo de datos en los que se basa.

Dependiendo de su caso de uso, este procesamiento automático puede no ser siempre lo más deseable. Por ejemplo, si utiliza una variable en una expresión de dimensión, la creación automática de nuevos campos puede resultar problemática. En ese caso, utilice CalcDim() para obligar a que la expresión se gestione sin usar este método.

He aquí algunos casos de uso común:

* Ha migrado el contenido de QlikView a Qlik Sense y desea conservar el método de procesamiento de QlikView para las dimensiones calculadas.

* Desea simplificar el comportamiento de selección en su app. Por ejemplo, prefiere mostrar las selecciones de campos como selecciones en campos del modelo de datos original, en lugar de selecciones en campos nuevos.

* Su caso de uso requiere una expresión ad hoc por coherencia y rendimiento. Por ejemplo, si su expresión de dimensión contiene parámetros de visualización dinámicos controlables por el usuario, como formato, valores de corte o períodos controlables.

Ejemplos de funciones

| Ejemplo | Resultado |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | Realizar una selección en una visualización que utilice esta dimensión se procesará y mostrará como una selección en el valor del campo Year asociado del modelo de datos.<br><br>Por el contrario, supongamos que no envuelve la expresión en CalcDim(). En este caso, tendría el siguiente aspecto:<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>Hacer una selección en la expresión anterior se procesaría y mostraría como una selección en el campo interno =if(Year &lt; 2023, 'Older', Year), que no está en el modelo de datos. |

## Ejemplo 1 - Comparación simple

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

#### Expresiones de gráfico y resultados

Vista general

En este ejemplo, haga lo siguiente:

* Añada una tabla inline y cargue datos en una app.

* Cree una tabla para visualizar los datos y realizar cálculos.

* Haga selecciones en la tabla para observar la diferencia de comportamiento.

Abra la página Editor de carga de datos y añada el siguiente script de carga a una nueva sección.

El script de carga carga una tabla inline. Esta tabla incluye dos campos: un campo para el nombre del individuo y un campo para el apellido del individuo.

Script de carga

```
Names:

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

Creación de tablas

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* FirstName

* LastName

A continuación, añada cada una de las siguientes expresiones como dimensiones en la tabla:

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

La tabla debería tener el siguiente aspecto.

Qlik SenseQlik Sense tabla con ejemplos de resultados

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

Comparación: hacer selecciones

En la columna =FirstName & ' ' & LastName de la tabla, seleccione el valor John Doe. Observe que en la barra de herramientas de selección, el valor se selecciona como valor de un campo denominado =FirstName&' '&LastName.

Borre la selección.

En la columna =CalcDim(FirstName & ' ' & LastName) de la tabla, seleccione el valor John Doe. En la barra de herramientas de selección, el valor se selecciona como valores de dos campos diferentes: FirstName y LastName.

Estas dos expresiones presentan la misma información: una concatenación de los campos FirstName y LastName. La diferencia es que sin CalcDim(), se crea un campo sintético para almacenar el cálculo. Con CalcDim(), los campos originales del modelo de datos se utilizan como base para la dimensión calculada.

## Ejemplo 2 - Caso práctico para modificar el comportamiento predeterminado

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

#### Expresiones de gráfico y resultados

Vista general

En este ejemplo, creamos expresiones de dimensión dinámicas que hacen referencia a una variable, en lugar de referencias a valores estáticos.

En este ejemplo, haga lo siguiente:

* Añada una tabla inline y cargue los datos en la app.

* Cree una variable para almacenar dinámicamente un valor.

* Cree una tabla para visualizar los datos y realizar cálculos.

* Haga selecciones en la tabla para observar la diferencia de comportamiento.

Abra la página Editor de carga de datos y añada el siguiente script de carga a una nueva sección.

El script de carga carga una tabla inline. Esta tabla incluye un campo fecha y un campo calculado, Year, que se deriva de las fechas brutas.

Script de carga

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

Creación de variables

Cargue los datos y abra una hoja. Cree una variable denominada vCutoffYear y escriba la siguiente Definición: 2023

Creación de tablas

Cargue los datos y abra una hoja. Cree una nueva tabla y agregue estos campos como dimensiones:

* date

* Year

* amount

A continuación, añada cada una de las siguientes expresiones como dimensiones en la tabla:

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

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

La tabla debería tener el siguiente aspecto.

Qlik SenseQlik Sense tabla con ejemplos de resultados

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

Comparaciones, parte 1: Comportamiento sin CalcDim()

En la tabla anterior, no hay diferencia entre las dos columnas de dimensión calculada.

En la columna if(Year &lt; $(vCutoffYear), 'Older', Year) de la tabla, seleccione el valor 2023. Observe que en la barra de herramientas de selección, el valor se selecciona como valor de un campo denominado =if(Year&lt;2023,'Older',Year).

A continuación, cambie la definición de la variable vCutoffYear a 2024. Observe que aunque el campo de selección =if(Year&lt;2023,'Older',Year) es el mismo y conserva el valor seleccionado 2023, los datos de la tabla han cambiado. El valor 2023 ha cambiado al valor Older. Si selecciona Older en la columna if(Year &lt; $(vCutoffYear), 'Older', Year), la selección Older se realiza en un nuevo campo: =if(Year&lt;2024,'Older',Year).

En esencia, se crea internamente un nuevo campo para cada valor de la variable vCutoffYear. Cuando se trabaja con selecciones concurrentes y cambiantes, este comportamiento puede no ser deseable y añadir complejidad a la interpretación de los datos.

Comparaciones, parte 2: Comportamiento con CalcDim()

Ahora que ha visto el comportamiento de la expresión cuando no está incluida en CalcDim(), borre todas las selecciones de la app. Restablezca la variable vCutoffYear al valor 2023.

En la columna =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) de la tabla, seleccione el valor 2023. Observe que en la barra de herramientas de selección, el valor se selecciona como un valor del campo subyacente, Year.

A continuación, cambie la definición de la variable vCutoffYear a 2024. El campo de selección Year es el mismo, conserva el valor seleccionado 2023, y los datos de la tabla han cambiado, como se ve sin CalcDim(). Sin embargo, si ahora selecciona Older en la columna =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)), el valor 2024 se selecciona en Year.

Todas las selecciones que realice en una dimensión calculada incluida mediante CalcDim() se reflejarán como selecciones en los campos subyacentes referenciados desde el modelo de datos original. Esto puede simplificar la interpretación de los datos y evita que aparezcan expresiones desordenadas y complejas en la barra de herramientas de selección cuando los usuarios consumen el contenido analítico.

## Más información

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

* [Dimensiones calculadas](https://help.qlik.com/es-ES/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)