Power BI中按Name分组计算Sales众数的DAX公式求助
问题
现有表格包含Name、Day、Sales、“Global” mode、“Mode, grouped on Name”列,需要计算**按Name分组的Sales字段众数(出现频率最高的值)**并作为列展示。目前已有计算全局众数的DAX公式:
"Global" mode = VAR T1 = SUMMARIZE( Table1, Table1[Sales], "Count", COUNTROWS( Table1 ) ) VAR MostRepeated = MAXX( T1, [Count] ) RETURN MAXX( T1, IF( [Count] = MostRepeated, Table1[Sales] ) )
尝试修改该公式实现分组众数计算但未成功,寻求正确的DAX写法。
解决方案
要实现按Name分组的众数计算,核心是将计算范围限定在当前Name的上下文内,以下是修正后的DAX公式:
"Mode, grouped on Name" = VAR GroupedSales = SUMMARIZE( -- 限定当前计算上下文为当前行的Name分组 CALCULATETABLE(Table1, ALLEXCEPT(Table1, Table1[Name])), Table1[Sales], "SalesCount", COUNTROWS(Table1) ) VAR MaxFrequency = MAXX(GroupedSales, [SalesCount]) -- 返回出现频率最高的Sales值,若有多个则取最大值 RETURN MAXX(FILTER(GroupedSales, [SalesCount] = MaxFrequency), Table1[Sales])
关键修改说明
- 使用
CALCULATETABLE + ALLEXCEPT:保留当前行的Name筛选上下文,移除其他所有筛选,确保只统计当前Name下的Sales数据。 SUMMARIZE:针对每个Name分组,统计不同Sales值的出现次数。- 最后通过
MAXX筛选出频率最高的Sales值,若存在多个众数(多个值出现次数相同且均为最高),会返回其中最大的Sales值。
如果需要返回所有众数(用逗号分隔),可以将最后一行的MAXX替换为CONCATENATEX:
RETURN CONCATENATEX(FILTER(GroupedSales, [SalesCount] = MaxFrequency), Table1[Sales], ", ")
内容的提问来源于stack exchange,提问作者Martin Øyn
相关产品推荐
相关产品推荐

