# CalcDim - função de gráfico

Quando usado em uma expressão de dimensão, CalcDim() substitui a interpretação automática do mecanismo sobre como lidar internamente com a expressão. Especificamente, a função impede a criação de um novo campo interno no modelo de dados. Em vez disso, as seleções feitas no aplicativo são tratadas como seleções em campos aplicáveis do modelo de dados original.

Essa função não pode ser usada no script de carregamento. Além disso, uma prática recomendada para o desempenho do sistema é carregar os campos usados na dimensão calculada como campos lógicos por meio do script de carregamento, quando possível. CalcDim() oferece uma maneira de controlar o comportamento do mecanismo em cenários em que não é possível carregar o campo calculado a partir do script.

No Qlik Sense, a expressão de dimensão é realizada por padrão como um campo instantâneo — ou seja, como um campo real, aparente na barra de seleção atual, criado sob demanda. As seleções são aplicadas e inferidas a este campo, semelhante a qualquer campo lógico do script.

Uma expressão envolvida em CalcDim() se comportará da mesma forma que todas as expressões de dimensão calculada funcionam no QlikView, que é um mapeamento ad-hoc dos valores calculados para os valores do campo de origem subjacente. Todos os cálculos de campo em tempo real podem ser transferidos para dimensões calculadas usando a função CalcDim(), já que a dimensão calculada precisa atender a menos requisitos com base no modelo de dados do que o cálculo de campo em tempo real correspondente. Essa transformação pode ser desejável para garantir um comportamento semelhante para todas as dimensões calculadas, onde o modelo de dados pode impedir o uso de um cálculo de campo em tempo real em alguns casos, mas não em outros.

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

Sintaxe:

CalcDim(expr)

Tipo de dados de retorno: dual

Argumentos

| Argumento | Descrição |
| --- | --- |
| expr | Uma expressão sendo usada como uma dimensão ou como um segmento em uma expressão de dimensão. |

## Quando usar

CalcDim() É útil quando você precisa de mais controle sobre como o mecanismo Qlik manipula os campos que você invoca em uma expressão de dimensão.

Por padrão, o Qlik Sense decide automaticamente se deve criar e referenciar campos internos no modelo de dados quando você usa uma expressão de dimensão personalizada. O Qlik Sense cria e usa esses campos internos sempre que possível. Quando isso não for possível, a expressão será tratada com referência aos campos existentes do modelo de dados dos quais ela depende.

Dependendo do seu caso de uso, esse processamento automático pode não ser sempre desejável. Por exemplo, se você estiver usando uma variável em uma expressão de dimensão, a criação automática de novos campos pode se tornar problemática. Nesse caso, use CalcDim() para forçar a expressão a ser tratada sem esse método.

Aqui estão alguns casos de uso comuns:

* Você migrou o conteúdo do QlikView para o Qlik Sense e deseja preservar o método de processamento do QlikView para dimensões calculadas.

* Você deseja simplificar o comportamento de seleção no seu aplicativo. Por exemplo, você prefere mostrar seleções de campos como seleções em campos do modelo de dados original, em vez de seleções em novos campos.

* Seu caso de uso requer uma expressão ad hoc para consistência e desempenho. Por exemplo, se sua expressão de dimensão contiver parâmetros de visualização dinâmica controláveis pelo usuário, como formatação controlável, valores de corte ou períodos.

Exemplos de funções

| Exemplo | Resultado |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | Fazer uma seleção em uma visualização que usa essa dimensão será processado e exibido como uma seleção no valor de campo Year associado do modelo de dados.<br><br>Por outro lado, digamos que você não envolva a expressão em CalcDim(). Nesse caso, seria assim:<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>Fazer uma seleção na expressão acima seria processado e exibido como uma seleção no campo interno =if(Year &lt; 2023, 'Older', Year), que não está no modelo de dados. |

## Exemplo 1 – Comparação simples

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

#### Expressões e resultados do gráfico

Visão geral

Neste exemplo, você irá:

* Adicionar uma tabela inline e carregar dados em um aplicativo.

* Criar uma tabela para visualizar os dados e realizar cálculos.

* Fazer seleções na tabela para observar a diferença de comportamento.

Abra o Editor de carregamento de dados e adicione o script de carregamento a seguir a uma nova seção.

O script de carregamento carrega uma tabela inline. Essa tabela inclui dois campos: um campo para o primeiro nome do indivíduo e outro campo para o sobrenome do indivíduo.

Script de carregamento

```
Names:

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

Criação de tabela

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* FirstName

* LastName

Em seguida, adicione cada uma das expressões a seguir como dimensões na tabela:

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

A tabela deve se parecer com a seguinte.

Tabela do Qlik SenseQlik Sense com exemplos 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 |

Comparação: Fazendo seleções

Na coluna =FirstName & ' ' & LastName da tabela, selecione o valor John Doe. Observe que, na barra de ferramentas de seleção, o valor é selecionado como um valor de um campo chamado =FirstName&' '&LastName.

Limpe a seleção.

Na coluna =CalcDim(FirstName & ' ' & LastName) da tabela, selecione o valor John Doe. Na barra de ferramentas de seleção, o valor é selecionado como valores de dois campos diferentes: FirstName e LastName.

Essas duas expressões apresentam as mesmas informações: uma concatenação dos campos FirstName e LastName. A diferença é que, sem CalcDim(), um campo sintético é criado para armazenar o cálculo. Com CalcDim(), os campos originais do modelo de dados são usados como base para a dimensão calculada.

## Exemplo 2 – Caso de uso prático para modificar o comportamento padrão

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

#### Expressões e resultados do gráfico

Visão geral

Neste exemplo, criamos expressões de dimensão dinâmica com referência a uma variável, em vez de referências a valores estáticos.

Neste exemplo, você irá:

* Adicionar uma tabela inline e carregue os dados em um aplicativo.

* Criar uma variável para armazenar dinamicamente um valor.

* Criar uma tabela para visualizar os dados e realizar cálculos.

* Fazer seleções na tabela para observar a diferença de comportamento.

Abra o Editor de carregamento de dados e adicione o script de carregamento a seguir a uma nova seção.

O script de carregamento carrega uma tabela inline. Essa tabela inclui um campo de data e um campo calculado, Year, que é derivado das datas brutas.

Script de carregamento

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

Criação de variável

Carregue os dados e abra uma pasta. Crie uma variável chamada vCutoffYear e dê a ela a seguinte Definição: 2023

Criação de tabela

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* date

* Year

* amount

Em seguida, adicione cada uma das expressões a seguir como dimensões na tabela:

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

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

A tabela deve se parecer com a seguinte.

Tabela do Qlik SenseQlik Sense com exemplos 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 |

Comparações, parte 1: Comportamento sem CalcDim()

Na tabela acima, não há diferença entre as duas colunas de dimensões calculadas.

Na coluna if(Year &lt; $(vCutoffYear), 'Older', Year) da tabela, selecione o valor 2023. Observe que, na barra de ferramentas de seleção, o valor é selecionado como um valor de um campo chamado =if(Year&lt;2023,'Older',Year).

Em seguida, altere a Definição da variável vCutoffYear para 2024. Observe que, embora o campo de seleção =if(Year&lt;2023,'Older',Year) seja o mesmo e mantenha o valor 2023 selecionado, os dados na tabela foram alterados. O valor 2023 foi alterado para Older. Se você selecionar Older na coluna if(Year &lt; $(vCutoffYear), 'Older', Year), a seleção de Older será feita em um novo campo: =if(Year&lt;2024,'Older',Year).

Basicamente, um novo campo é criado internamente para cada valor da variável vCutoffYear. Ao trabalhar com seleções simultâneas e variáveis, esse comportamento pode não ser desejável e pode adicionar complexidade à interpretação de dados.

Comparações, parte 2: Comportamento com CalcDim()

Agora que você já viu o comportamento da expressão quando não está envolvida em CalcDim(), limpe todas as seleções no aplicativo. Redefina a variável vCutoffYear para o valor 2023.

Na coluna =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) da tabela, selecione o valor 2023. Observe que na barra de ferramentas de seleção, o valor é selecionado como um valor do campo subjacente: Year.

Em seguida, altere a Definição da variável vCutoffYear para 2024. O campo de seleção Year é o mesmo, ele mantém o valor selecionado 2023, e os dados na tabela foram alterados, como visto sem CalcDim(). No entanto, se você selecionar Older na coluna =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)), o valor 2024 será selecionado em Year.

Todas as seleções que você fizer em uma dimensão calculada com CalcDim() serão refletidas como seleções nos campos subjacentes referenciados no modelo de dados original. Isso pode simplificar a interpretação dos dados e evitar que expressões complexas e desordenadas apareçam na barra de ferramentas de seleção quando os usuários consumirem o conteúdo analítico.

## Saiba mais

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

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