Come utilizzare ARRAYFORMULA con QUERY in Fogli Google


11

Ho una query che deve essere eseguita per ogni riga in un elenco. Funziona bene quando è scritto per una singola riga:

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

Ciò genera una riga di dati, come desiderato. Ma quando lo avvolgo in ARRAYFORMULA, genera comunque solo una riga anziché molte:

=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)
)

Fogli Google non genera errori, quindi non so cosa sto facendo di sbagliato. Come posso fare in modo che ARRAYFORMULA funzioni con QUERY in modo da non dover ripetere la formula su ogni riga?


Per supportare il commento del vino rosso rosso sull'involucro di una formula Query () con un Arrayformula. Non è necessario racchiudere alcuna formula che restituisce / produce già un risultato di tipo array. Vale a dire non applicare Arrayformula a "Filtro", Unico "," Trasponi ", ecc.
Xzila

1
Inoltre, la maggior parte delle volte è possibile utilizzare una query, la formula del filtro funzionerà. Scommetto che puoi risolvere il tuo problema più facilmente in questo modo.
Xzila,

@Xzila Se hai un modo per farlo filter, ti preghiamo di inviare una risposta: sarei interessato a tale soluzione.

2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)La prima parte è solo per riordinare le colonne tra parentesi graffe. Il secondo è perché A a E sembra l'unica colonna che contava quando B guarda se stesso, C guarda se stesso, ecc. Davvero anche se un set di dati sarebbe carino, e forse più spiegazioni sul problema. Forse non capisco.
Xzila,

Risposte:


10

La arrayformula(query(...))combinazione non è supportata; non esiste un concetto di queryelaborazione di una matrice di matrici o di esecuzione di una matrice di stringhe di query.

Sono disponibili due opzioni: (a) ripetere querysu ogni riga; (b) utilizzare vlookupper recuperare colonne di dati, come spiegato di seguito. Per esempio:

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

prende un elemento di E3: E alla volta, trova questo elemento nella colonna A e recupera l'elemento corrispondente della colonna J. Con questo approccio avrai bisogno di sei vlookup separati per ottenere le colonne J, I, H, G, F, E, ma non avrai bisogno di un comando separato per ogni riga.

Una complicazione è che vlookupaccetta solo una chiave di ricerca e si desidera cercare in base a 4 parametri,

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

Questo può essere aggirato concatenandoli in una chiave di ricerca: puoi avere una colonna come Z,

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

che concatena quattro parametri di ricerca in una chiave di ricerca delimitata da pipe. Fare lo stesso per la tabella da cercare, quindi confrontare questi tasti usando vlookup.


3
Per quanto riguarda la prima istruzione, la query di annidamento all'interno di arrayformula funziona per il primo argomento. Vedi webapps.stackexchange.com/a/97658/88163
Rubén
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.