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: 
BZ
Contributor II
Contributor II

Date Difference in Months not calculating for all rows

Hello,

I have a table where I've created two additional date columns to take care of gaps/nulls in the original 4 date columns like this in the Data Load Editor:

Load *,
((year([New End Date])*12)+month([New End Date])) - (((year([New Start Date])*12)+month([New Start Date]))) AS [New Term];

Load
Contract Start Date,
Contract End Date,
Item Start Date,
Item End Date,

Date(Date#(if(isnull([Rev. Rec. Start Date]),[Contract Item Start Date],[Rev. Rec. Start Date]), 'MM/DD/YYYY')) AS [New Start Date],
Date(Date#(If(IsNull([Rev. Rec. End Date]),[Contract Item End Date],[Rev. Rec. End Date]), 'MM/DD/YYYY')) AS [New End Date], From ....

Unfortunately, for some reason the interval formula does not seem to work on all rows:

new-term.png

 

Could you help me figure out what's wrong here?

1 Solution

Accepted Solutions
sunny_talwar

So, I guess your issue is that you are only doing a preceding load on one of the tables... the one which you are concatenating doesn't have a New Term getting calculated... you might think that the order of operations are first Concatenate and then do the preceding load... but it isn't... Try this

Set dataManagerTables = '','START','END';
//This block renames script tables from non generated section which conflict with the names of managed tables

For each name in $(dataManagerTables) 
    Let index = 0;
    Let currentName = name; 
    Let tableNumber = TableNumber(name); 
    Let matches = 0; 
    Do while not IsNull(tableNumber) or (index > 0 and matches > 0)
        index = index + 1; 
        currentName = name & '-' & index; 
        tableNumber = TableNumber(currentName) 
        matches = Match('$(currentName)', $(dataManagerTables));
    Loop 
    If index > 0 then 
            Rename Table '$(name)' to '$(currentName)'; 
    EndIf; 
Next; 
Set dataManagerTables = ;


Unqualify *;

[START]:
Load *,
((year([New End Date])*12)+month([New End Date])) - (((year([New Start Date])*12)+month([New Start Date]))) AS [New Term];
LOAD
	Date(Date#([Invoice Date], 'MM/DD/YYYY') ) AS [Invoice Date],
	[Item],
	[Document Number],
	[Bill To Customer],
	[End User],
	[Description],
	[Sales Order Memo],
	[Quantity],
	[List Rate],
	[Inline Discount],
	[Amount],
    [Amount]/[Rev. Rec. Term in Months]*12 AS 'Annual Renewal Amount',
	[License ID],
	[Status],
	[Subsidiary],
	[Dedicated Account],
	[Dedicated Account Rep],
	Date(Date#([Rev. Rec. Start Date], 'MM/DD/YYYY' )) AS [Rev. Rec. Start Date],
	Date(Date#([Rev. Rec. End Date], 'MM/DD/YYYY') ) AS [Rev. Rec. End Date],
	[Rev. Rec. Term in Months],
	Date(Date#([Contract Item Start Date], 'MM/DD/YYYY') ) AS [Contract Item Start Date],
	Date(Date#([Contract Item End Date], 'MM/DD/YYYY') ) AS [Contract Item End Date],
	[Contract Item Term],
	Date(Date#([123Rev Rec Start Date], 'MM/DD/YYYY') ) AS [123Rev Rec Start Date],
	Date(Date#([123Rev Rec End Date], 'MM/DD/YYYY') ) AS [123Rev Rec End Date],
    Date(Date#(if(isnull([Rev. Rec. Start Date]),[Contract Item Start Date],[Rev. Rec. Start Date]), 'MM/DD/YYYY')) AS [New Start Date],
    Date(Date#(If(IsNull([Rev. Rec. End Date]),[Contract Item End Date],[Rev. Rec. End Date]), 'MM/DD/YYYY')) AS [New End Date],
    FileBaseName() AS [End/Start]
 FROM [lib://START.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);

CONCATENATE ([START])
Load *,
((year([New End Date])*12)+month([New End Date])) - (((year([New Start Date])*12)+month([New Start Date]))) AS [New Term];
LOAD
	Date(Date#([Invoice Date], 'MM/DD/YYYY') ) AS [Invoice Date],
	[Item],
	[Document Number],
	[Bill To Customer],
	[End User],
	[Description],
	[Sales Order Memo],
	[Quantity],
	[List Rate],
	[Inline Discount],
	[Amount],
    [Amount]/[Rev. Rec. Term in Months]*12 AS 'Annual Renewal Amount',
	[License ID],
	[Status],
	[Subsidiary],
	[Dedicated Account],
	[Dedicated Account Rep],
	Date(Date#([Rev. Rec. Start Date], 'MM/DD/YYYY' ) ) AS [Rev. Rec. Start Date],
	Date(Date#([Rev. Rec. End Date], 'MM/DD/YYYY') ) AS [Rev. Rec. End Date],
	[Rev. Rec. Term in Months],
	Date(Date#([Contract Item Start Date], 'MM/DD/YYYY' )) AS [Contract Item Start Date],
	Date(Date#([Contract Item End Date], 'MM/DD/YYYY') ) AS [Contract Item End Date],
	[Contract Item Term],
	Date(Date#([123Rev Rec Start Date], 'MM/DD/YYYY') ) AS [123Rev Rec Start Date],
	Date(Date#([123Rev Rec End Date], 'MM/DD/YYYY') ) AS [123Rev Rec End Date],
    Date(Date#(if(isnull([Rev. Rec. Start Date]),[Contract Item Start Date],[Rev. Rec. Start Date]), 'MM/DD/YYYY')) AS [New Start Date],
    Date(Date#(If(IsNull([Rev. Rec. End Date]),[Contract Item End Date],[Rev. Rec. End Date]), 'MM/DD/YYYY')) AS [New End Date],
    
    FileBaseName() AS [End/Start]
 FROM [lib://END.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);

[autoCalendar]: 
  DECLARE FIELD DEFINITION Tagged ('$date')
FIELDS
  Dual(Year($1), YearStart($1)) AS [Year] Tagged ('$axis', '$year'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),Num(Ceil(NUM(Month($1))/3),00)) AS [Quarter] Tagged ('$quarter', '$cyclic'),
  Dual(Year($1)&'-Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [YearQuarter] Tagged ('$yearquarter', '$qualified'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [_YearQuarter] Tagged ('$yearquarter', '$hidden', '$simplified'),
  Month($1) AS [Month] Tagged ('$month', '$cyclic'),
  Dual(Year($1)&'-'&Month($1), monthstart($1)) AS [YearMonth] Tagged ('$axis', '$yearmonth', '$qualified'),
  Dual(Month($1), monthstart($1)) AS [_YearMonth] Tagged ('$axis', '$yearmonth', '$simplified', '$hidden'),
  Dual('W'&Num(Week($1),00), Num(Week($1),00)) AS [Week] Tagged ('$weeknumber', '$cyclic'),
  Date(Floor($1)) AS [Date] Tagged ('$axis', '$date', '$qualified'),
  Date(Floor($1), 'D') AS [_Date] Tagged ('$axis', '$date', '$hidden', '$simplified'),
  If (DayNumberOfYear($1) <= DayNumberOfYear(Today()), 1, 0) AS [InYTD] ,
  Year(Today())-Year($1) AS [YearsAgo] ,
  If (DayNumberOfQuarter($1) <= DayNumberOfQuarter(Today()),1,0) AS [InQTD] ,
  4*Year(Today())+Ceil(Month(Today())/3)-4*Year($1)-Ceil(Month($1)/3) AS [QuartersAgo] ,
  Ceil(Month(Today())/3)-Ceil(Month($1)/3) AS [QuarterRelNo] ,
  If(Day($1)<=Day(Today()),1,0) AS [InMTD] ,
  12*Year(Today())+Month(Today())-12*Year($1)-Month($1) AS [MonthsAgo] ,
  Month(Today())-Month($1) AS [MonthRelNo] ,
  If(WeekDay($1)<=WeekDay(Today()),1,0) AS [InWTD] ,
  (WeekStart(Today())-WeekStart($1))/7 AS [WeeksAgo] ,
  Week(Today())-Week($1) AS [WeekRelNo] ;

DERIVE FIELDS FROM FIELDS [Maintenance Expiration Date],[Invoice Date], [Rev. Rec. Start Date], [Rev. Rec. End Date], [Contract Item Start Date], [START.Contract Item End Date], [123Rev Rec Start Date], [123Rev Rec End Date] USING [autoCalendar] ;

View solution in original post

6 Replies
agni_gold
Specialist III
Specialist III

You can use

Interval ([New End Date] - [New Start date],'MM')
sunny_talwar

Do you have more than one data source in play here by any chance?

BZ
Contributor II
Contributor II
Author

Hi,

There are 2 CSV files with identical columns which have been concatenated. Below is the data loader script, if that helps.

Set dataManagerTables = '','START','END';
//This block renames script tables from non generated section which conflict with the names of managed tables

For each name in $(dataManagerTables) 
    Let index = 0;
    Let currentName = name; 
    Let tableNumber = TableNumber(name); 
    Let matches = 0; 
    Do while not IsNull(tableNumber) or (index > 0 and matches > 0)
        index = index + 1; 
        currentName = name & '-' & index; 
        tableNumber = TableNumber(currentName) 
        matches = Match('$(currentName)', $(dataManagerTables));
    Loop 
    If index > 0 then 
            Rename Table '$(name)' to '$(currentName)'; 
    EndIf; 
Next; 
Set dataManagerTables = ;


Unqualify *;

Load *,
 //Interval([New End Date]-[New Start Date],'m') AS [New Term];
((year([New End Date])*12)+month([New End Date])) - (((year([New Start Date])*12)+month([New Start Date]))) AS [New Term];

//([New End Date]-[New Start Date])/30.4 AS [New Term];

[START]:
LOAD
	Date(Date#([Invoice Date], 'MM/DD/YYYY') ) AS [Invoice Date],
	[Item],
	[Document Number],
	[Bill To Customer],
	[End User],
	[Description],
	[Sales Order Memo],
	[Quantity],
	[List Rate],
	[Inline Discount],
	[Amount],
    [Amount]/[Rev. Rec. Term in Months]*12 AS 'Annual Renewal Amount',
	[License ID],
	[Status],
	[Subsidiary],
	[Dedicated Account],
	[Dedicated Account Rep],
	Date(Date#([Rev. Rec. Start Date], 'MM/DD/YYYY' )) AS [Rev. Rec. Start Date],
	Date(Date#([Rev. Rec. End Date], 'MM/DD/YYYY') ) AS [Rev. Rec. End Date],
	[Rev. Rec. Term in Months],
	Date(Date#([Contract Item Start Date], 'MM/DD/YYYY') ) AS [Contract Item Start Date],
	Date(Date#([Contract Item End Date], 'MM/DD/YYYY') ) AS [Contract Item End Date],
	[Contract Item Term],
	Date(Date#([123Rev Rec Start Date], 'MM/DD/YYYY') ) AS [123Rev Rec Start Date],
	Date(Date#([123Rev Rec End Date], 'MM/DD/YYYY') ) AS [123Rev Rec End Date],
    Date(Date#(if(isnull([Rev. Rec. Start Date]),[Contract Item Start Date],[Rev. Rec. Start Date]), 'MM/DD/YYYY')) AS [New Start Date],
    Date(Date#(If(IsNull([Rev. Rec. End Date]),[Contract Item End Date],[Rev. Rec. End Date]), 'MM/DD/YYYY')) AS [New End Date],
    
    
    FileBaseName() AS [End/Start]
 FROM [lib://START.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);

CONCATENATE ([START]) LOAD
	Date(Date#([Invoice Date], 'MM/DD/YYYY') ) AS [Invoice Date],
	[Item],
	[Document Number],
	[Bill To Customer],
	[End User],
	[Description],
	[Sales Order Memo],
	[Quantity],
	[List Rate],
	[Inline Discount],
	[Amount],
    [Amount]/[Rev. Rec. Term in Months]*12 AS 'Annual Renewal Amount',
	[License ID],
	[Status],
	[Subsidiary],
	[Dedicated Account],
	[Dedicated Account Rep],
	Date(Date#([Rev. Rec. Start Date], 'MM/DD/YYYY' ) ) AS [Rev. Rec. Start Date],
	Date(Date#([Rev. Rec. End Date], 'MM/DD/YYYY') ) AS [Rev. Rec. End Date],
	[Rev. Rec. Term in Months],
	Date(Date#([Contract Item Start Date], 'MM/DD/YYYY' )) AS [Contract Item Start Date],
	Date(Date#([Contract Item End Date], 'MM/DD/YYYY') ) AS [Contract Item End Date],
	[Contract Item Term],
	Date(Date#([123Rev Rec Start Date], 'MM/DD/YYYY') ) AS [123Rev Rec Start Date],
	Date(Date#([123Rev Rec End Date], 'MM/DD/YYYY') ) AS [123Rev Rec End Date],
    Date(Date#(if(isnull([Rev. Rec. Start Date]),[Contract Item Start Date],[Rev. Rec. Start Date]), 'MM/DD/YYYY')) AS [New Start Date],
    Date(Date#(If(IsNull([Rev. Rec. End Date]),[Contract Item End Date],[Rev. Rec. End Date]), 'MM/DD/YYYY')) AS [New End Date],
    
    FileBaseName() AS [End/Start]
 FROM [lib://END.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);






[autoCalendar]: 
  DECLARE FIELD DEFINITION Tagged ('$date')
FIELDS
  Dual(Year($1), YearStart($1)) AS [Year] Tagged ('$axis', '$year'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),Num(Ceil(NUM(Month($1))/3),00)) AS [Quarter] Tagged ('$quarter', '$cyclic'),
  Dual(Year($1)&'-Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [YearQuarter] Tagged ('$yearquarter', '$qualified'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [_YearQuarter] Tagged ('$yearquarter', '$hidden', '$simplified'),
  Month($1) AS [Month] Tagged ('$month', '$cyclic'),
  Dual(Year($1)&'-'&Month($1), monthstart($1)) AS [YearMonth] Tagged ('$axis', '$yearmonth', '$qualified'),
  Dual(Month($1), monthstart($1)) AS [_YearMonth] Tagged ('$axis', '$yearmonth', '$simplified', '$hidden'),
  Dual('W'&Num(Week($1),00), Num(Week($1),00)) AS [Week] Tagged ('$weeknumber', '$cyclic'),
  Date(Floor($1)) AS [Date] Tagged ('$axis', '$date', '$qualified'),
  Date(Floor($1), 'D') AS [_Date] Tagged ('$axis', '$date', '$hidden', '$simplified'),
  If (DayNumberOfYear($1) <= DayNumberOfYear(Today()), 1, 0) AS [InYTD] ,
  Year(Today())-Year($1) AS [YearsAgo] ,
  If (DayNumberOfQuarter($1) <= DayNumberOfQuarter(Today()),1,0) AS [InQTD] ,
  4*Year(Today())+Ceil(Month(Today())/3)-4*Year($1)-Ceil(Month($1)/3) AS [QuartersAgo] ,
  Ceil(Month(Today())/3)-Ceil(Month($1)/3) AS [QuarterRelNo] ,
  If(Day($1)<=Day(Today()),1,0) AS [InMTD] ,
  12*Year(Today())+Month(Today())-12*Year($1)-Month($1) AS [MonthsAgo] ,
  Month(Today())-Month($1) AS [MonthRelNo] ,
  If(WeekDay($1)<=WeekDay(Today()),1,0) AS [InWTD] ,
  (WeekStart(Today())-WeekStart($1))/7 AS [WeeksAgo] ,
  Week(Today())-Week($1) AS [WeekRelNo] ;

DERIVE FIELDS FROM FIELDS [Maintenance Expiration Date],[Invoice Date], [Rev. Rec. Start Date], [Rev. Rec. End Date], [Contract Item Start Date], [START.Contract Item End Date], [123Rev Rec Start Date], [123Rev Rec End Date] USING [autoCalendar] ;
BZ
Contributor II
Contributor II
Author

Hi,

I tried 3 different ways, but all of them left some gaps. You can see the full data loader script above.

sunny_talwar

So, I guess your issue is that you are only doing a preceding load on one of the tables... the one which you are concatenating doesn't have a New Term getting calculated... you might think that the order of operations are first Concatenate and then do the preceding load... but it isn't... Try this

Set dataManagerTables = '','START','END';
//This block renames script tables from non generated section which conflict with the names of managed tables

For each name in $(dataManagerTables) 
    Let index = 0;
    Let currentName = name; 
    Let tableNumber = TableNumber(name); 
    Let matches = 0; 
    Do while not IsNull(tableNumber) or (index > 0 and matches > 0)
        index = index + 1; 
        currentName = name & '-' & index; 
        tableNumber = TableNumber(currentName) 
        matches = Match('$(currentName)', $(dataManagerTables));
    Loop 
    If index > 0 then 
            Rename Table '$(name)' to '$(currentName)'; 
    EndIf; 
Next; 
Set dataManagerTables = ;


Unqualify *;

[START]:
Load *,
((year([New End Date])*12)+month([New End Date])) - (((year([New Start Date])*12)+month([New Start Date]))) AS [New Term];
LOAD
	Date(Date#([Invoice Date], 'MM/DD/YYYY') ) AS [Invoice Date],
	[Item],
	[Document Number],
	[Bill To Customer],
	[End User],
	[Description],
	[Sales Order Memo],
	[Quantity],
	[List Rate],
	[Inline Discount],
	[Amount],
    [Amount]/[Rev. Rec. Term in Months]*12 AS 'Annual Renewal Amount',
	[License ID],
	[Status],
	[Subsidiary],
	[Dedicated Account],
	[Dedicated Account Rep],
	Date(Date#([Rev. Rec. Start Date], 'MM/DD/YYYY' )) AS [Rev. Rec. Start Date],
	Date(Date#([Rev. Rec. End Date], 'MM/DD/YYYY') ) AS [Rev. Rec. End Date],
	[Rev. Rec. Term in Months],
	Date(Date#([Contract Item Start Date], 'MM/DD/YYYY') ) AS [Contract Item Start Date],
	Date(Date#([Contract Item End Date], 'MM/DD/YYYY') ) AS [Contract Item End Date],
	[Contract Item Term],
	Date(Date#([123Rev Rec Start Date], 'MM/DD/YYYY') ) AS [123Rev Rec Start Date],
	Date(Date#([123Rev Rec End Date], 'MM/DD/YYYY') ) AS [123Rev Rec End Date],
    Date(Date#(if(isnull([Rev. Rec. Start Date]),[Contract Item Start Date],[Rev. Rec. Start Date]), 'MM/DD/YYYY')) AS [New Start Date],
    Date(Date#(If(IsNull([Rev. Rec. End Date]),[Contract Item End Date],[Rev. Rec. End Date]), 'MM/DD/YYYY')) AS [New End Date],
    FileBaseName() AS [End/Start]
 FROM [lib://START.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);

CONCATENATE ([START])
Load *,
((year([New End Date])*12)+month([New End Date])) - (((year([New Start Date])*12)+month([New Start Date]))) AS [New Term];
LOAD
	Date(Date#([Invoice Date], 'MM/DD/YYYY') ) AS [Invoice Date],
	[Item],
	[Document Number],
	[Bill To Customer],
	[End User],
	[Description],
	[Sales Order Memo],
	[Quantity],
	[List Rate],
	[Inline Discount],
	[Amount],
    [Amount]/[Rev. Rec. Term in Months]*12 AS 'Annual Renewal Amount',
	[License ID],
	[Status],
	[Subsidiary],
	[Dedicated Account],
	[Dedicated Account Rep],
	Date(Date#([Rev. Rec. Start Date], 'MM/DD/YYYY' ) ) AS [Rev. Rec. Start Date],
	Date(Date#([Rev. Rec. End Date], 'MM/DD/YYYY') ) AS [Rev. Rec. End Date],
	[Rev. Rec. Term in Months],
	Date(Date#([Contract Item Start Date], 'MM/DD/YYYY' )) AS [Contract Item Start Date],
	Date(Date#([Contract Item End Date], 'MM/DD/YYYY') ) AS [Contract Item End Date],
	[Contract Item Term],
	Date(Date#([123Rev Rec Start Date], 'MM/DD/YYYY') ) AS [123Rev Rec Start Date],
	Date(Date#([123Rev Rec End Date], 'MM/DD/YYYY') ) AS [123Rev Rec End Date],
    Date(Date#(if(isnull([Rev. Rec. Start Date]),[Contract Item Start Date],[Rev. Rec. Start Date]), 'MM/DD/YYYY')) AS [New Start Date],
    Date(Date#(If(IsNull([Rev. Rec. End Date]),[Contract Item End Date],[Rev. Rec. End Date]), 'MM/DD/YYYY')) AS [New End Date],
    
    FileBaseName() AS [End/Start]
 FROM [lib://END.csv]
(txt, utf8, embedded labels, delimiter is ',', msq);

[autoCalendar]: 
  DECLARE FIELD DEFINITION Tagged ('$date')
FIELDS
  Dual(Year($1), YearStart($1)) AS [Year] Tagged ('$axis', '$year'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),Num(Ceil(NUM(Month($1))/3),00)) AS [Quarter] Tagged ('$quarter', '$cyclic'),
  Dual(Year($1)&'-Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [YearQuarter] Tagged ('$yearquarter', '$qualified'),
  Dual('Q'&Num(Ceil(Num(Month($1))/3)),QuarterStart($1)) AS [_YearQuarter] Tagged ('$yearquarter', '$hidden', '$simplified'),
  Month($1) AS [Month] Tagged ('$month', '$cyclic'),
  Dual(Year($1)&'-'&Month($1), monthstart($1)) AS [YearMonth] Tagged ('$axis', '$yearmonth', '$qualified'),
  Dual(Month($1), monthstart($1)) AS [_YearMonth] Tagged ('$axis', '$yearmonth', '$simplified', '$hidden'),
  Dual('W'&Num(Week($1),00), Num(Week($1),00)) AS [Week] Tagged ('$weeknumber', '$cyclic'),
  Date(Floor($1)) AS [Date] Tagged ('$axis', '$date', '$qualified'),
  Date(Floor($1), 'D') AS [_Date] Tagged ('$axis', '$date', '$hidden', '$simplified'),
  If (DayNumberOfYear($1) <= DayNumberOfYear(Today()), 1, 0) AS [InYTD] ,
  Year(Today())-Year($1) AS [YearsAgo] ,
  If (DayNumberOfQuarter($1) <= DayNumberOfQuarter(Today()),1,0) AS [InQTD] ,
  4*Year(Today())+Ceil(Month(Today())/3)-4*Year($1)-Ceil(Month($1)/3) AS [QuartersAgo] ,
  Ceil(Month(Today())/3)-Ceil(Month($1)/3) AS [QuarterRelNo] ,
  If(Day($1)<=Day(Today()),1,0) AS [InMTD] ,
  12*Year(Today())+Month(Today())-12*Year($1)-Month($1) AS [MonthsAgo] ,
  Month(Today())-Month($1) AS [MonthRelNo] ,
  If(WeekDay($1)<=WeekDay(Today()),1,0) AS [InWTD] ,
  (WeekStart(Today())-WeekStart($1))/7 AS [WeeksAgo] ,
  Week(Today())-Week($1) AS [WeekRelNo] ;

DERIVE FIELDS FROM FIELDS [Maintenance Expiration Date],[Invoice Date], [Rev. Rec. Start Date], [Rev. Rec. End Date], [Contract Item Start Date], [START.Contract Item End Date], [123Rev Rec Start Date], [123Rev Rec End Date] USING [autoCalendar] ;
BZ
Contributor II
Contributor II
Author

Brilliant! Thank you so much, sunny_talwar!