我需要计算 filtered 表的列中的唯一值。
公式必须位于仅一个单元格中(不得添加带有标志的列),并且必须是非易失性(例如无偏移)
到目前为止,我已经拥有了这只野兽:
=IF(COUNTA(A1:A3043) = SUBTOTAL(3, A1:A3043), SUMPRODUCT(1 * (A1:A3043 <> A2:A3044)),SUM(IF(FREQUENCY(IF(SUBTOTAL(3,OFFSET(A1,ROW(A1:A3043)-ROW(A1),0,1)),MATCH(A1:A3043,A1:A3043,0)),ROW(A1:A3043)-ROW(A1)+1)>0,1)))
但是由于其波动性,在过滤大表时非常慢。
需要明确的是,如果我在下表中过滤“购买的商品”,仅包含值 a,那么我的唯一客户计数将为 4(客户 ID 1、4、5、6):
提前致谢。
要获取相应
Customer
的唯一 Item Purchased
的计数,请使用以下公式
=SUM(IF("a"=$B$2:$B$12, 1/(COUNTIFS($B$2:$B$12, "a", $A$2:$A$12, $A$2:$A$16)), 0))
或
=SUM(--(FREQUENCY(IF($B$2:$B$12="a",MATCH($A$2:$A$12,$A$2:$A$12,0)),ROW($A$2:$A$12)-ROW(A2)+1)>0))
其中,
A2:B12
是数据范围,并将a
替换为购买的任何商品。这是一个数组公式,因此请按 Ctrl+Shift+Enter 提交。
要获取所有购买商品的唯一客户数量,请在
Cell D2
中输入以下公式
=IFERROR(INDEX($B$2:$B$16,MATCH(0,INDEX(COUNTIF($D$1:D1,$B$2:$B$16),0,0),0)),"")
根据需要向下拖动/复制。
然后在
Cell E2
中输入下面的数组公式
=SUM(--(FREQUENCY(IF($B$2:$B$16=D2,MATCH($A$2:$A$16,$A$2:$A$16,0)),ROW($A$2:$A$16)-ROW(A2)+1)>0))
或
=SUM(IF(D2=$B$2:$B$16, 1/(COUNTIFS($B$2:$B$16, D2, $A$2:$A$16, $A$2:$A$16)), 0))
根据需要向下拖动/复制。作为数组公式,请按 Ctrl+Shift+Enter 提交。请参阅图片以供参考。
你可以尝试使用
=SUMPRODUCT((($A$2:$A$12<>"")*SUBTOTAL(3,OFFSET($A$2,ROW($A$2:$A$12)-MIN(ROW($A$2:$A$12)),0)))/COUNTIFS(A2:A12,A2:A12,B2:B12,B2:B12))
这将计算过滤列表中的所有唯一值。您遇到的问题是您需要
OFFSET
才能使行可见。
@Tom 的答案足够接近,但是当只显示一个项目时,它没有正确回答...如果我没有显示过滤器中的最后一项,它会有一些小数,所以这里是一个固定版本:
=SUMPRODUCT(((表13[人]<>"")*SUBTOTAL(3,OFFSET(表13[[#Headers],[人]],ROW(表13[人])-MIN(ROW(表13[人]) ))+1,0)))/COUNTIFS(表13[人],表13[人]))
注意加 1 来固定小数。 我也不知道他为什么看B栏。