目标:计算具有相同客户名称和发票编号的所有行条目的总和。
所需功能:
MAP()
、LAMBDA()
、QUERY()
QUERY()
数据范围位于另一个工作表上时,上述函数的组合有效,但当查询数据范围与 MAP()
数组位于同一工作表上时,上述函数组合不起作用。=MAP(B6:B,C6:C,LAMBDA(B,C,IF(OR(B="",C=""),"",QUERY(B6:H,"SELECT SUM(H) WHERE B = '"&B&"' AND C = '"&C&"' GROUP BY B LABEL SUM(H)''",0))))
B:客户姓名
C:发票号码
H: 付款金额
L:公式放置的地方
每个客户可以对同一发票号码进行多次付款,直到完成总账单。我可以使用
SUMIFS()
函数来实现此目的,但我必须将公式一直向下拖动,并且如果添加新行,则该公式将不起作用。因此,我想使用 MAP()
、LAMBDA()
和 QUERY()
组合来计算客户针对特定发票编号支付的所有付款的总和。这就像 SUMIFS()
加 ARRAYFORMULA()
,唯一的问题是 SUMIFS()
不能与 ARRAYFORMULA()
一起使用
我一直盯着我的公式,但我真的不明白为什么会出现
#N/A
错误
根据我对您提供的数据的理解,您想要计算
sum of all row entries with the same customer name and invoice number
。
尝试此解决方法: 我没有使用
MAP
,而是使用 JOIN and BYROW function
创建要使用的唯一值。我没有使用 QUERY
,而是使用 FILTER
。
=LET(nv,BYROW(B2:C, LAMBDA(r, join("|",r))), amount, H2:H, ARRAY_CONSTRAIN(BYROW(UNIQUE(nv), LAMBDA(filt,HSTACK(SPLIT(filt,"|"),SUM(FILTER(amount, nv = filt))))),ROWS(UNIQUE(nv))-1,3))