Dela upp tidstämpel till datum och tid

Tidstämplar är fält som innehåller både datum och tid. I bakgrunden lagras dessa som ett decimaltal där heltalsdelen motsvarar datumet och decimaldelen tiden. Det är ofta fördelaktigt att dela upp dessa två värden i två separata fält.

Datum i Qlik hanteras på motsvarande sätt som i Excel. I bakgrunden lagras värdet som ett heltal motsvarande antalet dagar sedan 1899-12-30. Dagen 2021-06-20 har alltså egentligen ett värde av 44367. Till detta värde finns också ett av utvecklaren valt presentationsformat – vanligast är formatet YYYY-MM-DD i Sverige, vilket också är en ISO-standard.

Tiden är på motsvarande sätt en decimaldel av talet. 0.25 motsvarar en fjärdedel av ett dygn vilket alltså är klockan 6 på morgonen.

Vi behöver ofta ett datumfält som är ”rent” utan tidsdel – dvs utan decimaldel. Vi kan få detta genom att kapa bort alla decimaler med hjälp av floor()-funktionen. När vi gör det kommer vårt valda format försvinna och värdet visas som heltal.

Anta att vi har ett fält OrderDate som för en viss order har värdet 2021-06-20 06:00:00. Om vi använder floor()-funktionen försvinner tidsdelen och värdet visas som ett heltal.

Load
OrderNo, floor(OrderDate) as OrderDate // får värdet 44367 för datum 2021-06-20

För att komma till rätta med detta kan vi använda date()-funktionen för att formatera datumet igen.

Load
OrderNo,
date(floor(OrderDate),’YYYY-MM-DD’) as OrderDate // värdet visas som 2021-06-20

På motsvarande sätt kan vi också plocka ut tidsdelen med hjälp av frac()-funktionen. Även denna behöver formateras för att visas korrekt.

Load
OrderNo,
date(floor(OrderDate),’YYYY-MM-DD’) as OrderDate,
time(frac(OrderDate),’hh:mm:ss’) as OrderTime

Nu har vi både datum och tid i var sitt fält med korrekta format. Dock kan man fundera vidare på om man behöver tidsdelen detaljerad. Räcker det med att veta vilken timme en order lades för att kunna göra en detaljerad analys? För stora datamändger får man snabbt ett stort antal unika värden i tid om man sparar den ner på millisekundnivå. Antalet unika värden för timmar är max 24st.

Dela inlägget
LinkedIn