经过大量的反复试验,我想出了一个解决方案。
第 1 步:构建辅助指标表。这有两个目的:(a) 排除不相关的指标(如收入),以及 (b) 确保成本为负而节省为正。
Metrics Table
第 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 专家,但我怀疑使用这些变量有助于提高计算效率。
编辑:我应该注意,我没有将此度量用作计算列——我只是在数据透视表中使用它,它与上面的“项目”表的“形状”相同——每个项目一行/ 倡议。