I have created a survey in Connect. All calculations are working when survey is submitted via field app but many questions with calculations are not sending value to the hosted layer when survey is submitted via web form. Is there a way to submit survey from the web form and still have the fields populate as programmed in the calculation?
Solved! Go to Solution.
@PrachiPatel @DougBrowning This looks like a fundamental inconsistency on how null values are treated.
Take this XLSForm as a simplification of @PrachiPatel 's original expression.
I added the calculation formula also in the hint column, so we can see what expression is being evaluated (Survey123 will replace the variables in the hint with their values).
As seen below, when the value in a2 is cleared, the expression changes to coalesce(10*,0) instead of coalesce(10*10). This works well and as designed in both apps. However, when the expression is evaluated the output is different.
This definitively will need more research from our side. One way or another, I would expect the output to be the same in both apps.
I think that you did well adding coalesce(), but you did not do it all the way. If you use this approach to the expression, the behavior will be consistent in both apps:
coalesce(${a1},0)*coalesce(${a2},0) + coalesce(${a3},0)*coalesce(${a4},0)
Hi. The Survye123 web app interprets XLSForm expressions more strictly than Survey123 Connect and the field app. There are for example some differences in how date-time expressions are handled and also how pulldata() functions can be used. What is the specific expression that is not working for you?
Hi @IsmaelChivite , There are too many questions whose calculations are not working. One example is below -
(coalesce(${HOS_EMP}*${HOS_DOC},0) + coalesce(${OFF_EMP}*${OFF_DOC},0) + coalesce( ${RET_EMP}*${RET_DOC},0) + coalesce(${EAD_EMP}*${EAD_DOC},0) + coalesce(${MED_EMP}*${MED_DOC},0) + coalesce(${GRC_EMP}*${GRC_DOC},0) + coalesce(${ASL_EMP}*${ASL_DOC},0) + coalesce(${WAST_EMP}*${WAST_DOC},0) + coalesce(${LODG_EMP}*${LODG_DOC},0) + coalesce(${EDU_EMP}*${EDU_DOC},0) + coalesce(${MLI_EMP}*${MLI_DOC},0) + coalesce(${PAS_EMP} * ${PAS_DOC},0) + coalesce(${AUTO_EMP}*${AUTO_DOC},0) + coalesce(${PSER_EMP}*${PSER_DOC},0) + coalesce(${LAS_EMP}*${LAS_DOC},0) + coalesce(${CAR_EMP}*${CAR_DOC},0) + coalesce(${OTH_EMP}*${OTH_DOC},0)) div ${TOT_EMP}
All the fields referenced in this calculation have relevance expressions, which is why I have used coalesce.
My apologies, @IsmaelChivite , the calculations work in the field app, but this field with the calculation above is turning up blank when I submit the survey from the web form.
Do you have the bind:type column set to int or decimal?
@DougBrowning the bind type is set to int for the field with calc shared above, but there are others that have bind type set as decimal - some work and some dont.
@PrachiPatel @DougBrowning This looks like a fundamental inconsistency on how null values are treated.
Take this XLSForm as a simplification of @PrachiPatel 's original expression.
I added the calculation formula also in the hint column, so we can see what expression is being evaluated (Survey123 will replace the variables in the hint with their values).
As seen below, when the value in a2 is cleared, the expression changes to coalesce(10*,0) instead of coalesce(10*10). This works well and as designed in both apps. However, when the expression is evaluated the output is different.
This definitively will need more research from our side. One way or another, I would expect the output to be the same in both apps.
I think that you did well adding coalesce(), but you did not do it all the way. If you use this approach to the expression, the behavior will be consistent in both apps:
coalesce(${a1},0)*coalesce(${a2},0) + coalesce(${a3},0)*coalesce(${a4},0)
I am going to work on this suggestion and circle back!
It worked!
Hello, hoping to hop onto this solution as I've hit a similar road block. I have two time fields; start of survey and end of survey. I have a field that I would like to calculate the total time of survey in HH:MM. I found this calculation that works perfectly fine within the app and Survey123 connect but not on the webpage.
concat(int((${End_of_Survey} - ${start_of_surveycollection}) div (1000*60*60)), ":", if(int(((${End_of_Survey} - ${start_of_surveycollection}) div (1000*60)) mod 60) < 10,"0",""), int(((${End_of_Survey} - ${start_of_surveycollection}) div (1000*60)) mod 60))
I've tried utilizing coalesce in various configurations to make it work for the webpage but can't seem to get the right order.