Як використовувати ARRAYFORMULA з QUERY у Google Таблицях


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 Таблиці не видає жодних помилок, тому я не знаю, що я роблю неправильно. Як я можу змусити ARRAYFORMULA працювати зі своїм ЗАПИТАННЯм, щоб мені не довелося повторювати формулу в кожному рядку?


Щоб підтримати коментар червоного червоного вина про загортання формули Query () з Arrayformula. Зайве обгортання будь-якої формули, яка вже повертає / створює результат типу масиву. Тобто не застосовувати Arrayformula до "Filter", Unique, "Transpose" тощо.
Xzila

1
Також більшу частину часу, коли ви можете використовувати Запит, формула Filter буде працювати. Б'юсь об заклад, що ви можете вирішити свою проблему простіше таким чином.
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обробки масиву масивів або виконання масиву рядків запитів.

У вас є два варіанти: (a) повторення queryв кожному рядку; (b) використовувати vlookupдля отримання стовпців даних, як пояснено нижче. Наприклад:

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

приймає один елемент E3: E за один раз, знаходить цей елемент у стовпці A і отримує відповідний елемент стовпця J. При такому підході вам знадобиться шість окремих vlookups, щоб отримати стовпці 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
Rubén
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.