Funkcja XNPV() zwraca zagregowaną wartość bieżącą netto dotyczącą harmonogramu przepływów pieniężnych (niekoniecznie okresowych) reprezentowanych przez liczby zestawione w pary w wyrażeniach pmt i date. Wszystkie płatności są obejmowane upustem na podstawie roku zawierającego 365 dni.
Składnia:
XNPV(discount_rate, pmt,
date)
Typ zwracanych danych: liczbowy
InformacjaDomyślnie wynik zostanie sformatowany jako waluta.
Wzór na obliczanie XNPV został pokazany poniżej:
gdzie:
Pi = wpływy pieniężne netto - wypływy podczas pojedynczego okresu i
d1= data pierwszej płatności
di = data i-tej płatności
rate = stopa dyskontowa
Wartość bieżąca netto (Net Present Value – NPV) służy do obliczania bieżącej wartości łącznej przyszłego strumienia przepływów pieniężnych na podstawie podanej stopy dyskontowej. Aby obliczyć XNPV, musimy oszacować przyszłe przepływy pieniężne z odpowiadającymi im datami. Następnie dla każdej płatności stosujemy składaną stopę dyskontową opartą na dacie płatności.
Agregacja XNPV dla serii płatności jest podobna do agregacji Sum dla tych płatności. Różnica polega na tym, że każda kwota jest modyfikowana (lub „dyskontowana”) w zależności od wybranej stopy dyskontowej (podobnej do stopy procentowej) oraz odstępu czasowego przyszłych płatności. Wykonanie XNPV z parametrem discount_rate ustawionym na zero spowoduje, że operacja XNPV będzie równoważna operacji Sum (płatności nie zostaną zmodyfikowane przed zsumowaniem). Ogólnie rzecz biorąc, im bliższy zera jest parametr discount_rate, tym bardziej wynik XNPV będzie podobny do wyniku agregacji Sum.
Argumenty
Argument
Opis
discount_rate
discount_rate to roczna stopa, o którą należy zdyskontować płatności.
Wartość 0,1 oznaczałaby stopę dyskontową w wysokości 10%.
pmt
Płatności. Wyrażenie lub pole zawierające płatności w ramach przepływów pieniężnych odpowiadające harmonogramowi płatności podanemu argumentem date. Zakłada się, że wartości dodatnie to wpływy, a wartości ujemne to odpływy.
InformacjaFunkcja XNPV() nie dyskontuje początkowego przepływu środków pieniężnych, ponieważ będzie on zawsze występować w dniu rozpoczęcia. Kolejne płatności są dyskontowane na podstawie roku zawierającego 365 dni. W funkcji NPV() jest inaczej, ponieważ w jej przypadku także pierwsza płatność jest dyskontowana.
date
Wyrażenie lub pole zawierające harmonogram dat odpowiadających płatnościom w ramach przepływów pieniężnych podanym argumentem pmt. Pierwsza wartość określa datę początkową do obliczania przesunięć dla przyszłych przepływów pieniężnych.
Podczas pracy z tą funkcją obowiązują następujące ograniczenia:
Wartości tekstowe, wartości NULL i wartości brakujące w dowolnej części pary danych powodują pominięcie całej pary danych.
Kiedy używać
Funkcja XNPV() jest używana w modelowaniu finansowym do obliczania bieżącej wartości netto (NPV) potencjalnej inwestycji.
Funkcja XNPV jest dokładniejsza i dlatego jest preferowana w porównaniu z NPV we wszystkich typach modeli finansowych.
Ustawienia regionalne
Jeżeli nie podano inaczej, w przykładach w tym temacie stosowany jest następujący format daty: MM/DD/RRRR. Format daty jest określony w instrukcji SET DateFormat w skrypcie ładowania danych. Domyślny format daty w Twoim systemie może być inny ze względu na ustawienia regionalne i inne czynniki. Formaty zastosowane w przykładach można zmienić, aby dostosować je do własnych wymagań. Zamiast tego można też zmienić formaty w skrypcie ładowania, aby pasowały do tych przykładów.
Domyślne ustawienia regionalne w aplikacjach są oparte na regionalnych ustawieniach systemu komputera lub serwera, na którym zainstalowano Qlik Sense. Jeśli serwer Qlik Sense, do którego uzyskujesz dostęp, jest ustawiony na Szwecję, Edytor ładowania danych użyje szwedzkich ustawień regionalnych dla dat, godziny i waluty. Te ustawienia regionalne nie są związane z językiem wyświetlanym w interfejsie użytkownika Qlik Sense. Interfejs Qlik Sense będzie wyświetlany w tym samym języku co używana przeglądarka.
Przykład 1 – Pojedyncza płatność (skrypt)
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Zestaw danych jednego projektu i jego przepływy pieniężne dla jednego roku, w tabeli o nazwie CashFlow. Początkowa data do obliczeń jest ustawiona na 1 lipca 2022 r., a przepływ pieniężny netto wynosi 0. Po roku pojawia się przepływ pieniężny w wysokości 1000 $.
Instrukcja LOAD z predykatem Resident z tabeli CashFlow, która jest używana do obliczania pola XNPV dla projektu w tabeli o nazwie XNPV.
Wpisana w kod stopa dyskontowa w wysokości 10% (0,1), która jest używana w obliczeniach XNPV.
Polecenie Group By użyte do zgrupowania wszystkich płatności dotyczących projektu.
Skrypt ładowania
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;
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
PrjId
XNPV
Tabela wynikowa
PrjId
XNPV
1
$909.09
Zgodnie ze wzorem, wartość XNPV dla pierwszego rekordu wynosi 0, a wartość XNPV dla drugiego rekordu wynosi 909,09 $. Zatem całkowita wartość XNPV wynosi 909,09 $.
Przykład 2 – Kilka płatności (skrypt)
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Zestaw danych jednego projektu i jego przepływy pieniężne dla jednego roku, w tabeli o nazwie CashFlow.
Instrukcja LOAD z predykatem Resident z tabeli CashFlow, która jest używana do obliczania pola XNPV dla projektu w tabeli o nazwie XNPV.
Wpisana w kod stopa dyskontowa w wysokości 10% (0,1), która jest używana w obliczeniach XNPV.
Polecenie Group By użyte do zgrupowania wszystkich płatności dotyczących projektu.
Skrypt ładowania
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;
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
PrjId
XNPV
Tabela wynikowa
PrjId
XNPV
1
$1322.21
W tym przykładzie otrzymano płatność w wysokości 1000 $ na koniec pierwszego roku i płatność w wysokości 500 $ na koniec drugiego roku. Przy stopie dyskontowej na poziomie 10% na okres efektywna wartość XNPV wynosi 1322,21 $.
Należy zauważyć, że tylko pierwszy wiersz danych powinien odnosić się do daty bazowej do obliczeń. W przypadku pozostałych wierszy kolejność jest nieistotna, ponieważ do obliczania okresu, który upłynął, jest używany parametr date.
Przykład 3 – Kilka płatności w nieregularnych przepływach pieniężnych (skrypt)
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Stopy dyskontowe dla dwóch projektów w tabeli o nazwie Project.
Przepływy pieniężne dla kilku okresów dla każdego projektu według identyfikatora projektu i dat. Pole Dates jest używane do obliczania czasu, przez jaki stopa dyskontowa jest stosowana do przepływu pieniężnego. Nie licząc pierwszego rekordu (początkowy przepływ pieniężny i data), kolejność rekordów jest nieistotna, i jej zmiana nie powinna mieć wpływu na wynik obliczeń.
Przy użyciu kombinacji NoConcatenate, instrukcji LOAD z predykatem Resident oraz funkcji Left Join zostaje utworzona tymczasowa tabela tmpNPV, która łączy rekordy z tabel Project i CashFlow w jedną płaską tabelę. Będzie ona zawierać stopy dyskontowe dla każdego przepływu pieniężnego.
Instrukcja LOAD z predykatem Resident z tabeli tmpNPV, która jest używana do obliczania pola XNPV dla każdego projektu w tabeli o nazwie XNPV.
Pojedyncza stopa dyskontowa powiązana z każdym projektem jest pobierana za pomocą funkcji only() i jest używana w obliczeniach XNPV dla każdego projektu.
Polecenie Group By, grupowanie według identyfikatora projektu, jest używane do grupowania wszystkich płatności i odnośnych dat dla każdego projektu.
Aby uniknąć załadowania do modelu danych syntetycznych lub redundantnych, na końcu skryptu tabela tmpXNPV zostaje usunięta.
Skrypt ładowania
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;
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
PrjId
XNPV
Tabela wynikowa
PrjId
XNPV
1
$1735.54
2
$278.36
Projekt o identyfikatorze 1 ma początkowy przepływ pieniężny w wysokości 0 $ na dzień 1 lipca 2021 r. Na koniec dwóch kolejnych lat mają zostać odebrane dwie płatności po 1000 $ ze stopą dyskontową 10% na okres. Zatem efektywna wartość XNPV wynosi 1735,54 $.
Projekt o identyfikatorze 2 ma początkowy wypływ pieniężny w wysokości 1000 $ (stąd znak minus) 1 lipca 2020 r. Po dwóch latach oczekiwana jest płatność w wysokości 500 $. Po trzech latach oczekiwana jest kolejna płatność w wysokości 500 $. Na koniec, 1 lipca 2024 r., oczekiwana jest płatność w wysokości 1000 $. Przy stopie dyskontowej na poziomie 15% efektywna wartość XNPV wynosi 278,36 $.