IntervalMatch

Il prefisso IntervalMatch consente di creare una tabella che corrisponde sia ai valori numerici discreti su uno o più intervalli numerici che, in modo opzionale, ai valori di una o più chiavi aggiuntive.

Syntax:  

IntervalMatch (matchfield)(loadstatement | selectstatement )

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

 

Il prefisso IntervalMatch deve essere inserito prima di un'istruzione LOAD o SELECT che carica gli intervalli. Il campo che contiene i punti dati discreti (Time nell'esempio seguente) e chiavi aggiuntive deve essere già stato caricato in Qlik Sense prima dell'istruzione con il prefisso IntervalMatch. Il prefisso non è in grado di leggere questo campo dalla tabella del database, pertanto trasforma la tabella caricata degli intervalli e delle chiavi in una tabella contenente una colonna aggiuntiva: i punti dati numerici discreti. Inoltre, espande il numero di record in modo che la nuova tabella disponga di un record per ogni combinazione possibile di punti dati discreti, intervallo e valore dei campi chiave.

Gli intervalli possono sovrapporsi e i valori discreti saranno collegati a tutti gli intervalli corrispondenti.

Quando il prefisso IntervalMatch viene esteso con i campi chiave, consente di creare una tabella che corrisponde sia ai valori numerici discreti presenti su uno o più intervalli numerici sia ai valori di una o più chiavi aggiuntive.

Per evitare che i limiti degli intervalli non definiti vengano ignorati, potrebbe essere necessario consentire il mapping dei valori NULL sugli altri campi che costituiscono i limiti inferiore e superiore dell'intervallo. Questa operazione può essere eseguita dall'istruzione NullAsValue o da un test esplicito che sostituisce i valori NULL con un valore numerico prima o dopo qualsiasi dei punti dati numerici discreti.

Arguments:  

Argomento Descrizione
matchfield Il campo contenente i valori numerici discreti da collegare agli intervalli.
keyfield I campi contenenti gli attributi aggiuntivi da associare nella trasformazione.
loadstatement or selectstatement Il risultato deve essere una tabella in cui il primo campo contiene il limite inferiore di ciascun intervallo, il secondo campo contiene il limite superiore di ciascun intervallo e, nel caso di utilizzo di una corrispondenza chiave, il terzo campo e quelli successivi contengono gli elementi keyfield presenti nell'istruzione IntervalMatch. Gli intervalli sono sempre chiusi, ossia i punti di fine sono inclusi nell'intervallo. I limiti non numerici fanno in modo che l'intervallo venga ignorato (non definito).

Example 1:  

Nelle due tabelle seguenti, la prima tabella contiene un elenco di eventi discreti, mentre la seconda definisce l'ora di inizio e l'ora di fine relative alla produzione di ordini differenti. Utilizzando il prefisso IntervalMatch, è possibile eseguire il collegamento logico delle due tabelle in modo da poter individuare, ad esempio, gli ordini che hanno subito interruzioni e gli ordini elaborati in base a turni specifici.

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;

 

La tabella OrderLog contiene ora una colonna aggiuntiva: Time. Anche il numero di record risulta espanso.

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

Example 2: (mediante keyfield)

Lo stesso esempio illustrato in precedenza, con l'aggiunta di ProductionLine come campo chiave.

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;

 

È ora possibile creare una tabella come quella seguente:

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