我正在管理一项企业战略,该战略将人员和房地产移至多个地区。该策略由大量项目组成,这些项目可以被认为彼此独立,并共同构成该策略。我们正在捕获的项目包括现有劳动力成本和房地产成本,并且我们将其与搬迁的劳动力,房地产和投资成本进行了比较。这些项目中的每一项都捕获在单独的事实表中,并且都通过维度表链接在一起。
我能够定义一个变量,该变量使用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] )
答案 0 :(得分:0)
度量是在您放入的过滤器上下文中计算的,因此建议您在[First Investment Date]
中使用VAR
之前将FILTER
声明为[First Investment Date]
。
首先将VAR
计算为[First Investment Date]
时,将在度量的过滤器上下文中对其进行评估。当您在FILTER
内部计算[First Investment Date]
时,将在要过滤的表的行上下文中对其进行评估。对我来说,尚不清楚在您的特定情况下这些上下文之间到底有什么区别,但是如果预先计算度量,则更容易理解和调试。
将VAR
预先计算为CashFlowTable
的效率也应该更高,因为您只需要计算一次,而不用为{{1}}的每一行计算一次。