# NPV Funkcja skryptu

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:

![Wzór na NPV.](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Resources/Images/scripting-functions-npv-formula.png)

gdzie:

* `R``t`= 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.<br><br>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

`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/YYYY. 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. Więcej informacji można znaleźć w temacie [Modyfikowanie ustawień regionalnych na potrzeby aplikacji i skryptów](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm).

Domyślne ustawienia regionalne w aplikacjach są oparte na profilu użytkownika. Te ustawienia regionalne nie są związane z językiem wyświetlanym w interfejsie użytkownika Qlik Cloud. Interfejs Qlik Cloud będzie wyświetlany w tym samym języku co używana przeglądarka.

Jeżeli jesteś twórcą aplikacji, możesz wybrać domyślny region dla tworzonych przez siebie aplikacji. Więcej informacji zawiera temat [Ustawianie preferowanych ustawień regionalnych do tworzenia aplikacji i skryptów w Analityka Qlik Cloud](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting).

## Przykład 1 – Pojedyncza płatność (skrypt)

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

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`.

* Instrukcja LOAD z predykatem Resident z tabeli `CashFlow`, która jest używana 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)

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

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)

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

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`, instrukcji 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.

* Instrukcja LOAD z predykatem Resident z tabeli `tmpNPV`, która jest używana 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)

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

#### Skrypt ładowania i wyniki

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

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, instrukcji 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.

* Instrukcja LOAD z predykatem Resident z tabeli tmpNPV jest używana 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.

## Dowiedz się więcej

* [Drop table](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/drop-table.htm)

* [group by](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Load.htm#group_by)

* [Join](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Join.htm)

* [Max Funkcja skryptu](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/max.htm)

* [NoConcatenate](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/NoConcatenate.htm)

* [NPV — funkcja wykresu](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/ChartFunctions/FinancialAggregationFunctionsInCharts/npv.htm)

* [Only Funkcja skryptu](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/AggregationFunctions/only.htm)

* [Resident LOAD](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/load-data-from-previously-loaded-table.htm#Resident)