PowerBI中DAX变量表列引用问题及投资组合价值计算求助
PowerBI DAX度量值:修正投资组合价值计算
核心计算逻辑
按股票分组,持仓数量 = 买入总数量 - 卖出总数量,单只股票价值 = 持仓数量 × 当前价格,最终求和得到投资组合总价值。
错误根源
直接引用变量生成的表列无法完成聚合计算,必须先对交易数据按股票分组聚合,得到单只股票的持仓量后,再关联价格做迭代求和。
修正后的DAX度量值(推荐方案:价格存于单独股票价格表)
假设你有StockPrice表,通过StockCode与Tradebook_1建立关系,表中包含CurrentPrice字段:
当前投资组合总价值 = VAR StockPosition = SUMMARIZE( Tradebook_1, Tradebook_1[StockCode], // 按股票代码分组 "持仓数量", CALCULATE(SUM(Tradebook_1[Quantity]), Tradebook_1[TransactionType] = "买入") - CALCULATE(SUM(Tradebook_1[Quantity]), Tradebook_1[TransactionType] = "卖出") ) RETURN SUMX( StockPosition, [持仓数量] * RELATED(StockPrice[CurrentPrice]) // 关联获取当前价格 )
适配价格在同表的情况
如果CurrentPrice直接存在Tradebook_1中(不推荐,当前价格应单独维护),可修改为:
当前投资组合总价值 = VAR StockPosition = SUMMARIZE( Tradebook_1, Tradebook_1[StockCode], Tradebook_1[CurrentPrice], "持仓数量", CALCULATE(SUM(Tradebook_1[Quantity]), Tradebook_1[TransactionType] = "买入") - CALCULATE(SUM(Tradebook_1[Quantity]), Tradebook_1[TransactionType] = "卖出") ) RETURN SUMX(StockPosition, [持仓数量] * [CurrentPrice])
额外优化:过滤负持仓
如果存在卖出多于买入的负持仓情况,可添加MAX函数过滤掉负数:
"持仓数量", MAX( CALCULATE(SUM(Tradebook_1[Quantity]), Tradebook_1[TransactionType] = "买入") - CALCULATE(SUM(Tradebook_1[Quantity]), Tradebook_1[TransactionType] = "卖出"), 0 )
注意事项
- 确保
TransactionType的字段值与代码中的文本完全匹配(比如是"买入"/"卖出"还是英文"Buy"/"Sell")。 - 两张表的
StockCode字段必须建立正确的关系,否则RELATED函数无法生效。
内容的提问来源于stack exchange,提问作者Joker
相关产品推荐
相关产品推荐

