我有一个大型数据集,我想根据各种标准对值进行求和。唯一的问题是其中一些值会重复,因此 SUMIFS 函数会对这些值进行双倍、三倍等计数。是否有一个公式可以让我“告诉”我的 SUMIFS 函数只对每个值计数一次?
我已经包含了一个虚构的数据基本示例以及我正在尝试做的事情,希望这是有意义的。我只想对 HU 小于或大于 400 的每个值求和。我已经展示了手册、正确的结果,以及使用 SUMIFS 时会发生什么。
谢谢!
好的差不多了,但是最后一步有问题,如果你可以访问 Office 365,请使用这个
LET
功能:
=LET(_Data,J1:L16,
_UniData,UNIQUE(_Data),
_Row1,CHOOSECOLS(_UniData,1),
_Row2,CHOOSECOLS(_UniData,2),
_Row3,CHOOSECOLS(_UniData,3),
_Argument1,"HU",
_Argument2,"<"&400,
_Calc,SUMIFS(_Row3,_Row2,_Argument1,_Rows3,Argument2)
我的时间不多了,但 SUMIFS 仍然给出
#VALUE
错误,我不确定为什么,但希望有人可以解决这个问题(或者我明天会调查它)。
这是获得所需输出的一种方法:
• 如果所有类别都需要带有标签,并且如果不包含
Column J
作为条件,则以下将返回包含所有 HU
总计的表格数据,如屏幕截图所示:
• 单元格中使用的公式 N1
=LET(
_Data, J1:L16,
_ReqD, DROP(_Data,,1),
_Vals, TAKE(_ReqD,,-1),
_HU, TAKE(_ReqD,,1),
_Less, SUM(UNIQUE(FILTER(_Vals,(_HU="HU")*(_Vals<400)))),
_Greater, SUM(UNIQUE(FILTER(_Vals,(_HU="HU")*(_Vals>400)))),
HSTACK("Total HU "&{"<400";">400";""}, VSTACK(_Less,_Greater,_Less+_Greater)))
• 如果包含
Column J
作为标准,则使用以下内容:
=LET(
_Data, J1:L16,
_Vals, TAKE(_Data,,-1),
_HU, INDEX(_Data,,2),
_Less, SUM(DROP(UNIQUE(FILTER(_Data,(_HU="HU")*(_Vals<400))),,2)),
_Greater, SUM(DROP(UNIQUE(FILTER(_Data,(_HU="HU")*(_Vals>400))),,2)),
HSTACK("Total HU "&{"<400";">400";""},
VSTACK(_Less,_Greater,_Less+_Greater)))
更短的方法如下:
• 当
<400
=SUM(DROP(UNIQUE(FILTER(J1:L16,(K1:K16="HU")*(L1:L16<400))),,2))
• 当
>400
=SUM(DROP(UNIQUE(FILTER(J1:L16,(K1:K16="HU")*(L1:L16>400))),,2))
另一个,我只是想让它更短,无论如何,这是一种使用
ETA LAMBDA
的方法
=LET(
_Data, J1:L16,
_Vals, TAKE(_Data,,-1),
_HU, INDEX(_Data,,2),
_Less, FILTER(_Data,(_HU="HU")*(_Vals<400)),
_Greater, FILTER(_Data,(_HU="HU")*(_Vals>400)),
_Sum, TOCOL(BYCOL(IFNA(CHOOSECOLS(UNIQUE(HSTACK(_Less,_Greater)),3,6),0),SUM)),
HSTACK("Total HU "&{"<400";">400";""},VSTACK(_Sum,SUM(_Sum))))