Conditional (if / then / else) logic in Survey123 using numeric answers

19848
12
Jump to solution
03-19-2021 12:40 PM
SilverwoodConsulting
New Contributor II

Hi there,

I'm trying to use conditional if / then / else logic in Survey123 to take a range of numeric values calculated in (question_one) and assign it a value accordingly.

I've tried modifying this script (from: https://doc.arcgis.com/en/survey123/desktop/create-surveys/xlsformformulas.htm#ESRI_SECTION2_BED1A39...😞 

if(condition, a, b)

If the condition evaluates to true, returns a; otherwise, returns b.

if(selected(${question_one}, 'yes') and selected(${question_two}, 'yes'), 'yes', 'no')

 

The conditional logic would be something like:

            if(${question_one} > 1.0 and < 1.9) then assigned_value = '500mm'

            if(${question_one} > 2.0 and < 2.9) then assigned_value = '600mm'

            else(${question_one} > 2.0 and < 2.9) then assigned_value = '700mm'

I've tried this format (and similar variations): 

            if(${Q100} > 0.5), '500'

Note: question_one is a numeric field (decimal) that calculates a total based on other fields in the form (i.e. an average). The assigned_value field would then use that auto-calculated numeric value field and categorize the numeric values based on ranges (i.e. 1.0 to 2.9 or >= 1 and <= 2.9).

Is this possible within Survey123. Does anyone have experience using a similar loop conditional statement?

Thanks in advance for your help!

SJ

12 Replies
RobertAnderson3
MVP Regular Contributor

What is happening when you try to save/run the calculation? The first thing that comes to mind is use the domain values, not the display names as I was encountering this earlier with a colleague.

0 Kudos
BryceHancock
Occasional Contributor

I am trying to evaluate 2 if statements in the calculate field of an xls form and the following works for the 1st statement but not the 2nd (the 2nd statement is in bold):

if(selected(${RMZ_CLASS}, 'CAT_1') or selected(${RMZ_CLASS}, 'CAT_2') or selected(${RMZ_CLASS}, 'CAT_3'), ('100 Feet'), '0 Feet' or if(selected(${RMZ_CLASS},'CAT_4'),('50 Feet'),'0 Feet'))

When I choose CAT_1, 2, or 3 in the list '100 Feet' is returned in the field, but if I choose CAT_4, '0 Feet' is returned, when it should return '50 Feet'.

Anyone have ideas where I am going wrong?

0 Kudos
DougBrowning
MVP Esteemed Contributor

You have 2 else statements and too many parenes try this

if(selected(${RMZ_CLASS}, 'CAT_1') or selected(${RMZ_CLASS}, 'CAT_2') or selected(${RMZ_CLASS}, 'CAT_3'), ‘100 Feet', if(selected(${RMZ_CLASS},'CAT_4'),'50 Feet','0 Feet'))

0 Kudos