10 Replies Latest reply: Jul 10, 2016 2:26 PM by Clever Anjos RSS

    Set Analysis com agregação

    rogerio ferreira

      Amigos,

       

      Estou com uma dúvida. Vou tentar explicar. Estou elaborando um DRE específico de um cliente. Para esta DRE, criei um agrupamento de contas chamado GRUPOCONTACONTABIL. As contas dentro deste grupo são utilizadas no mapeamento do DRE.

       

      O que acontece é que cada conta destas, em cada mês do ano, deve ser multiplicada por um valor % redutor ou não, pois, entendemos isto como centro de custo não declarado. Este percentual está em uma planilha, onde a chave primária é CODCONTACONTABIL + MES, haja visto que só há um % por conta para cada mês.

       

      Esta tabela carregada se relaciona com a tabela do razão contabil pela chave também CODCONTACONTABIL + MES. Até aí está tudo bem. O problema é quando preciso calcular os valores acumulados.

       

      Tenho um gráfico de tabelas no qual as dimensões são colocadas por Valuelist, ou seja, não são dimensões carregadas, mas que utilizam cálculos de tabelas carregadas.

       

      O cálculo que quero é multiplicar o saldo contabil (saldoanterior + (débitos - créditos)) pelo % correspondente do mês em questão da conta contábil que faz parte do grupo. Abaixo uma amostra:

       

      if(

         ValueList('VENDAS','GTOS. PROPORC. VENDAS','VENDA LÍQUIDA','Diferença Inventário (a P.V.N.)', 'PRODUÇÃO A P.V.N.','CUSTOS PROPORC. FABRICAÇÃO',

         '  Materias primas e auxiliares', 'MOD', '  - Propria','  - Terceiros','Varios', 'MARGEM BRUTA', 'Estruturais','M.O.I','Amortização', 'Varios ',

         'Outros Gastos Financeiros', 'RESULTADO TEORICO S/ PRODUCAO','Dotação de fundos', 'RESULTADO DE EXPLOTACION','Resultados alejos a la explotacion',

         'EXCEDENTE BRUTO', 'Impostos sobre a sociedade', 'EXCEDENTE LIQUIDO') = 'Varios',

         (SUM({<CODGRUPOCONTACONTABIL = {73003}, MES = {jan}>}SALDOANTERIOR*CONTAVARIOS.PERCENT) +

         (SUM({<CODGRUPOCONTACONTABIL = {73003}, MES = {jan,fev,mar,abr}>}DEBITOS*CONTAVARIOS.PERCENT) -

          SUM({<CODGRUPOCONTACONTABIL = {73003}, MES = {jan,fev,mar,abr}>}CREDITOS*CONTAVARIOS.PERCENT)))

      )

       

      Sei que preciso tirar o CONTAVARIOS.PERCENT porque no acumulado não preciso multiplicar a conta pelo % de cada mês acumulado, mas somente para o % do mês de abril. Creio que devo utilizar um AGGR porém não consegui ainda identificar onde.

       

      Caso alguém tenha passado por isto e possa ajudar eu agradeceria. Anexo uma amostra do modelo de dados.

       

      Abraços.

        • Re: Set Analysis com agregação
          Johnatan Guimaraes

          Ja tentou transformar tudo em um tabelão?

          • Re: Set Analysis com agregação
            Alessandro Furtado

            Bom dia.

             

            Concordo com o johnatanbmo em criar em uma tabela. Na realidade eu resolveria (tentaria) as questões de saldo, % e outros no script e simplificaria a expressão.

             

            Segue post com exemplo de como pegar o saldo anterior respondido neste post pelo fernando.tonial

             

            Carregar saldo anterior no script

              • Re: Set Analysis com agregação
                rogerio ferreira

                Alessandro,

                 

                Obrigado pela dica... entretanto, nesta base de dados não existe o saldo anterior mês a mês, somente o saldo do inicio do ano... assim, sempre que preciso calcular alguma coisa, eu tenho que pegar os dados desde o inicio do ano vir calculando. Até aí tudo bem, poderia fazer isto via script, me economizaria bastante linha de código nos objetos, porém, minha dúvida é em como fazer com que o cálculo apresentado funcione, haja visto que eu tenho que calcular o saldo atual e multiplicar por um %. Este percentual, ao colocar na sum() que calcula o mês multiplica o saldo de cada mês pelo % de cada mês e na verdade eu quero multiplicar apenas no final, depois de criar o saldo e daí sim aplicar o %. Acontece que em um objeto com dimensões calculadas isto não está funcionando, pois ele não obedece a dimensão.

                 

                ex; sum({<mes = {jan}>}saldoanterior) + (sum({<mes = {jan,fev,mar,abr}>}debitos) - sum({<mes = {jan,fev,mar,abr}>}creditos)) * %    ->  aqui está o problema!!!!!!!!!

                 

                Abraços.

                • Re: Set Analysis com agregação
                  rogerio ferreira

                  Alessandro, complementando:

                   

                  sum({<mes = {jan}>}saldoanterior) + (sum({<mes = {jan,fev,mar,abr}>}debitos) - sum({<mes = {jan,fev,mar,abr}>}creditos)) * %   


                  este SA calculada o saldo do mês de abril. Desta forma, ele deveria multiplicar o % apenas do mês de abril. Como são várias contas que estão linkadas na dimensão, se eu colocar o % dentro de cada SUM a aplicação multiplica pelo % de cada mês, que é diferente do mês de abril. Assim, preciso de uma função que me faça o cálculo do saldo do mês de abril e depois aplique o % específico de cada conta para apenas o do mês de abril.


                  Tentei com o AGGR, fieldsortedvalue e dentre outros, mas em todos a dimensão foi ignorada.


                  Vou ficar tentando por aqui, se achar a resposta eu posto aqui também!

                    • Re: Set Analysis com agregação
                      Alessandro Furtado

                      Rogerio, se tiver um .qvw eu posso ir vendo o resultado da expressao e se for o caso ir arrumando ela.....sem base, nao sei se a expressao abaixo daria certo ou nao.....mas o distinct no sum dos % creio que tenha que ter.....

                       

                      sum(

                             aggr(

                                      sum({<mes = {jan}>}saldoanterior) + (sum({<mes = {jan,fev,mar,abr}>}debitos) - sum({<mes = {jan,fev,mar,abr}>}creditos)) *      sum(distinct %mes)   

                              , mes)

                      )

                  • Re: Set Analysis com agregação
                    Clever Anjos

                    Já conseguiu a resposta? Se sim, escolha uma e marque como "Correta" para fechar o tópico e nos ajudar a manter a comunidade organizada