2017-05-30 55 views
0

我需要计算两个日期不包括星期日之间的差异。我有日期表,我需要计算上次日期重复日期的数量。Qlikview - arrayList

如果我有日期,这样

27-05-2017 
29-05-2017 
30-05-2017 

我在剧本

date(max(Date)) as dateMax, 
date(min(Date)) as dateMin 

使用此代码,我得到分钟日期= 27-05-2017和最大日期= 30-05-2017然后我用在表情中

=floor(((dateMax - dateMin)+1)/7)*6 + mod((dateMax - dateMin)+1,7) 
+ if(Weekday(dateMin) + mod((dateMax - dateMin)+1,7) < 7, 0, -1) 

并得到结果3天。那OK,但问题是,如果我有未来日期:

10-05-2017 
11-05-2017 
27-05-2017 
29-05-2017 
30-05-2017 

当使用以前的代码我得到分钟日期= 2017年10月5日和最大日= 30-05-2017,并导致18,但这是不好。

我需要数从

27-05-2017 
29-05-2017 
30-05-2017 

我需要得到最大的日期和去扔循环重复日期只有日期,如果有制动看到的是,日星期日,如果是,则步骤该日期并继续计数重复的日期,如果我再次休息,并且如果不是周日比闭环和记得天数。

在我的情况下,而不是18天,我需要3天。

有什么想法?

回答

0

我建议你在脚本中创建一个主日历,你可以在这个日历上应用权重或任何其他规则。然后在你的表格或应用程序中,你可以循环访问日期或执行操作并对它们的权重求和(0:如果星期日为1,否则为1)。我们来看一个例子:

// In this case I'll do a master calendar of the present year 

LET vMinDate = Num(MakeDate(year(today()),1,1)); 
LET vMaxDate = Num(MakeDate(year(today()),12,31)); 


Calendar_tmp: 
LOAD 
$(vMinDate) + Iterno() - 1 as Num, 
Date($(vMinDate) + Iterno() - 1) as Date_tmp 
AUTOGENERATE 1 WHILE $(vMinDate) + Iterno() - 1 <= $(vMaxDate); 


Master_Calendar: 
LOAD 
     Date_tmp AS Date, 
     Week(Date_tmp) as Week, 
     Year(Date_tmp) as Year, 
     Capitalize(Month(Date_tmp)) as Month, 
     Day(Date_tmp) as Day, 
     WeekDay(Date_tmp) as WeekDay, 
     if(WeekDay = '7',0,1) as DayWeight //HERE IS WHERE YOU COULD DEFINE A VARIABLE TO DIRECTLY COUNT THE DAY IF IT IS NOT SUNDAY 
     'T' & ceil(num(Month(Date_tmp))/3) as Quarter, 
     'T' & ceil(num(Month(Date_tmp))/3) & '-' & right(year(Date_tmp),2) as QuarterYear, 
     date(monthStart(Date_tmp),'MMMM-YYYY') as MonthYear, 
     date(monthstart(Date_tmp),'MMM-YY') as MonthYear2  
RESIDENT Calendar_tmp 
ORDER BY Date_tmp ASC; 

DROP Table Calendar_tmp;