2017-04-11 5 views
1

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에 답이있는 경우 yes를 입력하여 각각 1 점을 더할 때까지 추가해야합니다.

답변

1

간단하지만 지루한 방법은 계산 된 값을 2 또는 0으로 설정하는 if() 문을 사용하여 각 질문에 대한 계산을 만드는 것입니다. 최종 결과는 계산 된 항목을 더하여 얻을 수 있습니다.

멋진 방법은 하나의 XPath 표현에서 모두 수행하는 것입니다. 기본적으로 모든 17 개의 질문을 포함하는 노드 집합을 만들고, 값 'yes'를 가진 노드 집합을 필터링하고, 필터링 된 노드 집합을 계산하여 2를 곱합니다. XLSForm에서는이 작업을 수행 할 수 있지만 $ {노드} 속기.

당신은 같은 것을 할 수있는 후 (그룹 라벨이 필요하지 않습니다) 그룹에있는 모든 질문을 넣어야 할 것 :

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

또는 $없이 {노드} 바로 가기를 () 올바른 경로에 대해하는 XForms를 확인 :

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

나는 텍스트의 사용은()하지만 만듭니다 유효성 검사를 통과 할 경우 확실하지 않다. 그렇지 않다면 아마 통과 할 것이고 똑같은 표현이있을 것입니다. (그러나 위의 구문은 Enketo에서 작동합니다.)