Cómo usar ARRAYFORMULA con QUERY en Hojas de cálculo de Google

11

Tengo una consulta que debe ejecutarse para cada fila de una lista. Funciona bien cuando se escribe para una sola fila:

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

Eso genera una fila de datos, según se desee. Pero cuando lo envuelvo en ARRAYFORMULA, todavía solo genera una fila en lugar de muchas:

=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 no arroja ningún error, por lo que no sé qué estoy haciendo mal. ¿Cómo puedo hacer que ARRAYFORMULA funcione con mi QUERY para que no tenga que repetir la fórmula en cada fila?

Stobber
fuente
Para respaldar el comentario del vino tinto rojo sobre envolver una fórmula Query () con una Arrayformula. No es necesario ajustar ninguna fórmula que ya devuelva / produzca un resultado de tipo de matriz. Es decir, no aplique Arrayformula a "Filtro", Único, "Transposición", etc.
Xzila
1
Además, la mayoría de las veces puede usar una consulta, la fórmula del filtro funcionará. Apuesto a que puedes resolver tu problema más fácilmente de esa manera.
Xzila
@Xzila Si tiene una manera de hacerlo filter, publique una respuesta: me interesaría tal solución.
2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)La primera parte es solo para reordenar las columnas entre llaves. El segundo es porque A a E parece ser la única columna que importaba cuando B se mira a sí mismo, C se mira a sí mismo, etc. Realmente, aunque un conjunto de datos sería bueno, y tal vez más explicación sobre el problema. Tal vez simplemente no entiendo.
Xzila

Respuestas:

10

La arrayformula(query(...))combinación no es compatible; no existe el concepto de queryprocesar una matriz de matrices o ejecutar una matriz de cadenas de consulta.

Tiene dos opciones: (a) repetir queryen cada fila; (b) se utiliza vlookuppara recuperar columnas de datos, como se explica a continuación. Por ejemplo:

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

toma un elemento de E3: E a la vez, encuentra este elemento en la columna A y recupera el elemento correspondiente de la columna J. Con este enfoque, necesitaría seis búsquedas independientes para obtener las columnas J, I, H, G, F, E, pero no necesitará un comando separado para cada fila.

Una complicación es que vlookupsolo acepta una clave de búsqueda y desea buscar por 4 parámetros,

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

Esto puede solucionarse concatenando estos en una clave de búsqueda: puede tener una columna como Z,

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

que concatena cuatro parámetros de búsqueda en una clave de búsqueda delimitada por tuberías. Haga lo mismo para buscar en la tabla y luego compare estas teclas con vlookup.


fuente
3
Con respecto a la primera declaración, la consulta de anidamiento dentro de arrayformula funciona para el primer argumento. Ver webapps.stackexchange.com/a/97658/88163
Rubén