Получить всю строку, содержащую последнее вхождение значения в листе Google - PullRequest
0 голосов
/ 03 января 2019

У меня есть длинная таблица (50 тыс. Строк и 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 |

Мне удалось сделать это комбинируясводная таблица с пользователь в качестве строки и макс (метка времени) в качестве значения, а затем передает эту информацию в формулу (возможно, 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 может улучшить производительность, но мне не удалось это осуществить.

1 Ответ

0 голосов
/ 03 января 2019

Принимая метку времени в столбце A, пользователь в столбце B и статус в столбце C, попытайтесь

=Arrayformula(iferror(vlookup(unique (B2:B), sort({B2:B, A2:C}, 2, 0), {2, 3, 4}, 0)))
...