DAX中按商品编号分组计算销售数量平均值的列创建需求
DAX计算列:按商品编号分组求销售数量平均值
要实现按商品编号分组计算销售数量的平均值,你不需要用GROUP BY(它是用于创建汇总表的函数,不适合直接编写计算列),正确的做法是利用DAX的上下文筛选功能,结合CALCULATE和AVERAGE来实现。
方法1:使用ALLEXCEPT(推荐,写法简洁)
假设你的数据表名为Sales,包含列[商品编号]和[销售数量],创建计算列的DAX公式如下:
商品平均销量 = CALCULATE( AVERAGE(Sales[销售数量]), ALLEXCEPT(Sales, Sales[商品编号]) )
ALLEXCEPT会移除除了[商品编号]之外的所有筛选上下文,确保计算的是当前商品所有周的销售数量平均值。
方法2:使用FILTER + EARLIER(手动筛选当前商品的所有行)
如果更习惯手动筛选逻辑,也可以用这个写法:
商品平均销量 = CALCULATE( AVERAGE(Sales[销售数量]), FILTER(ALL(Sales), Sales[商品编号] = EARLIER(Sales[商品编号])) )
EARLIER用于引用当前行的[商品编号]值,FILTER(ALL(Sales))会遍历整个表,筛选出和当前行商品编号一致的所有记录,再计算平均值。
注意事项
- 确保
[销售数量]是数值类型,如果存在文本格式的值,AVERAGE函数会返回错误;空值会被自动忽略,不影响计算。 - 如果你的表中有其他筛选列(比如年份、区域),但你需要的是该商品所有历史周的平均值,上面的公式已经能满足需求,因为
ALLEXCEPT/ALL会移除其他无关筛选。
内容的提问来源于stack exchange,提问作者Sara Zegna Baruffa
相关产品推荐
相关产品推荐

