DAX - 迭代现值计算
DAX - Iterating present value calculation
我有一个 NPV 计算,这是我手动完成的,因为 XNPV 函数似乎不起作用。
我创建的 NPV 度量如下所示:
'Data'[Undiscounted Value] / (1+'Discount Rate'[Discount Rate Value])^([Component]/12)
我发现我的计算错误在于度量的 [Component] 部分。 [组件]计算如下:
IF(TODAY() > LASTDATE('Data'[Date]), BLANK(),
DATEDIFF(TODAY(), LASTDATE('Data'[Date]), MONTH))
[组件] 计算旨在确定 NPV 计算的月数。我除以 12,因为我有年度贴现率,但我的数据以月为单位。
以上计算在 line/bar 图表中完美运行。我对月份进行了现场测试,以确认这些值已正确打折。
当我尝试聚合数据时出现问题。换句话说,它在折线图中工作正常,但当我只是将计算放在卡片视觉上时,它使用组件的最后日期并使用所有未折扣值的总和执行计算。换句话说,它会做这样的事情:
SUM ('Data'[Undiscounted Value] ) / (1+'Discount Rate'[Discount Rate Value])^(MAX(Component) /12)
然后吐出一个不正确的结果。
它应该做的只是简单地计算所有折扣值的总和。因此 运行 逐月计算,然后将所有月份相加,而是添加未贴现值,然后在 36 个月内对它们进行贴现。
我的问题是:是否有替代函数告诉 PowerBI 不要使用 LASTDATE,而是遍历每个月(行)然后 SUM
我建议采用以下解决方案结构:
SUMX(
VALUES( 'Data'[Month] )
, CALCULATE( NPV )
)
这将在汇总之前计算每个月的折扣。
您可能还需要调整 [Component] 公式。
我有一个 NPV 计算,这是我手动完成的,因为 XNPV 函数似乎不起作用。
我创建的 NPV 度量如下所示:
'Data'[Undiscounted Value] / (1+'Discount Rate'[Discount Rate Value])^([Component]/12)
我发现我的计算错误在于度量的 [Component] 部分。 [组件]计算如下:
IF(TODAY() > LASTDATE('Data'[Date]), BLANK(),
DATEDIFF(TODAY(), LASTDATE('Data'[Date]), MONTH))
[组件] 计算旨在确定 NPV 计算的月数。我除以 12,因为我有年度贴现率,但我的数据以月为单位。
以上计算在 line/bar 图表中完美运行。我对月份进行了现场测试,以确认这些值已正确打折。
当我尝试聚合数据时出现问题。换句话说,它在折线图中工作正常,但当我只是将计算放在卡片视觉上时,它使用组件的最后日期并使用所有未折扣值的总和执行计算。换句话说,它会做这样的事情:
SUM ('Data'[Undiscounted Value] ) / (1+'Discount Rate'[Discount Rate Value])^(MAX(Component) /12)
然后吐出一个不正确的结果。
它应该做的只是简单地计算所有折扣值的总和。因此 运行 逐月计算,然后将所有月份相加,而是添加未贴现值,然后在 36 个月内对它们进行贴现。
我的问题是:是否有替代函数告诉 PowerBI 不要使用 LASTDATE,而是遍历每个月(行)然后 SUM
我建议采用以下解决方案结构:
SUMX(
VALUES( 'Data'[Month] )
, CALCULATE( NPV )
)
这将在汇总之前计算每个月的折扣。 您可能还需要调整 [Component] 公式。