Как использовать ARRAYFORMULA с QUERY в Google Sheets

11

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

QUERY(MaraRankData,
  "select J,I,H,G,F,E where 
    A='"&E3&"' and 
    B='"&B3&"' and 
    C="&C3&" and 
    D="&D3&"",
  0
)

Это выводит ряд данных, по желанию. Но когда я обертываю его в ARRAYFORMULA, он выводит только одну строку вместо многих:

=ARRAYFORMULA(
  QUERY(MaraRankData,
    "select J,I,H,G,F,E where 
      A='"&E3:E&"' and 
      B='"&B3:B&"' and 
      C="&C3:C&" and 
      D="&D3:D&"",
    0)
)

Google Sheets не выдает никаких ошибок, поэтому я не знаю, что я делаю неправильно. Как я могу заставить ARRAYFORMULA работать с моим QUERY, чтобы мне не приходилось повторять формулу в каждой строке?

Stobber
источник
Чтобы поддержать комментарий красного красного вина об упаковке формулы Query () с Arrayformula. Нет необходимости переносить любую формулу, которая уже возвращает / производит результат типа массива. Т.е. не применяйте Arrayformula для «Filter», «Unique», «Transpose» и т. Д.
Xzila
1
Также большую часть времени вы можете использовать запрос, формула фильтра будет работать. Бьюсь об заклад, вы можете решить свою проблему таким образом.
Xzila
@ Xzila Если у вас есть способ сделать это filter, пожалуйста, напишите ответ: я был бы заинтересован в таком решении.
2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)Первая часть - просто изменить порядок столбцов в фигурных скобках. Вторая причина в том, что от A до E кажется единственным столбцом, который имеет значение, так как B смотрит на себя, C смотрит на себя и т. Д. Действительно, хотя набор данных будет хорошим, и, возможно, более подробное объяснение проблемы. Может быть, я просто не понимаю.
Xzila

Ответы:

10

arrayformula(query(...))Комбинация не поддерживается; не существует концепции queryобработки массива массивов или выполнения массива строк запроса.

У вас есть два варианта: (а) повторить queryна каждом ряду; (б) использовать vlookupдля извлечения столбцов данных, как описано ниже. Например:

=arrayformula(vlookup(E3:E, {A3:A, J3:J}, 2, false))

принимает один элемент E3: E за раз, находит этот элемент в столбце A и получает соответствующий элемент столбца J. При таком подходе вам потребуется шесть отдельных просмотров, чтобы получить столбцы J, I, H, G, F, E, но вам не понадобится отдельная команда для каждой строки.

Сложность заключается в том, что vlookupпринимает только один ключ поиска, и вы хотите искать по 4 параметрам,

A='"&E3&"' and 
B='"&B3&"' and 
C="&C3&" and 
D="&D3&

Это можно обойти, объединив их в один ключ поиска: у вас может быть столбец типа Z,

=arrayformula(E3:E & "|" & B3:B & "|" & C3:C & "|" & D3:D)

который объединяет четыре параметра поиска в один поисковый ключ с разделителями. Сделайте то же самое для таблицы, которую нужно найти, а затем сравните эти ключи, используя vlookup.


источник
3
Что касается первого оператора, запрос вложенности внутри массива формул работает для первого аргумента. См. Webapps.stackexchange.com/a/97658/88163
Рубен