如何用Excel公式按产品提取溢出数组中每个类别的前1条数据?
按类别提取溢出数组中每组第一条数据的Excel公式方案
问题分析
你通过GROUPBY生成的溢出数组(H66#)中,每个Product对应多行数据,需要提取每组的第一条记录。之前使用的BYROW+UNIQUE+FILTER+TAKE公式出错,核心原因是BYROW对输出维度的要求严格,当FILTER返回的数组结构不匹配时会触发错误。
推荐解决方案:直接在原GROUPBY中实现
既然你是通过GROUPBY生成的汇总数据,无需额外处理溢出数组,直接修改原公式即可一步到位获取每个Product的第一条完整数据:
=GROUPBY( SL_2025[Product], HSTACK(SL_2025[Product],SL_2025[Description],SL_2025[Root Cause],SL_2025[Total Adjusted Shortage]), LAMBDA(x, TAKE(x, 1)), 0, 0, -4, COUNTIF(Filters!C2#, SL_2025[Sales Office])*COUNTIF(Filters!G2#, SL_2025[Fiscal Week]) )
- 关键调整:
- 将原
SUM聚合函数替换为自定义LAMBDA,用TAKE(x,1)直接提取每组的第一条完整记录 - 分组键仅保留
SL_2025[Product],确保严格按产品分组
- 将原
备选方案:基于已生成的溢出数组H66#处理
如果必须基于已有的H66#溢出数组操作,用MAP替代BYROW适配维度,同时优化空值处理:
=MAP(UNIQUE(CHOOSECOLS(H66#, 1)), LAMBDA(prod, TAKE(FILTER(H66#, CHOOSECOLS(H66#, 1)=prod, ""), 1) ))
- 替换
BYROW为MAP:MAP会自动适配每个唯一产品的输出结构,避免维度不兼容错误 - 将
FILTER的默认占位值从0改为空字符串"",避免无匹配时出现无效数值
兼容旧版Excel的方案(无LAMBDA函数支持)
如果你的Excel版本不支持LAMBDA系列函数,可使用INDEX+XMATCH组合实现:
=INDEX(H66#, XMATCH(UNIQUE(CHOOSECOLS(H66#, 1)), CHOOSECOLS(H66#, 1), 0), SEQUENCE(COLUMNS(H66#)))
- 原理:通过
XMATCH定位每个唯一Product首次出现的行号,再用INDEX提取该行的所有列数据
内容的提问来源于stack exchange,提问作者Dainius
相关产品推荐
相关产品推荐

