如何在PowerBI中计算日收益率及累计日复利收益率?
解决方案:Power BI 计算日复利收益率
核心问题分析
你之前的公式存在两个关键错误:
- 逻辑错误:
1+SummaryTable[ROIC_DTD]-1等价于直接使用ROIC_DTD,完全没实现(1+日收益率)相乘的复利逻辑 - 迭代对象错误:直接迭代
SummaryTable会重复计算同一日期下的多条明细,且ALLSELECTED(SummaryTable)会清除行业/区域等筛选上下文,导致计算结果不符合预期
正确度量值写法(推荐使用独立日期表)
Power BI中使用独立日期表是处理时间智能的最佳实践,先创建日期表(如果还没有):
DateTable = CALENDARAUTO()
将DateTable[Date]与RAW_DATA[Date]建立关系,然后创建累计复利收益率度量值:
累计复利收益率 = VAR 选中日期范围 = ALLSELECTED(DateTable[Date]) VAR 每日收益率列表 = ADDCOLUMNS( 选中日期范围, "@当日收益率", [ROIC_DTD] ) VAR 复利乘积 = PRODUCTX(每日收益率列表, 1 + [@当日收益率]) RETURN 复利乘积 - 1
无独立日期表的替代写法
如果暂时不想创建日期表,可以直接使用RAW_DATA中的日期列:
累计复利收益率 = VAR 选中日期范围 = ALLSELECTED(RAW_DATA[Date]) VAR 去重日期列表 = DISTINCT(选中日期范围) VAR 每日收益率列表 = ADDCOLUMNS( 去重日期列表, "@当日收益率", [ROIC_DTD] ) VAR 复利乘积 = PRODUCTX(每日收益率列表, 1 + [@当日收益率]) RETURN 复利乘积 - 1
关键逻辑说明
- 选中日期范围:获取滑块或筛选器指定的日期区间
- 每日收益率列表:为每个日期匹配当前筛选上下文(如行业、区域)下的当日收益率(
ROIC_DTD会自动继承这些筛选) - 复利乘积:对每个日期的
(1+当日收益率)执行乘积运算,模拟Excel的PRODUCT(1+日收益率) - 最终结果:乘积减1得到累计复利收益率
额外优化建议
如果存在当日无数据的情况(收益率为空白),可以修改PRODUCTX部分避免结果空白:
VAR 复利乘积 = PRODUCTX(每日收益率列表, IF(ISBLANK([@当日收益率]), 1, 1 + [@当日收益率]))
内容的提问来源于stack exchange,提问作者purealpha
相关产品推荐
相关产品推荐

