我要报告:“选择最近有N个状态代码= 2,3,4,5的推销员”。
我的数据的一个结构示例包含35行(包括1个标题行): link。 该文件具有日期,销售代码(销售人员编号),状态代码(交易成功的编号)和其他字段对此不是必需的。
我最终使用了三个公式:
带有QUERY
的{{1}}函数。
在示例数据中,它稍微简单一些-仅从另一张表中获取销售代码,状态代码和日期,然后按日期,销售代码。 A9中的公式:
IMPORTRANGE
带有顺序编号的附加列。 D10中的公式:
=QUERY({Source!D1:E, Source!A1:A}, $B$4, 1)
QUERY函数仅提取N个案例(假设5)。 F9中的公式:
=ArrayFormula(if(len(A10:A), ROW(A10:A) - MATCH(A10:A,A10:A,0) - 8, ))
是否有一种方法可以将所有3个步骤组合为一个步骤,这样我就可以使用一个公式(并且希望速度更快:))获得F10:G24所示的输出?我尝试过的公式(为便于阅读而扩展):
=QUERY(A9:D, "select A, B where D <="&B3, 1)
它给了我错误:
“函数ARRAY_ROW参数2的行大小不匹配。预计为28。实际为991。”
我还尝试了=QUERY(
{
QUERY({Source!D1:E, Source!A1:A}, $B$4, 1),
ArrayFormula(
IF(len(J10:J),
ROW(J10:J) - MATCH(J10:J, J10:J, 0) - 8,
)
)
},
"select Col1, Col2 where Col4 <="&B3,
1
)
和ROW()
中的有限数据范围,但是会产生一个空表。
在原始数据库中,大约有3500行,并且它们会扩展,所以我认为我应该坚持无限范围来自动执行数据提取。
答案 0 :(得分:1)
嗯,这是一个噩梦,TBH –之前曾出现过类似的问题,但没有简单的答案。这是一个草稿,涉及多次重复基本查询-
=ArrayFormula(query({query(A2:E,"select * where E>=2 and E<=5 order by D, A desc"),
row(indirect("2:"&count(filter(E2:E,E2:E>=2,E2:E<=5))+1))-
match(query(A2:E,"select D where E>=2 and E<=5 order by D, A desc"),
query(A2:E,"select D where E>=2 and E<=5 order by D, A desc"),0)
},"select * where Col6<=5"))
但是需要进一步研究,看看它是否可以简化。
这是包含标题的全列版本-我认为还可以
=ArrayFormula(query({query(A:E,"select * where E>=2 and E<=5 order by D, A desc"),
row(indirect("1:"&count(filter(E:E,E:E>=2,E:E<=5))+1))+1-
match(query(A:E,"select D where E>=2 and E<=5 order by D, A desc"),
query(A:E,"select D where E>=2 and E<=5 order by D, A desc"),0)
},"select * where Col6<=5"))