Skip to main content
Announcements
Qlik Introduces a New Era of Visualization! READ ALL ABOUT IT
cancel
Showing results for 
Search instead for 
Did you mean: 
goro2010
Creator
Creator

Multiple "if(WeekDay(Today())" statements

Good Day,

I have written a script, If I just use one weekday in the script, lets say like today = Fri, then I get the correct results as per script below:

if(VisitDay = 'Monday' ,if(WeekDay(Today())='Fri', date(today()+3)),

      if(VisitDay = 'Tuesday' ,if(WeekDay(Today())='Fri', date(today()+4)),

      if(VisitDay = 'Wednesday' ,if(WeekDay(Today())='Fri', date(today()+5)),

      if(VisitDay = 'Thursday' ,if(WeekDay(Today())='Fri', date(today()+6)),

      if(VisitDay = 'Friday' ,if(WeekDay(Today())='Fri', date(today())),

      if(VisitDay = 'Saturday' ,if(WeekDay(Today())='Fri', date(today()+1)))))))) as CallingDay,

      if(VisitDay = 'Monday' ,if(WeekDay(Today())='Fri', date(today()+4)),

      if(VisitDay = 'Tuesday' ,if(WeekDay(Today())='Fri', date(today()+5)),

      if(VisitDay = 'Wednesday' ,if(WeekDay(Today())='Fri', date(today()+6)),

      if(VisitDay = 'Thursday' ,if(WeekDay(Today())='Fri', date(today()+7)),

      if(VisitDay = 'Friday' ,if(WeekDay(Today())='Fri', date(today()+3)),

      if(VisitDay = 'Saturday' ,if(WeekDay(Today())='Fri', date(today()+3)))))))) as Deliveryday

Proof:

111111.PNG

But when I have my full weekdays as per my script below, then no values is being populated?? - What could be the reason?

if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Wed', date(today()+5)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Wed', date(today()+6)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Wed', date(today())),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Wed', date(today()+1)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Wed', date(today()+2)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Wed', date(today()+3)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Mon', date(today())),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Mon', date(today()+1)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Mon', date(today()+2)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Mon', date(today()+3)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Mon', date(today()+4)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Mon', date(today()+5)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Tue', date(today()+6)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Tue', date(today())),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Tue', date(today()+1)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Tue', date(today()+2)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Tue', date(today()+3)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Tue', date(today()+4)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Thu', date(today()+4)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Thu', date(today()+5)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Thu', date(today()+6)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Thu', date(today())),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Thu', date(today()+1)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Thu', date(today()+2)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Fri', date(today()+3)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Fri', date(today()+4)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Fri', date(today()+5)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Fri', date(today()+6)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Fri', date(today())),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Fri', date(today()+1)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Sat', date(today()+2)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Sat', date(today()+3)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Sat', date(today()+4)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Sat', date(today()+5)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Sat', date(today()+6)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Sat', date(today()+6)))))))))))))))))))))))))))))))))))))) as callDate,

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Wed', date(today()+6)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Wed', date(today()+7)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Wed', date(today()+1)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Wed', date(today()+2)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Wed', date(today()+5)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Wed', date(today()+5)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Mon', date(today()+1)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Mon', date(today()+2)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Mon', date(today()+3)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Mon', date(today()+4)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Mon', date(today()+7)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Mon', date(today()+7)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Tue', date(today()+7)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Tue', date(today()+1)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Tue', date(today()+2)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Tue', date(today()+3)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Tue', date(today()+6)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Tue', date(today()+6)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Thu', date(today()+5)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Thu', date(today()+6)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Thu', date(today()+7)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Thu', date(today()+1)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Thu', date(today()+4)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Thu', date(today()+4)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Fri', date(today()+4)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Fri', date(today()+5)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Fri', date(today()+6)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Fri', date(today()+7)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Fri', date(today()+3)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Fri', date(today()+3)),

      if([Calling Day] = 'Monday' ,if(WeekDay(Today())='Sat', date(today()+3)),

      if([Calling Day] = 'Tuesday' ,if(WeekDay(Today())='Sat', date(today()+4)),

      if([Calling Day] = 'Wednesday' ,if(WeekDay(Today())='Sat', date(today()+5)),

      if([Calling Day] = 'Thursday' ,if(WeekDay(Today())='Sat', date(today()+6)),

      if([Calling Day] = 'Friday' ,if(WeekDay(Today())='Sat', date(today()+9)),

      if([Calling Day] = 'Saturday' ,if(WeekDay(Today())='Sat', date(today()+9)))))))))))))))))))))))))))))))))))))) as deliveryDate

Proof:

2222.PNG

Thank You!!

1 Solution

Accepted Solutions
swuehl
MVP
MVP

The reason why your nested if() statements don't work as intented:

For a calling day = Monday, you'll step into the THEN branch of your first if statement, but if Today() does not return 'Wed', there is no alternative ELSE branch in the second if() statement, thus the complete statement will return NULL for this record.

Your alternative if() statements for Monday will never be checked.

You would need to restructure your if() statements to make it work, but as suggested above by Peter and me, there are better alternatives.

View solution in original post

5 Replies
swuehl
MVP
MVP

Maybe simplify your date calculation like

//Just create a table with some combinations for testing

INPUT:

LOAD Weekday(Recno()-1) as Visitday

AutoGenerate 7;

JOIN

LOAD Date(Today()+recno()-1) as Today

AutoGenerate 7;

// Calculate the CallingDate

LOAD *,

  Date(Today + Mod( Visitday+7-Weekday(Today),7)) as CallingDate

RESIDENT INPUT;

DROP TABLE INPUT;

Visitday Today CallingDate
Mo12.05.201715.05.2017
Mo13.05.201715.05.2017
Mo14.05.201715.05.2017
Mo15.05.201715.05.2017
Mo16.05.201722.05.2017
Mo17.05.201722.05.2017
Mo18.05.201722.05.2017
Di12.05.201716.05.2017
Di13.05.201716.05.2017
Di14.05.201716.05.2017
Di15.05.201716.05.2017
Di16.05.201716.05.2017
Di17.05.201723.05.2017
Di18.05.201723.05.2017
prieper
Master II
Master II

Hi,

would make a kind of a mapping table with the concatenated Weekday for Weekday1 and Weekday2 along with the Days to be added.

(aircode)

mapVisit:

LOAD * INLINE [Combo, Day2Add

15, 3

25, 4

35, 5

....];

and then

TODAY() + APPLYMAP('mapVisit', NUM(WEEKDAY(VisitDay)) & NUM(WEEKDAY(TODAY())))  AS .....

Peter

swuehl
MVP
MVP

The reason why your nested if() statements don't work as intented:

For a calling day = Monday, you'll step into the THEN branch of your first if statement, but if Today() does not return 'Wed', there is no alternative ELSE branch in the second if() statement, thus the complete statement will return NULL for this record.

Your alternative if() statements for Monday will never be checked.

You would need to restructure your if() statements to make it work, but as suggested above by Peter and me, there are better alternatives.

goro2010
Creator
Creator
Author

Good Day Stefan,

Based upon your above comment, I have made these changes and it is working brilliant!!

IF(WeekDay(Today())='Mon') then

"Mon":

LOAD *,

     VisitDay,

      if(VisitDay = 'Monday' ,if(WeekDay(Today())='Mon', date(today())),

      if(VisitDay = 'Tuesday' ,if(WeekDay(Today())='Mon', date(today()+1)),

      if(VisitDay = 'Wednesday' ,if(WeekDay(Today())='Mon', date(today()+2)),

      if(VisitDay = 'Thursday' ,if(WeekDay(Today())='Mon', date(today()+3)),

      if(VisitDay = 'Friday' ,if(WeekDay(Today())='Mon', date(today()+4)),

      if(VisitDay = 'Saturday' ,if(WeekDay(Today())='Mon', date(today()+5)))))))) as CallingDay,

      if(VisitDay = 'Monday' ,if(WeekDay(Today())='Mon', date(today()+1)),

      if(VisitDay = 'Tuesday' ,if(WeekDay(Today())='Mon', date(today()+2)),

      if(VisitDay = 'Wednesday' ,if(WeekDay(Today())='Mon', date(today()+3)),

      if(VisitDay = 'Thursday' ,if(WeekDay(Today())='Mon', date(today()+4)),

      if(VisitDay = 'Friday' ,if(WeekDay(Today())='Mon', date(today()+7)),

      if(VisitDay = 'Saturday' ,if(WeekDay(Today())='Mon', date(today()+7)))))))) as Deliveryday

FROM

C:\QVD\Info.qvd

(qvd)

;

ELSEIF(WeekDay(Today())='Fri') then

"Fri":

LOAD *,

     VisitDay,

      if(VisitDay = 'Monday' ,if(WeekDay(Today())='Fri', date(today()+3)),

      if(VisitDay = 'Tuesday' ,if(WeekDay(Today())='Fri', date(today()+4)),

      if(VisitDay = 'Wednesday' ,if(WeekDay(Today())='Fri', date(today()+5)),

      if(VisitDay = 'Thursday' ,if(WeekDay(Today())='Fri', date(today()+6)),

      if(VisitDay = 'Friday' ,if(WeekDay(Today())='Fri', date(today())),

      if(VisitDay = 'Saturday' ,if(WeekDay(Today())='Fri', date(today()+1)))))))) as CallingDay,

      if(VisitDay = 'Monday' ,if(WeekDay(Today())='Fri', date(today()+4)),

      if(VisitDay = 'Tuesday' ,if(WeekDay(Today())='Fri', date(today()+5)),

      if(VisitDay = 'Wednesday' ,if(WeekDay(Today())='Fri', date(today()+6)),

      if(VisitDay = 'Thursday' ,if(WeekDay(Today())='Fri', date(today()+7)),

      if(VisitDay = 'Friday' ,if(WeekDay(Today())='Fri', date(today()+3)),

      if(VisitDay = 'Saturday' ,if(WeekDay(Today())='Fri', date(today()+3)))))))) as Deliveryday

FROM

C:\QVD\Info.qvd

(qvd)

;

END IF

swuehl
MVP
MVP

If you want to do this this way, you don't need the additional checks for today's weekday in each LOAD, since the check is done outside the LOAD statements.