如何编写DAX度量值返回各车型销量最高的颜色?
问题描述
现有Sales表,包含Vehicle(车型)、Color(颜色)、Sold(销量)三个字段,数据如下:
| Vehicle | Color | Sold |
|---|---|---|
| Car | Blue | 5 |
| Car | Red | 8 |
| Truck | Silver | 10 |
| Truck | Orange | 4 |
我已经创建了一张包含Vehicle列的表,需要编写DAX度量值,实现如下结果:
| Vehicle | Most Sold |
|---|---|
| Car | Red |
| Truck | Silver |
之前尝试用LOOKUPVALUE函数,但没法像下面这样结合MAX表达式实现需求:
Most Sold = RETURN LOOKUPVALUE(Sales[Color], Sales[Sold], MAX(Sales[Sold])
最优实现方法
方案1:CALCULATE + VALUES(推荐)
这个方案能自动适配当前车型的上下文,就算同一车型有多个颜色销量相同,也会返回所有符合条件的颜色,通用性更强:
Most Sold = VAR MaxSold = MAX(Sales[Sold]) RETURN CALCULATE( VALUES(Sales[Color]), Sales[Sold] = MaxSold )
方案2:修正LOOKUPVALUE用法
如果能保证同一车型里最高销量的颜色唯一,可以用这个方案,需要先锁定当前车型的上下文,再取对应最大销量的颜色:
Most Sold = VAR CurrentVehicle = SELECTEDVALUE('你的表名'[Vehicle]) -- 替换成你已创建的表的Vehicle列名 VAR MaxSold = CALCULATE(MAX(Sales[Sold]), Sales[Vehicle] = CurrentVehicle) RETURN LOOKUPVALUE(Sales[Color], Sales[Vehicle], CurrentVehicle, Sales[Sold], MaxSold)
原代码问题说明
你之前的代码没限定MAX(Sales[Sold])的上下文,它会返回整个Sales表的最大销量(也就是10),而不是当前车型分组内的最大值。同时LOOKUPVALUE没指定车型匹配条件,自然没法正确对应到每个车型的最高销量颜色。
内容的提问来源于stack exchange,提问作者honey_badgerzz
相关产品推荐
相关产品推荐

