Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Want to see what's currently in public preview? We've pulled it all together in one place. Check it out here
cancel
Showing results for 
Search instead for 
Did you mean: 
Roop
Specialist
Specialist

Reading Data selectively based upon dates

I wish to create a snapshot of my small data table every monday except on those days that fall on a holiday.

On a normal Monday I load data, but if it is a holiday I need to load on the Tuesday and if that is a holiday ..... etc. The data is stored in a SQL database as are the tables that define holidays.

Any ideas ?

Thanks in advance

Labels (1)
1 Solution

Accepted Solutions
Not applicable

Something like this:


Let HolidayToday = date('12/31/2009'); // should be a current date in the real script
let WorkToday = date('2/1/2009'); // should be a current date in the real script

Holidays:
load * inline [
Holiday
12/31/2009
1/1/2010
];
left join (Holidays)
load
Holiday
,date(Holiday) as HolidayDate
resident Holidays;

Condition:
load
'HolidayToday' as Today,
if(exists(HolidayDate, '$(HolidayToday)'), 0, 1) as LoadFlag
autogenerate 1;

load
'WorkToday' as Today,
if(exists(HolidayDate, '$(WorkToday)'), 0, 1) as LoadFlag
autogenerate 1;



// peek first record
let TheFlag = peek('LoadFlag', 0, Condition);

if TheFlag = 1 then

Data:
load * inline [
id,name
1,aaaaaaa
2,bbbbbb
3,ccccc
];

end if



View solution in original post

3 Replies
pover
Partner - Master
Partner - Master

In the start of the script put

Load Date,
from Holidays;

if exists(today(),Date) or weekday(today()) <> 'mon' or vFlagSkippedMonday <> 1 then

if exists(today(),Date) and weekday(today()) = 'mon' then

LET vFlagSkippedMonday = 1;

end if

exit script;

end if

Not applicable

Something like this:


Let HolidayToday = date('12/31/2009'); // should be a current date in the real script
let WorkToday = date('2/1/2009'); // should be a current date in the real script

Holidays:
load * inline [
Holiday
12/31/2009
1/1/2010
];
left join (Holidays)
load
Holiday
,date(Holiday) as HolidayDate
resident Holidays;

Condition:
load
'HolidayToday' as Today,
if(exists(HolidayDate, '$(HolidayToday)'), 0, 1) as LoadFlag
autogenerate 1;

load
'WorkToday' as Today,
if(exists(HolidayDate, '$(WorkToday)'), 0, 1) as LoadFlag
autogenerate 1;



// peek first record
let TheFlag = peek('LoadFlag', 0, Condition);

if TheFlag = 1 then

Data:
load * inline [
id,name
1,aaaaaaa
2,bbbbbb
3,ccccc
];

end if



Roop
Specialist
Specialist
Author

Excellent Solution

Thank you - And very fast too !!!!