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

Power BI带年度固定追加额的复利计算DAX度量值问题求助

复利计算需求与DAX解决方案

业务需求

计算2026年至2056年的复利,需满足以下规则:

  • 初始计算基数为2026年的租金总额(SUM(Rents[Current Rent Charge]))
  • 从2027年起每年追加固定金额:2027年追加1.00,2028年及之后每年追加2.00
  • 追加的金额需计入下一年的复利计算基数,即每年的计算基数 = 上一年的复利结果 + 当年追加金额

现有基础度量值

仅实现了初始金额的复利计算,未包含追加金额的滚动复利:

CPI =
VAR selectedyear = MAX(Years[Year])
VAR currentyear = 2026
VAR rate = Rents[Percentage Increase]
RETURN SUM(Rents[Current Rent Charge]) * POWER((1.01 + rate),selectedyear-currentyear)

尝试的改进度量值(未达预期)

该代码仅在初始金额基础上追加固定值后计算复利,未实现滚动累积逻辑:

TEST CPI + 1% Bedrooms =
VAR selectedyear = MAX(Years[Year])
VAR currentyear = 2026 // this might need to be calculated
VAR rate = Rents[Percentage Increase]
VAR AdditionalValue = if(selectedyear-currentyear = 1,1.00,IF(selectedyear-currentyear > 1,2.00,0.00))
VAR Calc = AdditionalValue +SUM(Rents[Current Rent Charge])/COUNT(Rents[HMS Property Ref No#]) * POWER((1.01 + rate),selectedyear-currentyear)
RETURN Calc

核心问题

当前改进代码未基于**上一年度的最终计算结果(含追加金额)**进行复利滚动计算,而是始终以2026年的初始金额为基数,导致结果不符合业务要求。


解决方案:滚动复利迭代计算

要实现逐年滚动的复利+追加逻辑,需通过迭代计算逐年累积每一年的期末值。以下提供两种可行的DAX实现方案:

方案1:时间价值拆分法

将初始金额和每一年的追加金额分别计算到目标年份的复利,再求和,逻辑清晰且计算高效:

CPI with Annual Additions =
VAR SelectedYear = MAX(Years[Year])
VAR Rate = Rents[Percentage Increase]
VAR InitialRent = SUM(Rents[Current Rent Charge])
-- 生成2026到选中年份的连续年份序列
VAR YearRange = GENERATESERIES(2026, SelectedYear)
-- 迭代计算每一笔追加金额的复利价值
VAR CumulativeAdditions =
    SUMX(
        YearRange,
        VAR CurrentYr = [Value]
        VAR YearsElapsed = CurrentYr - 2026
        -- 确定当年的追加金额
        VAR AnnualAdd = 
            SWITCH(
                TRUE(),
                YearsElapsed = 0, 0,       -- 2026年无追加
                YearsElapsed = 1, 1.00,    -- 2027年追加1.00
                2.00                       -- 2028年及以后追加2.00
            )
        -- 计算该笔追加金额到目标年份的复利系数
        VAR CompoundMultiplier = POWER(1.01 + Rate, SelectedYear - CurrentYr)
        RETURN AnnualAdd * CompoundMultiplier
    )
-- 初始租金的复利 + 所有追加金额的复利总和
RETURN InitialRent * POWER(1.01 + Rate, SelectedYear - 2026) + CumulativeAdditions

方案2:逐年滚动迭代法

直接模拟每年的计算过程,每一年的期末值基于上一年的结果复利后加上当年追加金额,更贴合业务逻辑的直观理解:

CPI with Rolling Compound =
VAR SelectedYear = MAX(Years[Year])
VAR Rate = Rents[Percentage Increase]
VAR InitialValue = SUM(Rents[Current Rent Charge])
-- 逐年迭代计算期末值
VAR RollingCalculations =
    GENERATE(
        GENERATESERIES(2026, SelectedYear),
        VAR CurrentYr = [Value]
        VAR PreviousYr = CurrentYr - 1
        -- 获取上一年的期末值
        VAR PreviousEndValue =
            IF(
                CurrentYr = 2026,
                InitialValue,
                CALCULATE(MAX([End Value]), FILTER(ALL(Years[Year]), Years[Year] = PreviousYr))
            )
        -- 确定当年的追加金额
        VAR AnnualAddition =
            IF(CurrentYr = 2027, 1.00, IF(CurrentYr > 2027, 2.00, 0))
        -- 计算当年期末值
        VAR CurrentEndValue = PreviousEndValue * (1.01 + Rate) + AnnualAddition
        RETURN ROW("Year", CurrentYr, "End Value", CurrentEndValue)
    )
-- 返回选中年份的期末值
RETURN MAXX(RollingCalculations, [End Value])

注意事项

  • 确保Years表包含2026至2056的所有年份,且与模型中的其他表(如Rents)建立正确的日期关联。
  • 若Rents[Percentage Increase]是按维度(如物业、区域)区分的,需调整计算逻辑确保利率与对应维度匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 22:17:26