我正在进行资本预算的一些计算,我的数据模型中有以下两个表
我试图在DAX中构建一个计算列,以确定Project表中每个项目的投资回收期。我在这里整理了计算,我还不确定如何在DAX中执行此操作。
计算投资回收期的逻辑步骤:
答案 0 :(得分:0)
经过大量的反复试验,我想出了一个解决方案。
步骤1:构建帮助指标表。这有两个目的:(a)排除不相关的指标(如收入),(b)确保成本为负,储蓄为正。
步骤2:构建2个辅助措施,这些措施将进入虚拟的,汇总的中间表。
CumulativeTotalMetric :=
CALCULATE (
SUMX (
Impact,
Impact[Latest Estimate Monthly Values]
* RELATED ( BaseMetrics[Payback Period Multiplier] )
),
FILTER ( ALL ( Impact[Month] ), Impact[Month] <= MAX ( Impact[Month] ) )
)
TotalMetric :=
SUMX (
Impact,
Impact[Latest Estimate Monthly Values]
* RELATED ( BaseMetrics[Payback Period Multiplier] )
)
步骤3:创建创建虚拟表(BaseTable)的最终度量,并对其执行逻辑操作以达到最终的投资回收期。
Payback Period (Years) :=
VAR BaseTable =
ADDCOLUMNS (
SUMMARIZE ( Impact, Impact[initiative #], Impact[snapshot], Impact[Month] ),
"Cumulative Total Impact", CALCULATE ( [CumulativeTotalMetric] ),
"Total Impact", CALCULATE ( [TotalMetric] )
)
VAR LastCumulativeLossDate =
MAXX ( FILTER ( BaseTable, [Cumulative Total Impact] < 0 ), [Month] )
VAR BreakEvenDate =
MINX (
FILTER (
BaseTable,
[Month] > LastCumulativeLossDate
&& [Cumulative Total Impact] > 0
),
[Month]
)
VAR InitialInvestmentDate =
MINX ( FILTER ( BaseTable, [Total Impact] < 0 ), [Month] )
RETURN
IF (
OR ( ISBLANK ( InitialInvestmentDate ), ISBLANK ( BreakEvenDate ) ),
BLANK (),
( BreakEvenDate - InitialInvestmentDate )
/ 365
)
这最后的表现非常复杂。它使用渐进的因变量。它以相同的基表开始,并定义后续变量中使用的变量。我没有DAX专家,但我怀疑使用这些变量有助于提高计算效率。
编辑:我应该注意到我没有将此度量用作计算列 - 我只是在一个相同的数据透视表中使用它&#34;形状&#34;作为&#34;项目&#34;上表 - 每个项目/倡议一行。
答案 1 :(得分:0)
我已将此作为解决方案制作:
DAX:
RunningSum =
CALCULATE(SUM(Impacts[ValCorr]);
FILTER(
ALL(Impacts);
Impacts[ProjectID] = EARLIER(Impacts[ProjectID]) &&
Impacts[Date] <= EARLIER(Impacts[Date])
))
InvestmentDate =
CALCULATE (
FIRSTNONBLANK ( Impacts[Date]; 0 );
FILTER ( ALL ( Impacts ); Impacts[RunningSum] <> 0 )
)
BreakEvenDate =
CALCULATE (
FIRSTNONBLANK ( Impacts[Date]; 0 );
FILTER ( ALL ( Impacts ); Impacts[RunningSum] > 0 )
)
Payback = DATEDIFF(Impacts[InvestmentDate];Impacts[BreakEvenDate];MONTH)
祝你好运!