# NPV 스크립트 함수

NPV() 스크립트 함수는 할인율과 기간별로 정렬된 여러 값을 사용합니다. 유입(수입)은 양수이고 유출(미래 지불)은 이러한 계산에서 음수 값으로 가정됩니다. 이는 각 기간이 끝날 때 발생합니다.

순 현재 가치(NPV)는 미래 현금 흐름 스트림의 현재 총 가치를 계산하는 데 사용됩니다. NPV를 계산하려면 각 기간의 미래 현금 흐름을 추정하고 정확한 할인율을 확인해야 합니다. NPV() 스크립트 함수는 할인율과 기간별로 정렬된 여러 값을 사용합니다. 유입(수입)은 양수이고 유출(미래 지불)은 이러한 계산에서 음수 값으로 가정됩니다. 이는 각 기간이 끝날 때 발생합니다.

구문:

NPV(discount\_rate, value)

반환 데이터 유형: 숫자 기본적으로 결과는 통화로 서식이 지정됩니다.

순 현재 가치를 계산하는 공식은 다음과 같습니다.

![NPV 계산 공식.](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Resources/Images/scripting-functions-npv-formula.png)

설명:

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

* `i` = 대체 투자로 얻을 수 있는 할인율 또는 수익

* `t` = 타이머 기간 수

인수

| 인수 | 설명 |
| --- | --- |
| discount\_rate | discount\_rate는 적용된 할인율입니다.<br><br>값이 0.1이면 10% 할인율을 나타냅니다. |
| value | 이 필드는 기간별로 정렬된 여러 기간에 대한 값을 보유합니다. 첫 번째 값은 기간 1이 끝날 때의 현금 흐름으로 가정하는 식입니다. |

제한 사항:

`NPV()` 함수에는 다음과 같은 제한 사항이 있습니다.

* 텍스트 값, NULL 값, 누락된 값은 무시됩니다.

* 현금 흐름 값은 기간 오름차순이어야 합니다.

## 사용 시기

`NPV()`는 프로젝트 수익성을 확인하고 기타 측정값을 도출하는 데 사용되는 재무 함수입니다. 이 함수는 현금 흐름을 원시 데이터로 사용할 수 있는 경우에 유용합니다.

## 국가별 설정

달리 지정하지 않는 한 이 항목의 예에서는 다음 날짜 형식을 사용합니다: MM/DD/YYYY.날짜 형식은 데이터 로드 스크립트의 `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/NPV.htm)

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

개요

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

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

* `CashFlow`라는 테이블에 로드되는 한 프로젝트의 데이터 집합 및 한 기간 동안의 해당 현금 흐름.

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

* NPV 계산에 사용되는 하드 코딩된 할인율 10%.

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

로드 스크립트

```
CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values
1,1,1000
];

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

결과

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

* `PrjId`

* `NPV`

결과 테이블

| PrjId | NPV |
| --- | --- |
| 1 | $909.09 |

한 기간이 끝날 때 기간당 10%의 할인율로 $1000의 단일 지불을 받을 경우 NPV는 $1000를 (1 + 할인율)로 나눈 값과 같습니다. 유효 NPV는 $909.09입니다.

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

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

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

개요

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

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

* `CashFlow`라는 테이블에 로드되는 한 프로젝트의 데이터 집합 및 여러 기간 동안의 해당 현금 흐름.

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

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

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

로드 스크립트

```
CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values
1,1,1000
1,2,1000
];

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

결과

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

* `PrjId`

* `NPV`

결과 테이블

| PrjId | NPV |
| --- | --- |
| 1 | $1735.54 |

기간당 10%의 할인율로 두 기간의 끝에 받을 $1000 지불의 경우 유효 NPV는 $1735.54입니다.

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

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

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

개요

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

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

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

* 프로젝트 ID 및 기간 ID별로 각 프로젝트에 대한 여러 기간에 대한 현금 흐름. 이 기간 ID는 데이터가 정렬되지 않은 경우 레코드를 정렬하는 데 사용할 수 있습니다.

* 임시 테이블 `tmpNPV`를 만드는 `NoConcatenate`, Resident LOAD 및 `Left Join` 함수 조합. 이 테이블은 `Project` 및 `CashFlow` 테이블의 레코드를 하나의 플랫 테이블로 결합합니다. 이 테이블에는 각 기간에 대해 반복되는 할인율이 있습니다.

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

* 각 프로젝트와 연결된 단일 값 할인율입니다. 이는 `only()` 함수를 사용하여 검색되며 각 프로젝트의 NPV 계산에 사용됩니다.

* 프로젝트 ID별로 각 프로젝트에 대한 모든 지불을 그룹화하는 데 사용되는 `Group By` 문.

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

로드 스크립트

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

CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values
1,1,1000
1,2,1000
1,3,1000
2,1,500
2,2,500
2,3,1000
2,4,1000
];

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

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

Drop table tmpNPV;
```

결과

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

* `PrjId`

* `NPV`

결과 테이블

| PrjId | NPV |
| --- | --- |
| 1 | $2486.85 |
| 2 | $2042.12 |

프로젝트 ID 1은 기간당 10%의 할인율로 세 기간이 끝날 때 $1000를 지불할 것으로 예상합니다. 따라서 유효 NPV는 $2486.85입니다.

프로젝트 ID 2는 15%의 할인율로 네 기간에 걸쳐 $500의 두 번 지불과 $1000의 추가 두 번 지불을 예상합니다. 따라서 유효 NPV는 $2042.12입니다.

## 예 4 – 프로젝트 수익성 예(스크립트)

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

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

개요

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

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

* Project라는 테이블에 로드된 두 프로젝트에 대한 할인율 및 초기 투자(기간 0).

* 프로젝트 ID 및 기간 ID별로 각 프로젝트에 대한 여러 기간에 대한 현금 흐름. 이 기간 ID는 데이터가 정렬되지 않은 경우 레코드를 정렬하는 데 사용할 수 있습니다.

* 임시 테이블 tmpNPV를 만드는 NoConcatenate, Resident LOAD 및 Left Join 함수 조합. 이 테이블은 Project 및 CashFlow 테이블의 레코드를 하나의 플랫 테이블로 결합합니다. 이 테이블에는 각 기간에 대해 반복되는 할인율이 있습니다.

* only() 함수를 사용하여 검색하고 각 프로젝트에 대한 NPV 계산에 사용되는 각 프로젝트와 연결된 단일 값 할인율.

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

* 프로젝트 수익성 지수를 계산하기 위해 NPV를 각 프로젝트의 초기 투자로 나누는 추가 필드 만들기.

* 프로젝트 ID별로 그룹화하는 group by 문. 각 프로젝트에 대한 모든 지불을 그룹화하는 데 사용됩니다.

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

로드 스크립트

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

CashFlow:
Load
*
Inline 
[	
PrjId,PeriodId,Values,
1,1,35000
1,2,35000
1,3,35000
2,1,30000
2,2,40000
2,3,50000
2,4,60000
];

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

NPV:
Load
        PrjId,
        NPV(Only(Discount_Rate),Values) as NPV, //Discount Rate will be 10% for Project 1 and 15% for Project 2
    NPV(Only(Discount_Rate),Values)/ Only(Initial_Investment) as Profitability_Index
Resident tmpNPV
Group By PrjId;

Drop table tmpNPV;
```

결과

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

* PrjId

* NPV

다음 측정값을 만듭니다.

=only(Profitability\_Index)

결과 테이블

| PrjId | NPV | =only(Profitability\_Index) |
| --- | --- | --- |
| 1 | $87039.82 | 0.87 |
| 2 | $123513.71 | 1.24 |

프로젝트 ID 1의 유효 NPV는 $87039.82이고 초기 투자 금액은 $100000입니다. 따라서 수익성 지수는 0.87입니다. 1보다 작기 때문에 프로젝트에 수익성이 없습니다.

프로젝트 ID 2의 유효 NPV는 $123513.71이고 초기 투자 금액은 $100000입니다. 따라서 수익성 지수는 1.24입니다. 1보다 크므로 프로젝트에 수익성이 있습니다.

## 자세한 정보

* [Drop table](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)

* [group by](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm#group_by)

* [Join](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

* [Max 스크립트 함수](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)

* [NoConcatenate](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)

* [NPV - 차트 함수](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)

* [Only 스크립트 함수](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)

* [Resident LOAD](https://help.qlik.com/ko-KR/sense/May2026/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm#Resident)