Power BI中如何根据销售额区间匹配对应成本值?
解决根据销售额区间匹配对应成本的问题
咱们先拆解下你当前度量值的问题:
- 你用了
SUM('Cat_VEA0 Cost'[Cost]),这会把所有符合筛选条件的成本值加总,但实际上每个销售额区间对应唯一的成本值,完全不需要求和,应该直接取匹配的单个值。 - 原公式里的
MIN('Cat_VEA0 Cost'[From])和MAX('Cat_VEA0 Cost'[To])是针对整个成本表的全局最值,不是当前要匹配的区间上下限,这会导致筛选逻辑完全跑偏。
方案1:用LOOKUPVALUE实现直观匹配
LOOKUPVALUE是DAX里专门做值匹配的函数,非常适合这种区间匹配场景:
Cost of Sale = VAR CurrentSales = [Sales] RETURN LOOKUPVALUE( 'Cat_VEA0 Cost'[Cost], 'Cat_VEA0 Cost'[From], MAXX(FILTER('Cat_VEA0 Cost', CurrentSales >= 'Cat_VEA0 Cost'[From] && CurrentSales < 'Cat_VEA0 Cost'[To]), 'Cat_VEA0 Cost'[From]), 'Cat_VEA0 Cost'[To], MINX(FILTER('Cat_VEA0 Cost', CurrentSales >= 'Cat_VEA0 Cost'[From] && CurrentSales < 'Cat_VEA0 Cost'[To]), 'Cat_VEA0 Cost'[To]) )
方案2:简化的变量+筛选写法(更易读)
先定义当前销售额变量,再筛选出匹配的区间行,最后取唯一成本值:
Cost of Sale = VAR CurrentSales = [Sales] VAR MatchingCostRow = FILTER( 'Cat_VEA0 Cost', CurrentSales >= 'Cat_VEA0 Cost'[From] && CurrentSales < 'Cat_VEA0 Cost'[To] ) RETURN SELECTEDVALUE(MatchingCostRow[Cost])
方案3:修正你原有的CALCULATE公式
如果想基于你原来的思路调整,只需要把求和改成取唯一值,同时清除不必要的上下文筛选:
Cost of Sale = VAR CurrentSales = [Sales] RETURN CALCULATE( SELECTEDVALUE('Cat_VEA0 Cost'[Cost]), FILTER( ALL('Cat_VEA0 Cost'), CurrentSales >= 'Cat_VEA0 Cost'[From] && CurrentSales < 'Cat_VEA0 Cost'[To] ) )
这里ALL('Cat_VEA0 Cost')是为了确保能遍历所有区间找到匹配项,SELECTEDVALUE会返回唯一匹配的成本值(你的区间是互斥的,所以只会有一个结果)。
验证示例
比如你提到的销售额200,000,它落在From=150000、To=250000的区间,以上三种方案都会正确返回对应的61,298成本值。
内容的提问来源于stack exchange,提问作者JuaBar
相关产品推荐
相关产品推荐

