MAP、LAMBDA、QUERY 函数组合获取 Google 表格中列的总和

问题描述 投票:0回答:1

目标:计算具有相同客户名称和发票编号的所有行条目的总和。

所需功能:

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
错误

google-sheets google-sheets-formula
1个回答
0
投票

使用过滤器的替代解决方案:

根据我对您提供的数据的理解,您想要计算

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))

示例输出:

Output

参考文献:

过滤器

随行

© www.soinside.com 2019 - 2024. All rights reserved.