You can create fields that are calculated instead of being entered by the user. These fields are called the formula fields. When you create a formula field, you have to specify the formula expression based on which the value for this field is calculated. You can also display the formula value in the Form / Report or only in the Report, based on your requirement. By default, the formula value will be displayed only in the report.
Depending on the output of the formula, the value held by a formula field could be numeric values, text values, dates, and durations. The formula evaluation is nothing but expression evaluation and is explained in detail in Expressions.
Note
Note:
1. To calculate the number of days between any two date fields, ServiceStartDate and ServiceEndDate
((ServiceEndDate - ServiceStartDate) / (1000 * 60 * 60 * 24))
2. To calculate the average marks scored in three subjects, where, English, Maths and Science are the numeric field names.
((English + Maths + Science) / 3)
3. To calculate the sum of all scores and display it as a percentage of total score, where score1, score2 and score3 are the numeric field names and round is a Deluge built-in function.
((score1 + score2 + score3) / 3 * 100).round(2)
4. To calculate the number of hours between any two date and time fields, To_Date and From_Date
((To_Date - From_Date) / (1000 * 60 * 60))
5. To create a unique code for each patient based on their DOB and Name combination, add a Formula field with formula expression as given below:
where,
- DOB.getMonth, returns a number in the range (1 -12), representing the number of the month of the year, on which the date occurs.
- DOB.getDay(), returns a number in the range (1 – 31), representing the number of the day of the month on which the date occurs.
- DOB.getYear(), returns a number representing the year of the date.
For example, if DOB is specified as 07-Sep-1994, with Name as “Henry”, the formula expression specified in the Code field, returns 9henry71994
6. To order the DOB field by month and day, add a formula field with expression,
where,
- DOB.getMonth(), returns a number in the range (1 -12), representing the number of the month of the year, on which the date occurs.
- DOB.getDay(), returns a number in the range (1 – 31), representing the number of the day of the month on which the date occurs.
The formula expression specified in the Order_DOB field, returns: [mm]-[dd]. It makes both the month and date, a two digit number. Otherwise ordering goes wrong like: 1, 10, 11, 12, 2, 3, etc.
To learn more about round() and getsuffix, refer Functions
7. To calculate the age of a person from a given DOB, add a Formula field and specify the formula expression as given below:
Note
If you use a Formula field, the calculated age can be seen only in the Report (i.e) the calculation is done after Form Submit. But, if you use a Number field the Age can be displayed in the Form itself before Submit.This is achieved by adding On user input script to the number field. Refer the sample application named Age Calculation which uses both the Formula Field (Age2) and a Number Field (Age), to calculate age.In the following expression, when the boolean expression is true then variable is assigned with the value of expression1 else value of expression2 will be assigned
<variable> = if(<Boolean expression>, expression1, expression2)
Example 1:
The following formula expression can be used to check for null values in numeric fields. If the value of a numeric field is null, the value 0 is assigned, else the value of the number field is assigned.
Example 2:
The following formula expression can be used to update the value of a field based on the value specified in another field. If the value of sales is greater than cost, the value "Profit" is assigned, else the value "Loss" is assigned.
if(input.sales > input.cost, "Profit","Loss")
Example 3:
The following formula expression can be used in the send mail task to send only those field values that are not null. This expression is used in the "Message" content of the send mail task. Here, Name and Email_1 are field names in the form.
if((input.Name != ""),"\nName : " + input.Name,"") + "<br />\n" + if((input.Email_1 != null),"\nEmail : " + input.Email_1,"") + "<br />"
For complex conditions, if statement can be used in the on add - on success block of Form Actions.
You can use the Deluge round() function to round the result of your formula expression to two decimal places.To perform this action,
The syntax is given below:
Example: (Decimal_field + Number_field).round(2)
In the above example the summation of decimal and number field is rounded off to two digits and the result is displayed.