加快过滤并根据多个条件对结果进行求和?

时间:2018-03-03 01:31:14

标签: google-sheets

我正在过滤,然后根据日期范围汇总交易数据,以及列是否包含多个可能值中的一个。

示例数据

    A      |  B  |                C                                  |   D
-----------|-----|---------------------------------------------------|-------
11/12/2017 | POS | 6443 09DEC17 C , ALDI 84 773 , OFFERTON GB        | -3.87
18/12/2017 | POS | 6443 16DEC17 C , CO-OP GROUP 108144, STOCKPORT GB | -6.24
02/01/2018 | POS | 6443 01JAN18 , AXA INSURANCE , 0330 024 1229 GB   | -220.10

我目前有以下公式,虽然有效,但确实很慢。

=sum(
  iferror(
     filter(
         Transactions!$D:$D, 
         Transactions!$A:$A>=date(A2,B2,1),
         Transactions!$A:$A<=date(A2,B2,31),
         regexmatch(Transactions!$C:$C, "ALDI|LIDL|CO-OP GROUP 108144|SPAR|SAINSBURYS S|SAINSBURY'S S|TESCO STORES|MORRISON|MARKS AND SPENCER , HAZEL GROVE|HAZELDINES|ASDA")
     )
     ,0
  )
) * -1

该公式是单独的表格,只是一年中每个月结果细分的简单视图

  |   A  | B  |     C
--|------|----|----------
1 | 2017 | 12 | <formula>  # December 2017
2 | 2017 | 11 | <formula>  # November 2017
3 | 2017 | 10 | <formula>  # October 2017

有没有办法实现这个更高效的方法?

我尝试使用适用于字符串条件的ArrayFormulaSUMIF,但为日期添加了SUMIFS的更多条件,它就会停止工作。

我无法找到利用INDEX和/或MATCH

的方法

1 个答案:

答案 0 :(得分:1)

=query(filter( {Transactions!$A:$A,
         Transactions!$D:$D},
         regexmatch(Transactions!$C:$C, "ALDI|LIDL|CO-OP GROUP 108144|SPAR|SAINSBURYS S|SAINSBURY'S S|TESCO STORES|MORRISON|MARKS AND SPENCER , HAZEL GROVE|HAZELDINES|ASDA")
     ), "select year(Col1), month(Col1)+1, -1*sum(Col2) group by year(Col1), month(Col1)+1", 0)

结果是这样一个表:

year()  sum(month()1())    sum 
2017                 11    3.87
2017                 12    6.24

根据需要添加标签。带标签的示例查询文本:

"select year(Col1), month(Col1)+1, -1*sum(Col2) group by year(Col1), month(Col1)+1 label year(Col1) 'Year', month(Col1)+1 'Month'"

结果:

Year   Month    sum 
2017      11    3.87
2017      12    6.24

<强>说明

  • 单个公式报告减少了过滤功能的数量,因此必须加快工作速度。
  • 使用过的查询语法。 more info here