如何为现有SUMX函数添加ALLSELECTED以支持切片器筛选?
解决方案
完全可行,调整后的DAX公式可以同时实现按ASIN和Name聚合sold_count,并响应切片器的筛选。
先看你的原公式,里面的Title[ASIN] = Title[ASIN] && Title[Name] = Title[Name]是冗余条件——对表中每一行来说,这两个等式永远成立,所以原FILTER实际返回整个Title表,SUMX的结果等价于直接SUM(Title[sold_count])。之所以你觉得它能按ASIN和Name聚合,是因为可视化组件(比如矩阵、表格)的行上下文自动帮你做了筛选,但如果要显式控制并确保切片器生效,需要调整公式。
方法1:修改SUMX+FILTER的写法
SUMX( FILTER( ALLSELECTED(Title), Title[ASIN] = EARLIER(Title[ASIN]) && Title[Name] = EARLIER(Title[Name]) ), Title[sold_count] )
ALLSELECTED(Title):限定FILTER的数据源是经过切片器筛选后的Title表,确保切片器的选择会影响聚合范围。EARLIER():引用当前行上下文的ASIN和Name值,让FILTER只筛选出与当前行同ASIN、同Name的行,实现按这两个字段聚合。
方法2:更简洁的CALCULATE写法
如果不需要用SUMX做复杂迭代,用CALCULATE配合SUM会更高效:
CALCULATE( SUM(Title[sold_count]), ALLSELECTED(Title), VALUES(Title[ASIN]), VALUES(Title[Name]) )
ALLSELECTED(Title)保留切片器的筛选上下文;VALUES(Title[ASIN])和VALUES(Title[Name])固定当前行的ASIN和Name维度,确保聚合仅针对当前组的数据。
内容的提问来源于stack exchange,提问作者konsama
相关产品推荐
相关产品推荐

