按ID判断DAX度量值是否<0,选择对应度量值的实现问题
按ID分组判断DAX度量值的分支逻辑实现
要实现按ID单独检查、统一应用度量的逻辑,核心是先判断当前ID对应的所有行中是否存在度量值<0的情况,再据此返回对应的measure。以下是可行的DAX写法:
Final Measure = -- 获取当前上下文的ID值 VAR CurrentID = SELECTEDVALUE('你的表名'[ID]) -- 判断当前ID下是否存在度量值<0的行 VAR HasNegativeEntry = CALCULATE( -- 取当前ID下度量值的最小值,若最小值<0则说明存在负数 MIN([你的原始度量值]), -- 保留ID筛选,移除其他列的上下文筛选,确保计算的是该ID的所有行 ALLEXCEPT('你的表名', '你的表名'[ID]) ) < 0 -- 根据判断结果返回对应度量 RETURN IF(HasNegativeEntry, [measure2], [measure1])
关键说明:
CurrentID:用SELECTEDVALUE获取当前视觉对象(比如矩阵、表格)中当前行的ID值,确保判断是针对单个ID的。ALLEXCEPT:这里用来移除除ID列外的所有筛选上下文,保证CALCULATE计算的是该ID对应的全部行数据,而不是当前行的单个值。- 用
MIN([你的原始度量值]) < 0替代COUNTROWS(FILTER(...)) > 0,逻辑更简洁——只要该ID下的最小度量值为负,就说明存在负数行。
如果你的场景中需要保留其他全局筛选(比如切片器的筛选),可以把ALLEXCEPT换成ALLSELECTED('你的表名')后再追加ID筛选,写法如下:
Final Measure = VAR CurrentID = SELECTEDVALUE('你的表名'[ID]) VAR HasNegativeEntry = CALCULATE( MIN([你的原始度量值]), ALLSELECTED('你的表名'), '你的表名'[ID] = CurrentID ) < 0 RETURN IF(HasNegativeEntry, [measure2], [measure1])
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

