Power Query递归创建列问题:固定EMI下月供本息计算报错
EMI贷款计算问题及尝试方案
EMI计算公式
Number.Round((rate/12*pv)/(1-Number.Power(1+rate/12,-nper)),0)
参数说明:
PV:初始贷款金额Rate:初始利率nper=180:贷款期限(单位:月)
本次计算得出 EMI=107485
固定EMI下的每月利息与本金计算规则
利息计算公式:上期余额 × 利率/12 × 计息天数/上月天数;若利率变动,则按新利率适用天数分段计算。
本金与剩余余额公式:
Principal = EMI - Interest paid New Balance = Previous Balance - Principal
当前问题
计算利息时无法正确引用上期余额,导致通过上述函数创建的利息、本金及余额列全部报错。
已尝试的递归函数方案
1. 计算初始EMI的PMT函数
PMT (pv,rate,nper)=> let payment = Number.Round((rate/12*pv)/(1-Number.Power(1+rate/12,-nper)),0) in payment
2. 计算利息的Get_InterestValue函数(Index Value为还款期数/行号)
Get_InterestValue (indexValue,table,rate,no_of_days,no_of_days_in_Month)=> let prev_idx=indexValue-1, previousbal = get_previous_balance(indexValue,table), interest=previousbal*rate/12/no_of_days_in_Month*no_of_days in interest
3. 计算已还本金的GetPrincipalPaid函数
GetPrincipalPaid (indexvalue,table,EMI_amount,Interest_amount)=> let principal_amount= EMI_amount-Interest_amount in principal_amount
4. 计算上期余额的get_previous_balance函数(fParameter函数用于读取初始参数表)
get_previous_balance (index_value,table)=> let prev_idx=index_value-1, prev_bal=if prev_idx=0 then fParameter("ParameterTable","Initial_Loan_Amount") else Table.SelectRows(table, each ([Index] = prev_idx)){0}[Bal] in prev_bal
内容的提问来源于stack exchange,提问作者Kiran Jain
相关产品推荐
相关产品推荐

