Creación de un intervalo de fechas a partir de una sola fecha

En ocasiones, los intervalos de tiempo no se almacenan de forma explícita con un principio y un final. En su lugar, están implícitos solo por un campo: la fecha/hora del cambio.

Podría ser como en la tabla a continuación, en la que hay tipos de cambio para múltiples divisas: Cada cambio de tasa de divisa está en su propia fila, cada una de ella con una nueva tasa de conversión. Asimismo, la tabla contiene filas con fechas vacías que corresponden a la tasa de conversión inicial, antes de que se hiciera el primer cambio.

Esta tabla define un conjunto de intervalos que no se solapan, donde los datos de inicio se denominan “Change Date” y la fecha de finalización se define por el inicio del siguiente intervalo. Pero, ya que la fecha de finalización no se almacena de forma explícita en su propia columna, necesitamos crear esta columna para que la nueva tabla se convierta en una lista de intervalos.

Haga lo siguiente:

  1. Cree un archivo denominado Rates.xlsx que contenga la tabla mostrada anteriormente y guárdelo listo para la carga.
  2. Asegúrese de que las fechas en la columna Change Date estén en el mismo formato que el formato de fecha local.

  3. Determine con qué rango de fechas desea trabajar. El inicio del rango debe ser anterior a la primera fecha de los datos, y el final del rango debe ser posterior a la última.
  4. Cargue los datos de origen, pero cambie las fechas vacías en el principio del rango definido en el punto anterior. La fecha del cambio deber cargarse como “From Date”.
  5. Ordene la tabla primero de acuerdo con la divisa Currency, después ordénela de forma descendente según la fecha de inicio “From Date” para que tenga las últimas fechas en la parte superior.
  6. Dé una segunda pasada por los datos, donde se calcula la fecha de finalización: “To Date”. Si el registro actual tiene una divisa distinta al registro anterior, entonces es el primer registro de una nueva divisa (pero su último intervalo), por lo que debería usar el rango definido en el paso 1. Si es la misma divisa, debería tomar la fecha “From Date” del registro anterior, restar una pequeña cantidad de tiempo y usar este valor como “To Date” en el registro actual.

El script mostrado a continuación actualizará la tabla de origen de la siguiente forma:

El aspecto del script QlikView será el siguiente:

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;

 

Cuando se ejecute este script, tendrá una tabla que muestre los intervalos correctamente.

Esta tabla se puede usar posteriormente en una comparación con otra fecha usando los métodos Intervalmatch mencionados anteriormente.