Ir para conteúdo
  • 0

Total Acumulado Mês Passado - DATEADD VS Cálculo manual


jsp.almeida1983
Ir para solução Solucionado por Renato Carlos Rossato ,

Pergunta

  • Alunos

Olá pessoal, time Xperiun. 

Assistindo a live [Extra] Live #67 que está presente no Módulo Linguagem DAX Essencial / Bônus, temos o exercício 3 onde o objetivo é Calcular o Acumulado ao longo do tempo, porém até o mês passado em relação ao mês atual do Contexto. Ok, até aqui e no arquivo que é usado nesta live, tanto a DAX usando DATEADD e DAX com o cálculo "na mão", ou seja, manipulando totalmente o contexto sem o uso de Syntax Sugar, os valores / resultados são os mesmos! SHOW!

Daí fui praticar a mesma DAX, porém com o material da LIVE 2  (que trata de cálculos com inteligência de tempo). Não vejo nenhum problema com o Modelo e as medidas seguem o mesmo padrão ensinado, porém os resultados com DATEADD não são os mesmos apenas no último mês do contexto atual (MARÇO/2019) se compararmos as DAX com DATEADD e a DAX "manual". De verdade não consegui entender o motivo! Olhei e analisei o modelo de dados, olhei os relacionamentos e tudo está ok... Alguém consegue ver algo adicional e explicar porque com a DATEADD não temos o resultado esperado no Contexto MARÇO/2019 que deve ser o Acumulado até FEVEREIRO/2019? 

Vejam a foto anexa e o modelo PBIX comparando as duas medidas. De verdade não entendi até agora!

Total Vendas Acumulado = 
VAR vUltimoDiaContexto =
    MAX ( dCalendario[Data] )
VAR vAcumulado =
    CALCULATE (
        [Total Vendas],
        ALL ( dCalendario ),
        dCalendario[Data] <= vUltimoDiaContexto
    )
RETURN
    vAcumulado

 

Total Vendas Acumulado M-1 DATEADD = 
CALCULATE ( [Total Vendas Acumulado], DATEADD ( dCalendario[Data], -1, MONTH ) )

 

Total Vendas Acumulado M-1 = 
VAR vUltimoDiaContexto =
    MIN ( dCalendario[Data] )
VAR vAcumulado =
    CALCULATE (
        [Total Vendas],
        FILTER ( 
            ALL ( dCalendario ), 
            dCalendario[Data] < vUltimoDiaContexto )
    )
RETURN
    vAcumulado


Desde já agradeço a ajuda neste entendimento.

ACC_M-1_1.png

Live 2 - Teoria_LABv1_Forum.pbix

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Olá @jsp.almeida1983, para funcionar da forma que deseja, você deve passar a última data do mês para que o DATEADD faça o trabalho de voltar um mês corretamente.

Para isso criei uma nova medida usando a função EOMONTH para que eu tenha o último dia do período em questão:

VAR vUltimoDiaContexto =
    MAX ( dCalendario[Data] ) --Aqui como a base tem dados até 08/03/2019 era o que fazia ele voltar até 08/02/2019, no DATEADD retornando o resultado incorreto.
VAR DATAMAX = EOMONTH(vUltimoDiaContexto, 0)    --Aqui trazemos o último dia do mês do contexto que foi capturado no MAX da vUltimoDiaContexto
VAR vAcumulado =
    CALCULATE (
        [Total Vendas],
        ALL ( dCalendario ),
        dCalendario[Data] <= DATAMAX
    )
RETURN
    vAcumulado

Em seguida utilizei esta nova medida fazendo o cálculo com o DATEADD e retornou o resultado esperado:

Total Vendas Acumulado M-1 DATEADD 2 = 
CALCULATE ( [Total Vendas Acumulado 2], DATEADD ( dCalendario[Data], -1, MONTH ) )

image.png.ab6e7b0b00a92cf2ee1cfd4a6e757020.png

Espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos
Em 01/04/2024 em 08:21, Renato Carlos Rossato disse:

Olá @jsp.almeida1983, para funcionar da forma que deseja, você deve passar a última data do mês para que o DATEADD faça o trabalho de voltar um mês corretamente.

Para isso criei uma nova medida usando a função EOMONTH para que eu tenha o último dia do período em questão:

VAR vUltimoDiaContexto =
    MAX ( dCalendario[Data] ) --Aqui como a base tem dados até 08/03/2019 era o que fazia ele voltar até 08/02/2019, no DATEADD retornando o resultado incorreto.
VAR DATAMAX = EOMONTH(vUltimoDiaContexto, 0)    --Aqui trazemos o último dia do mês do contexto que foi capturado no MAX da vUltimoDiaContexto
VAR vAcumulado =
    CALCULATE (
        [Total Vendas],
        ALL ( dCalendario ),
        dCalendario[Data] <= DATAMAX
    )
RETURN
    vAcumulado

Em seguida utilizei esta nova medida fazendo o cálculo com o DATEADD e retornou o resultado esperado:

Total Vendas Acumulado M-1 DATEADD 2 = 
CALCULATE ( [Total Vendas Acumulado 2], DATEADD ( dCalendario[Data], -1, MONTH ) )

image.png.ab6e7b0b00a92cf2ee1cfd4a6e757020.png

Espero ter ajudado.

Olá, beleza? Ahhh, entendi perfeitamente o detalhe das datas incompletas e o DATEADD "não conseguir" voltar o tempo necessário, neste caso. Perfeito! Muito obrigado! Primeira vez que uso a EOMONTH kk! Vlw! 

Link para o comentário
Compartilhar em outros sites

Faça login para comentar

Você vai ser capaz de deixar um comentário após fazer o login



Entrar Agora
×
×
  • Criar Novo...