我有一个长表(5万行和15列),其中不同的用户使用Google表单报告状态(该表始终按时间顺序排序),我想获取每个用户的最新报告。我已经做到了,但是重新加载的时间太长了,我知道我使用的公式对于电子表格来说太重了,但是我找不到更好的方法。
为简化风景,可以将案例应用于以下输入和所需的输出:
输入:
| Timestamp | User | Status |
|:-------------------:|:----:|:--------:|
| 2019-01-03 10:00:30 | A | Started |
| 2019-01-03 10:01:41 | B | Started |
| 2019-01-03 10:02:00 | B | Finished |
| 2019-01-03 10:02:14 | C | Started |
| 2019-01-03 10:03:22 | A | Failed |
| 2019-01-03 10:00:04 | C | Finished |
输出:
| Timestamp | User | Status |
|:-------------------:|:----:|:--------:|
| 2019-01-03 10:02:00 | B | Finished |
| 2019-01-03 10:03:22 | A | Failed |
| 2019-01-03 10:00:04 | C | Finished |
我设法将数据透视表与 user 作为行,将 max(Timestamp) 作为值,然后将该信息提供给公式(也许用INDEX和MATCH会是更好的方法):
OFFSET('Sheet1'!$A$1,ArrayFormula(max(if('Sheet1'!$B:$B=$A3, Row('Sheet1'!$B:$B))))-1,column()-1)
对于每种独特的结果,我还尝试了以下方法。
| Unique users | Query |
|:----------------------:|:-----------------------------------------------------------------------------:|
| =UNIQUE('Sheet1'!$A:$A) | =QUERY('Sheet1'!$A:$C, "SELECT A, C WHERE B='"&B2&"' ORDER BY A DESC LIMIT 1",0) |
根据我的阅读,结合使用ARRAYFORMULA和QUERY可能会提高性能,但是我还无法实现。
答案 0 :(得分:1)
假设列A中的时间戳记,列B中的用户和列C中的状态,请尝试
=Arrayformula(iferror(vlookup(unique (B2:B), sort({B2:B, A2:C}, 2, 0), {2, 3, 4}, 0)))