メイン コンテンツをスキップする 補完的コンテンツへスキップ

不連続データと間隔の一致

intervalmatch プレフィックスを LOAD または SELECT ステートメントで使用すると、不連続の数値が 1 つ以上の数値間隔にリンクされます。これはとても有用な機能で、実稼働環境などで使用できます。

Intervalmatch の例

次の 2 つのテーブルを見てください。最初のテーブルは、さまざまな注文 (Order) の製造の開始時刻 (Start) と終了時刻 (End) を示しています。2 つ目のテーブルには個々のイベントが含まれています。どの注文がイベントの影響を受けたか、どの注文がどのシフトで処理されたかを知るには、どのように離散したイベントを注文に関連付ければよいでしょうか。

テーブル OrderLog
開始最後注文
01:0003:35A
02:3007:58B
03:0410:27C
07:2311:43D
テーブル EventLog
時間イベントコメント
00:000シフト 1 の開始
01:181ラインの停止
02:232ラインの 50% の再開
04:153ライン速度 100%
08:004シフト 2 の開始
11:435稼働終了

まず、通常通り 2 つのテーブルをロードし、次に、項目 Start および End によって定義される間隔に項目 Time をリンクします。

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

これで、以下のように Qlik Sense でテーブルを作成できます。

開始と終了によって定義される間隔にリンクされた時間項目を含むテーブル
時間イベントコメント注文開始終了
0:000シフト 1 の開始---
1:181ラインの停止A1:003:35
2:232ラインの 50% の再開1:003:35
4:153ライン速度 100%B2:307:58
4:153ライン速度 100% C3:0410:....
8:004シフト 2 の開始C3:0410:....
8:004シフト 2 の開始D7:2311:....
11:435稼働終了E7:2311:.....

主に注文 A がラインの停止の影響を受けた一方で、ライン速度の減少は注文 BC にも影響を及ぼしたことが分かります。注文 CD だけは、一部が Shift 2 で処理されました。

intervalmatch を使用する場合は、次の点に注意してください。

  • intervalmatch ステートメントの前に、不連続データ ポイントを含む項目 (上の例では Time) が Qlik Sense に読み取られている必要があります。intervalmatch ステートメントは、データベース テーブルからこの項目を読み取りません。
  • intervalmatch LOAD または SELECT ステートメントで読み取られたテーブルは、厳密に 2 つの項目 (上記の例では、StartEnd) を含んでいる必要があります。他の項目へのリンクを確立するには、個別の LOAD または SELECT ステートメントで、間隔項目を追加項目とともに読み込む必要があります (上記の例の最初の SELECT ステートメント)。
  • 間隔は常に閉じています。つまり、終端は間隔に含まれます。NULL の範囲は間隔を無限に拡張しますが、数値以外の範囲は間隔を無視します。
  • 間隔は重なる場合があり、不連続値は一致する間隔すべてにリンクされます。

拡張された intervalmatch 構文を使用した穏やかに変化する軸 (SCD) 問題の解決

拡張された intervalmatch 構文を使用して、ソース データ内で穏やかに変化する軸 (SCD) の既知の問題を処理できます。

サンプル スクリプト:

SET NullInterpret='';

 

IntervalTable:

LOAD Key, ValidFrom, Team

FROM 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is IntervalTable);

 

Key:

LOAD

Key,

ValidFrom as FirstDate,

date(if(Key=previous(Key),

previous(ValidFrom) - 1)) as LastDate,

Team

RESIDENT IntervalTable order by Key, ValidFrom desc;

 

drop table IntervalTable;

 

Transact:

LOAD Key, Name, Date, Sales

FROM 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is Transact);

 

INNER JOIN intervalmatch (Date,Key) LOAD FirstDate, LastDate, Key RESIDENT Key;

欠損値は NULL 値ではなく空の文字列として定義されるため、nullinterpret はテーブル ファイルからデータを読み取る場合にのみ必要となります。

IntervalTable からデータをロードすると、次のテーブルが生成されます。

Table with data loaded from IntervalTable
KeyFirstDateTeam
0001102011-01-21Southwest
000110-Northwest
000120-Northwest
0001202013-03-05Southwest
0001202013-03-05Northwest
0001202013-03-05Southwest

nullasvalue ステートメントでは、リストされている項目に NULL 値をマップできます。

previous および order by を使用して、KeyFirstDateLastDate (属性項目) を作成します。その後、このキー テーブルで置き換えられた IntervalTable がドロップされます。

Transact からデータをロードすると、次のテーブルが生成されます。

Transact からロードされたデータを含むテーブル
KeyNameDateSales
000110Spengler Aaron2009-08-18100
000110Spengler Aaron2009-12-25200
000110Spengler Aaron2011-02-03300
000110Spengler Aaron2011-05-05400
000120Ballard John2011-06-04500
000120Ballard John2013-01-20600
000120Ballard John2013-03-10700
000120Ballard John2013-03-13800
000120Ballard John2013-09-21900

inner join に続く intervalmatch ステートメントは、Transact に接続する合成キーで上記のキーを置き換えます。その結果、次のテーブルが生成されます。

inner join に続く intervalmatch ステートメントを含むテーブル
KeyTeamNameFirstDateLastDateDateSales
000110NorthwestSpengler Aaron-2011-01-202009-08-18100
000110NorthwestSpengler Aaron-2011-01-202009-12-25200
000110SouthwestSpengler Aaron2011-01-21 2011-02-03300
000110SouthwestSpengler Aaron2011-01-21 2011-05-05400
000120NorthwestBallard John 2013-01-052011-06-04500
000120SouthwestBallard John2013-01-062013-03-042013-01-20600
000120SouthwestBallard John2013-03-05 2013-03-10700
000120SouthwestBallard John2013-03-05 2013-03-13800
000120SouthwestBallard John2013-03-05 2013-09-21900

このページは役に立ちましたか?

このページまたはコンテンツにタイポ、ステップの省略、技術的エラーなどの問題が見つかった場合はお知らせください。