Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Gerar registro de nós pai a partir da soma dos filhos - TOTVS Datasul contas sintéticas

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:

Clipboard001.jpg

Clipboard02.jpg

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:

Clipboard03.jpg

Agradeço a força desde já!

Labels (2)
2 Replies
Ricardo_Gerhard
Employee
Employee

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

Exemplo de Link table

Organizar Tabelas e Link Tables

Ricardo Gerhard
OEM Solution Architect
LATAM
Anonymous
Not applicable
Author

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

Clipboard05.jpg

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!