Попытка вставить текстовую функцию в QUERY - как избежать строки в этой ситуации? - PullRequest
0 голосов
/ 19 апреля 2019

Я настраиваю некоторые данные отчета в App Script, используя QUERY over IMPORTRANGE.Все в порядке, пока я не попытаюсь вставить функцию для извлечения короткой строки месяца month [т.е. TEXT (Col4, "MMM")] из столбца даты в запрос.

Насколько я могу сказать, "MMM "должен иметь двойные кавычки, так же как и сам запрос.

Мой код строит функцию по разделам, например так:

  // get base data
  var dataRange = 'IMPORTRANGE("' + dataShtId + '", "VolunteerActivity")';
  var selQuery = 'select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = ' + reportYear + ' ';
  if (reportVolunteer != "") {
    selQuery = selQuery + "and Col1='" + reportVolunteer + "'"; 
  }
  if (reportTeam != "") {
    selQuery = selQuery + "and Col2='" + reportTeam + "'"; 
  }
  selQuery = selQuery + 'group by Col1,Col2,Col4 order by month(Col4) ';
  selQuery = selQuery + "label Col1 'Volunteer', Col2 'Team', SUM(Col3) 'Count', Col4 'Month'";
  var querytext = "";
  querytext = '=QUERY(' + dataRange + ', "' + selQuery + '")';
  Logger.log(querytext);

Эта результирующая функция в порядке:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),Col4 group by Col1,Col2,Col4 order by month(Col4) label Col1 'Volunteer', Col2 'Team', SUM(Col3) 'Count', Col4 'Month'")

Если я теперь изменю Col4, чтобы она возвращала короткую строку месяца без кавычек вокруг MMM [TEXT (Col4, MMM)], я получаю «Невозможно проанализировать строку запроса».

Если я поставлю одинкавычки вокруг MMM [TEXT (Col4, 'MMM')] Я получаю ту же ошибку разбора.

Если я поставлю двойные кавычки [TEXT (Col4, "MMM")], я получу "Ошибка разбора формулы".

Если я ставлю escape-символы перед кавычками [ TEXT (Col4, \ "MMM \") ], я также получаю "Ошибка разбора формулы".

Если яТеперь попробуйте изменить кавычки в коде:

  // get base data
  var dataRange = "IMPORTRANGE('" + dataShtId + "', 'VolunteerActivity')";
  var selQuery = "select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = " + reportYear + " ";
  if (reportVolunteer != "") {
    selQuery = selQuery + 'and Col1="' + reportVolunteer + '"'; 
  }
  if (reportTeam != "") {
    selQuery = selQuery + 'and Col2="' + reportTeam + '"'; 
  }
  selQuery = selQuery + 'group by Col1,Col2,Col4 order by month(Col4) ';
  selQuery = selQuery + 'label Col1 "Volunteer", Col2 "Team", SUM(Col3) "Count", Col4 "Month"';
  var querytext = "";
  querytext = "=QUERY(" + dataRange + ", '" + selQuery + "')";
  Logger.log(querytext);

Я получаю такой результат, который также дает «Ошибка разбора формулы»:

=QUERY(IMPORTRANGE('190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY', 'VolunteerActivity')
, 'select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by month(Col4) label Col1 "Volunteer", Col2 "Team", SUM(Col3) "Count", Col4 "Month"')

Чего мне не хватает?

Редактировать

Для пояснения к приведенным ниже разговорам и игнорирования всех сценариев я попытался заставить функцию работать непосредственно на листе.

Это прекрасно работаетбез формата:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ")

Попытка вставить формат с одинарными кавычками или обратными кавычками приводит к ошибке "невозможно проанализировать строку запроса":

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),format Col4 'MMM' where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ")

Использовать одинарные кавычки или обратные кавычки для оператора выбора (безутверждение формата) выдает ошибку синтаксического анализа формулы:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, 'select Col1,Col2,SUM(Col3),Col4 where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ')

Неудивительно, что вставка формата в вышеприведенное также является ошибкой:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, `select Col1,Col2,SUM(Col3),format Col4 "MMM" where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 `)

Затем я попытался избежать внутренних кавычек:

=QUERY(IMPORTRANGE("190b6pmeTAEPpmRM66lRHpYa3oyo55Wb9nqEiLkoo7bY", "VolunteerActivity")
, "select Col1,Col2,SUM(Col3),format Col4 ""MMM"" where YEAR(Col4) = 2019 group by Col1,Col2,Col4 order by Col4,Col1 ")

Это дает: Невозможно проанализировать строку запроса для параметра функции QUERY 2: PARSE_ERROR: Обнаружено "" format "" format "" в строке 1, столбец 28. Ожидалось одно из: "true" ..."ложный" ...".Если я использую обратную косую черту в качестве escape-символа, как было предложено, я получаю ошибку синтаксического анализа формулы.

Я наконец включаю рабочий раунд, вставляя дополнительный вычисляемый столбец в исходные данные для прохождения месяца.

1 Ответ

0 голосов
/ 19 апреля 2019

попробуйте использовать параметр format в формуле QUERY:

0

или, возможно, обратную цитату ` в вашем скрипте

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...