# XNPV - 스크립트 함수

XNPV()은 pmt 및 date에서 숫자 쌍으로 표현된 현금 흐름 일정(반드시 주기적일 필요는 없음)에 대해 집계된 순 현재 가치를 반환합니다. 모든 납입금은 1년 365일을 기준으로 할인됩니다.

구문:

XNPV(discount\_rate, pmt, date)

반환 데이터 유형: 숫자

정보 메모기본적으로 결과는 통화로 서식이 지정됩니다.

XNPV를 계산하는 공식은 다음과 같습니다.

XNPV 집계 공식

XNPV 집계 공식

XNPV 집계 공식 ![XNPV 스크립트 함수에 대한 수식 이미지.](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Resources/Images/scripting-functions-xnpv-formula.png)

설명:

* `P``i` = 단일 기간 `i` 동안의 순 현금 유입-유출

* `d``1`= 첫 번째 지불 날짜

* `d``i` = `i`번째 지불 날짜

* `rate` = 할인율

순 현재 가치(NPV)는 할인율이 주어진 미래 현금 흐름 스트림의 현재 총 가치를 계산하는 데 사용됩니다. XNPV를 계산하려면 해당 날짜의 미래 현금 흐름을 추정해야 합니다. 이후 매 결제 시 결제일을 기준으로 복리할인율을 적용합니다.

일련의 지불에 대해 XNPV 집계를 수행하는 것은 해당 지불에 대해 Sum 집계를 수행하는 것과 유사합니다. 차이점은 각 금액이 선택한 할인율(이자율과 유사)과 지불이 얼마나 먼 미래에 있는지에 따라 수정(또는 "할인")된다는 것입니다. discount\_rate 매개 변수를 0으로 설정한 상태에서 XNPV를 수행하면 XNPV가 Sum 연산과 동일해집니다(지불액은 합계되기 전에 수정되지 않음). 일반적으로 discount\_rate가 0에 가까울수록 XNPV 결과는 Sum 집계의 결과와 유사합니다.

인수

| 인수 | 설명 |
| --- | --- |
| discount\_rate | discount\_rate는 결제 금액을 할인해야 하는 연간 할인율입니다.<br><br>값이 0.1이면 10% 할인율을 나타냅니다. |
| pmt | 지불. date에 제공된 지불 일정에 해당하는 현금 흐름을 포함하는 표현식 또는 필드. 양수 값은 유입으로 가정하고 음수 값은 유출로 가정합니다.<br><br>정보 메모XNPV()는 항상 시작 날짜에 발생하므로 초기 현금 흐름을 할인하지 않습니다. 후속 지불은 1년 365일을 기준으로 할인됩니다. 이는 첫 번째 결제도 할인되는 NPV()와 다릅니다. |
| date | pmt에 지정된 현금 흐름 지급에 해당하는 날짜의 일정을 포함하는 표현식 또는 필드입니다. 첫 번째 값은 미래 현금 흐름에 대한 시간 오프셋을 계산하기 위한 시작 날짜로 사용됩니다. |

이 함수를 사용할 때 다음 제한 사항이 적용됩니다.

* 데이터 쌍의 한쪽 또는 양쪽에 텍스트 값, NULL 값, 누락된 값이 있으면 전체 데이터 쌍이 무시됩니다.

## 사용 시기

* `XNPV()`는 투자 기회의 순 현재 가치(NPV)를 계산하기 위한 재무 모델링에 사용됩니다.

* 모든 유형의 재무 모델의 경우 XNPV는 정밀도가 더 높으므로 NPV보다 선호됩니다.

## 국가별 설정

달리 지정하지 않는 한 이 항목의 예에서는 다음 날짜 형식을 사용합니다. YYYY/MM/DD. 날짜 형식은 데이터 로드 스크립트의 `SET DateFormat` 문에 지정됩니다. 기본 날짜 형식은 지역 설정 및 기타 요인으로 인해 시스템에서 다를 수 있습니다. 아래 예의 형식을 요구 사항에 맞게 변경할 수 있습니다. 또는 이러한 예와 일치하도록 로드 스크립트의 형식을 변경할 수 있습니다.

앱의 기본 국가별 설정은 Qlik Sense가 설치된 컴퓨터 또는 서버의 국가별 시스템 설정을 기반으로 합니다. 액세스하는 Qlik Sense 서버가 스웨덴으로 설정된 경우 데이터 로드 편집기는 날짜, 시간 및 통화에 대해 스웨덴 지역 설정을 사용합니다. 이러한 국가별 형식 설정은 Qlik Sense 사용자 인터페이스에 표시되는 언어와 관련이 없습니다. Qlik Sense는 사용 중인 브라우저와 동일한 언어로 표시됩니다.

## 예 1 – 단일 지불(스크립트)

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

#### 로드 스크립트 및 결과

개요

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

로드 스크립트에는 다음이 포함됩니다.

* `CashFlow`라는 테이블에 있는 한 프로젝트의 데이터 집합 및 1년 동안의 현금 흐름. 계산의 초기 날짜는 2022년 7월 1일로 설정되고 순 현금 흐름은 0입니다. 1년 후 $1000의 현금 흐름이 발생합니다.

* `XNPV`라는 테이블에서 프로젝트의 `XNPV` 필드를 계산하는 데 사용되는 `CashFlow` 테이블의 Resident LOAD.

* XNPV 계산에 사용되는 하드 코딩된 할인율 10%(0.1).

* `Group By` 문은 프로젝트에 대한 모든 지불을 그룹화하는 데 사용됩니다.

로드 스크립트

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

결과

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

* `PrjId`

* `XNPV`

결과 테이블

| PrjId | XNPV |
| --- | --- |
| 1 | $909.09 |

공식에 따르면 첫 번째 레코드의 XNPV 값은 0이고 두 번째 레코드의 XNPV 값은 $909.09이므로 총 XNPV는 $909.09입니다.

## 예 2 – 여러 지불(스크립트)

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

#### 로드 스크립트 및 결과

개요

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

로드 스크립트에는 다음이 포함됩니다.

* `CashFlow`라는 테이블에 있는 한 프로젝트의 데이터 집합 및 1년 동안의 현금 흐름.

* `XNPV`라는 테이블에서 프로젝트의 `XNPV` 필드를 계산하는 데 사용되는 `CashFlow` 테이블의 Resident LOAD.

* XNPV 계산에 사용되는 하드 코딩된 할인율 10%(0.1).

* `Group By` 문은 프로젝트에 대한 모든 지불을 그룹화하는 데 사용됩니다.

로드 스크립트

```
CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2022',0
1,'07/01/2024',500
1,'07/01/2023',1000
];

XNPV:
Load 
	PrjId,
	XNPV(0.1,Values,Dates) as XNPV //Discount Rate of 10%
Resident CashFlow
Group By PrjId;
```

결과

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

* `PrjId`

* `XNPV`

결과 테이블

| PrjId | XNPV |
| --- | --- |
| 1 | $1322.21 |

이 예에서는 첫 해의 끝에 $1000의 지불을 받고 두 번째 해의 끝에 $500의 지불을 받습니다. 기간당 할인율이 10%인 유효 XNPV는 $1322.21입니다.

데이터의 첫 번째 행만 계산의 기준 날짜를 참조해야 합니다. 나머지 행의 경우 날짜 매개 변수가 경과 기간을 계산하는 데 사용되므로 순서는 중요하지 않습니다.

## 예 3 - 다중 지불 및 불규칙한 현금 흐름(스크립트)

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

#### 로드 스크립트 및 결과

개요

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

로드 스크립트에는 다음이 포함됩니다.

* `Project`라는 테이블의 두 프로젝트에 대한 할인율.

* 프로젝트 ID 및 날짜별로 각 프로젝트에 대한 여러 기간의 현금 흐름. `Dates` 필드는 현금 흐름에 할인율이 적용되는 기간을 계산하는 데 사용됩니다. 첫 번째 레코드(초기 현금 흐름 및 날짜)를 제외하고 레코드의 순서는 중요하지 않으며 변경해도 계산에 영향을 미치지 않습니다.

* `NoConcatenate`, Resident LOAD 및 `Left Join` 함수를 조합하여 사용하면 `Project` 및 `CashFlow` 테이블의 레코드를 하나의 플랫 테이블로 결합한 임시 테이블 `tmpNPV`가 만들어집니다. 이 테이블에는 각 현금 흐름에 대해 반복되는 할인율이 있습니다.

* `XNPV`라는 테이블의 각 프로젝트에 대한 `XNPV` 필드를 계산하는 데 사용되는 `tmpNPV` 테이블의 Resident LOAD.

* `only()` 함수를 사용하여 각 프로젝트에 연결된 단일 값 할인율을 가져와 각 프로젝트에 대한 `XNPV` 계산에 사용합니다.

* 프로젝트 ID별로 그룹화하는 `Group By` 문은 각 프로젝트에 대한 모든 지불 및 해당 날짜를 그룹화하는 데 사용됩니다.

* 합성 데이터나 중복 데이터가 데이터 모델에 로드되는 것을 방지하기 위해 `tmpXNPV` 테이블은 스크립트 끝에서 삭제됩니다.

로드 스크립트

```
Project:
Load * inline [
PrjId,Discount_Rate
1,0.1
2,0.15
];

CashFlow:
Load
*
Inline 
[	
PrjId,Dates,Values
1,'07/01/2021',0
1,'07/01/2022',1000
1,'07/01/2023',1000
2,'07/01/2020',0
2,'07/01/2023',500
2,'07/01/2024',1000
2,'07/01/2022',500
];

tmpXNPV:
NoConcatenate Load *
Resident Project;
Left Join
Load * 
Resident CashFlow;

XNPV:
Load 
	PrjId,
	XNPV(Only(Discount_Rate),Values,Dates) as XNPV //Discount Rate will be 10% for Project 1 and 15% for Project 2
Resident tmpXNPV
Group By PrjId;

Drop table tmpXNPV;
```

결과

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

* `PrjId`

* `XNPV`

결과 테이블

| PrjId | XNPV |
| --- | --- |
| 1 | $1735.54 |
| 2 | $278.36 |

프로젝트 ID 1의 초기 현금 흐름은 2021년 7월 1일에 $0입니다. 2년 후 끝에 기간당 10%의 할인율로 $1000의 두 번 지불이 있습니다. 따라서 유효 XNPV는 $1735.54입니다.

프로젝트 ID 2는 2020년 7월 1일에 $1000(따라서 음수 부호)의 초기 유출이 있습니다. 2년 후 $500의 지불이 예상됩니다. 3년 후에는 $500의 추가 지불이 예상됩니다. 마지막으로 2024년 7월 1일에 $1000의 지불이 예상됩니다. 할인율이 15%인 유효 XNPV는 $278.36입니다.

## 자세한 정보

* [Drop table](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)
* [group by](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm#group_by)
* [Join](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)
* [Max - 스크립트 함수](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)
* [NoConcatenate](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)
* [NPV - 차트 함수](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)
* [Only - 스크립트 함수](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)
* [Resident LOAD](https://help.qlik.com/ko-KR/sense/May2025/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm#Resident)