You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DAX计算指定日期下合同原值扣减累计摊销后的现值

DAX实现合同摊销现值计算方案

前置准备

建议先将原始宽表(年度为列的结构)通过Power Query逆透视为长表结构,更适配DAX的计算逻辑,逆透视后保留字段:

  • 合同编号
  • Original Value(合同原值)
  • 摊销年度(文本/数值格式,对应原列名2011、2012等)
  • 年度摊销额(对应原年度列的数值)

方案1:度量值方案(适配矩阵视觉对象动态展示)

可直接用度量值在矩阵中按合同编号行、年度列展示现值,DAX代码如下:

摊销现值 = 
VAR CurrentYear = SELECTEDVALUE('摊销表'[摊销年度]) // 获取当前上下文的年度
VAR CumAmortization = CALCULATE(
    SUM('摊销表'[年度摊销额]),
    ALLEXCEPT('摊销表','摊销表'[合同编号]),
    '摊销表'[摊销年度] <= CurrentYear
) // 计算当前合同到当前年度的累计摊销额
VAR OriginalValue = SELECTEDVALUE('摊销表'[Original Value])
RETURN
IF(
    CumAmortization = 0, // 累计摊销为0说明未到摊销起始日
    0,
    OriginalValue - CumAmortization
)

将合同编号放到矩阵行,摊销年度放到矩阵列,上述度量值放到值区域,即可得到目标现值展示结果,年度列名可按需修改为PV+年度的格式。

方案2:宽表直接生成计算列方案(无需调整原表结构)

如果不打算修改原始表结构,可直接在原宽表中逐列生成PV计算列,以PV2011为例,计算列代码如下:

PV2011 = 
VAR CumAmortization = [2011]
RETURN IF(CumAmortization=0,0,[Original Value]-CumAmortization)

PV2012的代码对应调整累计摊销范围即可:

PV2012 = 
VAR CumAmortization = [2011]+[2012]
RETURN IF(CumAmortization=0,0,[Original Value]-CumAmortization)

后续年度按相同逻辑累加对应年度的摊销额即可,计算结果完全匹配你给出的预期值。

内容的提问来源于stack exchange,提问作者LuckAss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:45:01