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.
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?
Início | Fim | Ordem |
---|---|---|
01:00 | 03:35 | A |
02:30 | 07:58 | B |
03:04 | 10:27 | C |
07:23 | 11:43 | D |
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:
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:
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:
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:
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 |