Funkcja skryptu NPV() pobiera stawkę rabatu i kilka wartości uporządkowanych według okresu. W tych obliczeniach wpływy (przychody) są dodatnie, a wypływy (przyszłe płatności) powinny być wartościami ujemnymi. Występują na końcu każdego okresu.
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. Aby obliczyć NPV, należy oszacować przyszłe przepływy pieniężne dla każdego okresu i określić poprawną stopę dyskontową. Funkcja skryptu NPV() pobiera stawkę rabatu i kilka wartości uporządkowanych według okresu. W tych obliczeniach wpływy (przychody) są dodatnie, a wypływy (przyszłe płatności) powinny być wartościami ujemnymi. Występują na końcu każdego okresu.
Składnia:
NPV(discount_rate, value)
Typ zwracanych danych: liczbowy. Domyślnie wynik zostanie sformatowany jako waluta.
Wzór na obliczenie bieżącej wartości netto:
gdzie:
Rt= wpływy pieniężne netto - wypływy podczas pojedynczego okresu t
i = stopa dyskontowa lub zwrot, jaki uzyskano by z alternatywnych inwestycji
t = liczba okresów licznika czasu
Argumenty
Argument
Opis
discount_rate
discount_rate jest wartością procentową zastosowanego rabatu.
Wartość 0,1 oznaczałaby stopę dyskontową w wysokości 10%.
value
To pole przechowuje wartości dla wielu okresów uporządkowane według okresu. Przyjmuje się, że pierwsza wartość reprezentuje przepływ pieniężny na koniec okresu 1 itd.
Ograniczenia:
Funkcja NPV() ma następujące ograniczenia:
Wartości tekstowe, wartości NULL i wartości brakujące są pomijane.
Wartości przepływów pieniężnych muszą być uporządkowane według okresu w kolejności rosnącej.
Kiedy używać
NPV() jest funkcją finansową umożliwiającą sprawdzenie rentowności projektu oraz derywowanie innych miar. Znajduje zastosowanie w przypadku, gdy przepływy pieniężne są podane w nieprzetworzonej formie.
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 okresu, który został załadowany do tabeli o nazwie CashFlow.
Polecenie LOAD z predykatem Resident z tabeli CashFlow, które jest używane do obliczania pola NPV dla projektu w tabeli o nazwie NPV.
Wpisana w kod stopa dyskontowa w wysokości 10%, która jest używana w obliczeniach NPV.
Polecenie Group By, które jest używane do grupowania wszystkich płatności dotyczących projektu.
Skrypt ładowania
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;
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
PrjId
NPV
Tabela wynikowa
PrjId
NPV
1
$909.09
Aby na koniec okresu otrzymać pojedynczą płatność na kwotę 1000 $, przy stopie dyskontowej 10% na okres, wartość NPV musi być równa 1000 $ podzielone przez (1 + stopa dyskontowa). Efektywna wartość NPV 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 wielu okresów, który został załadowany do tabeli o nazwie CashFlow.
Polecenie LOAD z predykatem Resident z tabeli CashFlow, które jest używane do obliczania pola NPV dla projektu w tabeli o nazwie NPV.
Wpisana w kod stopa dyskontowa w wysokości 10% (0,1), która jest używana w obliczeniach NPV.
Polecenie Group By, które jest używane do grupowania wszystkich płatności dotyczących projektu.
Skrypt ładowania
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;
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
PrjId
NPV
Tabela wynikowa
PrjId
NPV
1
$1735.54
Aby na koniec dwóch okresów otrzymać płatności na kwotę 1000 $, przy stopie dyskontowej 10% na okres, efektywna wartość NPV musi być równa 1735,54 $.
Przykład 3 – Kilka płatności (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, które są załadowane do tabeli o nazwie Project.
Przepływy pieniężne dla kilku okresów dla każdego projektu według identyfikatora projektu i identyfikatora okresu. Identyfikatora okresu można użyć do uporządkowania rekordów, jeśli dane są nieuporządkowane.
Kombinacja NoConcatenate, poleceń LOAD z predykatem Resident i funkcji Left Join tworząca tymczasową tabelę tmpNPV. Tabela ta łączy rekordy z tabel Project i CashFlow w jednej płaskiej tabeli. Będzie ona zawierać stopy dyskontowe dla każdego okresu.
Polecenie LOAD z predykatem Resident z tabeli tmpNPV, które jest używane do obliczania pola NPV dla każdego projektu w tabeli o nazwie NPV.
Pojedyncza wartość stopy dyskontowej związana z każdym projektem. Jest otrzymywana za pomocą funkcji only() i jest używana w obliczeniach NPV dla każdego projektu.
Polecenie Group By, które jest używane do grupowania wszystkich płatności dotyczących każdego projektu według identyfikatora projektu.
Aby uniknąć załadowania do modelu danych syntetycznych lub redundantnych, na końcu skryptu tabela tmpNPV zostaje usunięta.
Skrypt ładowania
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;
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
PrjId
NPV
Tabela wynikowa
PrjId
NPV
1
$2486.85
2
$2042.12
W projekcie o identyfikatorze 1 oczekiwane są płatności na kwotę 1000 $ na koniec trzech okresów, przy stopie dyskontowej 10% na okres. Zatem efektywna wartość NPV wynosi 2486,85 $.
W projekcie o identyfikatorze 2 oczekiwane są dwie płatności na kwotę 500 $ i dwie kolejne na kwotę 1000 $ w czterech okresach, przezy stopie dyskontowej 15%. Zatem efektywna wartość NPV wynosi 2042,12 $.
Przykład 4 – Przykład obliczania rentowności projektu (skrypt)
Przegląd
Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej karty.
Skrypt ładowania zawiera:
Stopy dyskontowe i początkowe wartości inwestycji (okres 0) dla dwóch projektów, które są załadowane do tabeli o nazwie Project.
Przepływy pieniężne dla kilku okresów dla każdego projektu według identyfikatora projektu i identyfikatora okresu. Identyfikatora okresu można użyć do uporządkowania rekordów, jeśli dane są nieuporządkowane.
Kombinacja NoConcatenate, poleceń LOAD z predykatem Resident i funkcji Left Join tworząca tymczasową tabelę tmpNPV. Tabela ta łączy rekordy z tabel Project i CashFlow w jednej płaskiej tabeli. Będzie ona zawierać stopy dyskontowe dla każdego okresu.
Pojedyncza stopa dyskontowa powiązana z każdym projektem, która jest otrzymywana za pomocą funkcji only() i jest używana w obliczeniach NPV dla każdego projektu.
Polecenie LOAD z predykatem Resident z tabeli tmpNPV jest używane do obliczania pola NPV dla każdego projektu w tabeli o nazwie NPV.
Zostaje utworzone dodatkowe pole, które dzieli NPV przez początkową wartość inwestycji każdego projektu, w celu obliczenia indeksu rentowności projektu.
Polecenie group by, grupowanie według identyfikatora projektu, jest używane do grupowania wszystkich płatności dotyczących każdego projektu.
Aby uniknąć załadowania do modelu danych syntetycznych lub redundantnych, na końcu skryptu tabela tmpNPV zostaje usunięta.
Skrypt ładowania
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;
Wyniki
Załaduj dane i otwórz arkusz. Utwórz nową tabelę i dodaj te pola jako wymiary:
PrjId
NPV
Utwórz następującą miarę:
=only(Profitability_Index)
Tabela wynikowa
PrjId
NPV
=only(Profitability_Index)
1
$87039.82
0.87
2
$123513.71
1.24
Projekt o identyfikatorze 1 ma efektywną wartość NPV 87039,82 $, a początkowa wartość inwestycji wynosi 100000 $. Zatem indeks rentowności wynosi 0,87. Ponieważ jego wartość jest niższa od 1, ten projekt jest nierentowny.
Projekt o identyfikatorze 2 ma efektywną wartość NPV 123513,71 $, a początkowa wartość inwestycji wynosi 100000 $. Zatem indeks rentowności wynosi 1,24. Ponieważ jego wartość jest większa od 1, ten projekt jest rentowny.