Рассчитайте и обновите оценку в соответствии с выбранным ответом

Я новичок в ODK и XLSForms.

У меня есть несколько вопросов, и на основании ответов мне нужно рассчитать балл.

У меня 17 вопросов, каждый раз, когда человек отвечает да, мне нужно добавить 2 балла в целочисленное поле.

Так что я:

type                name  label           appearnce           required

select_one yes_no1  q1    //question here //appearance quick //required yes

...

select_one yes_no17 q17 ...

А вот поле оценки:

type      name    label

calculate total   Total

Это мое первое задание в моей работе, и я не могу понять, как рассчитать и изменить значение в соответствии с выбранным ответом.

РЕДАКТИРОВАТЬ

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

if ((${q8} = 'yes' or ${q9} ='yes' or ${q11}='yes'), 2, 0)

Поэтому, если на вопросы 8, 9 или 11 ответили "да", добавьте 2 балла к текущему значению, но поле вообще не появилось. И все же нужно добавить, если на вопросы 10, 12, 13 и 14 ответили "да", чтобы добавить 1 балл за каждый.

1 ответ

Решение

Простой, но утомительный способ сделать это - создать вычисление для каждого вопроса с помощью оператора if(), который устанавливает вычисленное значение равным 2 или 0. Окончательный результат можно получить, сложив вычисленные элементы.

Классный способ сделать это - сделать все это в одном выражении XPath. По сути, вы хотите создать набор узлов, который содержит все 17 вопросов, отфильтровать их к тем со значением "да", сосчитать отфильтрованный набор узлов и умножить на 2. Вы можете сделать это в XLSForm, но я не уверен, что вы можете использовать $ Сокращение {узел}.

Вы должны поместить все свои вопросы в группу (без метки группы), после чего вы можете сделать что-то вроде:

count(${grp}/*[text() = 'yes']) * 2

или без ярлыка ${node} (проверьте правильность пути в XForm):

count(/myform/grp/*[text() = 'yes']) * 2

Я не уверен, что использование text() пройдет ODK Validate, хотя. Если нет, то, вероятно, есть выражение, которое пройдет и сделает то же самое. (Тем не менее, приведенный выше синтаксис будет работать в Enketo).

Другие вопросы по тегам