首页 文章

使用DAX计算投资回收期

提问于
浏览
1

我正在为资本预算编制一些计算,我的数据模型中有以下两个表

Impact Table

Project Table

我正在尝试在DAX中构建一个计算列,以确定Project表中每个项目的回收期 . 我在这里整理了计算,我只是不确定如何在DAX中执行此操作 .

Logical Steps for Calculating Payback Period:

  • 对于每个项目,找到相关指标的 cumulative sum for each date (包括OpEx储蓄和运营成本,但不包括收入或营运资金)

  • 查找累计和大于零的最小日期( "break-even" date"

  • 查找具有非零实施成本的MIN日期( "Investment date"

  • 找到 difference (in months) between #2 and #3 以确定投资回收期

编辑:

所列项目的答案是7个月 . 我在Excel中构建了一个中间表来开发答案,但我希望能够在带有DAX的PowerPivot表中直接执行此操作 .

Answer

2 回答

  • 0

    我已经把它作为一个解决方案:

    • 创造 Value ,确保成本 - 节省(ValCorr)

    • 创建一个运行总和(RunningSum)

    • 查找投资日期(InvestmentDate)

    • 查找盈亏 balancer 日期(BreakEvenDate)

    • 发现差异(回报)

    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)
    

    结果:
    Result

    祝好运!

  • 0

    经过大量的反复试验,我想出了一个解决方案 .

    第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专家,但我怀疑使用这些变量有助于提高计算效率 .

    编辑:我应该注意到我没有将此度量用作计算列 - 我只是在一个数据透视表中使用它,它与上面的“项目”表格相同“形状” - 每个项目/计划一行 .

相关问题