【问题标题】:How can I fix DAX XIRR calculation for projects with different investment start dates?如何修复具有不同投资开始日期的项目的 DAX XIRR 计算?
【发布时间】:2019-06-26 17:32:01
【问题描述】:

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

我能够定义一个变量,使用 UNION 和 SELECTCOLUMNS 创建一个合并表来计算 NPV,效果很好。当我使用相同的方法来计算 XIRR 时,它适用于大多数项目,但对于投资日期大于第一年的项目会给出错误。我尝试使用 FILTER 应用 CALCULATE,其中 Date 大于或等于该项目的第一个投资日期,但它不起作用。

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] )

【问题讨论】:

  • [First Investment Date] 的 DAX 公式是什么?
  • 投资表示为负数,公式为:'First Investment Date:=CALCULATE(MIN('Calendar'[Date]),FILTER(ALL('Calendar'[Date])), [总投资]
  • 总投资度量的公式很简单,“总投资:=SUM(HRCosts[Value])”
  • 我首先尝试将[First Investment Date] 声明为VAR,然后在FILTER 中使用它。即使没有修复它,这种方式也更容易调试。
  • 宣布第一个投资日期为 VAR 似乎已经解决了这个问题。在声明 VAR 而不是从度量值时它起作用的原因是什么?

标签: dax powerpivot


【解决方案1】:

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

当您首先将[First Investment Date] 计算为VAR 时,它会在度量的过滤器上下文中进行评估。当您在 FILTER 内计算 [First Investment Date] 时,它会在被过滤的表的行上下文中进行评估。我不清楚在您的特定情况下这些上下文之间究竟有什么区别,但如果您预先计算度量,则理解和调试会简单得多。

[First Investment Date] 预先计算为VAR 也应该更有效,因为您只需计算一次,而不是为CashFlowTable 的每一行计算。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2018-12-09
    • 1970-01-01
    • 2021-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多