如何在DAX中获取单只共同基金的最新NAV日期及投资现值
DAX问题求解:基金投资模型中的最新净值日期与现值计算
数据模型说明
模型包含4张表:
- All_MF:记录不同时间段内各基金产品的投资记录
- ALL_NAV:记录各基金产品每日的NAV(净值)数据
- MF_Details:记录投资的基金产品列表
- Date:标准日期表
问题1:给All_MF表添加对应基金的最新NAV日期计算列
尝试过以下DAX公式,但因All_MF与ALL_NAV未建立关系,返回的是全局最大日期而非单只基金的最新日期:
LatestNAVDt = CALCULATE(MAXX(RELATEDTABLE(ALL_NAV),ALL_NAV[navDate]),ALL(ALL_NAV))
解决方案
由于无表间关系,需通过基金名称字段直接筛选匹配,使用以下公式作为计算列:
LatestNAVDt = CALCULATE( MAX(ALL_NAV[navDate]), ALL_NAV[基金名称] = All_MF[基金名称] )
或使用MAXX配合筛选实现:
LatestNAVDt = MAXX( FILTER(ALL_NAV, ALL_NAV[基金名称] = All_MF[基金名称]), ALL_NAV[navDate] )
问题2:基于最新NAV计算投资当前现值
现有度量值可获取所选年份最新日期的NAV值,但不知如何计算投资现值:
NAVValue = var MaxNavDt = MAXX(RELATEDTABLE(ALL_NAV),ALL_NAV[navDate]) Return CALCULATE(MAXX(RELATEDTABLE(ALL_NAV),ALL_NAV[navValue]), FILTER(ALL_NAV,ALL_NAV[navDate] = MaxNavDt))
解决方案
投资现值为持有份额 × 最新NAV值,分两步实现:
- 先定义获取单只基金最新NAV的度量值:
最新NAV值 = VAR 当前基金 = SELECTEDVALUE(All_MF[基金名称]) VAR 基金最新日期 = CALCULATE(MAX(ALL_NAV[navDate]), ALL_NAV[基金名称] = 当前基金) RETURN CALCULATE(MAX(ALL_NAV[navValue]), ALL_NAV[基金名称] = 当前基金 && ALL_NAV[navDate] = 基金最新日期)
- 再定义计算总现值的度量值:
投资当前现值 = SUMX( All_MF, All_MF[持有份额] * [最新NAV值] )
若All_MF表中无直接的持有份额字段,可通过投资金额除以投资当日NAV计算份额,调整公式为:
投资当前现值 = SUMX( All_MF, (All_MF[投资金额] / All_MF[投资当日NAV]) * [最新NAV值] )
补充说明
Axis Midcap Fund - Direct Plan - Growth的NAV数据截止到10/19,另外两只基金截止到10/20。
内容的提问来源于stack exchange,提问作者Sunil
相关产品推荐
相关产品推荐

