Соедините две таблицы и посчитайте значения из второй таблицы в Google Sheets - PullRequest
0 голосов
/ 27 июня 2019

У меня есть два листа с данными, такими как:

Sheet 1:

      A   
  --------
1 | Name |
2 | sue  |
3 | bob  |
4 | mary |
5 | john |

Sheet 2:

      A            B           C        D      
  ---------------------------------------------
1 |   ID  | Asignee         | Due | Days Left |
2 | ID001 | sue, bob        |   1 |         5 |
3 | ID002 | sue, mary       |   2 |         8 |
4 | ID003 | bob             |   3 |         2 |
5 | ID004 | bob, john       |   1 |         9 |
6 | ID005 | bob, mary, john |   4 |         1 |
7 | ID006 | sue, bob        |   1 |         8 |
8 | ID007 | john, sue, mary |   2 |         6 |

На третьем листе яхотите объединить и объединить данные, чтобы получить некоторые итоги / числа.

Sheet 3:

      A    B                 C                 D           
  ---------------------------------------------------------
1 | Name | Number Rows | Total Due | Minimum of Days Left |
2 | sue  | 4           | 6         |                    5 |
3 | bob  | 5           | 10        |                    1 |
4 | mary | 3           | 8         |                    1 |
5 | john | 3           | 7         |                    1 |

Для 3-го листа:

  • Имеетто же количество строк и значений, что и Sheet 1
  • Столбец Sheet 3!B - это Количество строк в Sheet 2, где Sheet 2!B содержит Sheet 1!A (или Sheet 3!A)
    • В Sheet 2 есть 4 строки, где Sheet 2!B содержат sue
    • В Sheet 2 есть 5 строк, Sheet 2!B содержат bob
    • В Sheet 2 есть 3 строки, где Sheet 2!B содержат bob
    • В Sheet 2 есть 3 строки, Sheet 2!B содержат bob
  • Столбец Sheet 3!C - это всего из Sheet 2!C, где Sheet 2!B содержит Sheet 1!A (или Sheet 3!A)
  • Столбец Sheet 3!D является наименьшим значением из Sheet 2!D, где Sheet 2!B содержит Sheet 1!A (или Sheet 3!A)

Я смотрелна пустом месте онаэт и не знаю с чего начать.Я думаю, что я должен использовать filter и arrayformula, но я не уверен, как и с чего начать.

1 Ответ

2 голосов
/ 28 июня 2019
=ARRAYFORMULA(QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1, 
 IF(IFERROR(SPLIT(B2:B, ","))<>"", 
 SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"), 
 "select Col1,count(Col1),sum(Col2),min(Col3) 
  group by Col1 
  label count(Col1)'',sum(Col2)'',min(Col3)''"))

Отредактируйте @IMtheNachoMan, чтобы добавить подробности о том, почему / как я думаю, что приведенная выше формула работает:

  • split значения в столбце B и объединить значения в столбце C и столбец D с произвольным значением, которое гарантированно не будет использоваться ни в одном из столбцов
    • , поскольку все обернуто в arrayformula, каждое значение из столбца B split получитобъединенный
  • столбец разбиения B создаст ошибку для строк, которые не имеют значения в столбце B
    • , поэтому if и iferror проверит, не создаст ли разделение ошибку, и если она это сделает, то вернет null вместо конкатенированной строки из первого маркера
  • , в этот момент у нас есть по одной строке для каждогострока в исходной таблице со столбцом B разделена и объединена со столбцами C и D
  • join все строки, использующие второе произвольное значение, которое гарантированно не должно быть ни в одном из столбцов
    • обязательноигнорировать пустые значения
    • там будут пустые значения из строк, в которых не было значений в разбиении от первого маркера
  • split объединенных данных (который не имеет пустых строк (причина предыдущего маркера) на 2-м произвольном значении, которое использовалось
  • transpose, возвращая его в строки
  • trim в каждой строке для удаления пробелов (неконечно, как / где были добавлены пробелы)
  • split столбец в каждой строке с первым произвольным значением
  • используйте это как входные данные для вызова query и используйте агрегатные функциичтобы получить нужные данные

0


, если вам действительно нужно сохранить заказ, сделайте:

=ARRAYFORMULA(IFERROR(VLOOKUP(Sheet1!A2:A, 
 QUERY(SPLIT(TRIM(TRANSPOSE(SPLIT(TEXTJOIN("♀", 1, 
 IF(IFERROR(SPLIT(B2:B, ","))<>"", 
 SPLIT(B2:B, ",")&"♦"&C2:C&"♦"&D2:D, )), "♀"))), "♦"), 
 "select Col1,count(Col1),sum(Col2),min(Col3) 
  group by Col1 
  label count(Col1)'',sum(Col2)'',min(Col3)''"), {1, 2, 3, 4}, 0)))

0

...