Gå till huvudinnehåll Gå till ytterligare innehåll

Länka diskreta data till intervall

Prefixet intervalmatch framför en LOAD- eller SELECT-sats används för att länka diskreta numeriska värden till ett eller flera numeriska intervall. Detta är en mycket kraftfull funktion, som kan användas i exempelvis produktionsmiljö.

Exempel på intervallmatchning

Betrakta tabellerna nedan. Den första tabellen visar början och slut på produktionen av olika order. Den andra tabellen visar några diskreta händelser. Hur kan de diskreta händelserna associeras till angivna order, så att vi till exempel kan ta reda på vilka order som påverkades av störningarna och vilka order som behandlades i vilka skift?

Table OrderLog
Start End Ordning
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D
Table EventLog
Time Händelse Kommentar
00:00 0 Start för skift 1
01:18 1 Tillverkningsstopp
02:23 2 Tillverkningsomstart 50 %
04:15 3 Tillverkningshastighet 100 %
08:00 4 Start för skift 2
11:43 5 Slut för produktion

Ladda först de två tabellerna som vanligt, och länka därefter fältet Time till de intervall som definieras av fälten Start och End:

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

Nu kan du skapa en tabell i Qlik Sense enligt nedan:

Tabell med tidsfält länkat till intervallerna som definieras av startvärde och slutvärde
Time Händelse Kommentar Ordning Start End
0:00 0 Start för skift 1 - - -
1:18 1 Tillverkningsstopp A 1:00 3:35
2:23 2 Tillverkningsomstart 50 % A 1:00 3:35
4:15 3 Tillverkningshastighet 100 % B 2:30 7:58
4:15 3 Tillverkningshastighet 100 % C 3:04 10:....
8:00 4 Start för skift 2 C 3:04 10:....
8:00 4 Start för skift 2 D 7:23 11:....
11:43 5 Slut för produktion E 7:23 11:.....

Nu kan vi enkelt se att framförallt order A påverkades av tillverkningsstoppet, men att den minskade hastigheten även påverkade orderna B och C. Endast orderna C och D hanterades delvis av Shift 2.

Notera följande vid användning av intervalmatch:

  • Innan intervalmatch-satsen läses in måste det fält som innehåller de diskreta datapunkterna (Time i exemplet ovan) redan ha lästs in i Qlik Sense. intervalmatch-satsen kan inte läsa in detta fält från databasens tabell.
  • Den tabell som läses in via intervalmatch LOAD- eller SELECT-satserna måste alltid innehålla exakt två fält (Start och Endi exemplet ovan). För att skapa en länkning till andra fält måste intervallfälten läsas in tillsammans med ytterligare fält via en separat LOAD- eller SELECT-sats (den första SELECT-satsen i exemplet ovan).
  • Intervallen är alltid stängda. Det vill säga att slutpunkterna alltid är inkluderade i intervallet. Om icke-numeriska gränser används ignoreras intervallet (betraktas som odefinierat). Om däremot NULL-gränser används utökas intervallet i all oändlighet (betraktas som obegränsat).
  • Intervallen kan överlappa varandra. De diskreta värdena länkas då till alla passande intervall.

Användning av utökad intervalmatch-syntax för att lösa problem med långsamt förändrade dimensioner

Den utökade intervalmatch-syntaxen kan användas för att hantera det välkända problemet med långsamt förändrade dimensioner i källdata.

Skriptexempel:

SET NullInterpret='';

 

IntervalTable:

LOAD Key, ValidFrom, Team

FROM 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is IntervalTable);

 

Key:

LOAD

Key,

ValidFrom as FirstDate,

date(if(Key=previous(Key),

previous(ValidFrom) - 1)) as LastDate,

Team

RESIDENT IntervalTable order by Key, ValidFrom desc;

 

drop table IntervalTable;

 

Transact:

LOAD Key, Name, Date, Sales

FROM 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is Transact);

 

INNER JOIN intervalmatch (Date,Key) LOAD FirstDate, LastDate, Key RESIDENT Key;

Satsen nullinterpret behövs bara vid inläsning av data från tabellfiler, eftersom saknade värden anges som tomma strängar istället för som NULL-värden.

Inläsning av data från IntervalTable ger följande resultat:

Table with data loaded from IntervalTable
Key FirstDate Team
000110 2011-01-21 Southwest
000110 - Northwest
000120 - Northwest
000120 2013-03-05 Southwest
000120 2013-03-05 Northwest
000120 2013-03-05 Southwest

Med nullasvalue-satsen kan du mappa NULL-värdena till de listade fälten.

Skapa Key, FirstDate, LastDate (attributfält) med hjälp av previous och order by. Därefter försvinner IntervalTable eftersom den då har ersatts av denna nyckeltabell.

Inläsning av data från Transact ger följande resultat:

Tabell med data inlästa från Transact
Nyckel Namn Datum Försäljning
000110 Spengler Aaron 2009-08-18 100
000110 Spengler Aaron 2009-12-25 200
000110 Spengler Aaron 2011-02-03 300
000110 Spengler Aaron 2011-05-05 400
000120 Ballard John 2011-06-04 500
000120 Ballard John 2013-01-20 600
000120 Ballard John 2013-03-10 700
000120 Ballard John 2013-03-13 800
000120 Ballard John 2013-09-21 900

intervalmatch-satsen följd av inner join ersätter nyckeln ovan med en syntetisk nyckel som kopplar till Transact-tabellen. Resultatet blir som följer:

Tabell med intervalmatch-satsen följt av inner join
Nyckel Team Namn FirstDate LastDate Datum Försäljning
000110 Northwest Spengler Aaron - 2011-01-20 2009-08-18 100
000110 Northwest Spengler Aaron - 2011-01-20 2009-12-25 200
000110 Southwest Spengler Aaron 2011-01-21   2011-02-03 300
000110 Southwest Spengler Aaron 2011-01-21   2011-05-05 400
000120 Northwest Ballard John   2013-01-05 2011-06-04 500
000120 Southwest Ballard John 2013-01-06 2013-03-04 2013-01-20 600
000120 Southwest Ballard John 2013-03-05   2013-03-10 700
000120 Southwest Ballard John 2013-03-05   2013-03-13 800
000120 Southwest Ballard John 2013-03-05   2013-09-21 900

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!