単一の日付からの日付間隔の作成

時間の間隔が明示的に開始および終了を含むことなく保存される場合があります。代わりに、変更タイムスタンプという 1 つの項目により暗黙のうちに定義されています。

複数の通貨の現在のレートを記載した下記のテーブルがある場合、各通貨レートの変化は新しい変換レートとともにそれぞれの行に表示されています。また、テーブルには最初に変換が実施される前の、当初の変換レートに対応する日付が空の行も含まれています。

このテーブルは、重複しない間隔のセットを定義し、開始日は「Change Date」と呼ばれ終了日は次の間隔の開始点によって定義されています。しかし、終了日が専用の列に明示的に保存されていないため、そのような列を作成し、新しいテーブルが間隔のリストとなるようにする必要があります。

次の手順を実行します。

  1. 上記に示されたテーブルを含む Rates.xlsx というファイルを作成して保存し、ロードの準備を整えます。
  2. Change Date 列の日付がローカル日付書式と同じ書式になっていることを確認します。

  3. 参照する時間幅を決定します。その時間幅の開始点は、日付の最初の日の前であり、終了点は最終日の後でなければなりません。
  4. ソース データをロードし、空の日付を前の手順で定義した時間幅の開始点に変更します。変更した日付は、「From Date」としてロードする必要があります。
  5. まず Currency に応じてテーブルをソートしますが、最新の日付が一番上に来るように「From Date」を降順でソートします。
  6. To Date」を計算する 2 度目のデータ パススルーを実行します。現在のレコードに前のレコードとは異なる通貨がある場合、それは新しい通貨の最初のレコードとなる (だが間隔は最後) ため、手順 1 で定義した時間幅の終了日を使用する必要があります。通貨が同一の場合は、前のレコードの「From Date」を取得して時間の小さい単位を差し引き、この値を現在のレコードの「To Date」として使用します。

下記にリストされたスクリプトは、次の方法でソース テーブルを更新します。

QlikView スクリプトは次のようになります。

Let vBeginTime = Num('1/1/2013');
Let vEndTime = Num('1/3/2013');
Let vEpsilon = Pow(2,-27);
Tmp_Rates:
LOAD Currency, Rate,
Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
From 'C:\MyFiles\Rates.xlsx'
(ooxml, embedded labels, table is Sheet1);
 
Rates:
LOAD Currency, Rate, FromDate,
Date(If( Currency=Peek(Currency),
Peek(FromDate) - $(#vEpsilon),
$(#vEndTime)
)) as ToDate
Resident Tmp_Rates
Order By Currency, FromDate Desc;
 
Drop Table Tmp_Rates;

 

このスクリプトを実行すると、間隔を正確にリストしたテーブルが完成します。

Intervalmatch メソッドを使用することにより、既存の日付との比較にこのテーブルを使用することができます。