如何为具有不同投资开始日期的项目修复DAX XIRR计算?

时间:2019-06-26 17:32:01

标签: dax powerpivot

我正在管理一项企业战略,该战略将人员和房地产移至多个地区。该策略由大量项目组成,这些项目可以被认为彼此独立,并共同构成该策略。我们正在捕获的项目包括现有劳动力成本和房地产成本,并且我们将其与搬迁的劳动力,房地产和投资成本进行了比较。这些项目中的每一项都捕获在单独的事实表中,并且都通过维度表链接在一起。

我能够定义一个变量,该变量使用UNION和SELECTCOLUMNS创建一个合并表来计算NPV,并且效果很好。当我使用相同的方法来计算XIRR时,它适用于大多数项目,但对于投资日期大于第一年的项目却会出错。我尝试将CALCULATE与日期大于或等于该项目的“首次投资日期”的FILTER一起使用,但没有用。

IRR:=VAR CashFlowTable =  
    UNION (  
        SELECTCOLUMNS (  
            LaborComponent,  
            "Date", LaborComponent[Date],  
            "Values", LaborComponent[Base vs Deploy],  
            "Index", LaborComponent[Index]  
        ),  
        SELECTCOLUMNS (  
            RealEstateCosts,  
            "Date", RealEstateCosts[Date],  
            "Values", RealEstateCosts[Base vs Deploy],  
            "Index", RealEstateCosts[Index]  
        ),  
        SELECTCOLUMNS (  
            HRCosts,  
            "Date", HRCosts[Date],  
            "Values", HRCosts[Base vs Deploy],  
            "Index", HRCosts[Index]  
        )  
    )  
RETURN  
    IFERROR (  
        CALCULATE (  
            XIRR ( CashFlowTable, [Values], [Date] ),  
            FILTER(CashFlowTable, [Date] >= [First Investment Date] )),  
        BLANK ()  
    )

其中

First Investment Date :=
CALCULATE (
    MIN ( 'Calendar'[Date] ),
    FILTER ( ALL ( 'Calendar'[Date] ), [Total Investment] < 0 )
)

Total Investment := SUM ( HRCosts[Value] )

1 个答案:

答案 0 :(得分:0)

度量是在您放入的过滤器上下文中计算的,因此建议您在[First Investment Date]中使用VAR之前将FILTER声明为[First Investment Date]

首先将VAR计算为[First Investment Date]时,将在度量的过滤器上下文中对其进行评估。当您在FILTER内部计算[First Investment Date]时,将在要过滤的表的行上下文中对其进行评估。对我来说,尚不清楚在您的特定情况下这些上下文之间到底有什么区别,但是如果预先计算度量,则更容易理解和调试。

VAR预先计算为CashFlowTable的效率也应该更高,因为您只需要计算一次,而不用为{{1}}的每一行计算一次。