基于Reporting date切片器获取Bgt Avg YTD的DAX技术问题
DAX度量值修正方案
问题核心
原度量使用SUM会将符合筛选条件的所有汇率值汇总,而你需要的是对应Currency和Reporting date的单一汇率值,这是返回错误结果的根本原因。
正确度量方案
根据你的数据模型,以下两种方案均可实现需求:
方案1:使用LOOKUPVALUE精准匹配
该函数直接根据物料对应的Currency和切片器选择的Reporting date,从FX Rates表中提取唯一汇率:
Bgt Avg YTD = LOOKUPVALUE( 'FX Rates'[Bgt Avg YTD], 'FX Rates'[Currency], SELECTEDVALUE('GRIP'[Currency]), 'FX Rates'[Reporting date], SELECTEDVALUE('Reporting date'[Reporting date]) )
方案2:修正CALCULATE逻辑(用MAX替代SUM)
如果每个Currency + Reporting date组合在FX Rates表中仅有一条记录,用MAX可以安全返回唯一汇率值,避免SUM的汇总问题:
Bgt Avg YTD = CALCULATE( MAX('FX Rates'[Bgt Avg YTD]), TREATAS(VALUES('GRIP'[Currency]), 'FX Rates'[Currency]), TREATAS(VALUES('Reporting date'[Reporting date]), 'FX Rates'[Reporting date]) )
注:使用TREATAS可以确保筛选上下文正确传递,避免关联关系可能导致的筛选失效。
后续计算
拿到正确汇率后,直接关联GRIP表的Value字段计算即可:
Calculated Value = [Bgt Avg YTD] * SUM('GRIP'[Value])
关键检查项
- 确认表间关联:GRIP表需通过Currency字段关联到Currency表,Currency表关联FX Rates的Currency字段;Reporting date表需同时关联GRIP和FX Rates的Reporting date字段。
- 清理冗余数据:如果FX Rates表中存在同一
Currency + Reporting date的多条记录,需先去重或添加额外筛选条件(如汇率类型)确保唯一匹配。
内容的提问来源于stack exchange,提问作者Jakub Jabłoński
相关产品推荐
相关产品推荐

