Comment utiliser ARRAYFORMULA avec QUERY dans Google Sheets

11

J'ai une requête qui doit être exécutée pour chaque ligne d'une liste. Cela fonctionne bien lorsqu'il est écrit pour une seule ligne:

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

Cela génère une ligne de données, comme vous le souhaitez. Mais quand je l'enveloppe dans ARRAYFORMULA, il ne sort qu'une seule ligne au lieu de plusieurs:

=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 ne génère aucune erreur, je ne sais donc pas ce que je fais de mal. Comment puis-je faire fonctionner ARRAYFORMULA avec ma QUERY afin de ne pas avoir à répéter la formule sur chaque ligne?

Stobber
la source
Pour soutenir le commentaire du vin rouge rouge sur le conditionnement d'une formule Query () avec une Arrayformula. Il n'est pas nécessaire d'envelopper une formule qui retourne / produit déjà un résultat de type tableau. Par exemple, n'appliquez pas Arrayformula à "Filter", Unique, "" Transpose ", etc.
Xzila
1
De plus, la plupart du temps, vous pouvez utiliser une requête, la formule de filtre fonctionne. Je parie que vous pouvez résoudre votre problème plus facilement de cette façon.
Xzila
@Xzila Si vous avez un moyen de le faire filter, veuillez poster une réponse: je serais intéressé par une telle solution.
2
=FILTER({E:E,F:F,G:G,H:H,I:I,J:J},A3:A=E3:E)La première partie consiste simplement à réorganiser les colonnes entre crochets. La seconde est parce que A à E semble être la seule colonne qui importait car B se regarde, C se regarde, etc. En réalité, un ensemble de données serait bien, et peut-être plus d'explications sur le problème. Peut-être que je ne comprends tout simplement pas.
Xzila

Réponses:

10

La arrayformula(query(...))combinaison n'est pas prise en charge; il n'existe aucun concept de querytraitement d'un tableau de tableaux ou d'exécution d'un tableau de chaînes de requête.

Vous avez deux options: (a) répéter queryà chaque ligne; (b) utiliser vlookuppour récupérer des colonnes de données, comme expliqué ci-dessous. Par exemple:

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

prend un élément de E3: E à la fois, trouve cet élément dans la colonne A et récupère l'élément correspondant de la colonne J. Avec cette approche, vous auriez besoin de six vlookups distincts pour obtenir les colonnes J, I, H, G, F, E, mais vous n'aurez pas besoin d'une commande distincte pour chaque ligne.

Une complication est qu’elle vlookupn’accepte qu’une seule clé de recherche et que vous souhaitez effectuer une recherche sur 4 paramètres,

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

Cela peut être contourné en les concaténant en une seule clé de recherche: vous pouvez avoir une colonne comme Z,

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

qui concatène quatre paramètres de recherche en une seule clé de recherche délimitée par des tuyaux. Faites de même pour la table à rechercher, puis comparez ces clés à l'aide de vlookup.


la source
3
En ce qui concerne la première instruction, la requête Nesting à l'intérieur de arrayformula fonctionne pour le premier argument. Voir webapps.stackexchange.com/a/97658/88163
Rubén