BOBu yazımda BO’da iki tarih arasındaki zaman farkını nasıl bulduğuma dair notlarımı paylaşacağım.

BO kullandığınızda configurasyon yada sürüm farkı nedeniyle iki tarih arasındaki farkı ” A Tarih – B Tarih = C Fark ” şeklinde bir formül yazarak basitçe sonuç elde edemediğiniz göreceksinizdir.

Bu nedenle formatlı gelen tarihi en küçük birime yani saniyeye indirip buradan hareketle bir zaman hesaplaması yapmak gerekiyor.

şöyleki

Başlangıç Tarihi dimesion’nın formatı şu şekilde 18.11.2014 14:23:56

=(ToNumber(DaysBetween(ToDate("01.01.2013";"dd.mm.yyyy");[Başlangıç Tarihi]))*86400)
+
((ToNumber(FormatDate([Başlangıç Tarihi];"HH"))*3600)+
(ToNumber(FormatDate([Başlangıç Tarihi];"mm"))*60)+
ToNumber(FormatDate([Başlangıç Tarihi];"ss")))

Bu kod ile önce saati, sonra dakikayı saniyeye çevirip bunları eldeki saniye ile topluyorum
Ama tek başına yeterli değil, bu haliyle dünden gelen bir zamandan çıkarmak istediğimde karmaşa yaratacaktır
örneğin
dün 14:30:00 ‘da olan bir olayın zamanı ile bugün 15:00:00 arasındaki farkı almak istediğimde sadece saat kısmını saniyeye çevirirsem -30 dakika gibi bir sonuç çıkacaktır. bu nedenle gün farkına da dikkat etmemiz gerekiyor ve aradaki bir günlük farkıda hesaplamaya dahil etmemiz gerekiyor.
Bunun için kodun en başında görüdüğünüz “DaysBetween” komutunu kullanıyorum
Kendime bir milad tarih belirledim, 01.01.2013
Bu tarih ile farkını almak istediğim tarih arasındaki gün farkını bulup bunu saniyeye çeviriyorum (86400 ile çarparak saniye cinsinden gün farkını bulmuş oldum) bunuda saat detayı ile toplayıp elimde unique bir saniye elde etmiş oldum

Bitiş Tarihi kısmınıda bu şekilde saniyeye çevirdiğimde artık iki rakamı kolayca birbirinden çıkarmak için A-B=C formülü uygulayabiliriz
Elde ettiğiniz saniye farkı görsel olarak bir işe yaramayabilir.
Gösterimi saat:dakika:saniye cinsinden göstermek istersek de bir dimension yaratıp içine şu formülü koyuyoruz

=ToDate(If((IsNull([Tarih])) Or([Tarih] = 0 )) Then ("00:00:00")
Else FormatNumber(Floor(([Tarih]) /3600) ;"00") + ":" +
FormatNumber(Floor(Mod(([Tarih]) ;3600)/60) ;"00") + ":" +
FormatNumber(Floor(Mod(Mod(([Tarih]) ;3600) ;60)) ;"00");"HH:mm:ss")

önce Tarih NULL ise bir kontrol koydum. Siz isterseniz bir hata mesajı yazdırabilirsiniz.
Eğer NULL değilse tek tek ters işlem yapıp önce saat, dakika ve saniye olarak yazdırdım
BO’da çeşitli formatlar var ben HH:mm:ss kullandım
kendi kullanımınıza uygun bir format elbette bulacaksınızdır :)

Umarım işe yarar
sevgiler

Be Sociable, Share!