Ir para conteúdo principal

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.

Example:  

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.

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