top of page

最新記事リスト

執筆者の写真SENSUKE KURIYAMA

Qlikでカレンダーマスタを自動で作成する方法

Qlikを使って、カレンダーマスタを作成する方法を試してみました。細かな解説は気にせずWebにあるスクリプトを参考にして動かしてみました。



 

※2024年4月時点のQlik Sense Businessを利用しています。

 
<その1.シンプルに単体で試せる①>

SETのvStartとvEndにカレンダーを作成する開始日と終了日を記述します。 参考)QlikViewでカレンダーを自動生成する     @sasanquaneufin株式会社ユニエイム


SET vStart = '2024/05/01';
SET vEnd = '2025/12/31';

temp:
LOAD * 
INLINE [
    dummy
    1
];

For i = date('$(vStart)','YYYY/MM/DD') To date('$(vEnd)','YYYY/MM/DD')
カレンダー:    
LOAD 
    date($(i)) as 日付,
    Year(date($(i))) as 年,
    'Q'& Ceil(Num(Month(AddMonths(date($(i)),-3)))/3) as 四半期,
    Month(date($(i))) as 月,
    Day(date($(i))) as 日,
    Week(date($(i))) as 週,
    WeekDay(date($(i))) as 曜日    
    Resident temp;
Next

DROP Table temp;

 

<その1‐2.シンプルに単体で試せる②>

「その1」のSETでの設定をvStartとvEndを固定ではなく「今日の日付」を基準に前後30日を指定しています。今日の日付はToday()関数で取得します。また、計算された値を変数化するためSETではなくLETとしています。(変数の使用:SETとLET の違い


LET vStart = Today()-30;
LET vEnd = Today()+30;

temp:
LOAD * INLINE 
[
    dummy
    1
];

For i = date('$(vStart)','YYYY/MM/DD') To date('$(vEnd)','YYYY/MM/DD')
カレンダー:    
LOAD 
    date($(i)) as 日付,
    Year(date($(i))) as 年,
    'Q'& Ceil(Num(Month(AddMonths(date($(i)),-3)))/3) as 四半期,
    Month(date($(i))) as 月,
    Day(date($(i))) as 日,
    Week(date($(i))) as 週,
    WeekDay(date($(i))) as 曜日    
Resident temp;
Next

DROP Table temp;

 
<その2.カレンダーマスタとともに利用する明細データから日付期間を指定する>

先行してロードした明細テーブル(売上明細)の最小日付と最大日付を変数に代入してカレンダー期間を動的に設定できます。これだと組み合わせる明細データに応じて余分なカレンダーを作成せずにすみます。(※下記サンプルでは日付以外の項目は省略しました)


▼サンプル①

売上明細:
LOAD * INLINE 
[
日付     ,売上
2024/1/2 ,120
2024/1/3 ,140
2024/1/15,100
2024/1/16,150
](delimiter is ',');

////////////////////

日付期間:
Load
Max(日付) as DateMax,
Min(日付) as DateMin
Resident 売上サンプル;

LET varMaxDate= FieldValue('DateMax', 1);
LET varMinDate= FieldValue('DateMin', 1);

カレンダー:
LOAD 
Date($(varMinDate) -1 + IterNo(),'YYYY/MM/DD') as 日付

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

▼サンプル②

「売上明細」の件数が多いときにもこのサンプルだと処理が速いとありました。サンプル①にある「日付期間」の部分でかかる時間を大きく改善できるとのことです。

売上サンプル:
LOAD * INLINE 
[
日付     ,売上
2024/1/2 ,120
2024/1/3 ,140
2024/1/15,100
2024/1/16,150
](delimiter is ',');

////////////////////

カレンダー:
LOAD 
tmp_date as date;

LOAD
Date(mindate + IterNo()) as tmp_date,
maxdate

WHILE mindate + IterNo() <= maxdate;

LOAD
min(FieldValue('日付',RecNo()))-1  as mindate,
max(FieldValue('日付',RecNo()))  as maxdate

AutoGenerate FieldValueCount('日付');


 

【参考】


以上です

閲覧数:116回0件のコメント

関連記事

すべて表示

Kommentare


bottom of page