Вы собираете оценки курсов от участников, используя форму Google.
Каждый участник подаст оценку лидера курса по 5 направлениям. Каждый результат оценки представляет собой комбинацию значения балла и некоторого соответствующего текста, описывающего работу руководителя курса в этих областях.
Вы хотите отслеживать среднее значение оценочных баллов по каждой области успеваемости и в целом по каждому руководителю курса.
У этого вопроса может быть много решений, и этот Ответ следует рассматривать как одно решение.
Этот ответ состоит из трех частей:
- Лист ответов Google Form
- и
onFormSubmit
функция: эта функция Устанавливается триггер и выполняется каждый раз, когда есть ответ формы. Сценарий извлекает значение оценки из соответствующих строк оценки, используя split
, преобразует оценку из строки в текст и добавляет оценку и итоги в дополнительные столбцы на листе ответов Google. - лист анализа с использованием
query
. Это вычисляет средние оценки в каждой области и в целом сгруппированы каждым лидером курса. По мере получения каждой новой формы ответов лист анализа автоматически обновляет среднее значение для существующих лидеров курса или начинает отслеживать новых лидеров курса.
Эта функция должна быть установлена как onForSubmit
триггер.
function buildscore(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var range = e.range;
var row = range.getRow();
var sheetname = range.getSheet().getSheetName();
var sheet = ss.getSheetByName(sheetname);
// create a temporary array to store values and later set values for Columns H to M
var temp = [];
// A) Quality of Communication
var comms = e.namedValues['A) Quality of Communication'][0].split(" ")[0];
comms=+comms;
// B) Enforcement of Rules
var rules = e.namedValues['B) Enforcement of Rules'][0].split(" ")[0];
rules=+rules;
// C) Maturity during event
var maturity = e.namedValues['C) Maturity during event'][0].split(" ")[0];
maturity=+maturity;
// D) Event pace
var pace = e.namedValues['D) Event pace'][0].split(" ")[0];
pace=+pace;
// E) Event quality
var quality = e.namedValues['E) Event quality'][0].split(" ")[0];
quality=+quality;
var total = (comms+rules+maturity+pace+quality)*4;
// push the scores and total onto the temporary array
temp.push(comms);
temp.push(rules);
temp.push(maturity);
temp.push(pace);
temp.push(quality);
temp.push(total);
// update Columns H to M for the scores and total
var targetrange = sheet.getRange(row,8,1,6);
targetrange.setValues([temp]);
return;
}
Введите этот запрос в ячейку A2 листа анализа оценки.
=query('Form Responses 4'!B3:M,
"Select B, Avg(M), Avg(H), Avg(I), Avg(J), Avg(K), Avg(L)
where B is not null
group by B
LABEL B 'UserName', Avg(M) 'Mean Total Score', Avg(H) 'A) Communication',
Avg(I) 'B) Rules', Avg(J) 'C) Maturity',Avg(K)'D) Pace',
Avg(L) 'E) Quality'"
,0)
Лист ответа формы плюс дополнительные столбцы
![Form Response Sheet](https://i.stack.imgur.com/yf9nv.jpg)
Лист анализа оценки
![Evaluation Analysis Sheet](https://i.stack.imgur.com/ukSBK.jpg)