Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
É um caso aparentemente simples (que sempre é solicitado rsrs) em que um gráfico com dimensão temporal (dia ou mês ou ano) referencia duas expressões que se baseiam em datas diferentes, por exemplo: Quantidade de notas emitidas e quantidade de notas canceladas em que a quantidade de notas emitidas se baseia na coluna temporal DATA_EMISSAO e a quantidade de notas canceladas se baseia na coluna temporal DATA_CANCELAMENTO.
Pergunta: Qual a coluna de data que se deve utilizar na dimensão do gráfico? Se usarmos a data de emissão, a coluna de notas canceladas ficará incorreta, pois nem todas as notas canceladas foram canceladas na data (ou mês ou ano) da emissão. Se usarmos a data de cancelamento, a coluna de notas emitidas ficará incorreta devido ao mesmo caso.
Com o problema em mãos, começamos a pensar sobre possíveis soluções, por exemplo:
Confesso que estava partindo para a solução 2, porém me veio um “insight” na cabeça: Porque não criar uma linktable das datas? Isso me aumentaria um “IF” dentro do gráfico, porém continuaria com uma boa performance e não aumentaria, em muito, minha volumetria de dados.
Vamos a prática:
1) Criamos a nossa tabela Fato:
Fato:
LOAD * INLINE [
NUM_NOTA, VALOR, DATA_EMISSAO, DATA_CANCELAMENTO
00001, 10, 01/01/2014, 10/02/2014
00002, 2, 05/01/2014,
00003, 1, 05/01/2014
00004, 5, 05/01/2014, 10/01/2014
00005, 11, 06/01/2014, 10/01/2014
00006, 8, 06/01/2014,
00007, 12, 06/01/2014,
00008, 4, 01/02/2014, 05/02/2014
00009, 8, 01/02/2014, 10/02/2014
00010, 4, 01/02/2014, 18/02/2014
00011, 3, 05/02/2014,
00012, 5, 05/02/2014,
00013, 10, 10/02/2014, 01/03/2014
00014, 2, 01/03/2014, 10/03/2014
];
2) Criamos uma tabela de Link entre o fato e o nosso calendário oficial, para criar esse link devemos dividir a tabela fato em duas: a primeira com as datas de emissão e a segunda com as datas de cancelamento. Após a divisão devemos concatena-las utilizando o mesmo nome do campo de data, mas lembre-se de criar uma coluna com o identificador da origem da data.
IMPORTANTE: Alem do campo de data e identificador, também devemos decidir qual será o campo chave entre a tabela de Link e a tabela Fato.
LinkData:
LOAD
NUM_NOTA,
DATA_EMISSAO as Data,
'DataEmissao' as Tipo
RESIDENT Fato;
LOAD
NUM_NOTA,
DATA_CANCELAMENTO as Data,
'DataCancelamento' as Tipo
RESIDENT Fato
WHERE
LEN(TRIM(DATA_CANCELAMENTO))>0; //Garantia para concatenar somente datas de cancelamento válidas.
3) Criar a tabela de calendário e fazer a ligação entre a tabela calendário com a tabela de Link.
Realizado os passos, no gráfico, utilize a dimensão de Mês e Ano da tabela de calendário e nas expressões faça a referência com a coluna de identificação da origem da data, conforme exemplo abaixo:
Expressão para quantidade de notas fiscais emitidas
COUNT( {$<Tipo={"DataEmissao"}>} NUM_NOTA)
Expressão para quantidade de notas fiscais canceladas
COUNT( {$<Tipo={"DataCancelamento"}>} NUM_NOTA)
Pronto, agora podemos referenciar as datas no mesmo gráfico, garantir uma alta performance e não aumentar muito a volumetria de dados em nossa aplicação.
PS: Isso vale para datas em tabelas diferentes, o processo será o mesmo.
Estou anexando uma aplicação de exemplo para vocês.
Bom dia Yuri
Estou tentando montar um grafico desse tipo em QLIK Sense, porém, no meu APP só possui consulta a 1 view de SQL que já contém 2 datas distintas <data de inicio> e <data de encerramento>, faço apenas contagem simples sendo mostrados em grafico de barras e a conexão é OLE DB. Mas não estou conseguindo.
Estou montando com uma dimensão hierárquica, mas já teste com a data diretamente e também não vai!
Consegue me dar uma luz?