Multipla datum

Ibland behöver vi hantera en kalender mot multipla datum i samma tabell. En teknik för att hantera detta är att sätta samman datumen och skapa en länktabell till kalendern.


Se följande situation - vi har en ordertabell med OrderDate (datum när order skapas) och InvoiceDate (datum när order faktureras).


Vårt mål är att visa en graf som per ÅrMånad visar hur många order som skapades och hur många order som fakturerades.


För att göra detta behöver vi ha ett dimensionsvärde med ÅrMånad som de två uttrycken kan beräknas med. Vi kan inte göra en kalender baserat på OrderDate eftersom vi då inte vet hur många fakturor som skapats under samma period och det omvända problemet gäller om vi utgår från InvoiceDate.


Lösningen är att sätta ihop OrderDate och InvoiceDate till ett gemensamt fält %DateKey. Det gemensamma fältet innehåller alla kombinationer av de två datumen. Från det fältet kan vi sedan skapa ett gemensamt datumfält %Date som länkar till en kalender. Genom att lägga till ett fält DateType som beskriver typen av datumet kan vi sedan skilja på dessa när vi skapar uttryck.


Den vanliga kalendern byggs upp från fältet %Date med din favoritmetod. Så här ser min ut (se mer om kalenderfunktioner i detta inlägg)



Den önskade grafen skapar vi sedan genom att lägga till YearMonth som dimension och två uttryck:

# Orders: Count({<DateType={Order}>} OrderNo)
# Invoices: Count({<DateType={Invoice}>} OrderNo)

Fler datum

Metoden kan utökas med fler datum genom att de sätts ihop i %DateKey och sedan läggs till som rader i DateLink-tabellen med egna DateType.


Autonumber

Autonumber är en funktion som byter ut fältvärden mot en talserie. Detta är mycket effektivt lagringsmässigt då man istället för att lagra till exempel "2020-02-17|2020-03-19"kan lagra ett numeriskt värde. Lägger man till autonumber i scriptet tar det dock längre tid att exekvera eftersom värden ska räknas om.


Länka via OrderNo

Man skulle kunna tänka sig ett alternativ där man istället för att sätta ihop OrderDate och InvoiceDate skapar länktabellen via OrderNo. Detta är dock inte optimalt i tabeller med många rader. Tänk dig en tabell med 100 miljoner order och därmed lika många unika värden i OrderNo-fältet. DateLink-tabellen skulle i detta fall innehålla 100 miljoner + 100 miljoner rader. Antalet unika datum bör vara avsevärt färre och även antalet kombinationer av OrderDate och InvoiceDate bör vara klart färre än 100 miljoner rader.



Skriven av: Morgan Kejerhag

Morgan Kejerhag har arbetat med Qlik-plattformen sedan 2005 och är en av Sveriges mest erfarna konsulter. Under åren har Morgan arbetat med flertalet multinationella bolag där han lett arbetet i att bygga upp stora Qlik-miljöer såväl som små kunder. LinkedIn

Vill du har mer information?

Kontakta oss via informationen på vår kontakt-sida.

DrakeStone AB
Teknikringen 10

583 30 Linköping

Org: 556986-6956

© 2020 Drake Analytics