IntervalMatch

O prefixo IntervalMatch estendido é usado para criar uma tabela comparando valores numéricos discretos com um ou mais intervalos numéricos e opcionalmente comparar os valores de uma ou várias chaves adicionais.

Sintaxe:  

IntervalMatch (matchfield)(loadstatement | selectstatement )

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

 

O prefixo IntervalMatch deve ser colocado antes de um comando LOAD ou SELECT que carregue os intervalos. O campo que contém os pontos de dados discretos (Tempo, no exemplo abaixo) já deve ter sido carregado no QlikView antes do comando com o prefixo IntervalMatch. O prefixo não lê esse campo por meio da tabela do banco de dados. O prefixo transforma a tabela carregada de intervalos e chaves em uma tabela que contém uma coluna adicional: os pontos de dados numéricos discretos. Ele também expande o número de registros de forma que a nova tabela tenha um registro por combinação possível de ponto de dados discreto, intervalo e valor do(s) campo(s) chave.

Os intervalos podem estar sobrepostos e os valores discretos estarão vinculados a todos os intervalos correspondentes.

O prefixo estendido IntervalMatch é usado para criar uma tabela comparando valores numéricos discretos com um ou mais intervalos numéricos, enquanto compara os valores de uma ou várias chaves adicionais. Esse é um recurso bastante eficiente e flexível que pode ser usado na vinculação de transações a dimensões alteradas com o passar do tempo: Dimensões em mudança lenta.

Para evitar que limites de intervalo indefinidos sejam desconsiderados, você deve permitir que valores NULL sejam mapeados para outros campos que constituem o limite inferior ou superior no intervalo. Isso pode ser controlado pelo comando NullAsValue ou por um teste explícito que substitui NULL por um valor numérico bem antes ou depois de qualquer um dos pontos de dados numéricos discretos.

Argumentos:  

Argumento Descrição
matchfield O campo que contém os valores numéricos discretos a serem vinculados a intervalos.
keyfield Campos que contêm os atributos adicionais a serem combinados na transformação.
loadstatement or selectstatement Deve resultar em uma tabela cujo primeiro campo contém o limite inferior de cada intervalo, o segundo contém o limite superior e, no caso do uso da correspondência de chaves, o terceiro e quaisquer campos seguintes contêm o(s) campo(s) chave presentes no comando IntervalMatch. 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).

Exemplo 1:  

Nas duas tabelas abaixo, a primeira define as horas inicial e final da produção de pedidos diferentes. A segunda lista vários eventos discretos. Por meio do prefixo IntervalMatch, é possível conectar as duas tabelas logicamente para saber, por exemplo, quais pedidos foram afetados por algum contratempo, quais foram processados e em que turnos.

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;

Resultado:

A tabela OrderLog agora contém uma coluna adicional: Time. O número de registros também aumenta.

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

Exemplo 2: (usando keyfield)

O mesmo exemplo acima, com o acréscimo de ProductionLine como campo chave.

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;

Resultado:

Uma tabela poderia agora ser criada como mostrado abaixo:

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