Power BI中基于每日价格动态计算多股票组合收益率的需求
计算多独立表股票的组合累计收益率(Power BI DAX)
你已经实现了单只股票的累计收益率度量值,现在要基于独立表的三只股票计算组合收益率,以下是具体实现方案:
1. 确认单只股票收益率度量值
首先确保你的单只股票收益率度量值(以Apple为例)完整包含-1的计算,修正后的公式如下:
ReturnsApple = DIVIDE ( LASTNONBLANKVALUE ( Apple[Date], MAX(Apple[Close]) ), CALCULATE ( FIRSTNONBLANKVALUE ( Apple[Date], MAX(Apple[Close]) ), OFFSET( -1, ALLSELECTED ( Apple[Date] ), ORDERBY( Apple[Date], ASC ) ) ) ) - 1
按照相同逻辑,你应该已经对应创建了ReturnsAmazon和ReturnsMeta两个度量值。
2. 构建组合收益率度量值
直接基于已有的单只收益率度量值,编写组合收益率的DAX公式:
Composite Returns = VAR AppleReturn = [ReturnsApple] VAR AmazonReturn = [ReturnsAmazon] VAR MetaReturn = [ReturnsMeta] RETURN (1 + AppleReturn) * (1 + AmazonReturn) * (1 + MetaReturn) - 1
3. 适配统一日期上下文(关键优化)
因为三只股票的数据存储在独立表中,若你的可视化使用某一只股票的日期作为筛选条件(比如用Apple的日期切片器),可能出现其他股票收益率的日期范围不匹配的情况。此时需要调整单只收益率度量值,强制对齐到同一筛选日期范围:
以ReturnsAmazon为例,调整后的公式:
ReturnsAmazon = VAR SelectedDateRange = ALLSELECTED(Apple[Date]) VAR MinSelectedDate = MINX(SelectedDateRange, Apple[Date]) VAR MaxSelectedDate = MAXX(SelectedDateRange, Apple[Date]) RETURN DIVIDE ( LASTNONBLANKVALUE ( Amazon[Date], MAX(Amazon[Close]) ), CALCULATE ( FIRSTNONBLANKVALUE ( Amazon[Date], MAX(Amazon[Close]) ), Amazon[Date] >= MinSelectedDate && Amazon[Date] <= MaxSelectedDate, OFFSET( -1, ALLSELECTED ( Amazon[Date] ), ORDERBY( Amazon[Date], ASC ) ) ) ) - 1
同理修改ReturnsMeta,将Apple[Date]替换为你可视化中使用的基准日期表字段即可。
4. 处理缺失数据的情况
如果某只股票在筛选时间段内无交易数据,可以用COALESCE将空收益率转为0,避免组合收益率计算出错:
Composite Returns = VAR AppleReturn = COALESCE([ReturnsApple], 0) VAR AmazonReturn = COALESCE([ReturnsAmazon], 0) VAR MetaReturn = COALESCE([ReturnsMeta], 0) RETURN (1 + AppleReturn) * (1 + AmazonReturn) * (1 + MetaReturn) - 1
内容的提问来源于stack exchange,提问作者jamesbond
相关产品推荐
相关产品推荐

