如何使用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
相关产品推荐
相关产品推荐

