Overeenkomende intervallen voor discrete gegevens

Het prefix intervalmatch bij een LOAD- of SELECT-instructie 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, zoals in het volgende voorbeeld.

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?

Table OrderLog
Begin End Volgorde
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D
Table EventLog
Time Gebeurtenis Opmerking
00:00 0 Begin van shift 1
01:18 1 Stoppen van de band
02:23 2 Opnieuw starten van de band 50%
04:15 3 Snelheid van de band 100%
08:00 4 Begin van shift 2
11:43 5 Einde 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
Time Gebeurtenis Opmerking Volgorde Begin End
0:00 0 Begin van shift 1 - - -
1:18 1 Stoppen van de band A 1:00 3:35
2:23 2 Opnieuw starten van de band 50% A 1:00 3:35
4:15 3 Snelheid van de band 100% B 2:30 7:58
4:15 3 Snelheid van de band 100% C 3:04 10:....
8:00 4 Begin van shift 2 C 3:04 10:....
8:00 4 Begin van shift 2 D 7:23 11:....
11:43 5 Einde van productie E 7:23 11:.....

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-instructie moet het veld met de discrete gegevenspunten (Time in het bovenstaande voorbeeld) al in Qlik Sense zijn gelezen. De intervalmatch-instructie leest dit veld niet zelf uit de databasetabel.
  • De tabel die wordt gelezen in de intervalmatch LOAD- of SELECT-instructie, moet altijd exact twee velden bevatten (Starten 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
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

Door de nullasvalue-instructie 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
Sleutel Naam Datum Sales.
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

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
Sleutel Team Naam FirstDate LastDate Datum Sales.
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