更新:某些上下文:由IFTTT脚本自动提供的日志包含在工厂中工作的员工的所有签入和签出。我需要建立一份报告,每天都有第一次办理登机手续,以及每天最后一次退房(员工可能会退房吃午饭,但回来后只有第一次办理登机手续,最后一次办理退房手续计数)。
我目前的解决方案是计算"首次登记或上次结账?"布尔,然后将此日志提供到数据透视表中,以便报告过滤掉重复条目
我的电子表格会在D&列中插入数据。 E由第三方应用程序(IFTTT或谷歌表单),我想使用arrayformula自动计算一列作为来自这些应用程序的数据。
(D)Date (E)Time Calc
January 6, Friday 15:06 TRUE
January 6, Friday 15:15 TRUE
January 9, Monday 8:36 TRUE
January 9, Monday 10:04 FALSE
January 9, Monday 10:37 FALSE
January 9, Monday 15:51 TRUE
Calc的公式是
=or(MIN(filter(E:E,D:D=D2,B:B=B2))=E2,MAX(filter(E:E,D:D=D2,B:B=B2))=E2)
如何将此公式转换为数组公式?从我的实验来看,似乎ArrayFormula与Filter不能很好地混合。感谢帮助!
答案 0 :(得分:1)
因此,目标是为每个日期确定E列中的值是该日期的最高值还是最低值。我认为这是一个太多的逻辑,无法打包成一个公式,但可以用两个数组公式表示。第一个创建两个辅助列:
=arrayformula(vlookup(filter(D:D, len(D:D)), query(D:E, "select D, min(E), max(E) group by D", 1), {2, 3}))
这本身就是两个公式的组合:内部query
获得D中每个日期的最小值和最大值E;然后vlookup
将这些最小 - 最大值与原始表的行对齐。由len(D:D)
过滤是出于性能原因,以避免查找大量空单元。
假设第一个公式是G1;然后它形成了列G和H,这导致E1
=arrayformula(not((E:E > G:G) * (E:E < H:H)))
请注意,and
和or
不是数组形式友好的,但可以用*和+代替,这会导致布尔值被隐式转换为0-1。 not
函数是数组友好的,这里部分用于从整数中获取布尔值。
答案 1 :(得分:1)
受到@zaq的启发,我通过重新设计电子表格解决了问题,并使用以下公式得到了解决方案:
=query(query(Sheet1!B:E, "select D, min(E), max(E) group by D pivot C,B ", 1),"select Col1, Col3, Col10,Col4,Col11")
此公式将员工登记和结账日志转换为汇总的&#34;工作时间&#34;表格,包含每天和每位员工的第一次登记入住和最后一次退房。