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.
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?
Begin | End | Volgorde |
---|---|---|
01:00 | 03:35 | A |
02:30 | 07:58 | B |
03:04 | 10:27 | C |
07:23 | 11:43 | D |
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:
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 (Timein 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 (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:
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:
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:
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 |