web-dev-qa-db-fra.com

Combiner IMPORTRANGE, SUMIFS, QUERY avec des cellules contenant des chiffres et du texte

Je rencontre un problème en combinant SUMIFS avec ImportRange dans Google Sheets. J'ai trouvé des réponses suggérant de l'imbriquer avec QUERY. Cependant, le problème est que l'un de mes critères n'est pas numérique.

Formule dans la feuille de calcul 2:

=query(ImportRange("https://docs.google.com/spreadsheets/d/1p_F-1tyYhlHfjjE2151T52FvcwGrtKUvB12WSJR0WRT",
 "inquiries.app date.bonus!a4:u"), 
 "select sum (Col13) where (Col13='<>' 
  and Col14 >= date'"&TEXT(today()-30, "yyyy-mm-dd")&"') label sum (Col13) ''")`
  • importe les données de la feuille de calcul 1 à l'aide de ImportRange
  • somme les valeurs de la colonne M (feuille de calcul 1)
  • si la colonne M est non vide et si la date de la colonne N est dans le mois dernier (feuille de calcul 1)

Je reçois un message d'erreur:

#VALUE! Impossible d'analyser la chaîne de requête pour la fonction QUERY paramètre 2: AVG_SUM_ONLY_NUMERIC

FYI
Les valeurs de la colonne M sont

  • vide
  • texte (oui, NA)
  • nombre

Les valeurs de la colonne N sont

  • vide
  • texte (NA)
  • rendez-vous

Comment puis-je obtenir que la condition de requête 1 soit "Col 13 is number"?

De toutes les réponses que j'ai trouvées en ligne, QUERY n'aime pas les données non numériques/les données mixtes. Certaines solutions suggéraient d'utiliser ArrayFormula ou FILTER - mais celles-ci utilisaient des données dans la même feuille de calcul (pas ImportRange.

D'autres solutions utilisaient IF(ISNUMBER)) imbriquée avec ma formule. J'ai également essayé de changer le format de colonne en "texte brut", ce qui n'a pas fonctionné.

Quelques formules que j'ai essayées:

=query(isnumber(ImportRange("https://docs.google.com/spreadsheets/d/1p_F-1tyYhlHfjjE2151T52FvcwGrtKUvB12WSJR0WRT",
"inquiries.app date.bonus!a4:u")),
"select Sum (Col13) where (Col13)='<>' 
 and (Col14)>=date'"&TEXT(today()-30,"yyyy-mm-dd")&"' label sum (Col13) ''")`

Erreur de valeur: impossible d'analyser la chaîne de requête pour le paramètre Function QUERY 2: NO_COLUMN: Col13

=query(ImportRange("https://docs.google.com/spreadsheets/d/1p_F-1tyYhlHfjjE2151T52FvcwGrtKUvB12WSJR0WRT",
 "inquiries.app date.bonus!a4:u"), 
 "select,sum (Col13) where (Col13)='<>' 
  and Col14= date'"&TEXT(today()-30, "yyyy-mm-dd")&"' label sum (Col13) ''")`

Erreur de valeur: impossible d'analyser la chaîne de requête pour le paramètre Fonction QUERY 2: PARSE_ERROR: rencontré "", "", "" à la ligne 1, colonne 7. Attendait l'un de: "true" ... "false" ... " date "..." timeofday "..." datetime "..." timestamp "..." min "..." max "..." avg "..." count "..." sum " ... "no_values" ... "no_format" ... "est" ... "null" ... "year" ... "month" ... "day" ... "hour" .. . "minute" ... "seconde" ... "milliseconde" ... "avec" ... "contient" ... "commence" ... "se termine" ... "correspond à" ... " comme "..." maintenant "..." dateDiff "..." trimestre "..." inférieur "..." supérieur "..." dayOfWeek "..." toDate "... ... ... ... ... ... "(" ... "*" ... "-" ...


Existe-t-il un moyen de faire fonctionner ma formule sans ajouter une nouvelle colonne à mes données source? Je me demande si je peux utiliser ISNUMBER ou ArrayFormula?


ÉDITER

Voici quelques exemples de feuilles: Feuille 2 (contient la formule)Feuille 1 (données source)

Pour résumer, mon problème est QUERY ne pas additionner les nombres dans le Col M (Col13). Dans QUERY j'ai essayé d'utiliser:

  • <> Et <>"" (N'est pas vide)
  • Col13 is not null
  • Col13>0
1
que syrah sarah
=ARRAYFORMULA(SUM(IFERROR(QUERY(IFERROR(IMPORTRANGE(
 "1HrEGCH-MCfeGh952VkpONRfSoLbZVLir5BNgFWK0PH8", "inquiries.app date.bonus!A5:O")*1),
 "select Col13 
  where Col13 is not null 
    and Col14 >="&DATEVALUE(TODAY()-30), 0))))

0

démo de feuille de calcul

1
user0

Le problème est que Column M Et Column N De la feuille de calcul source incluent du texte et des nombres/dates. Les cellules vides ne causent pas de problèmes.

Dans les deux colonnes, vous devez supprimer les valeurs de texte avant de transmettre les valeurs importées à QUERY.

Bien qu'il puisse être apparemment "élégant" d'avoir une seule formule qui fait tout le travail, cela rend la feuille de calcul plus difficile à comprendre, à dépanner et à maintenir, donc au moins en attendant que vous compreniez comment chaque tâche doit être effectuée, évitez d'utiliser l'approche "formule tout-en-un".

  • Utilisez une feuille pour une formule IMPORTRANGE (=IMPORTRANGE(...)). L'étape suivante suppose que cette formule a été ajoutée à une feuille nommée Sheet1.
  • Étant donné que votre formule utilise uniquement Col13 et Col14, vous pouvez utiliser quelque chose comme le suivant comme premier argument de QUERY
    • =ARRAYFORMULA({IF(ISNUMBER(Sheet1!M:M),Sheet1!M:M,),IF(ISNUMBER(Sheet1!N:N),Sheet1!N:N,)}). Disons que cette formule est ajoutée à une feuille nommée Sheet2.
  • Utilisez Sheet2! A: B comme premier argument de QUERY mais au lieu de Col13, Et Col14, Utilisez respectivement A et B.
1
Rubén