Saltar al contenido principal Saltar al contenido complementario

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.

Tasas de conversión de moneda
= Moneda Fecha de cambio 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

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 a la del 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 moneda, deberá tomar el “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:

Tabla actualizada
= Moneda 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

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.

¿Esta página le ha sido útil?

No dude en indicarnos en qué podemos mejorar si encuentra algún problema en esta página o su contenido, como, por ejemplo, errores tipográficos, pasos que falta o errores técnicos.

Únase al Programa de modernización de la analítica

Remove banner from view

Modernícese sin comprometer sus valiosas aplicaciones de QlikView con el Programa de modernización de la analítica. Haga clic aquí para obtener más información o contactar con nosotros: ampquestions@qlik.com