2017-04-11 108 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回答为是,每增加1点,仍然需要添加。

回答

1

简单而冗长的方法,这样做是创建一个计算与设定的计算值为2或0最终结果可以通过相加所计算出的项中获得的,如果()语句每一个问题。

凉爽的方式做,这是做这一切在一个XPath表达式。基本上你想创建一个包含所有17个问题的节点集,将它们过滤为值为'yes'的节点集,对过滤后的节点集进行计数并乘以2.您可以在XLSForm中执行此操作,但是我不确定是否可以使用$ {节点}速记。

你必须把所有的问题在一组(并不需要一组标签),之后,你可以这样做:

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

或没有$ {}节点快捷方式(检查的XForm正确的路径):

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

我不知道如果用文字()将通过ODK验证虽然。如果不是,那么可能会有一个表达式会通过并执行相同的操作。 (但是,上面的语法可以在Enketo中运行)。