Een datuminterval maken op basis van een enkele datum

Soms worden tijdsintervallen niet expliciet opgeslagen met een begin en een einde. In plaats daarvan worden zij geïmpliceerd door slechts één veld: het wijzigingstijdsstempel.

Dit kan zijn zoals in de onderstaande tabel, waarin u wisselkoersen voor meerdere valuta's hebt. Elke verandering in wisselkoers bevindt zich op een eigen rij, elk met een nieuwe wisselkoers. Ook bevat de tabel rijen met lege datums die overeenkomen met de oorspronkelijke wisselkoers, voordat de eerste wijziging werd aangebracht.

Deze tabel definieert een reeks van niet-overlappende intervallen, waarbij de begingegevens “Change Date” worden genoemd en de einddatum wordt gedefinieerd door het begin van de volgende interval. Maar aangezien de einddatum niet expliciet in een eigen kolom is opgeslagen, moeten we een dergelijke kolom maken, zodat de nieuwe tabel een lijst met intervallen wordt.

Doe het volgende:

  1. Maak een bestand genaamd Rates.xlsx met de tabel die hierboven wordt weergegeven en sla dit op zodat het gereed is om te worden geladen.
  2. Zorg ervoor dat de datums in de kolom Change Date dezelfde opmaak hebben als de lokale datumopmaak.

  3. Bepaal met welk tijdbereik u wilt werken. Het begin van het bereik moet vóór de eerste datum in de gegevens liggen en het einde van het bereik moet na de laatste datum liggen.
  4. Laad de brongegevens, maar wijzig lege datums aan het begin van het bereik dat is gedefinieerd bij het vorige opsommingsteken. De wijzigingsdatum moet worden geladen als From Date”.
  5. Sorteer de tabel eerst op Currency en vervolgens in aflopende volgorde op de “From Date” zodat de meest recente datums bovenaan staan.
  6. Voer een tweede run uit op de gegevens waarbij u de To Date” berekent. Als de huidige record een andere valuta heeft dan de vorige records, is het de eerste record van een nieuwe valuta (maar het laatste interval hiervan). U kunt dus het beste het einde van het bereik gebruiken dat is gedefinieerd in stap 1. Als het dezelfde valuta is, neemt u de “From Date” van de vorige record, trekt u een kleine hoeveelheid tijd af en gebruikt u deze waarde als “To Date” in de huidige record.

In het hierop aangegeven script wordt de brontabel als volgt bijgewerkt:

Het QlikView-script ziet er als volgt uit:

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;

 

Als dit script wordt uitgevoerd, beschikt u over een tabel waarin de intervallen op correcte wijze worden weergegeven.

Deze tabel kan vervolgens worden gebruikt in een vergelijking met een bestaande datum via de Intervalmatch-methoden.