关于股票交易表中Realised Profit or Loss、Unrealised P&L及股票盈亏贡献measure的创建问询
关于股票交易表中Realised Profit or Loss、Unrealised P&L及股票盈亏贡献Measure的创建问询
Hey there! Great to hear you've picked up a lot with Sam's help—let's tackle these P&L calculations step by step, all using measures (no calculated columns needed, just like you asked!).
1. 已实现盈亏(Realised P&L)度量值
已实现盈亏只针对完成买卖配对的股票,也就是你卖出份额对应的盈亏。我们用DAX做先进先出(FIFO)匹配买卖交易,不用额外计算列:
Realised P&L = VAR SellTransactions = FILTER(Tradebook, Tradebook[Trade Type] = "sell") VAR BuyTransactions = FILTER(Tradebook, Tradebook[Trade Type] = "buy") RETURN SUMX( SellTransactions, // 计算卖出收入 SellTransactions[Quantity] * SellTransactions[Price] // 匹配同一只股票、早于卖出日期的买入成本(FIFO逻辑) - SUMX( FILTER( BuyTransactions, BuyTransactions[Symbol] = SellTransactions[Symbol] && BuyTransactions[Trade Date] <= SellTransactions[Trade Date] ), BuyTransactions[Quantity] * BuyTransactions[Price] ) )
注:这个逻辑优先扣减最早买入的份额成本,和大多数交易平台的计算规则一致,如果你需要其他匹配规则(比如后进先出),可以调整过滤条件。
2. 未实现盈亏(Unrealised P&L)度量值
未实现盈亏针对仍持有的股票,我们先计算剩余持仓量,再用对应股票的最晚交易价作为当前价核算:
Unrealised P&L = VAR CurrentPrices = SUMMARIZE( Tradebook, Tradebook[Symbol], "Latest Price", MAXX(FILTER(Tradebook, Tradebook[Symbol] = EARLIER(Tradebook[Symbol])), Tradebook[Price]) ) VAR TotalBuyQty = SUMX(FILTER(Tradebook, Tradebook[Trade Type] = "buy"), Tradebook[Quantity]) VAR TotalSellQty = SUMX(FILTER(Tradebook, Tradebook[Trade Type] = "sell"), Tradebook[Quantity]) VAR HeldQty = TotalBuyQty - TotalSellQty RETURN IF( HeldQty > 0, // 持仓市值减去总买入成本 HeldQty * LOOKUPVALUE(CurrentPrices[Latest Price], CurrentPrices[Symbol], SELECTEDVALUE(Tradebook[Symbol])) - SUMX(FILTER(Tradebook, Tradebook[Trade Type] = "buy"), Tradebook[Quantity] * Tradebook[Price]), 0 // 无持仓时未实现盈亏为0 )
如果你有单独的实时价格表,把CurrentPrices部分替换成引用该表的价格即可,结果会更准确。
3. 股票盈亏贡献度量值(用于Treemap)
要做Treemap展示每个股票的总盈亏贡献,直接把已实现和未实现盈亏加总即可,这个度量值会自动聚合单只股票的整体盈亏:
Total P&L Contribution = [Realised P&L] + [Unrealised P&L]
把这个度量值拖到Treemap的「值」区域,再将Symbol拖到「类别」区域,就能直观看到每只股票对总盈亏的贡献占比——不管是盈利还是亏损的股票都会展示,完全满足你的需求。
备注:内容来源于stack exchange,提问作者Joker
相关产品推荐
相关产品推荐

