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

1271
2
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

1 Solution

Accepted Solutions
DougBrowning
MVP Notable Contributor

You are just having some syntax issues.  

First you always need to build both sides of an And or Or.

if(${question_one} > 1.0 and ${question_one} < 1.9, '500mm', 'no')

123 does not have esleif so it does get harder to chain them together.  But it goes like this

if(${question_one} > 1.0 and ${question_one} < 1.9, '500mm', if(${question_one} > 2.0 and ${question_one} < 2.9, '600mm', if(${question_one} > 2.0 and ${question_one} < 2.9, '700mm', 'none of the above')))

So same logic, it just needs to be written on all one line. if(condition, true, false)  Hope that helps.

View solution in original post

2 Replies
DougBrowning
MVP Notable Contributor

You are just having some syntax issues.  

First you always need to build both sides of an And or Or.

if(${question_one} > 1.0 and ${question_one} < 1.9, '500mm', 'no')

123 does not have esleif so it does get harder to chain them together.  But it goes like this

if(${question_one} > 1.0 and ${question_one} < 1.9, '500mm', if(${question_one} > 2.0 and ${question_one} < 2.9, '600mm', if(${question_one} > 2.0 and ${question_one} < 2.9, '700mm', 'none of the above')))

So same logic, it just needs to be written on all one line. if(condition, true, false)  Hope that helps.

SilverwoodConsulting
New Contributor II

Thank you! This worked out perfect! :)

0 Kudos