跳到主要內容 跳至補充內容

從單一日期建立日期間隔

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

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

貨幣兌換率
= Currency 匯率 Rate
EUR - 8.59
EUR 28/01/2013 8.69
EUR 15/02/2013 8.45
USD - 6.50
USD 10/01/2013 6.56
USD 03/02/2013 6.30

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

請執行下列動作:

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

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

下方列出的指令碼將使用下列方式更新來源表格:

已更新表格
= Currency Rate FromDate ToDate
EUR 8.45 15/02/2013 vEndTime
EUR 8.69 28/01/2013 14/02/2013 23:59:59
EUR 8.59 vBeginTime 28/01/2013 23:59:59
USD 6.30 03/02/2013 vEndTime
USD 6.56 10/01/2013 2/02/2013 23:59:59
USD 6.50 vBeginTime 9/01/2013 23:59:59

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 方法,與現有日期進行比較。

瞭解更多資訊

 

此頁面是否對您有幫助?

若您發現此頁面或其內容有任何問題——錯字、遺漏步驟或技術錯誤——請告知我們可以如何改善!

加入分析現代化計畫

Remove banner from view

透過分析現代化程式進行現代化而不犧牲寶貴的 QlikView 應用程式。 按一下這裡 取得更多資訊或聯繫: ampquestions@qlik.com