Gå till huvudinnehåll Gå till ytterligare innehåll

Skapa ett datumintervall från ett enskilt datum

Ibland lagras inte tidsintervallen med en explicit början och ett explicit slut. Istället impliceras de av endast ett fält, ändringstidsmarkören.

Det kan till exempel se ut som i tabellen nedan där du har valutakurser för flera olika valutor. Varje valutakursändring står på en egen rad, var och en med en ny omräkningskurs. Tabellen har även rader med tomma datum som motsvarar den ursprungliga valutakursen, innan den första ändringen skedde.

Valutaomräkningskurser
Currency Change Date 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

Tabellen definierar en uppsättning icke-överlappande intervall, där startdatumet kallas ”Change Date” och slutdatumet definieras av början på det efterföljande intervallet. Eftersom slutdatumet inte finns explicit lagrat i en egen kolumn måste vi skapa en sådan kolumn, så att den nya tabellen blir en lista över intervaller.

Gör följande:

  1. Skapa en fil med namnet Rates.xlsx som innehåller tabellen ovan och lagra den så att den är färdig att läsa in.
  2. Se till att datumen i Change Date-kolumnen har samma format som det lokala datumformatet.

  3. Bestäm vilket tidsintervall du vill arbeta med. Början på intervallet måste infalla före det första datumet i dina data och intervallets slut måste infalla efter det sista.
  4. Läs in källdata, men ändra de tomma datumen till början på intervallet som definieras i föregående punkt. Ändringsdatumet ska läsas in som ”From Date”.
  5. Sortera tabellen, först efter Currency och sedan efter ”From Date” i fallande ordning, så att du får de senaste datumen högst upp.
  6. Kör ett andra pass på dina data där du beräknar ”To Date”. Om den aktuella posten har en annan valuta än den förra posten innebär det att det är den första posten med en ny valuta (men dess sista intervall), så du ska använda slutet på intervallet som definieras i steg 1. Om det är samma valuta ska du ta ”From Date” från den föregående posten, subtrahera en liten tidsmängd och använda detta värde som ”To Date” i den aktuella posten.

Skriptet nedan uppdaterar källtabellen på följande sätt:

Uppdaterad tabell
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-skriptet ser ut så här:

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;

 

När det här skriptet körs får du en tabell med en korrekt lista över intervallen.

Tabellen kan sedan användas för att jämföra med ett befintligt datum med hjälp av Intervalmatch-metoderna.

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!

Gå med i programmet Analytics Modernization

Remove banner from view

Modernisera utan att kompromissa med dina värdefulla QlikView-appar med programmet för analysmodernisering. Klicka här för mer information eller ta kontakt: ampquestions@qlik.com