PowerBI中存在多个最大缺陷值时如何显示首个对应分类?
解决Power BI里多个最大值时显示首个缺陷分类的问题
嘿,我明白你现在遇到的麻烦:用LOOKUPVALUE找最大缺陷值对应的分类时,一旦有多个相同的最大值就报错,想在卡片里只显示首个对应的分类对吧?这就给你搞定!
为啥原来的公式会报错?
LOOKUPVALUE这个函数的脾气很倔——它要求匹配到的结果必须是唯一值,要是有好几行都等于最大值,它就不知道该返回哪个了,直接给你抛那个"Multiple values supplied..."的错误。所以我们得换个思路,主动告诉Power BI:“就算有多个最大值,你给我取第一个就行”。
两种靠谱的DAX写法
方法1:用TOPN精准挑出第一个
NO 1 Defect = VAR MaxDefectValue = MAX('Camera Data'[Value]) RETURN SELECTCOLUMNS( TOPN(1, FILTER('Camera Data', 'Camera Data'[Value] = MaxDefectValue), 'Camera Data'[Attribute], ASC -- 这里可以改排序规则,比如要按原始顺序就换个行号类字段 ), "FirstDefect", 'Camera Data'[Attribute] )
- 先定义变量
MaxDefectValue存储最大值,避免重复计算提升效率 - 用
FILTER把所有值等于最大值的行筛选出来 TOPN(1, ...)从筛选结果里挑第一行,后面的排序规则可以按需调整:比如按分类名称升序,或者数据源的原始录入顺序- 最后用
SELECTCOLUMNS提取出对应的分类值
方法2:用CALCULATE+FIRSTNONBLANK更简洁
NO 1 Defect = VAR MaxDefectValue = MAX('Camera Data'[Value]) RETURN CALCULATE( FIRSTNONBLANK('Camera Data'[Attribute], 1), 'Camera Data'[Value] = MaxDefectValue )
- 同样先获取最大值
CALCULATE帮我们限定上下文:只关注值等于最大值的那些行FIRSTNONBLANK直接返回这些行里第一个非空的分类值,逻辑简单又高效
效果验证
把上面任意一个公式替换你原来的NO 1 Defect度量值,再放到卡片视觉对象中:
- 单个最大值的场景下,和原公式效果完全一致
- 多个相同最大值的场景下,会按你指定的顺序返回首个分类
内容的提问来源于stack exchange,提问作者SomeCrazyProgrammer
相关产品推荐
相关产品推荐

