Ir para conteúdo
  • 0

Linguagem DAX para calculo de período


Lucas Denker
Ir para solução Solucionado por Lucas Denker ,

Pergunta

  • Alunos

Tenho uma base de dados abaixo fictícia que demonstra o volume comprado de um produto X por cliente em determinadas datas. A base possui as seguintes colunas:
Cod Cliente: Uma chave para idetnificar o código do cliente
Data: Registro da data em que ocorreu a compra do volume do produto
Volume: o Quanto foi comprado do produto
Flag Contrato: Identifica se o cliente possui um contrato conosco ou não

Meu problema:

Gostaria de criar uma medida DAX que fizesse a soma do volume por Cod Cliente em um período de até 3 meses atrás da data da compra para todos os clientes que possuem contrato (flag contrato = 1)

A medida deve verificar a data do contexto e realizar o calculo da soma de volume 3 meses atrás desta data até a mesma. Exemplo: Se no contexto tiver jan/2023 a medida deve somar o volume do período de Out/22 até dez/22.

Tentei fazer a seguinte medida porém o resultado não foi o esperado:
Medida:

A0  =

CALCULATE(

    SUM(fContratos[Volume]),

    FILTER(

        ALL(dCalendario),

        dCalendario[Date] >= EDATE( SELECTEDVALUE(dCalendario[Date]), -3 ) && dCalendario[Date] < SELECTEDVALUE( dCalendario[Date] )

    ),

    VALUES(fContratos[Cod Cliente]),

    fContratos[Flag Contatos] = 1

)

Resultado:
image.png.3b2ab61d600950375a3e2dab2bbeddb7.png

Resultado esperado:
image.png.45e1fa2de57269db43af0afd8ef00be0.png

Segue abaixo em anexo a base em excel bem como o pbix que estou utilizando para testar essa medida.

Agradeço o tempo e a ajuda 🙂

BI Teste medida.pbix base teste.xlsx

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução

Consegui solucionar, utilizei a função WINDOW
Vou deixar a função aqui caso alguém tenha problemas parecidos no futuro
WINDOW = 
SUMX(
    WINDOW(
        -3,REL,
        -1,REL,
        SUMMARIZE(
            ALLSELECTED(fContratos),
            fContratos[Cod Cliente],
           dcalendario[Date]
        ),
        ORDERBY(
            dcalendario[Date], ASC
        ),
        PARTITIONBY(fContratos[Cod Cliente])
    ),
    [Volume]
)

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa noite, meu amigo! Tudo bem?

IMPORTANTE: Caso a minha resposta lhe atenda, me ajude marcando ela como correta para o meu crescimento na plataforma! 💝

Criei a medida conforme as condições que você passou. Adicionei uma coluna de "Faturamento Acumulado" para que você possa verificar se o valor corresponde ao resultado esperado.

image.png.69dd7f1d87d97c1c2c727f1ef4773d62.png

MEDIDA E EXPLICAÇÃO:

A medida que criei segue o conceito de criar uma variável com a data máxima do contexto e outra variável que subtrai 90 dias dessa data máxima, obtendo assim a data de três meses atrás. Em seguida, utilizei o RETURN para retornar a soma da coluna Volume onde a data é menor ou igual à variável que representa a data de três meses atrás e a Flag Contatos é igual a 1. Dessa forma, a medida resulta no valor vendido nos últimos três meses de forma dinâmica.

Volume_Tres_Meses =
VAR vMaxVolume =
CALCULATE(
    MAX(fContratos[Data]),
    ALL(fContratos)
)
VAR vMaxVolumeTresMeses = vMaxVolume - 90
RETURN
CALCULATE(
    SUM(fContratos[Volume]),
    fContratos[Data] <= vMaxVolumeTresMeses && fContratos[Flag Contatos] = 1)
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Não é bem isso, neste caso ele está acumulando para todas as linhas, a medida deveria observar a data do contexto e o cod cliente e puxar para cada cod cliente dentro da data de contexto trés meses para trás desta data. Então no exemplo que dei do resultado esperado. No cod cliente 19 ele deveria pegar a data 18/05 e puxar a soma de volume de 3 meses atrás desta data, na proxima linha pegar a data 17/04 e realizar a mesma conta

A medida é um pouco complexa de explicar escrevendo, peço perdão se está muito confuso

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...