# 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?

OrderLog tabella

| Inizio | End | Ordine |
| --- | --- | --- |
| 01:00 | 03:35 | A |
| 02:30 | 07:58 | B |
| 03:04 | 10:27 | C |
| 07:23 | 11:43 | D |

EventLog tabella

| 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:

![A table in QlikView combining the above tables.](https://help.qlik.com/it-IT/qlikview/September2026/Subsystems/Client/Content/Resources/Images/ui_gen_IntervalMatch.png)

È 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:

Tabella esempio 1

| 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:

Tabella di esempio 2

| 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:

Tabella di esempio 3

| 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 |