從單一日期建立日期間隔

部分已儲存的時間間隔沒有明確的開始和結束。它們僅使用一個欄位暗示 - 變更時間戳記。

它可以如下表中所示,其中包含多種貨幣的貨幣匯率。每種貨幣匯率的變更都載於自己的列上;每種都具有新的兌換率。此外,在進行第一次變更之前,表格包含一些列,具有對應於初始兌換率的空日期。

此表格會定義一組非重疊間隔,其中開始日期稱為 “Change Date”,結束日期由下列間隔的開始進行定義。但是因為結束日期未明確地儲存在其自己的資料行中,所以我們需要建立此類資料行,以便新表格將變成間隔清單。

請執行下列動作:

  1. 建立名為 Rates.xlsx的檔案,其中包含上方顯示的表格,并儲存它以備進行載入。
  2. 確保 Change Date資料列中的日期格式與本機日期格式相同。

  3. 判定您想要使用的時間範圍。範圍的開始必須在資料中的第一個日期之前,並且範圍的結束必須在最後一個日期之後。
  4. 載入來源資料,但是將空的日期變更為前一個要點中所定義範圍的開始日期。變更日期應該載入為「From Date」。
  5. 首先根據 Currency排序表格,然後根據「From Date」以遞減順序排序,確保您讓最新的日期位於頂部。
  6. 執行第二次通過資料,您在其中計算「To Date」。如果目前記錄的貨幣與前一筆記錄不同,則它是新貨幣的第一筆記錄 (但為最後一個間隔),因此您應該使用步驟 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方法,與現有日期進行比較。