Skip to main content
Announcements
Qlik Connect 2025: 3 days of full immersion in data, analytics, and AI. May 13-15 | Orlando, FL: Learn More
cancel
Showing results for 
Search instead for 
Did you mean: 
microwin88x
Creator III
Creator III

Get Max Status by Date and Fill Values

Hello,

I have the following table with:

- ID_TCKT: ID from Ticket

- Status: Status from Ticket

- DATE_STATUS: DD/MM/YYYY

- TIME_STATUS: hh:mm:ss

ID_TCKTSTATUSDATE_STATUSTIME_STATUS
TCKT01In Progress15/07/201614:29:33
TCKT01Completed07/10/201614:00:19
TCKT01Closed11/10/201602:45:53
TCKT02In Progress02/05/201619:51:00
TCKT02Completed02/07/201621:53:48
TCKT02Closed06/09/201602:53:15
TCKT03Opened10/05/201614:29:33
TCKT03Scheduled15/05/201614:00:19
TCKT03Planned20/05/201602:45:53
TCKT03Completed05/07/201619:51:00
TCKT03Closed07/07/201619:53:00

What I need is to get the STATUS for each Ticket for every MAX MONTH (DATE_STATUS)

And then fill that STATUS the next MONTHS until there's a new STATUS (have a look at TCKT01).

I should get a table like the following (I'd need to have fields: ID_TCKT, STATUS, YEAR and MONTH)

ID_TCKTSTATUSYEARMONTHDATE_STATUSTIME_STATUS
TCKT01In Progress2016Jul15/07/201614:29:33
TCKT01In Progress2016Aug
TCKT01In Progress2016Sep
TCKT01Closed2016Oct11/10/201602:45:53
TCKT02In Progress2016May02/05/201619:51:00
TCKT02In Progress2016Jun
TCKT02Completed2016Jul02/07/201621:53:48
TCKT02Completed2016Aug
TCKT02Closed2016Sep06/09/201602:53:15
TCKT03Planned2016May20/05/201602:45:53
TCKT03Planned2016Jun
TCKT03Closed2016Jul07/07/201619:53:00

Do you know how to do that on Script?

Thank you!

1 Solution

Accepted Solutions
sunny_talwar

May be this:

Table:

LOAD *,

  Month(DATE_STATUS) as Month,

  MonthName(DATE_STATUS) as MonthYear;

LOAD * INLINE [

    D_TCKT, STATUS, DATE_STATUS, TIME_STATUS

    TCKT01, In Progress, 15/07/2016, 14:29:33

    TCKT01, Completed, 07/10/2016, 14:00:19

    TCKT01, Closed, 11/10/2016, 02:45:53

    TCKT02, In Progress, 02/05/2016, 19:51:00

    TCKT02, Completed, 02/07/2016, 21:53:48

    TCKT02, Closed, 06/09/2016, 02:53:15

    TCKT03, Opened, 10/05/2016, 14:29:33

    TCKT03, Scheduled, 15/05/2016, 14:00:19

    TCKT03, Planned, 20/05/2016, 02:45:53

    TCKT03, Completed, 05/07/2016, 19:51:00

    TCKT03, Closed, 07/07/2016, 19:53:00

];

Right Join(Table)

LOAD D_TCKT,

  MonthYear,

  FirstSortedValue(STATUS, -DATE_STATUS) as STATUS

Resident Table

Group By D_TCKT, MonthYear;

Left Join (Table)

LOAD D_TCKT,

  Min(MonthYear) as Min,

  Max(MonthYear) as Max

Resident Table

Group By D_TCKT;

TempTable:

LOAD D_TCKT,

  Month(AddMonths(Min, IterNo()-1)) as Month

Resident Table

While AddMonths(Min, IterNo()-1) <= Max;

Left Join (TempTable)

LOAD *

Resident Table;

FinalTable:

LOAD D_TCKT,

  If(Len(Trim(STATUS)) = 0,

  If(D_TCKT = Previous(D_TCKT), Peek('STATUS'), STATUS), STATUS) as STATUS,

  DATE_STATUS,

  TIME_STATUS,

  Month

Resident TempTable

Order By D_TCKT, Month;

DROP Table Table, TempTable;

Capture.PNG

View solution in original post

5 Replies
sunny_talwar

May be this:

Table:

LOAD *,

  Month(DATE_STATUS) as Month,

  MonthName(DATE_STATUS) as MonthYear;

LOAD * INLINE [

    D_TCKT, STATUS, DATE_STATUS, TIME_STATUS

    TCKT01, In Progress, 15/07/2016, 14:29:33

    TCKT01, Completed, 07/10/2016, 14:00:19

    TCKT01, Closed, 11/10/2016, 02:45:53

    TCKT02, In Progress, 02/05/2016, 19:51:00

    TCKT02, Completed, 02/07/2016, 21:53:48

    TCKT02, Closed, 06/09/2016, 02:53:15

    TCKT03, Opened, 10/05/2016, 14:29:33

    TCKT03, Scheduled, 15/05/2016, 14:00:19

    TCKT03, Planned, 20/05/2016, 02:45:53

    TCKT03, Completed, 05/07/2016, 19:51:00

    TCKT03, Closed, 07/07/2016, 19:53:00

];

Right Join(Table)

LOAD D_TCKT,

  MonthYear,

  FirstSortedValue(STATUS, -DATE_STATUS) as STATUS

Resident Table

Group By D_TCKT, MonthYear;

Left Join (Table)

LOAD D_TCKT,

  Min(MonthYear) as Min,

  Max(MonthYear) as Max

Resident Table

Group By D_TCKT;

TempTable:

LOAD D_TCKT,

  Month(AddMonths(Min, IterNo()-1)) as Month

Resident Table

While AddMonths(Min, IterNo()-1) <= Max;

Left Join (TempTable)

LOAD *

Resident Table;

FinalTable:

LOAD D_TCKT,

  If(Len(Trim(STATUS)) = 0,

  If(D_TCKT = Previous(D_TCKT), Peek('STATUS'), STATUS), STATUS) as STATUS,

  DATE_STATUS,

  TIME_STATUS,

  Month

Resident TempTable

Order By D_TCKT, Month;

DROP Table Table, TempTable;

Capture.PNG

microwin88x
Creator III
Creator III
Author

Hello Sunny, thank you!


And if I need to fill the Status until the current Month, how would you do that?


For example, for TCKT01, having "Closed" for Oct, Nov and Dec.


Thanks!

sunny_talwar

Just change this:

Left Join (Table)

LOAD D_TCKT,

  Min(MonthYear) as Min,

  MonthName(Today()) as Max

Resident Table

Group By D_TCKT;

microwin88x
Creator III
Creator III
Author

Excellent! Thanks a lot. I'm going to have a look at it!

sunny_talwar

Sounds like a plan