Ga naar hoofdinhoud Ga naar aanvullende inhoud

Overeenkomende intervallen voor discrete gegevens

Het prefix intervalmatch bij een LOAD of SELECT opdracht wordt gebruikt om discrete numerieke waarden aan een of meer numerieke intervallen te koppelen. Dit is een zeer krachtige functie die u bijvoorbeeld in productieomgevingen kunt gebruiken.

Voorbeeld van intervalmatch

Kijk naar de twee tabellen verderop. De eerste tabel toont het begin en eind van de productie van verschillende orders. De tweede tabel toont enkele discrete gebeurtenissen. Hoe zorgen we voor een associatie tussen de discrete gebeurtenissen en de bestellingen, om bijvoorbeeld uit te zoeken welke bestellingen last hadden van storingen en welke bestellingen door welke ploegen zijn verwerkt?

Tabel OrderLog
StartenEindeVolgorde
01:0003:35A
02:3007:58 B
03:0410:27C
07:2311:43D
Tabel EventLog
TijdGebeurtenisOpmerking
00:000Begin van shift 1
01:181Stoppen van de band
02:232Opnieuw starten van de band 50%
04:153Snelheid van de band 100%
08:004Begin van shift 2
11:435Einde van productie

Laad eerst de twee tabellen zoals gebruikelijk, koppel vervolgens het veld Time aan de intervallen die zijn gedefinieerd door de velden Start en End:

SELECT * from OrderLog;

SELECT * from EventLog;

Intervalmatch (Time) SELECT Start,End from OrderLog;

U kunt nu een tabel maken in Qlik Sense zoals hieronder wordt weergegeven:

Tabel met veld Tijd gekoppeld aan de intervallen gedefinieerd door Start en Einde
TijdGebeurtenisOpmerkingVolgordeStartenEinde
0:000Begin van shift 1---
1:181Stoppen van de bandA1:003:35
2:232Opnieuw starten van de band 50%A1:003:35
4:153Snelheid van de band 100% B2:307:58
4:153Snelheid van de band 100% C3:0410:....
8:004Begin van shift 2C3:0410:....
8:004Begin van shift 2D7:2311:....
11:435Einde van productieE7:2311:.....

Nu kunnen we duidelijk zien dat hoofdzakelijk bestelling A gevolgen ondervond van het stoppen van de band, maar dat de verminderde snelheid van de band ook gevolgen had voor bestelling B en C. Alleen de bestellingen C en D zijn gedeeltelijk afgehandeld door Shift 2.

Houd rekening met het volgende als u intervalmatch gebruikt:

  • Vóór de intervalmatch-opdracht moet het veld met de discrete gegevenspunten (Time in het bovenstaande voorbeeld) al in Qlik Sense zijn gelezen. De intervalmatch-opdracht leest dit veld niet zelf uit de databasetabel.
  • De tabel die wordt gelezen in de intervalmatch LOAD- of SELECT-opdracht moet altijd exact twee velden bevatten (Start en End in het voorbeeld hierboven). Voor het vormen van een koppeling met andere velden moet u de intervalvelden samen lezen met extra velden in een afzonderlijke LOAD- of SELECT-instructie (de eerste SELECT-instructie in het bovenstaande voorbeeld).
  • De intervallen zijn altijd gesloten. Dat wil zeggen dat de eindpunten in het interval zijn opgenomen. Bij niet-numerieke limieten wordt het interval genegeerd (ongedefinieerd) en bij NULL-limieten wordt het interval tot oneindig uitgebreid (onbeperkt).
  • De intervallen kunnen elkaar overlappen en de discrete waarden worden aan alle relevante intervallen gekoppeld.

De uitgebreide intervalmatch-syntaxis gebruiken om problemen met langzaam veranderende dimensies op te lossen

Met de uitgebreide intervalmatch-syntaxis kunt u bekende problemen met langzaam veranderende dimensies in brongegevens oplossen.

Voorbeeldscript:

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;

De instructie nullinterpret is alleen vereist bij het lezen van gegevens uit een tabelbestand, aangezien ontbrekende waarden als lege tekenreeksen worden gedefinieerd in plaats van als NULL-waarden.

Het laden van de gegevens uit IntervalTable resulteert in de volgende tabel:

Table with data loaded from IntervalTable
KeyFirstDateTeam
0001102011-01-21Southwest
000110-Northwest
000120-Northwest
0001202013-03-05Southwest
0001202013-03-05Northwest
0001202013-03-05Southwest

Door de nullasvalue-opdracht kunnen NULL-waarden aan de genoemde velden worden toegewezen.

Maak Key, FirstDate, LastDate, (kenmerkvelden) met behulp van previous en order by, waarna IntervalTable wordt verwijderd en vervangen door deze sleuteltabel.

Het laden van de gegevens uit Transact resulteert in de volgende tabel:

Tabel met gegevens geladen uit Transact
SleutelNaamDatumSales.
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

De intervalmatch-instructie voorafgegaan door inner join vervangt de bovenstaande sleutel door een synthetische sleutel die met de tabel Transact is gekoppeld en de volgende tabel oplevert:

Tabel met de intervalmatch-opdracht voorafgegaan door de inner join
SleutelTeamNaamEerste datumLaatste datumDatumSales.
000110NoordwestSpengler Aaron-2011-01-202009-08-18100
000110NoordwestSpengler Aaron-2011-01-202009-12-25200
000110ZuidwestSpengler Aaron2011-01-21 2011-02-03300
000110ZuidwestSpengler Aaron2011-01-21 2011-05-05400
000120NoordwestBallard John 2013-01-052011-06-04500
000120ZuidwestBallard John2013-01-062013-03-042013-01-20600
000120SouthwestBallard John2013-03-05 2013-03-10700
000120ZuidwestBallard John2013-03-05 2013-03-13800
000120ZuidwestBallard John2013-03-05 2013-09-21900

Was deze pagina nuttig?

Als u problemen ervaart op deze pagina of de inhoud onjuist is – een tikfout, een ontbrekende stap of een technische fout – laat het ons weten!