Corrispondenza degli intervalli con i dati discreti
Il prefisso intervalmatch in un'istruzione LOAD o SELECT viene utilizzato per collegare valori numerici discreti a uno o più intervalli numerici. Si tratta di una funzionalità molto avanzata che può essere utilizzata, ad esempio, negli ambienti di produzione, come mostrato nell'esempio seguente.
Esempio:
Osservare le due tabelle seguenti. La prima tabella mostra l'inizio e la fine della produzione di ordini differenti. La seconda tabella mostra alcuni eventi discreti. Come è possibile associare gli eventi discreti agli ordini, affinché si sappia, ad esempio, quali ordini sono stati interessati dalle interruzioni e quali sono stati elaborati da determinati turni?
Inizio | End | Ordine |
---|---|---|
01:00 | 03:35 | A |
02:30 | 07:58 | B |
03:04 | 10:27 | C |
07:23 | 11:43 | D |
Ora | Evento | Commento |
---|---|---|
00:00 | 0 | Inizio del turno 1 |
01:18 | 1 | Arresto linea |
02:23 | 2 | Riavvio linea al 50% |
04:15 | 3 | Velocità linea al 100% |
08:00 | 4 | Inizio del turno 2 |
11:43 | 5 | Fine della produzione |
È innanzitutto necessario caricare le due tabelle, quindi collegare il campo Time agli intervalli definiti dai campi Start e End:
SELECT * from OrderLog;
SELECT * from EventLog;
Intervalmatch (Time) SELECT Start,End from OrderLog;
In QlikView è ora possibile creare una casella della tabella come illustrato di seguito:
È ora possibile osservare come principalmente sia l'ordine A a essere stato interessato dall'interruzione della linea, condizione che ha ridotto la velocità della stessa esercitando un impatto anche sugli ordini B e C. Solo gli ordiniC e D sono stati parzialmente gestiti da Shift 2.
Quando si utilizza l'istruzioneintervalmatch, tenere presente i punti seguenti:
- Prima dell'istruzione intervalmatch il campo contenente i punti di dati discreti (Time nell'esempio riportato sopra) deve essere già stato letto in QlikView. L'istruzione intervalmatch non legge questo campo dalla tabella del database.
- La tabella letta nelle istruzioni intervalmatch LOAD o SELECT deve sempre contenere esattamente due campi (Start ed End nell'esempio precedente). Per stabilire un collegamento con altri campi, è necessario leggere i campi di intervallo insieme ai campi aggiuntivi in un'istruzione LOAD o SELECT separata (la prima istruzione SELECT nell'esempio precedente).
- 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), mentre i limiti NULL estendono l'intervallo in modo indefinito (illimitato).
- Gli intervalli possono sovrapporsi e i valori discreti saranno collegati a tutti gli intervalli corrispondenti.
Uso della sintassi intervalmatch estesa per risolvere i problemi di rallentamento nella modifica delle dimensioni
La sintassi intervalmatch estesa può essere utilizzata per gestire il noto problema della lentezza nella modifica delle dimensioni dei dati sorgente.
Script di esempio:
SET NullInterpret='';
IntervalTable:
LOAD Key, ValidFrom, Team from IntervalTable.xls;
NullAsValue FirstDate,LastDate;
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 Transact.xls;
INNER JOIN intervalmatch (Date,Key) LOAD FirstDate, LastDate, Key RESIDENT Key;
L'istruzione nullinterpret è necessaria solo quando si leggono i dati da un file tabella, perché i valori mancanti sono definiti come stringhe vuote, anziché come valori NULL.
Il caricamento dei dati da IntervalTable restituisce come risultato la seguente tabella:
Tasto | FirstDate | Team |
---|---|---|
000110 | 2011-01-21 | Sudovest |
000110 | - | Nordovest |
000120 | - | Nordovest |
000120 | 2013-03-05 | Sudovest |
000120 | 2013-03-05 | Nordovest |
000120 | 2013-01-06 | Sudovest |
L'istruzione nullasvalue consente valori NULL per mappare i campi elencati.
Creare Key, FirstDate, LastDate, (campi di attributo) utilizzando previous e order by, quindi IntervalTable verrà eliminato essendo stato sostituito da questa tabella chiave.
Il caricamento dei dati da Transact restituisce come risultato la seguente tabella:
Tasto | Nome | Data | 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 |
L'istruzione intervalmatch preceduta da inner join sostituisce la chiave precedente con una chiave sintetica che collega la tabella Transact, restituendo la seguente tabella:
Tasto | Team | Nome | FirstDate | LastDate | Data | Sales |
---|---|---|---|---|---|---|
000110 | Nordovest | Spengler Aaron | - | 2011-01-20 | 2009-08-18 | 100 |
000110 | Nordovest | Spengler Aaron | - | 2011-01-20 | 2009-12-25 | 200 |
000110 | Sudovest | Spengler Aaron | 2011-01-21 | - | 2011-02-03 | 300 |
000110 | Sudovest | Spengler Aaron | 2011-01-21 | - | 2011-05-05 | 400 |
000120 | Nordovest | Ballard John | - | 2013-01-05 | 2011-06-04 | 500 |
000120 | Sudovest | Ballard John | 2013-01-06 | 2013-03-04 | 2013-01-20 | 600 |
000120 | Sudovest | Ballard John | 2013-03-05 | - | 2013-03-10 | 700 |
000120 | Sudovest | Ballard John | 2013-03-05 | - | 2013-03-13 | 800 |
000120 | Sudovest | Ballard John | 2013-03-05 | - | 2013-09-21 | 900 |