Ir para conteúdo

Pergunta

  • Alunos
Postado

Bom dia a todos! Preciso de uma ajuda com uma medida DAX. Irei passar o contexto das minhas tabelas, o meu problema e qual foi minha tentativa de solução.

Contexto.:
Possuo nesse arquivo de dados fictício 3 bases:
fMetas:
Arquivo que possui as metas para cada cliente a partir do momento que ele iniciou o contrato.
Ou seja se o meu cliente possui valores de meta em mai/2024 e anteriormente esta com valores zerados significa que ele começou o contrato em mai/2024.
fVolume:
Arquivo que possui o volume comprado por cada cliente
dCliente:
Arquivo que possui informações dos clientes.

Problema:
Preciso criar uma medida que faça o acumulado do volume a partir da data de contrato a cada trimestre e que esse calculo se reinicie a cada trimestre.

Exemplo:
Meu cliente tem contrato em mai/2024 o trimestre dele seria em jul/2024 ou seja minha medida precisa acumular até esse trimestre, a partir do mês de ago/2024 se reiniciaria o calculo do acumulado até o próximo trimestre que seria em out/2024.

Meu problema é que eu consegui criar a Medida que calcula isso, porém no meu relatório atual ela me retorna um erro de exceder recursos quando a coloco em uma tabela com os clientes. Gostaria de saber se existe outra forma de realizar esta medida de forma que não seja tão custosa para o Power BI calcular.


Abaixo está uma descrição da medida, uma imagem em Excel para tentar exemplificar melhor e a medida que criei para calcular isso que está me resultando no problema de recursos no meu relatório original.

Descrição:
Esta medida calcula o volume acumulado trimestralmente a partir da data de início do contrato.
O acumulado é reiniciado a cada novo trimestre, utilizando a data do início do contrato como referência inicial.
Nos meses dentro de um trimestre, o volume é somado até o fechamento desse trimestre.
Quando um novo trimestre começa, o cálculo reinicia, e o acumulado passa a considerar apenas os volumes do novo período trimestral.

Imagem para ilustrar o que a medida deve fazer (Supondo que neste caso mai/2024 é o inicio do contrato):
image.png.ea6667fced2eb86acb2a9e82da566877.png

Medida:

Volume Trimestral Reiniciado =
VAR vDataContexto = CALCULATE(MAX(dCalendario[Data]))
-- vDataContexto: Representa a data atual no contexto do relatório.
-- Exemplo: Se o mês atual é Ago/2024, então vDataContexto será 31/08/2024.
 
VAR vDataInicioContrato =
    CALCULATE(
        MIN(fMetas[Inicio do Mês]),
        FILTER(
            ALL(fMetas),
            fMetas[Meta] > 0
        )
    )
-- vDataInicioContrato: Data de início do contrato, usada como referência inicial para o cálculo.
-- Exemplo: Se o contrato começou em Mai/2024, então vDataInicioContrato será 01/05/2024.
 
VAR vDateDiff = DATEDIFF(vDataInicioContrato, vDataContexto, MONTH)
-- vDateDiff: Diferença em meses entre a data de início do contrato e a data atual.
-- Exemplo: Se vDataInicioContrato é Mai/2024 e vDataContexto é Ago/2024, vDateDiff será 3 meses.
 
VAR vMesesAteProximoTrimestre = 3 - MOD(vDateDiff, 3)
-- vMesesAteProximoTrimestre: Calcula quantos meses faltam para o próximo trimestre.
-- Exemplo: Se vDateDiff é 3, vMesesAteProximoTrimestre será 0 (estamos no início de um novo trimestre).
-- Exemplo 2: Se vDateDiff é 5, vMesesAteProximoTrimestre será 1 (faltando 1 mês para o próximo trimestre).
 
VAR vDataInicioAcumulado =
    IF(
        vDateDiff < 3,
        vDataInicioContrato, -- Mantém a data de início até completar o primeiro trimestre
        EDATE(vDataInicioContrato, INT(vDateDiff / 3) * 3) -- Atualiza a data de início a cada trimestre
    )
-- vDataInicioAcumulado: Define o início do período de cálculo do volume acumulado.
-- Exemplo 1: Se estamos em Jun/2024 (dentro dos primeiros 3 meses), vDataInicioAcumulado será 01/05/2024 (data de início do contrato).
-- Exemplo 2: Se estamos em Ago/2024, o primeiro trimestre foi fechado em Jul/2024, então vDataInicioAcumulado será 01/07/2024 (início do trimestre atual).
 
VAR vDataFimAcumulado = vDataContexto
-- vDataFimAcumulado: Define o fim do período de cálculo do volume acumulado como o mês atual.
-- Exemplo: Se estamos em Ago/2024, vDataFimAcumulado será 31/08/2024.
 
VAR vAcumulado =
    CALCULATE(
        [Volume],
        FILTER(
            ALL(dCalendario),
            dCalendario[Data] >= vDataInicioAcumulado
            && dCalendario[Data] <= vDataFimAcumulado
            && dCalendario[Data] >= vDataInicioContrato
        )
    )
-- vAcumulado: Calcula o volume acumulado dentro do período definido entre vDataInicioAcumulado e vDataFimAcumulado.
-- Exemplo: Se vDataInicioAcumulado é 01/05/2024 e vDataFimAcumulado é 31/08/2024, o acumulado será o volume total de Mai a Ago/2024.
 
VAR vResultado =
    IF(
        vDataContexto >= vDataInicioContrato,
        vAcumulado,
        0
    )
-- Verifica se o mês atual é após o início do contrato. Se for, retorna o volume acumulado, caso contrário, retorna 0.
 
RETURN
    vResultado
 
/* Descrição: Esta medida calcula o volume acumulado trimestralmente a partir da data de início do contrato.
O acumulado é reiniciado a cada novo trimestre, utilizando a data do início do contrato como referência inicial.
Nos meses dentro de um trimestre, o volume é somado até o fechamento desse trimestre.
Quando um novo trimestre começa, o cálculo reinicia, e o acumulado passa a considerar apenas os volumes do novo período trimestral.
*/

powerbi_forum_volumetrimestral.pbix base_forum_volumetrimestral.xlsx

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Faça login para comentar

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



Entrar Agora
×
×
  • Criar Novo...