Conferência Mundial QlikWorld 2020. Junte-se a nós para descobrir como tirar o máximo proveito dos seus dados. Atuar rápido. Registrar agora e salvar.

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 de sintaxe Intervalmatch

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
Início Fim Ordem
01:00 03:35 A
02:30 07:58 B
03:04 10:27 C
07:23 11:43 D
Tabela EventLog
Time 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 Qlik Sense, como mostrado abaixo:

Tabela com o campo Tempo vinculado aos intervalos definidos por Início e Fim
Time Evento Comentário Ordem Início Fim
0:00 0 Começo do turno 1 - - -
1:18 1 Parada de linha A 1:00 3:35
2:23 2 Reinício da linha 50% A 1:00 3:35
4:15 3 Velocidade da linha 100% B 2:30 7:58
4:15 3 Velocidade da linha 100% C 3:04 10:....
8:00 4 Começo do turno 2 C 3:04 10:....
8:00 4 Começo do turno 2 D 7:23 11:....
11:43 5 Fim da produção E 7:23 11:.....

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 por Shift 2.

Observe o seguinte ao utilizar intervalmatch:

  • Antes do comando intervalmatch, o campo que contém os pontos de dados discretos (Time no exemplo acima) já deve ter sido lido em Qlik Sense. O 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 acima). Para estabelecer um link com outros campos, você deve ler os campos de intervalo juntamente com os campos adicionais em um comando LOAD ou SELECT separado (o primeiro comando SELECT no exemplo acima).
  • Os intervalos estão sempre fechados. Ou seja, sempre contêm pontos de extremidade. Os limites não numéricos fazem com que o intervalo seja desconsiderado (indefinido), enquanto 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 de intervalmatch estendida para resolver problemas de lentidão durante a alteração de dimensões

A sintaxe de 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 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is IntervalTable);

 

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 'lib://dataqv/intervalmatch.xlsx' (ooxml, embedded labels, table is Transact);

 

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:

Table with data loaded from IntervalTable
Key FirstDate Team
000110 2011-01-21 Southwest
000110 - Northwest
000120 - Northwest
000120 2013-03-05 Southwest
000120 2013-03-05 Northwest
000120 2013-03-05 Southwest

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

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

O carregamento dos dados de Transact resultaria na seguinte tabela:

Tabela com dados carregados do Transact
Chave Nome Date  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 com a instrução intervalmatch precedida por inner join
Chave Equipe Nome FirstDate LastDate Date  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