Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Olá pessoal!
Sou novato com o QlikView e estou com um desafio que até o momento não consigo resolver.
Preciso criar um Dashboard com indicadores financeiros a partir de dados de movimentação de contas contábeis, informações vindas do TOTVS Datasul. Estes indicadores são calculados com base em contas contábeis sintéticas.
No Datasul existem dois tipos de contas: as sintéticas e as analíticas.
As contas analíticas possuem os dados de movimentação de contas, enquanto as contas sintéticas apenas agregam todas as contas abaixo dela.
Na tabela de movimentação do Datasul, constam apenas registros das analíticas.
As sintéticas apenas possuem cadastro na tabela de plano de contas (dimensão), não possuem registros na movimentação.
O Desafio é criar, na carga dos dados, registros dessas contas sintéticas onde somam a movimentação de todas as contas abaixo dela (se esta for mesmo a melhor solução).
No futuro Dashboard, os indicadores financeiros serão calculados usando informações das contas sintéticas geradas dessa forma.
Na carga de dados do QlikView, utilizando outras tabelas do Datasul, adicionei uma coluna ContaPai na tabela dimensão das Contas Contábeis, criando assim um modelo de adjacencia entre as contas, e produzindo uma hierarquia, conforme imagens abaixo:
Apenas contas de último nível são analíticas, todas as contas de níveis acima são sintéticas.
No exemplo das imagens acima, apenas as contas do último nível possuem as informações de movimentação (Ex: 11010101, 11010102, que juntas formam a sintética 11010100, que faz parte da sintética 11010000 e assim por diante...)
Segue imagem do data model:
Agradeço a força desde já!
Boa tarde Gabriel,
Desculpe, mas não entendi muito é o problema, visto que atualmente já tens as hierarquias prontas.
Se o problema é do campo Conta Contabil em várias tabelas, podes atuar na criação de um link table
Organizar Tabelas e Link Tables
Boa Tarde Ricardo,
Meu objetivo é criar uma tebela com linhas das contas sintéticas (que não possuem movimentação, apenas agregam a movimentação das contas abaixo, na hierarquia), a partir dos registros das contas analíticas.
Por exemplo: Na linha da conta sintética 1.1.01.01.00 aparecerem as somas das contas 1.1.01.01.01 até 1.1.01.01.99. Esta sintética possui como conta pai outra sintética 1.1.01.00.00 e assim sucessivamente... até chegar na conta raiz 1.0.00.00.00
A estrutura é uma arvore em que cada filho possui apenas 1 pai, mas o pai possui n filhos, e preciso "construir" uma linha para cada pai com a consolidação dos valores dos filhos, e depois guardar em algum outro lugar pois os indicadores financeiros usarão informações destas contas que precisam ser "montadas".
O sistema de origem faz a construção destes dados de contas sintéticas no momento que os relatórios são gerados, não salva no banco de dados, e no momento não tenho acesso ao código fonte dos relatórios.
Até consegui fazer uma consolidação na carga com o código abaixo, tratando a string da chave das contas com left(), mas acabei esbarrando em "exceções", do tipo as contas 90000100 e 90000200
dimContaContabil:
LOAD cod_cta_ctbl as [Conta Contabil],
des_tit_ctbl as Titulo,
cod_cta_ctbl_pai as Pai,
cod_grp_cta_ctbl as Grupo,
ind_espec_cta_ctbl as Especie,
ind_natur_cta_ctbl as Natureza,
cod_altern_cta_ctbl as Alternativa,
ind_tip_taxac_ctbl as Taxacao,
cod_finalid_econ as Finalidade
FROM
[.\Fonte de Dados\dimContaContabil.qvd]
(qvd);
hierarquia:
HIERARCHY([Conta Contabil],[Conta Pai],Node,'Nome do Pai',Node,Caminho,'\','Depth')
LOAD [Conta Contabil],
Pai as [Conta Pai],
[Conta Contabil] as Node
Resident dimContaContabil;
//FATO - MOVIMENTAÇÃO (QVD)
factMovimentacao:
LOAD cod_cta_ctbl as [Conta Contabil],
date(dat_sdo_ctbl) as Data,
day(dat_sdo_ctbl) as Dia,
Num(month(dat_sdo_ctbl)) as MesNum,
month(dat_sdo_ctbl) as MesAbrev,
year(dat_sdo_ctbl) as Ano,
val_sdo_ctbl_cr as [Movto Credito],
val_sdo_ctbl_db as [Movto Debito],
val_sdo_ctbl_fim as [Saldo Final]
FROM
[.\Fonte de Dados\factMovimentacao.qvd]
(qvd);
factMovimentacaoSoma:
LOAD [Conta Contabil],
MesNum as MesSoma,
Ano as AnoSoma,
left([Conta Contabil],1) as N1,
left([Conta Contabil],2) as N2,
left([Conta Contabil],4) as N3,
left([Conta Contabil],6) as N4,
SUM([Movto Credito]) as SomaCredito,
SUM([Movto Debito]) as SomaDebito,
SUM([Saldo Final]) as SomaSaldoFinal
Resident factMovimentacao
GROUP BY [Conta Contabil],MesNum,Ano;
factSomaN4:
LOAD N4&'00' as [Conta Contabil],
MesSoma as MesN4,
AnoSoma as AnoN4,
N1 as N1_N4,
N2 as N2_N4,
N3 as N3_N4,
SUM(SomaCredito) as SomaCreditoN4,
SUM(SomaDebito) as SomaDebitoN4,
SUM(SomaSaldoFinal) as SomaSaldoFinalN4
Resident factMovimentacaoSoma
GROUP BY N4,MesSoma,AnoSoma,N1,N2,N3;
factSomaN3:
LOAD N3_N4&'0000' as [Conta Contabil],
MesN4 as MesN3,
AnoN4 as AnoN3,
N1_N4 as N1_N3,
N2_N4 as N2_N3,
SUM(SomaCreditoN4) as SomaCreditoN3,
SUM(SomaDebitoN4) as SomaDebitoN3,
SUM(SomaSaldoFinalN4) as SomaSaldoFinalN3
Resident factSomaN4
Group By N3_N4,MesN4,AnoN4,N1_N4,N2_N4;
factSomaN2:
LOAD N2_N3&'000000' as [Conta Contabil],
MesN3 as MesN2,
AnoN3 as AnoN2,
N1_N3 as N1_N2,
SUM(SomaCreditoN3) as SomaCreditoN2,
SUM(SomaDebitoN3) as SomaDebitoN2,
SUM(SomaSaldoFinalN3) as SomaSaldoFinalN2
Resident factSomaN3
Group By N2_N3,MesN3,AnoN3,N1_N3;
factSomaN1:
LOAD N1_N2&'0000000' as [Conta Contabil],
MesN2 as MesN1,
AnoN2 as AnoN1,
SUM(SomaCreditoN2) as SomaCreditoN1,
SUM(SomaDebitoN2) as SomaDebitoN1,
SUM(SomaSaldoFinalN2) as SomaSaldoFinalN1
Resident factSomaN2
Group By N1_N2,MesN2,AnoN2;
Obrigado pela ajuda!