2017-05-30 3 views
0

日曜日を除く2つの日付の差を計算する必要があります。私は日付のあるテーブルを持っており、最終日からの繰り返し日数を計算する必要があります。Qlikview - arrayList

私はスクリプト

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

でこのコードを使用すること

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

のような日付を持っていると私は分日付= 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)。例を見てみましょう:

// 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;