如何从DAX临时表变量中取值填充Sale交易的加权平均Days
DAX实现Sale行加权平均Days匹配方案
核心需求回顾
事实表fTrans中,Transaction = "Sale"的行Days字段为空,需基于关联的多笔Purchase计算加权平均Days;已生成临时表Days_Tbl(含Ticker、Sale date related to respective purchase、加权平均值字段),需将该平均值匹配到fTrans中对应Ticker、Date(Sale行日期)与临时表日期一致的行。
解决方法
1. 修正LOOKUPVALUE用法
之前的错误源于临时表列引用不规范、匹配条件未对齐,按以下步骤调整:
- 先确保
Days_Tbl生成时将加权平均值存入命名列(而非仅变量),示例:
Days_Tbl = ADDCOLUMNS( // 替换为你原有的Purchase与Sale关联分组逻辑 SUMMARIZE( fTrans, fTrans[Ticker], fTrans[Date] // 对应临时表的Sale date字段 ), "WghtdAvgDays", @WghtdAvgDays // 将变量值转为命名列 )
- 在
fTrans中创建计算列,使用规范的LOOKUPVALUE:
WghtdAvgDays_Sale = IF( fTrans[Transaction] = "Sale", LOOKUPVALUE( Days_Tbl[WghtdAvgDays], Days_Tbl[Ticker], fTrans[Ticker], Days_Tbl[Date], fTrans[Date] // 确保日期列匹配 ), fTrans[Days] )
2. 备选方案:CALCULATE + MAXX
若LOOKUPVALUE仍存在关联问题,可改用CALCULATE配合MAXX(因每个Ticker+Sale日期对应唯一平均值,MAXX会返回唯一匹配值):
WghtdAvgDays_Sale = IF( fTrans[Transaction] = "Sale", CALCULATE( MAXX(Days_Tbl, Days_Tbl[WghtdAvgDays]), FILTER( Days_Tbl, Days_Tbl[Ticker] = fTrans[Ticker] && Days_Tbl[Sale date related to respective purchase] = fTrans[Date] ) ), fTrans[Days] )
3. 修正SUMMARIZECOLUMNS的聚合错误
若Days_Tbl用SUMMARIZECOLUMNS生成时聚合值错误,需确保分组维度与加权逻辑正确:
Days_Tbl = SUMMARIZECOLUMNS( fTrans[Ticker], fTrans[Date], // 分组维度:Ticker + Sale日期 "WghtdAvgDays", // 加权平均计算:(Σ(Days*权重)) / (Σ权重),替换为你的权重字段(如数量、金额) DIVIDE( SUMX(RELATEDTABLE(fPurchase), fPurchase[Days] * fPurchase[Quantity]), SUMX(RELATEDTABLE(fPurchase), fPurchase[Quantity]) ) )
内容的提问来源于stack exchange,提问作者leolapa
相关产品推荐
相关产品推荐

