Skip to main content

Logic Calculated Fields

Logic calculated fields can be used to compare two or more values in your data source. They always return "0" or "1", depending on the logical test you submit your values to.

In Reveal, logic calculated fields include:

  • Functions with no arguments: true() and false(), which return 1 and 0 respectively.

  • Complex functions with logical tests. For detailed information on each function, click the corresponding link in the table below.

note

All samples included in the table below were created with the HR Dataset 2016 spreadsheet.

Logic functions:

Function NameSyntax and Sample
and: and runs two logical tests. If the logical test is true, it returns 1. If one or both are false, it returns 0.Syntax: and({logical1},{logical2})
Sample: and([BirthDate]>date(1983, 07, 15, 04, 06, 55),[Department]="CPA")
false: false returns 0, the logical value of false.Syntax: false()
Sample: false()
if: if runs a logical test. If the logical test is true, it returns 1. If the logical test is false, it returns 0.Syntax: if({logical test},{value if true},{value if false})
Sample: if([BirthDate]<(1971,04,15,4,06,55),1,0)
not: not runs a logical test. If the logical test is false, it returns 1. If the logical test is true, it returns 0.Syntax: not({logical})
Sample: not([OfficeId]>=3)
or: or runs two logical tests (if statements). If either one of the logical tests is true, it returns 1. If both are false, it returns 0.Syntax: or({logical1},{logical2})
Sample: or(if([Office]="London,UK",1,0),if([BirthDate]<date(1992,09,15,4,06,55),1,0))
true: true returns 1, the logical value of true.Syntax: true()
Sample: true()

If

With the if function, you can find results that meet certain criteria defined in a logical test. There are three arguments for you to configure:

  • A logical test: the condition your expression needs to meet for the average to be calculated.

  • A value if true: a value the function will output if the logical test is true.

  • A value if false: a value the function will output if the logical test is false.

Basic Samples

Let's take a look at the example in the table above:

if([BirthDate]<date(1971,04,15,4,06,55),1,0)

For clarification purposes, we will separate the function according to the terms we defined above:

Function NameLogical TestValue if trueValue if false
if (…​)[BirthDate]<date(1971,04,15,4,06,55)10

Where your logical test combines an expression in your data source with a logical test.

ExpressionOperatorCriteria Argument
[BirthDate]<date(1971,04,15,4,06,55)

Where the date argument follows the syntax described in date.

Function NameYearMonthDayHourMinuteSecond
date(…​)1971041540655

Let's look at a non-numerical example:

if([Department]="Development",1,0)

Where:

Function NameLogical TestValue if trueValue if false
if (…​)[Department]="Development"10

Sample with Nested if conditions

You can use nested if conditions by preceding them with a logical operator (and, or).

The following is one example with only two if conditions, but you can include as many as necessary:

maxif([Wage], and([OfficeId]=1, [Department]="Development"))

Where:

Function NameExpressionLogical Operator
maxif (…​)[Wage]and

And the if-condition statements are:

  • [BirthDate]>date(1992,09,15,4,06,55)

  • [Department]="Development"

Because the logical operator is and, both conditions need to be true for the maxif aggregation to be carried out.

And and Or

The and and or functions allow you to build nested if conditions by declaring two logical tests that must be applied. Both and and or have the same syntax:

Function NameLogical Test 1Logical Test 2Output
and (…​)logical1logical2If both conditions are met, returns 1. If only one or none of the conditions are met, returns 0.
or (…​)logical1logical2If either both or only one of the conditions is met, returns 1. If none of the conditions are met, returns 0.

Samples

Let's take a look at the following and and or samples:

  • and([BirthDate]>date(1983,07,15,04,06,55), [Department]="CPA")

  • or([Office]="London,UK",[BirthDate]<date(1992,09,15,4,06,55))

The syntax they have is the same:

Function NameLogical Test 1Logical Test 2Output
and (…​)[BirthDate]>date(1983,07,15,04,06,55)[Department]="CPA"1 and 0, depending on the row.
or (…​)[Office]="London,UK"[BirthDate]<date(1992,09,15,4,06,55)1 and 0, depending on the row.

The and calculated field returns only four "TRUE" rows:

  • Row 7 (employee "Zolleis Walker").

  • Row 57 (employee "Yancy Martinez").

  • Row 94 (employee "Nicolas Favarelli")

  • Row 96 (employee "Jorge Stanatto").

You can look at these two rows only if you apply filter by rule or select value "1.00".

If you want to refine your and condition so you only find "Zolleis Walker", you can introduce any one of the following third logical tests:

Function NameLogical Test 1Logical Test 2Logical Test 3
and (…)[BirthDate]>date(1981,07,15,4,06,05)[Department]="CPA"[Wage]>150000
[Office]="Tokyo,Japan"

You can also combine the and/or functions with the isempty calculated fields to get the same results:

Function NameLogical Test 1Logical Test 2Logical Test 3Logical Test 4
and (…​)Same as aboveSame as above[OfficeId]>=3ISEMPTY([ResignedDate])

Because the syntax can be hard to follow with additional arguments, you can nest additional conditions to group your logical tests. The result will not be affected, but make sure that the second and is clearly defined.

and([BirthDate]>date(1981,07,15,4,06,05),[Department]="CPA",[OfficeId]>=3,ISEMPTY([ResignedDate]))

  • Logical Test 1: [BirthDate]>date(1983,07,15,4,06,55)

  • Logical Test 2: [Department]="CPA"

  • Logical Test 3: [OfficeId]>=3

  • Logical Test 4: ISEMPTY([ResignedDate])

Simplifying Complex Calculated Fields

While formulas like the one in the sample above can be useful if you need to get results based on multiple if conditions, their syntax can be hard to follow. You can create separate calculated fields and combine them in a single one to simplify them. For example, let's take a look at the mentioned calculated field:

and([BirthDate]>date(1981,07,15,4,06,05),[Department]="CPA",[OfficeId]>=3,ISEMPTY([ResignedDate]))

There are four IF conditions:

  • [BirthDate]>date(1983,07,15,4,06,55)

  • [Department]="CPA"

  • [OfficeId]>=3

  • ISEMPTY([ResignedDate])

We can create a calculated field for each if condition with a clear enough name:

IF StatementsNew Calculated Field NameCalculated Formula
IF Statement 1Employees Born after July 15, 1981[BirthDate]>date(1981,07,15,4,06,05)
IF Statement 2CPA Employees[Department]="CPA"
IF Statement 3JP, UY and BG Employees[OfficeId]>=3
IF Statement 4Current EmployeesISEMPTY([ResignedDate])

If we combine these new statements in a new calculated field:

and([Employees Born after 1981],[CPA Employees],[JP, UY and BG Employees],[Current Employees])

Not

Using the not function, you can verify whether a logical test is true or not. By default, you will see the following structure when you tap not:

not(logical)

Samples

Function NameLogical Test
not (…​)[OfficeId]>=3)

Where

ExpressionOperator 1Operator 2Criteria Argument
[OfficeId]>=3

Combining not with and/or

You can also use not to get the opposite result of and/or calculated fields.

The following and calculated field will return "1" only for EmployeeId 66 ("Zerbe Johansen"), because only in his case are both if statements true at the same time. All other rows return "0".

Function NameLogical Test 1Logical Test 2
and (…​)[Department]="CPA"[BirthDate]>date(1992,09,15,4,06,55)

By adding a not before the calculated field, you can get the opposite results:

notandLogical Test 1Logical Test 2
not (…​)and (…​)[Department]="CPA"[BirthDate]>date(1992,09,15,4,06,55)

All rows that previously returned "0" will now do "1", and all "1" will be "0".

True and False

The true and false functions are used without arguments, which means that there is no logical test applied; that is, there is no expression or particular statement you are running the logical test against.

They are particularly useful to be used in combination with other logical calculated fields; for example, if. Let's take a look at the general if syntax:

Function NameArgument 1Argument 2Argument 3
if (…​)logical testvalue if truevalue if false

Let's replace this formula with if example at the start of this section (if([BirthDate]<date(1971,04,15,4,06,55),1,0)). Also, let's change the values of the "Value if true" and "value if false" arguments to 3 and 4.

Function NameLogical TestValue if trueValue if false
if (…​)[BirthDate]<date(1971,04,15,4,06,55)34

The output of this if statement will be 3 if the logical test is true, and 4 if the logical test is false. If you want to use the standard 1,0 boolean results, you can include true() and false() in their place.

Function NameLogical TestValue if trueValue if false
if (…​)[BirthDate]<date(1971,04,15,4,06,55)true()false()

This will force your if formula to output 1 and 0 depending on your logical test.