# 從單一日期建立日期間隔

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

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

貨幣兌換率

| = 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 的檔案，其中包含上方顯示的表格，并儲存它以備進行載入。

   確保 Change Date 資料列中的日期格式與本機日期格式相同。
2. 判定您想要使用的時間範圍。範圍的開始必須在資料中的第一個日期之前，並且範圍的結束必須在最後一個日期之後。
3. 載入來源資料，但是將空的日期變更為前一個要點中所定義範圍的開始日期。變更日期應該載入為「From Date」。
4. 首先根據 Currency 排序表格，然後根據「From Date」以遞減順序排序，確保您讓最新的日期位於頂部。
5. 執行第二次通過資料，您在其中計算「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 方法，與現有日期進行比較。

## 瞭解更多資訊

* [配對間隔和離散資料](https://help.qlik.com/zh-TW/qlikview/September2025/Subsystems/Client/Content/QV_QlikView/LoadData/matching-intervals-to-discrete-data.htm)