QlikWorld 2020 Global Konferans. Verilerinizden en iyi şekilde nasıl yararlanacağınızı keşfetmek için bize katılın. Fırsatı kaçırmayın. Şimdi kaydolun ve indirimden yararlanın.

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.

Para birimi oranları
Para Birimi Değişiklik Tarihi Oran
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

Bu tablo, başlangıç tarihinin "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ığı 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.

Bu kod örneğinde, satır içi yük tarafından In_Rates tablosu oluşturulur. Change Date sütunundaki tarihlerin yerel tarih biçimiyle aynı biçimde olduğundan emin olun.

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 ];

Aşağıdakileri yapın:

  1. Ç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.

    Let vBeginTime = Num('1/1/2013');
    Let vEndTime = Num('1/3/2013');
    Let vEpsilon = Pow(2,-27);
  1. 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 ve ardından "From Date" öğesine göre, en yeni tarihler en üstte olacak şekilde azalan düzende sıralayın.

    Tmp_Rates:
    LOAD Currency, Rate,
    Date(If(IsNum([Change Date]), [Change Date], $(#vBeginTime))) as FromDate
    Resident In_Rates;
  2. To Date değerini hesapladığınız verilerde 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. Bu aynı Para Birimiyse, önceki kaynaktan “From Date” değerini almanız, küçük bir süreyi çıkarmanız ve geçerli kayıtta bu değeri “To Date” olarak kullanmanız gerekir.

    Rates:
    LOAD Currency, Rate, FromDate,
    Date(If( Currency=Peek('Currency'),
    Peek('FromDate') - $(#vEpsilon),
    $(#vEndTime)
    )) as ToDate
    Resident Tmp_Rates
    Order By Currency, FromDate Desc;
  3. Giriş tablosunu ve geçici tabloyu bırakın.

    Drop Table Tmp_Rates;

Aşağıda listelenen kod, kaynak tabloyu şu şekilde güncelleştirir:

Güncellenen kaynak tablo
Para Birimi Oran 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:99
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

Kod çalıştırıldığında, aralıkları doğru bir şekilde listeleyen bir tablonuz olacaktır. Ortaya çıkan tabloyu görüntülemek için veri modeli görüntüleyicisinin Ön izleme bölümünü kullanın.

Verilerin önizlemesi
Para Birimi Oran FromDate ToDate
EUR 8.45 15/02/2013 01/03/2013
EUR 8.69 28/01/2013 14/02/2013
EUR 8.59 01/01/2013 28/01/2013
USD 6.30 03/02/2013 01/03/2013
USD 6.56 10/01/2013 2/02/2013
USD 6.50 01/01/2013 9/01/2013

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

Example:  

Tüm Qlik Sense kodu şöyle görünür:

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;