Como usar ARRAYFORMULA com QUERY no Planilhas Google

10

Eu tenho uma consulta que precisa ser executada para cada linha de uma lista. Funciona bem quando escrito para uma única linha:

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

Isso gera uma linha de dados, conforme desejado. Mas quando o envolvo em ARRAYFORMULA, ele ainda gera apenas uma linha em vez de muitas:

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

O Planilhas Google não está gerando erros, então não sei o que estou fazendo de errado. Como posso fazer com que o ARRAYFORMULA funcione com meu QUERY, para não precisar repetir a fórmula em todas as linhas?

Stobber
fonte
Para apoiar o comentário do vinho tinto sobre o empacotamento de uma fórmula Query () com um Arrayformula. Não é necessário agrupar qualquer fórmula que já retorne / produza um resultado do tipo array. Ou seja, não se aplicam ARRAYFORMULA para "Filter", único ", 'Transposição', etc.
Xzila
11
Além disso, na maioria das vezes você pode usar uma consulta, a fórmula de filtro funcionará. Aposto que você pode resolver seu problema mais facilmente dessa maneira.
Xzila 8/08/16
@Xzila Se você tem uma maneira de fazer isso filter, poste uma resposta: eu estaria interessado em uma solução desse tipo.
2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)A primeira parte é apenas para reordenar as colunas entre colchetes. A segunda é porque A a E parece ser a única coluna que importava quando B olha para si mesma, C olha para si mesma, etc. Realmente, embora um conjunto de dados seja bom, e talvez mais explicações sobre o problema. Talvez eu simplesmente não entenda.
Xzila 8/08/16

Respostas:

10

A arrayformula(query(...))combinação não é suportada; não há conceito de queryprocessar uma matriz de matrizes ou executar uma matriz de cadeias de consulta.

Você tem duas opções: (a) repita queryem cada linha; (b) use vlookuppara recuperar colunas de dados, conforme explicado abaixo. Por exemplo:

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

pega um elemento de E3: E de cada vez, encontra esse elemento na coluna A e recupera o elemento correspondente da coluna J. Com essa abordagem, você precisaria de seis visualizações separadas para obter as colunas J, I, H, G, F, E, mas você não precisará de um comando separado para cada linha.

Uma complicação é que vlookupaceita apenas uma chave de pesquisa e você deseja pesquisar por 4 parâmetros,

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

Isso pode ser contornado concatenando-os em uma chave de pesquisa: você pode ter uma coluna como Z,

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

que concatena quatro parâmetros de pesquisa em uma chave de pesquisa delimitada por canal. Faça o mesmo para a tabela a ser pesquisada e compare essas chaves usando vlookup.


fonte
3
Em relação à primeira instrução, a consulta de aninhamento dentro de arrayformula funciona para o primeiro argumento. Veja webapps.stackexchange.com/a/97658/88163
Rubén