在单个语句中同时使用QUERY和FILTER?

时间:2015-04-11 12:55:53

标签: google-sheets google-query-language

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

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

=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月份的行数。如果可能的话,我想删除中间表(没有其他用途,只会弄乱我的表)。

是否可以组合这些语句并一步完成该过程?

感谢。

2 个答案:

答案 0 :(得分:1)

这确实是可能的。

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

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

答案 1 :(得分:0)

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

过滤器功能没有包含功能,因此您只能使用完全匹配的文本或使用Reg-Ex。查询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(花费),其中B(标题)包含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'))))