XNPV - スクリプト関数
XNPV() は、 pmt と date のペア数値で表されるキャッシュフロー計算書 (不定期の場合もあります) の集計された正味現在価値を返します。 すべての支払いは、年 365 日の日割り計算で割り引かれます。
構文:
XNPV(discount_rate, pmt,
date)
戻り値データ型: 数値
情報メモ既定では、結果は通貨としてフォーマットされます。
XNPV を計算するための式は次の通りです:
次のような前提です:
正味現在価値 (NPV) は、所定の割引率を使って将来のキャッシュ フローの現行合計価値を計算するのに使用されます。XNPV を計算するには、対応する日付で詳細のキャッシュフローを推定する必要があります。この後、支払いのたびに、支払い日付に基づいて複利割引率を適用します。
一連の支払いに対して XNPV 集計を実行することは、それらの支払いに対して Sum 集計を行うことと似ています。違いは、各金額が、選択した割引率 (利息と類似) と将来のいつまで支払うかにに従って修正 (または「割引」) されることです。discount_rate パラメーターをゼロに設定して XNPV を実行すると、XNPV が Sum 演算子と同等になります (支払いは合計される前に修正されます)。一般的に、discount_rate が設定される値がゼロに近いほど、XNPV 結果が Sum 集計の結果に類似するようになります。
引数
discount_rate |
discount_rate は、支払いが割引されるべき年率です。
値 0.1 は、10% の割引率を示します。
|
pmt |
支払い。date で指定された支払いスケジュールに対応するキャッシュ フローを含む式またはフィールド。 プラスは入金、マイナスは出金とみなされます。
情報メモXNPV() は、開始日に必ず発生するため、初期キャッシュフローを割引しません。その後の支払いは、年 365 日の日割り計算で割り引かれます。これは、最初の支払いも割り引かれる NPV() とは異なります。
|
date |
pmt で指定された支払いキャッシュ フローに対応する数式または項目で、支払日が含まれます。 最初の値は、将来のキャッシュフローのオフセットを計算するための開始日として使用されます。
|
この関数を使用する場合は、次の制限が適用されます。
使用に適しているケース
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。詳しくは「アプリとスクリプトの地域設定の変更」を参照してください。
アプリの既定地域設定は、ユーザー プロファイルに基づいています。これらの地域の書式設定は、Qlik Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。
アプリの作成者は、作成するアプリの既定の地域を設定できます。詳細については、「Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定」を参照してください。
例 1 - 単一の支払い (スクリプト)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
1 件のプロジェクトと 1 年のそのキャッシュフローのデータセットで、CashFlow という名前のテーブルに入っています。計算の開始日は 2022 年 7 月 1 日に設定されており、正味キャッシュフローは 0 です。1 年後、1000 ドルのキャッシュフローが発生します。
-
CashFlow テーブルからの resident load で、XNPV という名前のプロジェクトの XNPV 項目を計算するのに使用されます。
-
ハードコードされた割引率 10% (0.1) で、これは XNPV 計算で使用されます。
-
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;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
式によると、1 番目のレコードの XNPV 値は 0、2 番目のレコードの XNPV 値は 909.09 ドルです。そのため、XNPV の合計は 909.09 ドルとなります。
例 2 – 複数支払い (スクリプト)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
1 件のプロジェクトと 1 年のそのキャッシュフローのデータセットで、CashFlow という名前のテーブルに入っています。
-
CashFlow テーブルからの resident load で、XNPV という名前のプロジェクトの XNPV 項目を計算するのに使用されます。
-
ハードコードされた割引率 10% (0.1) で、これは XNPV 計算で使用されます。
-
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;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
この例では、1 年目の終わりに 1000 ドル、2 年目の終わりに 500 ドルの支払いを受けています。期間あたりの割引率が 10% であるため、有効な XNPV は 1322.21 となります。
計算の基準日を指すのは最初の行のデータのみであることに注意してください。その他の行については、データ パラメータが経過期間を計算するのに使用されるため、順序は重要ではありません。
例 3 – 複数支払いと不定期のキャッシュフロー (スクリプト)
概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
Project というテーブルの 2 つのプロジェクトの割引率。
-
プロジェクト ID と日付別の、各プロジェクトに対する複数の期間のキャッシュフロー。Dates 項目は、割引率がキャッシュフローに割り当てられる期間を計算するのに使用されます。最初のレコード (最初のキャッシュフローと日付) を除けば、レコードの順序は重要ではなく、変更しても計算には影響しません。
-
NoConcatenate、Resident loads、および Left Join 関数、臨時テーブルの組み合わせを使って、tmpNPV が作成されます。これは、1 つのフラット テーブルに Project と CashFlow テーブルのレコードを組み合わせます。このテーブルでは、各キャッシュフローに対して割引率が繰り返されます。
-
tmpNPV テーブルからの resident load で、XNPV という名前の各プロジェクトの XNPV項目を計算するのに使用されます。
-
各プロジェクトに関連付けられた単一値の割引率で、これは、only() 関数を使って取得され、各プロジェクトに対する XNPV 計算で使用されます。
-
Group By ステートメント (プロジェクト ID 別にグループ化) は、各プロジェクトのすべての支払いと対応する日付をまとめるのに使用されます。
-
データ モデルに合計または重複データがロードされないようにするため、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;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル
1 |
$1735.54 |
2 |
$278.36 |
プロジェクト ID 1 は、2021 年 7 月 1 日に初期キャッシュフローが 0 ドルでした。期間あたりの割引率 10% で、2 年連続年度末に 1000 ドルの支払いを受け取ることになっています。そのため、有効な XNPV は 1735.54 です。
プロジェクト ID 2 は、2021 年 7 月 1 日に初期キャッシュフローが 1000 ドルでした (そのためマイナス記号となっています)。2 年後、500 ドルが支払われることになっています。3 年後、500 ドルがさらに支払われます。最後に、2024 年 7 月 1 日に 1000 ドルの支払いが見込まれています。割引率が 15% であるため、有効な XNPV は 278.36 となります。