2 Replies Latest reply: Jan 22, 2018 5:17 AM by Gabriel Silva RSS

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

    Gabriel Silva

      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á!

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

          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

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

              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!