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

Announcements
Join us to spark ideas for how to put the latest capabilities into action. Register here!
cancel
Showing results for 
Search instead for 
Did you mean: 
matthewp
Creator III
Creator III

Master calendar that isnt linked to any orderdate etc for chart

i want to create a master calendar that isn't linked to any orderdate or any other table

Let me explain it a bit better as i have been quite ambiguous...

Data sample

namedatefromdatetoduration
john21/12/201524/12/20154
john27/01/201627/01/20161
john12/02/201615/02/20162
john26/02/201626/02/20161
john10/03/201610/03/20160.5
john01/04/201601/04/20161
john18/04/201618/04/20160.5
john29/04/201629/04/20161
john02/09/201609/09/20166

Current (pivot table) output:

cur.png

Current pivot table dimensions:

name

tempdate

Current pivot table expression:

IF(tempdate >= datefrom AND tempdate <= dateto, 1, 0 )

Expected output (shortened) i would like ALL dates shown not just the populated ones:

nametempdate19/12/201520/12/201521/12/201522/12/201523/12/201524/12/201525/12/201526/12/201527/12/201528/12/201529/12/201530/12/201531/12/2015
john0011110000000

ALSO tempdate comes from the master calendar example on here....

QuartersMap:

MAPPING LOAD 

rowno() as Month,

'Q' & Ceil (rowno()/3) as Quarter

AUTOGENERATE (12);

Temp:

Load

               min(datefrom) as minDate,

               max(dateto) as maxDate

Resident newtable;

Let varMinDate = Num(Peek('minDate', 0, 'Temp'));

Let varMaxDate = Num(Peek('maxDate', 0, 'Temp'));

DROP Table Temp;

TempCalendar:

LOAD

               $(varMinDate) + Iterno()-1 As Num,

               Date($(varMinDate) + IterNo() - 1) as TempDate

               AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate);

MasterCalendar:

Load

               TempDate AS datefrom,

               TempDate AS tempdate,

               week(TempDate) As Week,

               Year(TempDate) As Year,

               Month(TempDate) As Month,

               Day(TempDate) As Day,

               YeartoDate(TempDate)*-1 as CurYTDFlag,

               YeartoDate(TempDate,-1)*-1 as LastYTDFlag,

               inyear(TempDate, Monthstart($(varMaxDate)),-1) as RC12,

               date(monthstart(TempDate), 'MMM-YYYY') as MonthYear,

               ApplyMap('QuartersMap', month(TempDate), Null()) as Quarter,

               Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) as WeekYear,

               WeekDay(TempDate) as WeekDay

Resident TempCalendar

Order By TempDate ASC;

Drop Table TempCalendar;

60 Replies
sunny_talwar

Script:

Table1:

LOAD * INLINE [

    enum, datefrom, dateto, duration

    12, 21/12/2015, 24/12/2015, 4

    12, 27/01/2016, 27/01/2016, 1

    12, 12/02/2016, 15/02/2016, 2

    12, 26/02/2016, 26/02/2016, 1

    13, 10/03/2016, 10/03/2016, 0.5

    13, 01/04/2016, 01/04/2016, 1

    13, 18/04/2016, 18/04/2016, 0.5

    13, 29/04/2016, 29/04/2016, 1

    13, 02/09/2016, 09/09/2016, 6

];

Table2:

LOAD * INLINE [

    enum, name

    12, john

    13, rahul

];

QuartersMap:

MAPPING LOAD

rowno() as Month,

'Q' & Ceil (rowno()/3) as Quarter

AUTOGENERATE (12);

Temp:

Load min(datefrom) as minDate,

    max(dateto) as maxDate

Resident Table1;

Let varMinDate = Num(Peek('minDate', 0, 'Temp'));

Let varMaxDate = Num(Peek('maxDate', 0, 'Temp'));

DROP Table Temp;

TempCalendar:

LOAD $(varMinDate) + Iterno()-1 As Num,

    Date($(varMinDate) + IterNo() - 1) as TempDate

AutoGenerate 1

While $(varMinDate) + IterNo() -1 <= $(varMaxDate);

MasterCalendar:

Load TempDate AS Date,

    week(TempDate) As Week,

    Year(TempDate) As Year,

    Month(TempDate) As Month,

    Day(TempDate) As Day,

    YeartoDate(TempDate)*-1 as CurYTDFlag,

    YeartoDate(TempDate,-1)*-1 as LastYTDFlag,

    inyear(TempDate, Monthstart($(varMaxDate)),-1) as RC12,

    date(monthstart(TempDate), 'MMM-YYYY') as MonthYear,

    ApplyMap('QuartersMap', month(TempDate), Null()) as Quarter,

    Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) as WeekYear,

    WeekDay(TempDate) as WeekDay

Resident TempCalendar

Order By TempDate ASC;

Drop Table TempCalendar;

Join(MasterCalendar)

LOAD DISTINCT enum

Resident Table1;

FinalMasterCalendar:

LOAD *,

  Date&enum as Key

Resident MasterCalendar;

DROP Table MasterCalendar;

Join(Table1)

IntervalMatch(Date, enum)

LOAD datefrom,

    dateto,

    enum

Resident Table1;

Dimensions:

name

Date

Expression:

RangeSum(

Count({<Key = {"=Len(Trim(datefrom)) > 0"}>}DISTINCT name),

Avg({<Key = {"=Len(Trim(datefrom)) = 0"}>}0))

No selections

Capture.PNG

john selected

Capture.PNG

Rahul selected:

Capture.PNG

And in case you want the total to show the total number of days, you can try this:

Sum(Aggr(RangeSum(

Count({<Key = {"=Len(Trim(datefrom)) > 0"}>}DISTINCT name),

Avg({<Key = {"=Len(Trim(datefrom)) = 0"}>}0)), name, Date))

Capture.PNG

I hope this resolve all the issues

matthewp
Creator III
Creator III
Author

Absolutely perfect sunny!!!

sunny_talwar

Amazing!!

I am glad we were able to finally get this resolved.

Best,

Sunny

UPDATE: I guess you already did the helpful response part

sunny_talwar

Just so I understand, is this the alternative to the bar chart where you wanted to show the date ranges in the same row? I think you are probably going to use colors instead of 1's right?

matthewp
Creator III
Creator III
Author

just a quick one.

for the one that allows a total:

Sum(Aggr(RangeSum(

Count({<Key = {"=Len(Trim(datefrom)) > 0"}>}DISTINCT name),

Avg({<Key = {"=Len(Trim(datefrom)) = 0"}>}0)), name, Date))

can this be done so it isnt affected by any selections EXCEPT fieldY

sunny_talwar

May be this:

Sum({<fieldY>}Aggr(RangeSum(

Count({<Key = {"=Len(Trim(datefrom)) > 0"}, fieldY>}DISTINCT name),

Avg({<Key = {"=Len(Trim(datefrom)) = 0"}, fieldY>}0)), name, Date))

matthewp
Creator III
Creator III
Author

Yeh the bar (gant) chart thing just wasnt working so adding colours to this does the same job, and processes a lot quicker

sunny_talwar

Very nice, I really like how you approached this problem. I must confess that I did not think of doing this, but this will help me think of alternatives at other occasions now.

Thanks for teaching me a new thing

Best,

Sunny

matthewp
Creator III
Creator III
Author

sorry i wasnt clear enough, i meant a way so that only the total bit isnt affected paart from with fieldY

sunny_talwar

May be like this:

If(SecondaryDimensionality() = 0,

Sum({<fieldY>}Aggr(RangeSum(

Count({<Key = {"=Len(Trim(datefrom)) > 0"}, fieldY>}DISTINCT name),

Avg({<Key = {"=Len(Trim(datefrom)) = 0"}, fieldY>}0)), name, Date)),


RangeSum(

Count({<Key = {"=Len(Trim(datefrom)) > 0"}>}DISTINCT name),

Avg({<Key = {"=Len(Trim(datefrom)) = 0"}>}0)))