DAX - 迭代现值计算

时间:2017-12-15 23:37:09

标签: powerbi dax

我有一个NPV计算,我已经手动完成,因为XNPV功能似乎不起作用。

我创建的NPV指标看起来像这样:

'Data'[Undiscounted Value] / (1+'Discount Rate'[Discount Rate Value])^([Component]/12)

我发现计算中的错误位于度量的[Component]部分。 [Component]计算如下:

IF(TODAY() > LASTDATE('Data'[Date]), BLANK(),
DATEDIFF(TODAY(), LASTDATE('Data'[Date]), MONTH))

[组件]计算用于确定NPV计算的月数。我除以12因为我有年折扣率,但我的数据是几个月。

上述计算在线条/条形图中完美运行。我已经对这几个月进行了测试,以确认这些值是否正确折扣。

当我尝试聚合数据时发生问题。换句话说,它在折线图中工作正常,但是当我将计算放在卡片上时,它会使用组件的LASTDATE并使用所有未折现值的总和执行计算。换句话说,它做了类似的事情:

 SUM ('Data'[Undiscounted Value] ) / (1+'Discount Rate'[Discount Rate Value])^(MAX(Component) /12)

然后吐出不正确的结果。

它应该做的只是取所有贴现值的总和。因此,逐月运行计算,然后添加所有月份,而是添加未安装的值,然后在36个月内对其进行折扣。

我的QUESTion是:是否有一个替代函数可以告诉PowerBI不要使用LASTDATE,而是迭代每个月(行)然后SUM

1 个答案:

答案 0 :(得分:0)

我建议采用以下解决方案结构:

@{
    Layout = null;
}

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.9/angular.min.js"></script>
    <script type="text/javascript">
      var app = angular.module('MyApp', [])
      app.controller('MyController', function ($scope, $http, $window) {
          $scope.IsVisible = false;
          $scope.Search = function () {
              var post = $http({
                  method: "GET",
                  url: "http://localhost:52098/HalifaxIISService.svc/TranscationDetails/" + encodeURIComponent($scope.Account_Number),
                  dataType: 'json',
                  headers: {
                      'Accept': 'application/json, text/javascript, */*; q=0.01',
                      'Content-Type': 'application/json; charset=utf-8'
                  }
              });

              post.then(function (response) { // .success(function(data => .then(function(response
                  var data = response.data; // extract data from resposne
                  $scope.Customers = JSON.parse(data); // eval(data.d) => JSON.parse(data)
                  $scope.IsVisible = true;
              }, function (err) {
                  $window.alert(err);
              });
          }
      });
    </script>
    <div ng-app="MyApp" ng-controller="MyController">
        Account Number:
        <input type="text" ng-model="Account_Number" />
        <input type="button" value="Submit" ng-click="Search()" />
        <hr />
        <table style="border: solid 2px Green; padding: 5px;" ng-show="IsVisible">
            @*<table cellpadding="0" cellspacing="0">*@
            <tr style="height: 30px; background-color: skyblue; color: maroon;">
                <th></th>
                <th> Account_Number</th>
                <th>Account Holder Name</th>
                <th> Amount</th>
                <th> Deposit </th>
                <th> Amount</th>
                <th> Withdraw</th>

                <th></th>
                <th></th>

            </tr>
            <tbody ng-repeat="m in Customers">
                <tr style="height: 30px; background-color: skyblue; color: maroon;">
                    <td></td>
                    <td><span>{{m.Account_Number}}</span></td>
                    <td><span>{{m.Account_Holder_Name}}</span></td>
                    <td><span>+{{m.Amount}}</span></td>

                    <td><span>{{m.Transcation_Type}}</span></td>
                    <td><span>-{{m.Amount}}</span></td>
                    <td><span>{{m.Transcation_Type}}</span></td>

                </tr>

            </tbody>
        </table>
    </div>
</body>
</html>

这将在总结之前计算每个月的折扣。 您可能还需要调整[Component]公式。