Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
scheibercamo
Contributor III
Contributor III

How do you create a calculated column that subtracts multiple date fields?

Overall, I am unfamiliar with subtracting date fields from one another, much less manipulating them in a set analysis with multiple conditions; much help is appreciated!

I have three date fields:

Date 1

Date 2

Date 3

And a Firm_ID field...

What I want to express, essentially as an "IFERROR" like I can in excel...

If a date in Date 2 occurs before it does in Date 1, I want it to display the count of Firm_IDs that meet that union

Sometimes, however, Date 2 has null values. In that case, I want the number of Firm_IDs for which Date 1 occurs before Date 3 (both Date 1 and Date 3 fields will always be non-null).

Any pointers? Do I need to do this in the load script? Am I overcomplicating this?

1 Reply
JustinDallas
Specialist III
Specialist III

You can do this in the Load Script, or the UI.  Personally, I like to put such calculations in the Load Script.  Let's assume we have a a list of Biscuits and we want to know when the biscuit was eaten because some of them are stale.  Below is an example script, but what you care about is the line here:

LOAD *, If( IsNull(BiscuitStaleDate), 'Not Stale' ,

If( Interval(BiscuitEatenDate - BiscuitStaleDate) > 0,

            1, 'Not Stale')

            ) AS YouAteAStaleBiscuit

Here, I am saying that "not every biscuit has a BiscuitStaleDatedate. If it does have a BiscuitStaleDatedate, make sure the biscuit was eaten before the BiscuitStaleDate.  If the biscuit wasn't eaten by the BiscuitStaleDate, output a '1'.  The staleness is ONLY computed for biscuits that have a BiscuitStaleDate, otherwise I output 'Not Stale'. 

Then, in my UI I can use the following for my dimension and I de-select the "Show Null Values" box.

If( YouAteAStaleBiscuit = 1, BiscuitId, Null())

Here is the script to generate test data, keep in mind, it uses Rand, so data won't be repeatable between runs

MyBiscuits:

LOAD *, If( IsNull(BiscuitStaleDate), 'Not Stale' ,

               If( Interval(BiscuitEatenDate - BiscuitStaleDate) > 0,

                      1, 'Not Stale')

                      ) AS YouAteAStaleBiscuit

;           

LOAD RowNo() + 0 AS BiscuitId, 

If( Rand() > 0.5,

MakeDate(2013, Ceil(Rand() * 12), Ceil(Rand() * 29))) AS BiscuitStaleDate,

    MakeDate(2013, Ceil(Rand() * 12), Ceil(Rand() * 29)) AS BiscuitEatenDate

AUTOGENERATE 20;   

Exit Script

;