【问题标题】:using both QUERY and FILTER together in a single statement?在单个语句中同时使用 QUERY 和 FILTER?
【发布时间】:2020-02-19 03:10:07
【问题描述】:

我希望有人可以帮助我;我正在构建一些电子表格来帮助进行时间跟踪。我有一个任务列表,其中包含日期、花费时间、工作类别和客户等条件列。

我想按月过滤这些数据,例如,我想知道我在一个月内花费了多长时间进行通信。这意味着我需要选择 category = 'correspondence' 以及日期都来自一个指定月份的所有行。目前,我必须使用输出到中间表的查询,然后在该表上运行过滤函数以输出到我的最终表。这是我的两个功能:

=QUERY( 'Task List'!A4:F , "select A, B, E, F where C = 'Correspondence'" )

这给了我第一个表,只有类别为“通信”的行。然后,在那张桌子上,我必须运行下一个函数:

=filter(J4:M,J4:J>=date(2015,4,1),J4:J<=date(2015,4,31))

仅获取 4 月份的行。如果可能的话,我想删除中间表(它没有其他用途,只会弄乱我的工作表)。

是否可以将这些语句组合起来,一步完成?

谢谢。

【问题讨论】:

    标签: google-sheets google-query-language


    【解决方案1】:

    确实有可能。

    由于您没有指定要在哪一列中找到日期(在“原始”数据中),因此我假设此示例中的日期位于 F 列。最简单的方法是使用 MONTH()功能。但是,当在 query() 中使用时,此函数将 1 月视为 0 月。这就是我添加 +1 的原因。看看这是否有效?

    =QUERY( 'Task List'!A4:F , "select A, B, E, F where C = 'Correspondence' and month(F)+1 =4 ")
    

    【讨论】:

    • 谢谢,这太棒了!正是我想要的!如果您不介意,还有一件小事:与其在查询中硬编码月份,我将如何引用特定单元格中的值? (我想我必须以某种方式逃避手机号码)
    • 要回答这个问题,=QUERY( 'Task List'!A5:F , "select A, B, E, F where C='Correspondence' and month(A)+1 = "&amp;G1 ) 似乎可以胜任。
    【解决方案2】:

    我遇到了这个问题,需要通过 weeknum() 和 year() 过滤以及通过 contains() 查询。结合查询和过滤功能来满足类似但更动态的日期和文本匹配需求会很有帮助。例如,如果 OP 需要按周显示此数据,则 Google Query Language 中不可用。

    过滤器功能没有包含功能,因此您仅限于精确匹配文本或使用 Reg-Ex。 Query Lanuague 没有 Weeknum 函数。

    在与此问题类似但具有动态时间线(没有硬性设置的月份或日期,例如滚动时间线)以及匹配的文本不准确的情况下(当您需要使用包含查询语言的函数)。 这是在 Google 表格中组合过滤器和查询的示例。

    =(sum(Filter(QUERY(FB!$A:$Z, "select Q where B contains 'Apple'"), Weeknum (QUERY(FB!$A:$Z, "select E where B contains 'Apple'")) = Weeknum($A8))))
    
    

    在此示例中,我查询 Facebook 广告数据导出以查找标题中包含“Apple”一词的任何帖子,并且 Weeknum() 与我的工作表上的当前周匹配,以便将来自多个来源的每周数据拉到一个表来构建报告,随着时间线的运行,需要最少的更新。

    它选择 Q(spend),其中 B(title) 包含 Apple,Weeknum(E) 匹配工作表当前行 (A8) 上的周数。我多次发现这很有用。 Query + Filter Example Sheet Here.

    如果 OP 希望随着月份的推移动态提取此信息,如果 A 列包含月份,则公式可以被拉出,并自动从按匹配月份过滤的查询数据中提取数据。

    =(sum(Filter(QUERY( 'Task List'!A:Z , "select A, B, E, F, J where C contains 'Correspondence'" ), Month(QUERY( 'Task List'!A4:F , "select J where C contains 'Correspondence'" )) = Month('$A2'))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多