IntervalMatch

Het prefix IntervalMatch wordt gebruikt voor het maken van een tabel waarin discrete numerieke waarden worden gekoppeld aan een of meer numerieke intervallen, en waarin de waarden optioneel worden gekoppeld aan een of meer extra sleutels.

Syntaxis:  

IntervalMatch (matchfield)(loadstatement | selectstatement )

IntervalMatch (matchfield,keyfield1 [ , keyfield2, ... keyfield5 ] ) (loadstatement | selectstatement )

 

Het prefix IntervalMatch moet voor een LOAD- of SELECT-opdracht worden geplaatst waarmee de intervallen worden geladen. Het veld met de discrete gegevenspunten (Tijd in het voorbeeld verderop) en extra sleutels moet al in QlikView geladen zijn vóór de opdracht met het prefix IntervalMatch. Het prefix leest dit veld niet zelf uit de databasetabel. Het prefix zet de geladen tabel met intervallen en sleutels om in een tabel die een extra kolom bevat: de discrete numerieke gegevenspunten. Tevens wordt het aantal records zodanig uitgebreid dat de nieuwe tabel één record per mogelijke combinatie van discreet gegevenspunt, interval en waarde van het sleutelveld of de sleutelvelden bevat.

De intervallen kunnen elkaar overlappen en de discrete waarden worden aan alle relevante intervallen gekoppeld.

De uitgebreide prefix IntervalMatch wordt gebruikt voor het maken van een tabelkoppeling van discrete numerieke waarden met een of meer numerieke intervallen, terwijl tegelijkertijd de waarden van een of meer extra sleutels worden gekoppeld. Dit is een zeer krachtige en flexibele functie die kan worden gebruikt voor het koppelen van transacties met dimensies die veranderen na verloop van tijd: langzaam veranderende dimensies.

Om te voorkomen dat ongedefinieerde intervallimieten worden genegeerd, moet u mogelijk NULL-waarden toewijzen aan andere velden met de onderste en bovenste limieten voor het interval. Dit kan worden afgehandeld met de opdracht NullAsValue of door een expliciete test waarbij NULL-waarden worden vervangen door een numerieke waarde ruim voor of na een van de discrete numerieke gegevenspunten.

Argumenten:  

Argument Beschrijving
matchfield Het veld met de discrete numerieke waarden voor koppeling aan intervallen.
keyfield Velden met de extra kenmerken die bij de transformatie moeten worden gekoppeld.
loadstatement or selectstatement Moet resulteren in een tabel waarvan het eerste veld de laagste limiet van elk interval bevat en het twee veld de hoogste limiet. Als sleutelkoppeling wordt gebruikt, moeten het derde veld en de volgende velden de sleutelvelden bevatten van de opdracht IntervalMatch. De intervallen zijn altijd gesloten, dat wil zeggen dat de eindpunten in het interval zijn opgenomen. Niet-numerieke limieten zorgen ervoor dat het interval buiten beschouwing wordt geladen (ongedefinieerd).

Voorbeeld 1:  

In de eerste tabel van de twee die hieronder worden weergegeven worden de begin- en eindtijden voor de productie van verschillende bestellingen gedefinieerd. De tweede tabel bevat een aantal discrete gebeurtenissen. Met behulp van het prefix IntervalMatch kan een logische verbinding tot stand worden gebracht tussen de twee tabellen om bijvoorbeeld uit te zoeken welke bestellingen last hadden van storingen en welke bestellingen door welke ploegen zijn verwerkt.

EventLog:
LOAD * Inline [
Time, Event, Comment
00:00, 0, Start of shift 1
01:18, 1, Line stop
02:23, 2, Line restart 50%
04:15, 3, Line speed 100%
08:00, 4, Start of shift 2
11:43, 5, End of production
];

OrderLog:
LOAD * INLINE [
Start, End, Order
01:00, 03:35, A
02:30, 07:58, B
03:04, 10:27, C
07:23, 11:43, D
];

//Link the field Time to the time intervals defined by the fields Start and End.
Inner Join IntervalMatch ( Time )
LOAD Start, End
Resident OrderLog;

Resultaat:

De tabel OrderLog bevat nu een extra kolom: Time. Het aantal records is eveneens uitgebreid.

Time Start End Order

00:00

- - -
01:18 01:00 03:35 A
02:23 01:00 03:35 A
04:15 02:30 07:58 B
04:15 03:04 10:27 C
08:00 03:04 10:27 C
08:00 07:23 11:43 D
11:43 07:23

11:43

D

Voorbeeld 2: (met keyfield)

Hetzelfde voorbeeld als boven, waarbij ProductionLine is toegevoegd als sleutelveld.

EventLog:
LOAD * Inline [
Time, Event, Comment, ProductionLine
00:00, 0, Start of shift 1, P1
01:00, 0, Start of shift 1, P2
01:18, 1, Line stop, P1
02:23, 2, Line restart 50%, P1
04:15, 3, Line speed 100%, P1
08:00, 4, Start of shift 2, P1
09:00, 4, Start of shift 2, P2
11:43, 5, End of production, P1
11:43, 5, End of production, P2
];
 
OrderLog:
LOAD * INLINE [
Start, End, Order, ProductionLine
01:00, 03:35, A, P1
02:30, 07:58, B, P1
03:04, 10:27, C, P1
07:23, 11:43, D, P2
];
 
//Link the field Time to the time intervals defined by the fields Start and End and match the values
// to the key ProductionLine.
Inner Join
IntervalMatch ( Time, ProductionLine )
LOAD Start, End, ProductionLine
Resident OrderLog;

Resultaat:

Het volgende tabelvak kan nu worden gemaakt:

ProductionLine Time Event Comment Order Start End
P1

00:00

0 Start of shift 1 - - -
P2 01:00 0 Start of shift 1 - - -
P1 01:18 1 Line stop A 01:00 03:35
P1 02:23 2 Line restart 50% A 01:00 03:35
P1 04:15 3 Line speed 100% B 02:30 07:58
P1 04:15 3 Line speed 100% C 03:04 10:27
P1 08:00 4 Start of shift 2 C 03:04 10:27
P2 09:00 4 Start of shift 2 D 07:23 11:43
P1 11:43 5 End of production - - -
P2 11:43 5 End of production D 07:23 11:43