You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:42:43