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?

Tabell OrderLog
StartaSlutOrdning
01:0003:35A
02:3007:58 B
03:0410:27C
07:2311:43D
Tabell EventLog
TidHändelseKommentar
00:000Start för skift 1
01:181Tillverkningsstopp
02:232Tillverkningsomstart 50 %
04:153Tillverkningshastighet 100 %
08:004Start för skift 2
11:435Slut på produktion

Läs först in de två tabellerna som vanligt och länka sedan fältet Time till intervallen 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 intervallen som definieras av Start och Slut
TidHändelseKommentarOrdningStartaSlut
0:000Start för skift 1---
1:181TillverkningsstoppA1:003:35
2:232Tillverkningsomstart 50 %A1:003:35
4:153Tillverkningshastighet 100 % B2:307:58
4:153Tillverkningshastighet 100 % C3:0410:....
8:004Start för skift 2C3:0410:....
8:004Start för skift 2D7:2311:....
11:435Slut på produktionE7:2311:.....

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

Notera följande punkter vid användning av intervalmatch:

  • Innan intervalmatch-satsen, måste fältet som innehåller de diskreta datapunkterna (Time i exemplet ovan) redan ha lästs in i Qlik Sense. intervalmatch-satsen läser inte in detta fält från databastabellen.
  • Tabellen som läses in via intervalmatch LOAD eller SELECT-satsen måste alltid innehålla exakt två fält (Start och End i exemplet ovan). För att upprätta en länk till andra fält måste du läsa intervallfälten tillsammans med ytterligare fält i 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
KeyFirstDateTeam
0001102011-01-21Southwest
000110-Northwest
000120-Northwest
0001202013-03-05Southwest
0001202013-03-05Northwest
0001202013-03-05Southwest

Med nullasvalue-satsen kan man 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 har ersatts av denna nyckeltabell.

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

Tabell med data inläst från Transact
NyckelNamnDatumFörsäljning
000110Spengler Aaron2009-08-18100
000110Spengler Aaron2009-12-25200
000110Spengler Aaron2011-02-03300
000110Spengler Aaron2011-05-05400
000120Ballard John2011-06-04500
000120Ballard John2013-01-20600
000120Ballard John2013-03-10700
000120Ballard John2013-03-13800
000120Ballard John2013-09-21900

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öljd av inner join
NyckelLagNamnFörsta datumSenaste datumDatumFörsäljning
000110NordvästSpengler Aaron-2011-01-202009-08-18100
000110NordvästSpengler Aaron-2011-01-202009-12-25200
000110SydvästSpengler Aaron2011-01-21 2011-02-03300
000110SydvästSpengler Aaron2011-01-21 2011-05-05400
000120NordvästBallard John 2013-01-052011-06-04500
000120SydvästBallard John2013-01-062013-03-042013-01-20600
000120SouthwestBallard John2013-03-05 2013-03-10700
000120SydvästBallard John2013-03-05 2013-03-13800
000120SydvästBallard John2013-03-05 2013-09-21900

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

Om du stöter på några problem med den här sidan eller innehållet på den, t.ex. ett stavfel, ett saknat steg eller ett tekniskt fel – meddela oss!