# CalcDim - 차트 함수

차원 표현식에 사용되는 경우 CalcDim()은 내부적으로 표현식을 처리하는 방법에 대한 엔진의 자동 해석을 재정의합니다. 특히 이 함수는 데이터 모델에 새로운 내부 필드가 만들어지는 것을 방지합니다. 대신, 앱에서의 선택 항목은 원본 데이터 모델의 해당 필드에서 선택한 항목으로 처리됩니다.

이 함수는 로드 스크립트에서 사용할 수 없습니다. 또한, 시스템 성능을 위한 모범 사례는 가능한 경우 로드 스크립트를 통해 계산 차원에서 사용되는 필드를 논리 필드로 로드하는 것입니다. CalcDim()은 스크립트에서 계산 필드를 로드하는 것이 불가능한 시나리오에서 엔진 동작을 제어하는 방법을 제공합니다.

Qlik Sense에서 차원 표현식은 기본적으로 즉석 필드로 실현됩니다. 즉, 현재 선택 막대에 표시되는 실제 필드로 요구에 따라 구축됩니다. 이 필드에는 스크립트의 모든 논리 필드와 마찬가지로 선택 항목이 적용되고 추론됩니다.

CalcDim()으로 래핑된 표현식은 QlikView에서 작동하는 모든 계산 차원 표현식과 동일한 방식으로 동작합니다. 즉, 계산된 값을 기본 소스 필드 값에 임시로 매핑하는 것입니다. 계산 차원은 해당 필드 즉시 계산보다 데이터 모델에 따라 더 적은 요구 사항을 충족해야 하므로 CalcDim() 함수를 사용하여 모든 필드 즉시 계산을 계산 차원으로 전송할 수 있습니다. 이러한 변환은 모든 계산 차원에 대해 유사한 동작을 보장하기 위해 바람직할 수 있습니다. 데이터 모델이 어떤 경우에는 필드 즉시 계산을 사용하지 못하게 하지만 다른 경우에는 그렇지 않을 수 있기 때문입니다.

[계산 필드](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

구문:

CalcDim(expr)

반환 데이터 유형: 이중

인수

| 인수 | 설명 |
| --- | --- |
| expr | 차원 또는 차원 표현식 내의 세그먼트로 사용되는 표현식. |

## 사용 시기

CalcDim()은 차원 표현식에서 호출하는 필드를 Qlik 엔진이 처리하는 방식을 더 많이 제어해야 할 때 유용합니다.

기본적으로 Qlik Sense는 사용자 지정 차원 표현식을 사용할 때 데이터 모델에서 내부 필드를 만들고 참조할지 여부를 자동으로 결정합니다. Qlik Sense는 가능할 때마다 이러한 내부 필드를 만들고 사용합니다. 가능하지 않은 경우, 표현식은 해당 표현식이 의존하는 기존 데이터 모델 필드를 참조하여 처리됩니다.

사용 사례에 따라서는 이러한 자동 처리가 항상 바람직하지 않을 수도 있습니다. 예를 들어, 차원 표현식에서 변수를 사용하는 경우 새 필드가 자동으로 만들어지면 문제가 될 수 있습니다. 이 경우 CalcDim()을 사용하여 이 메서드 없이 강제로 표현식을 처리합니다.

일반적인 사용 사례는 다음과 같습니다.

* QlikView 콘텐츠를 Qlik Sense로 마이그레이션했으며 계산 차원에 대한 QlikView 처리 방법을 보존하려고 합니다.

* 앱에서 선택 동작을 간소화하려고 합니다. 예를 들어, 필드 선택 항목을 새 필드의 선택 항목 대신 원래 데이터 모델의 필드의 선택 항목으로 표시하는 것을 선호할 수 있습니다.

* 사용자의 사용 사례에는 일관성과 성능을 위해 임시 표현식이 필요합니다. 예를 들어, 차원 표현식에 제어 가능한 서식, 차단 값 또는 기간과 같은 사용자가 제어할 수 있는 동적 시각화 매개 변수가 포함되어 있는 경우입니다.

함수 예

| 예제 | 결과 |
| --- | --- |
| `=CalcDim(if(Year < 2023, 'Older', Year))` | 이 차원을 사용하는 시각화에서 선택을 하면 해당 선택 항목이 처리되어 데이터 모델의 연관된 Year 필드 값에 표시됩니다.<br><br>반대로, 표현식을 CalcDim()으로 래핑하지 않는다고 가정해 보겠습니다. 이 경우에는 다음과 같습니다.<br><br>`=if(Year < 2023, 'Older', Year)`<br><br>위 표현식에서 선택을 하면 데이터 모델에 없는 내부 필드 =if(Year &lt; 2023, 'Older', Year)에서 선택으로 처리되어 표시됩니다. |

## 예 1 – 간단한 비교

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

#### 차트 표현식 및 결과

개요

이 예에서는 다음을 수행합니다.

* 인라인 테이블을 추가하고 앱에 데이터를 로드합니다.

* 데이터를 시각화하고 계산을 수행하기 위해 테이블을 만듭니다.

* 테이블에서 선택을 하여 동작의 차이를 관찰합니다.

데이터 로드 편집기를 열고 다음 로드 스크립트를 새 섹션에 추가합니다.

로드 스크립트는 인라인 테이블을 로드합니다. 이 테이블에는 개인의 이름을 위한 필드와 개인의 성을 위한 필드, 이렇게 두 개의 필드가 포함되어 있습니다.

로드 스크립트

```
Names:

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

테이블 만들기

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* FirstName

* LastName

다음으로, 다음 각 표현식을 테이블의 차원으로 추가합니다.

* =FirstName & ' ' & LastName

* =CalcDim(FirstName & ' ' & LastName)

테이블은 다음과 같아야 합니다.

Qlik SenseQlik Sense 결과 예가 있는 테이블

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

비교: 선택

테이블의 =FirstName & ' ' & LastName 열에서 John Doe 값을 선택합니다. 선택 도구 모음에서 값이 =FirstName&' '&LastName이라는 필드의 값으로 선택되어 있는 것을 확인합니다.

선택을 해제합니다.

테이블의 =CalcDim(FirstName & ' ' & LastName) 열에서 John Doe 값을 선택합니다. 선택 도구 모음에서 값은 FirstName 및 LastName의 두 개의 다른 필드에서 값으로 선택됩니다.

이 두 표현식은 FirstName 및 LastName 필드의 결합이라는 동일한 정보를 나타냅니다. 차이점은 CalcDim()이 없으면 계산을 저장하기 위해 합성 필드가 만들어진다는 것입니다. CalcDim()을 사용하면 데이터 모델의 원래 필드가 계산 차원의 기준으로 사용됩니다.

## 예 2 – 기본 동작을 수정하는 실제 사용 사례

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

#### 차트 표현식 및 결과

개요

이 예에서는 정적 값에 대한 참조가 아닌 변수를 참조하는 동적 차원 표현식을 만듭니다.

이 예에서는 다음을 수행합니다.

* 인라인 테이블을 추가하고 앱에 데이터를 로드합니다.

* 동적으로 값을 저장하기 위한 변수를 만듭니다.

* 데이터를 시각화하고 계산을 수행하기 위해 테이블을 만듭니다.

* 테이블에서 선택을 하여 동작의 차이를 관찰합니다.

데이터 로드 편집기를 열고 다음 로드 스크립트를 새 섹션에 추가합니다.

로드 스크립트는 인라인 테이블을 로드합니다. 이 테이블에는 날짜 필드와 원시 날짜에서 파생된 계산 필드 Year가 포함되어 있습니다.

로드 스크립트

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

변수 만들기

데이터를 로드하고 시트를 엽니다. vCutoffYear라는 이름의 변수를 만들고 다음 정의를 지정합니다. 2023

테이블 만들기

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* date

* Year

* amount

다음으로, 다음 각 표현식을 테이블의 차원으로 추가합니다.

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

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

테이블은 다음과 같아야 합니다.

Qlik SenseQlik Sense 결과 예가 있는 테이블

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

비교, 1부: CalcDim()을 사용하지 않는 동작

위 테이블에서 두 개의 계산 차원 열 사이에는 차이가 없습니다.

테이블의 if(Year &lt; $(vCutoffYear), 'Older', Year) 열에서 2023 값을 선택합니다. 선택 도구 모음에서 값이 =if(Year&lt;2023,'Older',Year)이라는 필드의 값으로 선택되어 있는 것을 확인합니다.

다음으로, vCutoffYear 변수의 정의를 2024로 변경합니다. 선택 필드 =if(Year&lt;2023,'Older',Year)가 동일하고 선택한 값 2023을 유지하는 반면, 테이블의 데이터는 변경되었습니다. 값 2023이 값 Older로 변경되었습니다. if(Year &lt; $(vCutoffYear), 'Older', Year) 열에서 Older을 선택하면 새 필드에서 Older이 선택됩니다. =if(Year&lt;2024,'Older',Year)의 앱 소스 예시를 참조하십시오.

본질적으로 vCutoffYear 변수의 각 값에 대해 새 필드가 내부적으로 만들어집니다. 동시 선택과 변경 선택을 사용할 때 이러한 동작은 바람직하지 않을 수 있으며 데이터 해석이 더 복잡해질 수 있습니다.

비교, 2부: CalcDim()을 사용한 동작

CalcDim()로 래핑되지 않았을 때 표현식의 동작을 확인했으니, 이제 앱에서 모든 선택 항목을 지웁니다. vCutoffYear 변수를 2023 값으로 다시 설정합니다.

테이블의 =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) 열에서 2023 값을 선택합니다. 선택 도구 모음에서 값이 기본 필드 Year의 값으로 선택되어 있는 것을 확인합니다.

다음으로, vCutoffYear 변수의 정의를 2024로 변경합니다. 선택 필드 Year는 동일하며, 선택된 값 2023을 유지하고, CalcDim() 없이 볼 수 있듯이 테이블의 데이터가 변경되었습니다. 하지만 이제 =CalcDim(if(Year &lt; $(vCutoffYear), 'Older', Year)) 열에서 Older를 선택하면 Year에서 2024 값이 선택됩니다.

CalcDim()로 래핑된 계산 차원에서 선택한 모든 내용은 원래 데이터 모델에서 참조되는 기본 필드의 선택 항목으로 반영됩니다. 이를 통해 데이터 해석이 간소화되고 사용자가 분석 콘텐츠를 사용할 때 선택 도구 모음에 산만하고 지저분한 표현식이 나타나는 것을 방지할 수 있습니다.

## 자세한 정보

* [계산 필드](https://community.qlik.com/t5/Design/Calculated-Fields/ba-p/1694383)

* [계산 차원](https://help.qlik.com/ko-KR/sense/November2025/Subsystems/Hub/Content/Sense_Hub/Dimensions/calculated-dimensions.htm)