#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...
)
это даст вам прирост ~ на 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 строк — неудивительно, что все происходит немного медленно. Попробуйте предложенную адресацию.