どもです、ヤマダです。
札幌もさすがに暑くなってきました。
今年はビアガーデンが開催されるので、2年分行きたいと思っております。
さて、今回はQlikのIntervalMatchについて解説します。
使用するのが初めてだったので、ここに纏めておこうと思います。
IntervalMatchは間隔をLOADする
IntervalMatchは間隔(FROM-TO)をLOADする構文となっております。
マスタCalendarを自力で作成して集計することもできますが、
IntervalMatchを使用すると簡単に作成することができます。
公式リファレンスはこちら
テストデータ
トランザクションにFromとToの項目があると想定します。
transaction:
LOAD * INLINE [
No,From, To
1,2022/07/01,2022/08/10
2,2022/08/15,2022/09/20
3,2022/07/21,2022/09/30
];
カレンダーデータ
月毎のデータを準備します。
RangeCalendar:
LOAD * Inline [
Date
2022/07/01
2022/08/01
2022/09/01
2022/10/01
];
IntervalMatchでJOIN
トランザクションとカレンダーをJOINします。
カレンダーのDateがトランザクションのFrom-Toのデータの間隔に存在すればJOINされます。
Inner Join(transaction)
IntervalMatch(Date)
LOAD From, To
Resident transaction;
実行結果
Noが「1」のデータがDate「2022/07/01」と「2022/08/01」にJOINされているのがわかりますね。
Date | No | From | To |
---|---|---|---|
2022/7/1 | 1 | 2022/7/1 | 2022/8/10 |
2022/8/1 | 1 | 2022/7/1 | 2022/8/10 |
2022/9/1 | 2 | 2022/8/15 | 2022/9/20 |
2022/8/1 | 3 | 2022/7/21 | 2022/9/30 |
2022/9/1 | 3 | 2022/7/21 | 2022/9/30 |
2022/10/1 |
合成テーブルの削除
このままでも使えなくはないですが、合成テーブルが出来ちゃうんですよね。。
ってことで以下を追加すると削除できます。
Left Join(RangeCalendar)
LOAD
*
Resident transaction;
DROP Table transaction;
最後に
IntervalMatchは非常に強力な構文ですが、From>Toのデータが存在した場合、ロード後にモデルからは削除されますので注意が必要です。
今日はこんなところです。ではまた!