h.yamada/ 2022年 7月 12日/ 技術

どもです、ヤマダです。
札幌もさすがに暑くなってきました。
今年はビアガーデンが開催されるので、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のデータが存在した場合、ロード後にモデルからは削除されますので注意が必要です。
今日はこんなところです。ではまた!

About h.yamada

BIやってます。 初めに触ったBIはPentaho、一番長いのはQlikViewで約10年、Tableauも少々。 Tableau Desktop Certified Associateの資格も持ってました(有効期限切れ)