Ir para conteúdo
  • 0

Erro ao somar total das colunas de uma matriz


Douglas Nascimento
Ir para solução Solucionado por Bruno Abdalla de Souza ,

Pergunta

  • Membros

Olá Pessoal, boa tarde!

Estou com dificuldade em gerar o total correto das colunas de uma matriz a primeira medida deu certo agora qndo mudo o agrupador ele nao funciona... nas proximas medidas

O Racional do calculo "Saldo do investimento no inicio do periodo" precisa trazer o valor do "Patrimonio Liquido" do ano anterior na coluna ano atual e o total tem que bater com que esta na coluna igual a primeira matriz...

image.png.a3dd53ba2bd72047672ccbe50515ee41.png


image.png.f825620d57e215f2f55bedf6041ae7b5.png

 

 

Teste com base CSV.pbix

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0
  • Membros
  • Solução

Veja se é isso:

 

Teste2 = 
VAR vConta = 
    VALUES('Agrupador Conta'[Descrição Agrupador])
VAR vAno = 
    VALUES(Calendario[Ano])
VAR vResultado =
    SUMX(
        CROSSJOIN(
            vAno,
            vConta
        ),
        VAR vAno = Calendario[Ano]
        VAR vContaAtual = [Descrição Agrupador]
        VAR vTabelaDatas = 
            DISTINCT(
                SELECTCOLUMNS(
                    FILTER(
                        ALL(Calendario),
                        Calendario[Ano] = vAno
                    ),
                    "Data",
                    Calendario[Data]
                )
            )
        VAR vUltimaDataAnoAnt = 
            CALCULATE(
                MAX(Calendario[Data]),
                FILTER(
                    ALL(Calendario),
                    Calendario[Ano] = vAno - 1
                )
            )
        VAR vUltimaDataAnoAtual = 
            CALCULATE(
                MAX(Calendario[Data]),
                vTabelaDatas
            )
        VAR vSaldoIni = 
            CALCULATE(
                SUM(DW_Banco_Balancete[VL_Saldo_Dia]),
                Calendario[Data] = vUltimaDataAnoAnt
            ) + 0
        VAR vSaldo = 
            CALCULATE(
                SUM(DW_Banco_Balancete[VL_Saldo_Dia]),
                Calendario[Data] = vUltimaDataAnoAtual
            )
        RETURN
            SWITCH(
                vContaAtual,
                "Saldo do investimento no início do período", vSaldoIni,
                "Valor do investimento baseado na equivalência", vSaldo, 
                "Patrimônio líquido", vSaldo, 
                "Passivo", vSaldo, 
                "Lucro líquido no exercício", vSaldo, 
                "Ativo", vSaldo
            )
    )
RETURN
    DIVIDE(vResultado, 1000)

 

20221117_TestecombaseCSV.pbix

  • Gostei 1
Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros

Boa tarde @Douglas Nascimento!

Também tive a mesma dúvida do @Bruno Abdalla de Souza  em relação à coluna de total.

Veja se te atende por gentileza.

Se esta resposta resolver seu problema, gentileza classificá-la como Solução 

Atenciosamente,

Bernardo Vitor
(31) 99116-6134
LinkedIn: https://www.linkedin.com/in/bernardo-vitor

Teste com base CSV.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
7 minutos atrás, Bernardo Vitor disse:

Boa tarde @Douglas Nascimento!

Também tive a mesma dúvida do @Bruno Abdalla de Souza  em relação à coluna de total.

Veja se te atende por gentileza.

Se esta resposta resolver seu problema, gentileza classificá-la como Solução 

Atenciosamente,

Bernardo Vitor
(31) 99116-6134
LinkedIn: https://www.linkedin.com/in/bernardo-vitor

Teste com base CSV.pbix 310.57 kB · 1 download

Isso mesmo a ultima data!

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
13 minutos atrás, Douglas Nascimento disse:

Isso mesmo a ultima data!

Fiz o ajuste do total conforme você precisa.
Veja se te atende por favor.

Se esta resposta resolver seu problema, gentileza classificá-la como Solução 

Atenciosamente,

Bernardo Vitor
(31) 99116-6134
LinkedIn: https://www.linkedin.com/in/bernardo-vitor
 

Teste com base CSV.pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
11 minutos atrás, Bernardo Vitor disse:

Fiz o ajuste do total conforme você precisa.
Veja se te atende por favor.

Se esta resposta resolver seu problema, gentileza classificá-la como Solução 

Atenciosamente,

Bernardo Vitor
(31) 99116-6134
LinkedIn: https://www.linkedin.com/in/bernardo-vitor
 

Teste com base CSV.pbix 310.24 kB · 0 downloads

Segue outro pbix ajustado mais o print acho que fica melhor pra entender!!!

eu fiz 2 medidas uma para cada tabela mas nenhuma das medidas deu certo... Teria que refletir o algo parecido com a imagem Nota9.b:

image.png.ccbf79d44a5f3a2aaa41af87f1932f58.png

image.png.1f489470f7f71fda27e0679ffc3f4177.png

Teste com base CSV (2).pbix

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
3 horas atrás, Douglas Nascimento disse:

Segue outro pbix ajustado mais o print acho que fica melhor pra entender!!!

eu fiz 2 medidas uma para cada tabela mas nenhuma das medidas deu certo... Teria que refletir o algo parecido com a imagem Nota9.b:

image.png.ccbf79d44a5f3a2aaa41af87f1932f58.png

image.png.1f489470f7f71fda27e0679ffc3f4177.png

Teste com base CSV (2).pbix 3.22 MB · 0 downloads

@Bernardo Vitor conseguiu entender dessa forma?

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
3 horas atrás, Douglas Nascimento disse:

Segue outro pbix ajustado mais o print acho que fica melhor pra entender!!!

eu fiz 2 medidas uma para cada tabela mas nenhuma das medidas deu certo... Teria que refletir o algo parecido com a imagem Nota9.b:

image.png.ccbf79d44a5f3a2aaa41af87f1932f58.png

image.png.1f489470f7f71fda27e0679ffc3f4177.png

Teste com base CSV (2).pbix 3.22 MB · 0 downloads

@Bernardo Vitor conseguiu entender dessa forma?

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros

Melhorando um pouco:

Teste2 = 
VAR vConta = 
    VALUES('Agrupador Conta'[Descrição Agrupador])
VAR vAno = 
    VALUES(Calendario[Ano])
VAR vResultado =
    SUMX(
        CROSSJOIN(
            vAno,
            vConta
        ),
        VAR vAno = Calendario[Ano]
        VAR vContaAtual = [Descrição Agrupador]
        VAR vTabelaDatas = 
            DISTINCT(
                SELECTCOLUMNS(
                    FILTER(
                        ALL(Calendario),
                        Calendario[Ano] = vAno
                    ),
                    "Data",
                    Calendario[Data]
                )
            )
        VAR vUltimaDataAnoAnt = 
            CALCULATE(
                MAX(Calendario[Data]),
                FILTER(
                    ALL(Calendario),
                    Calendario[Ano] = vAno - 1
                )
            )
        VAR vUltimaDataAnoAtual = 
            CALCULATE(
                MAX(Calendario[Data]),
                vTabelaDatas
            )
        VAR vSaldoIni = 
            CALCULATE(
                SUM(DW_Banco_Balancete[VL_Saldo_Dia]),
                Calendario[Data] = vUltimaDataAnoAnt
            ) + 0
        VAR vSaldo = 
            CALCULATE(
                SUM(DW_Banco_Balancete[VL_Saldo_Dia]),
                Calendario[Data] = vUltimaDataAnoAtual
            )
        RETURN
            SWITCH(
                TRUE(),
                vContaAtual = "Saldo do investimento no início do período", vSaldoIni,
                vContaAtual IN {"Valor do investimento baseado na equivalência", "Patrimônio líquido", "Passivo", "Lucro líquido no exercício", "Ativo"}, vSaldo
            )
    )
RETURN
    DIVIDE(vResultado, 1000)

 

20221117_TestecombaseCSV.pbix

  • Gostei 2
Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
39 minutos atrás, Bruno Abdalla de Souza disse:

Melhorando um pouco:

Teste2 = 
VAR vConta = 
    VALUES('Agrupador Conta'[Descrição Agrupador])
VAR vAno = 
    VALUES(Calendario[Ano])
VAR vResultado =
    SUMX(
        CROSSJOIN(
            vAno,
            vConta
        ),
        VAR vAno = Calendario[Ano]
        VAR vContaAtual = [Descrição Agrupador]
        VAR vTabelaDatas = 
            DISTINCT(
                SELECTCOLUMNS(
                    FILTER(
                        ALL(Calendario),
                        Calendario[Ano] = vAno
                    ),
                    "Data",
                    Calendario[Data]
                )
            )
        VAR vUltimaDataAnoAnt = 
            CALCULATE(
                MAX(Calendario[Data]),
                FILTER(
                    ALL(Calendario),
                    Calendario[Ano] = vAno - 1
                )
            )
        VAR vUltimaDataAnoAtual = 
            CALCULATE(
                MAX(Calendario[Data]),
                vTabelaDatas
            )
        VAR vSaldoIni = 
            CALCULATE(
                SUM(DW_Banco_Balancete[VL_Saldo_Dia]),
                Calendario[Data] = vUltimaDataAnoAnt
            ) + 0
        VAR vSaldo = 
            CALCULATE(
                SUM(DW_Banco_Balancete[VL_Saldo_Dia]),
                Calendario[Data] = vUltimaDataAnoAtual
            )
        RETURN
            SWITCH(
                TRUE(),
                vContaAtual = "Saldo do investimento no início do período", vSaldoIni,
                vContaAtual IN {"Valor do investimento baseado na equivalência", "Patrimônio líquido", "Passivo", "Lucro líquido no exercício", "Ativo"}, vSaldo
            )
    )
RETURN
    DIVIDE(vResultado, 1000)

 

20221117_TestecombaseCSV.pbix 314.61 kB · 0 downloads

@Bruno Abdalla de Souza poderia explicar como chegou nessa logica? O Resultado esperado era esse mesmo a solução atendeu perfeitamente!!! =D

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros

@Douglas Nascimento,

que bom que a solução chegou no resultado pretendido. Vamos à explicação.

 

O grande problema aqui é que vc queria sempre o saldo da última data daquele ano. Na linha de totais, é necessário identificar cada ano, obter a data máxima deste ano e retornar o saldo (ou então no ano anterior no caso do saldo inicial).

A variável vConta retorna uma tabela de valores da descrição da conta. Caso esteja em uma linha que não seja de total de um ano específico, retornará apenas uma tabela de uma linha (Ex: Saldo do investimento no início do período). Caso esteja em uma linha de total do ano, retornará uma tabela com todas as opções de descrição da conta.

A variável vAno retorna uma tabela de valores dos anos. Caso esteja em uma linha que não seja de total de um ano específico, retornará uma tabela com todos os anos. Caso contrário, retornará uma tabela com o ano do contexto.

A partir daí, a ideia é formar uma tabela virtual através do cruzamento entre as linhas da tabela vConta e da tabela vAno. Como exemplo, suponha que vAno seja uma tabela no total do Saldo inicial, ou seja, tem nos anos 2020, 2021 e 2022. Suponha que vConta retorna uma tabela com o valor Saldo do investimento no início do período. Logo, a tabela virtual gerada será assim:

Ano                Conta

2020              Saldo do investimento no início do período

2021              Saldo do investimento no início do período

2022              Saldo do investimento no início do período

A partir daí, dentro da SUMX o objetivo é linha a linha da tabela acima calcular o valor do saldo, seja ele inicial ou não dependendo do contexto da Conta. Mas antes de sair calculando, precisamos saber a última data do ano de cada linha da tabela a última data do ano anterior referente a cada linha da tabela. Sendo assim, as variáveis vAno e vTabelaDatas, vUltimaDataAnoAnt e vUltimaDataAnoAtual são calculadas para obter tais datas. Não vou aqui entrar em detalhe, mas acredito que não seja complexo entender cada uma delas. Depois, vamos calcular o Saldo Inicial (saldo da última data do ano anterior) e o Saldo (última data do ano do contexto), o que não é difícil após termos obtidos as variáveis com as datas, como expliquei anteriormente.

Por fim, basta avaliar em cada contexto de descrição da conta (através da função SWITCH) qual saldo usar (se saldo do fim do ano anterior ou saldo do fim do ano do contexto.

 

Não dá para explicar aqui com todo o detalhamento, mas acredito que tenha ajudado um pouco a entender qual foi o raciocínio envolvido.

Peço que marque o tópico como concluído e a melhor resposta que ajudou a chegar à solução correta.

Um abraço e fique com Deus!

 

 

  • Gostei 2
  • Obrigado(a) 2
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...