Ana içeriğe geç Tamamlayıcı içeriğe geç

Tek bir tarihten bir tarih aralığı oluşturma

Bazen zaman aralıkları, açık bir şekilde belirli bir başlangıç ve bitiş zamanıyla depolanmaz. Bunun yerine tek bir alan ile belirtilirler: değişim zaman damgası.

Çok sayıda para birimi için para birimi oranlarına sahip olduğunuz aşağıdaki tabloda görüldüğü gibi bir durum olabilir. Her bir para biriminin kur değişimi kendi satırındadır ve her birinin yeni dönüştürme oranı vardır. Ayrıca tabloda, ilk değişikliğin yapılmasından önceki başlangıç dönüştürme oranına karşılık gelen boş tarihleri içeren satırlar bulunur.

Döviz kurları
Para BirimiTarihi DeğiştirOran
EUR-8.59
EUR28/01/20138.69
EUR15/02/20138.45
USD-6.50
USD10/01/20136.56
USD03/02/20136.30

Yukarıdaki tablo, başlangıç verisinin Change Date olarak adlandırıldığı ve bitiş tarihinin de takip eden aralığın başlangıcıyla tanımlandığı bir dizi çakışmayan aralık tanımlar. Ancak bitiş tarihi kendine ait bir sütunda açıkça depolanmadığından, yeni tablo bir aralık listesi haline gelecek şekilde böyle bir sütun oluşturmamız gerekir.

  1. Yeni bir uygulama oluşturun ve ona bir ad verin.
  2. Veri yükleme düzenleyicisi'ne yeni bir kod bölümü ekleyin.
  3. Aşağıdaki satır içi tabloyu ekleyin. Change Date sütunundaki tarihlerin yerel tarih biçimiyle aynı biçimde olduğundan emin olun.
  4. In_Rates:
    LOAD * Inline [
    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
    ];
    

  5. Çalışmak istediğiniz zaman aralığını belirleyin. Bu aralığın başlangıcı verilerdeki ilk tarihten önce ve aralığın bitişi de verilerdeki son tarihten sonra olmalıdır.

    Aşağıdakileri komut dosyanızın başına ekleyin:

    Let vBeginTime = Num('1/1/2013');
    Let vEndTime = Num('1/3/2013');
    Let vEpsilon = Pow(2,-27);

  6. Kaynak verileri yükleyin, ancak boş tarihleri önceki madde işaretinde tanımlanan aralığın başlangıcı olarak değiştirin. Değişiklik tarihi "From Date" olarak yüklenmelidir.

    Tabloyu önce Currency öğesine göre, ardından "From Date" azalan düzende, en yeni tarihler en üstte olacak şekilde sıralayın.

    Aşağıdakileri In_Rates tablosundan sonra ekleyin:

    Tmp_Rates:
    LOAD Currency, Rate,
        Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
    Resident In_Rates;

  7. Verilerde, "To Date" değerini hesapladığınız ikinci bir geçiş yapın. Geçerli kaydın para birimi önceki kayıttan farklıysa, bu kayıt yeni bir para biriminin ilk kaydı demektir (ancak son aralığıdır) ve bu nedenle, 1. adımda tanımlanan aralığın sonunu kullanmalısınız. Aynı Para Birimi ise, önceki kayıttan "From Date" değerini almalı, küçük bir zaman miktarını çıkarmalı ve bu değeri geçerli kayıtta "To Date" olarak kullanmalısınız.

    Tmp_Rates tablosundan sonra aşağıdakileri ekleyin:

    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;
    

  8. Kodunuz şöyle görünmelidir:

    Let vBeginTime = Num('1/1/2013');
    Let vEndTime = Num('1/3/2013');
    Let vEpsilon = Pow(2,-27);
    
    In_Rates:
    LOAD * Inline [
    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
    ];  
    
    Tmp_Rates:
    LOAD Currency, Rate,	
        Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
    Resident In_Rates; 
    
    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;

Komut dosyası, kaynak tabloyu aşağıdaki şekilde güncelleyecektir:

Güncellenmiş kaynak tablo
Para BirimiOranBaşlangıç TarihiBitiş Tarihi
EUR8.4515/02/2013vEndTime
EUR8.6928/01/201314/02/2013 23:59:59
EUR8.59vBeginTime28/01/2013 23:59:99
USD6.3003/02/2013vEndTime
USD6.5610/01/20132/02/2013 23:59:59
USD6.50vBeginTime9/01/2013 23:59:59

Uygulamanızda tablo şu şekilde görünür:

Verilerin ön izlemesi
Para BirimiOranFromDateTarihe
EUR8.4515/02/201301/03/2013
EUR8.6928/01/201314/02/2013
EUR8.5901/01/201328/01/2013
USD6.3003.02.201301.03.2013
USD6.5610.01.20132/02/2013
USD6.5001.01.20139/01/2013

Bu tablo daha sonra var olan bir tarih ile karşılaştırmada Intervalmatch yöntemi kullanılarak kullanılabilir.

Bu sayfa size yardımcı oldu mu?

Bu sayfa veya içeriği ile ilgili bir sorun; bir yazım hatası, eksik bir adım veya teknik bir hata bulursanız lütfen bize bildirin!