# Correspondendo intervalos a dados discretos

O prefixo intervalmatch de um comando LOAD ou SELECT é usado para vincular valores numéricos discretos a um ou mais intervalos numéricos. Esse recurso é muito útil e pode ser usado, por exemplo, em ambientes de produção, conforme demonstrado no exemplo a seguir.

Exemplo:

Examine as duas tabelas a seguir. A primeira tabela mostra o início e o final da produção de pedidos diferentes. A segunda tabela mostra alguns eventos discretos. Como podemos associar os eventos discretos aos pedidos, de forma que saibamos, por exemplo, que pedidos foram afetados pelas interferências e que pedidos foram processados por quais turnos?

Tabela OrderLog

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

Tabela EventLog

| Hora | Evento | Comentário |
| --- | --- | --- |
| 00:00 | 0 | Começo do turno 1 |
| 01:18 | 1 | Parada de linha |
| 02:23 | 2 | Reinício da linha 50% |
| 04:15 | 3 | Velocidade da linha 100% |
| 08:00 | 4 | Começo do turno 2 |
| 11:43 | 5 | Fim da produção |

Primeiro, carregue as duas tabelas da forma habitual e, em seguida, vincule o campo Time aos intervalos definidos pelos campos Start e End:

`SELECT * from OrderLog;` `SELECT * from EventLog;` `Intervalmatch (Time) SELECT Start,End from OrderLog;`

Agora você pode criar uma tabela no QlikView, como mostrado abaixo:

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

Podemos observar, principalmente, que o pedido A foi afetado pela interrupção da linha, mas que a velocidade reduzida da linha afetou também os pedidos B e C. Somente os pedidos C e D foram parcialmente tratados pelo Shift 2.

Observe o seguinte ao utilizar o comando intervalmatch:

* Antes do comando intervalmatch o campo que contém os pontos de dados discretos (Time no exemplo acima) já deve ter sido lido no QlikView. O próprio comando intervalmatch não lê esse campo da tabela do banco de dados.
* A tabela lida no comando intervalmatch LOAD ou SELECT deve sempre conter exatamente dois campos (Start e End no exemplo apresentado). Para estabelecer um link com outros campos, é necessário ler os campos de intervalo com campos adicionais em um campo LOAD ou SELECT separado (o primeiro comando SELECT no exemplo apresentado).
* Os intervalos estão sempre fechados, isto é, sempre contêm pontos de extremidade. Os limites não numéricos fazem com que o intervalo seja desconsiderado (indefinido) e os limites NULL estendem o intervalo indefinidamente (ilimitado).
* Os intervalos podem estar sobrepostos e os valores discretos estarão vinculados a todos os intervalos correspondentes.

## Usando a sintaxe intervalmatch estendida para resolver problemas de lentidão durante a alteração de dimensões

A sintaxe intervalmatch estendida pode ser utilizada para tratar o problema já conhecido de lentidão durante a alteração de dimensões na fonte de dados.

### Script de amostra:

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

O comando nullinterpret é exigido apenas na leitura de dados de um arquivo de tabela, pois os valores ausentes são definidos como caracteres vazios em vez de valores NULL.

O carregamento dos dados de IntervalTable resultaria na seguinte tabela:

Tabela de exemplo 1

| Chave | FirstDate | Equipe |
| --- | --- | --- |
| 000110 | 2011-01-21 | Sudoeste |
| 000110 | - | Noroeste |
| 000120 | - | Noroeste |
| 000120 | 2013-03-05 | Sudoeste |
| 000120 | 2013-03-05 | Noroeste |
| 000120 | 2013-01-06 | Sudoeste |

O comando nullasvalue permite que os valores NULL sejam mapeados para os campos listados.

Crie Key, FirstDate, LastDate (campos de atributos) usando previous e order by. Posteriormente, IntervalTable é eliminada e substituída por essa tabela de chave.

O carregamento dos dados de Transact resultaria na seguinte tabela:

Tabela de exemplo 2

| Chave | Nome | Data | Vendas |
| --- | --- | --- | --- |
| 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 |

O comando intervalmatch precedido por inner join substitui a chave por uma chave sintética que se conecta à tabela Transact, resultando na seguinte tabela:

Tabela de exemplo 3

| Chave | Equipe | Nome | FirstDate | LastDate | Data | Vendas |
| --- | --- | --- | --- | --- | --- | --- |
| 000110 | Noroeste | Spengler Aaron | - | 2011-01-20 | 2009-08-18 | 100 |
| 000110 | Noroeste | Spengler Aaron | - | 2011-01-20 | 2009-12-25 | 200 |
| 000110 | Sudoeste | Spengler Aaron | 2011-01-21 | - | 2011-02-03 | 300 |
| 000110 | Sudoeste | Spengler Aaron | 2011-01-21 | - | 2011-05-05 | 400 |
| 000120 | Noroeste | Ballard John | - | 2013-01-05 | 2011-06-04 | 500 |
| 000120 | Sudoeste | Ballard John | 2013-01-06 | 2013-03-04 | 2013-01-20 | 600 |
| 000120 | Sudoeste | Ballard John | 2013-03-05 | - | 2013-03-10 | 700 |
| 000120 | Sudoeste | Ballard John | 2013-03-05 | - | 2013-03-13 | 800 |
| 000120 | Sudoeste | Ballard John | 2013-03-05 | - | 2013-09-21 | 900 |