Альтернатива ЗАПРОСУ, вложенному в COUNTIF для массива столбцов в Google Таблицах

#arrays #google-sheets #countif #google-sheets-formula #google-sheets-query

#массивы #google-sheets #countif #google-sheets-формула #google-sheets-запрос

Вопрос:

В настоящее время у меня есть формула, которая работает очень хорошо, однако она делает мои таблицы чрезвычайно медленными, поскольку я использую более одного из этих COUNTIF запросов.

  =IF($O$1="YT",COUNTIFS(
 QUERY(Contacts!$Q$3:$EZ, "select V,AC,AJ,AQ,AX,BE,BL,BS, BZ ,CG,CN,CU,DB,DI,DP,DW,ED,EK,ER,EY", 0), $T22,       
 QUERY(Contacts!$Q$3:$EZ, "select U,AB,AI,AP,AW,BD,BK,BR,`BY`,CF,CM,CT,DA,DH,DO,DV,EC,EJ,EQ,EX", 0), U$21),    
 COUNTIFS(
 QUERY(Contacts!$Q$3:$EZ, "select T,AA,AH,AO,AV,BC,BJ,BQ, BX ,CE,CL,CS,CZ,DG,DN,DU,EB,EI,EP,EW", 0), $O$1,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
 QUERY(Contacts!$Q$3:$EZ, "select V,AC,AJ,AQ,AX,BE,BL,BS, BZ ,CG,CN,CU,DB,DI,DP,DW,ED,EK,ER,EY", 0), $T22,      
 QUERY(Contacts!$Q$3:$EZ, "select U,AB,AI,AP,AW,BD,BK,BR,`BY`,CF,CM,CT,DA,DH,DO,DV,EC,EJ,EQ,EX", 0), U$21))
  

В основном, что это делает, это выполняет поиск месяца из выпадающего списка на панели мониторинга, а затем подсчитывает количество звонков путем фильтрации категории звонков, продавца и месяца. Причина, по которой у меня есть 2 COUNTIF , заключается в том, что первый вычисляется на основе целого года, следовательно YT = "Year Total"

Вызовы поступают из массива столбцов, отсюда и запрос для разных столбцов. Будем признательны за любую обратную связь.

Я лучше разбираюсь в функциях, чем в app script, но всегда готов учиться, поэтому, если есть решение app script, я был бы более чем благодарен за обучение.

Я с нетерпением жду вашего обучения.

Ответ №1:

вам нужно будет удалить все ваши формулы запроса (все те, которые выглядят как пример в вашем вопросе) и заменить их этой сборкой:

 =IF($G$2="Year Total",
 COUNTA(FILTER(Contacts!V3:V,  Contacts!V3:V=$B12,  Contacts!U3:U=E$11)) 
 COUNTA(FILTER(Contacts!AC3:AC,Contacts!AC3:AC=$B12,Contacts!AB3:AB=E$11)) 
 etc...


,COUNTA(FILTER(Contacts!T3:T,  Contacts!T3:T=$G$2,  Contacts!V3:V=$B12,  Contacts!U3:U=E$11)) 
 COUNTA(FILTER(Contacts!AA3:AA,Contacts!AA3:AA=$G$2,Contacts!AC3:AC=$B12,Contacts!AB3:AB=E$11)) 
 etc...

 )
  

0

это даст вам прирост ~ на 80%

Ответ №2:

Можете ли вы поделиться своими данными или хотя бы опубликовать скриншот, показывающий, как они выглядят? Это всегда помогает понять, что вы хотите сделать.

В любом случае, первое, что я бы сделал, это заменил ваши QUERY() вызовы прямой {} адресацией, что само по себе должно ускорить процесс. Посмотрим, поможет ли это:

  =IF($O$1="YT",
    COUNTIFS(
      {V,AC,AJ,AQ,AX,BE,BL,BS,BZ,CG,CN,CU,DB,DI,DP,DW,ED,EK,ER,EY}, $T22,
      {U,AB,AI,AP,AW,BD,BK,BR,BY,CF,CM,CT,DA,DH,DO,DV,EC,EJ,EQ,EX}, U$21),    
    COUNTIFS(
      {T,AA,AH,AO,AV,BC,BJ,BQ,BX,CE,CL,CS,CZ,DG,DN,DU,EB,EI,EP,EW}, $O$1,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
      {V,AC,AJ,AQ,AX,BE,BL,BS,BZ,CG,CN,CU,DB,DI,DP,DW,ED,EK,ER,EY}, $T22,      
      {U,AB,AI,AP,AW,BD,BK,BR,BY,CF,CM,CT,DA,DH,DO,DV,EC,EJ,EQ,EX}, U$21))
  

Другим возможным простым ускорением было бы удаление любых строк ниже последней строки, для которой у вас есть данные.

Комментарии:

1. Я бы заключил в прямые фигурные скобки, но информация, которую я ищу, находится на другом листе в той же книге, поэтому я запросил «Контакты!$ Q $ 3: $ EZ» Пример листа можно найти по этой ссылке: docs.google.com/spreadsheets/d /…

2. Я понял, что не открывал его для общественности, только для компании. Теперь он открыт.

3. Вы также можете использовать адресацию в фигурных скобках на другом листе, например, вместо «V» используйте «Контакты!V3:V». На данный момент у вас есть 5 x 5 x 6 = 150 вызовов QUERY (), каждый из которых обрабатывает диапазон 20×2000 строк — неудивительно, что все происходит немного медленно. Попробуйте предложенную адресацию.