Я настраиваю некоторые данные отчета в 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-символа, как было предложено, я получаю ошибку синтаксического анализа формулы.
Я наконец включаю рабочий раунд, вставляя дополнительный вычисляемый столбец в исходные данные для прохождения месяца.