Ir para conteúdo
  • 0

Performance Medida


Felipe Capitani
Ir para solução Solucionado por Erick Oliveira ,

Pergunta

  • Membros

Pessoal, conforme medida abaixo, estou tentando buscar uma forma de otimizar o calculo porém ele está muito pesado e quando eu publico no power bi services, alguns gráficos estão dando erro de "memória insuficiente", eu preciso tirar uma média da medida "Sequencia Ajustada" (criei uma medida sequencia ajustada_v2 fazendo a média no  return porém ai a medida não respeita corretamente os filtros externos de Base Operacional por exemplo).

Obs: a tabela fato tem cerca de 3 milhoes de linhas e poucas colunas, mas o arquivo .pbix tem apenas 27 Mb.

@Erick Oliveira, se possível poderia me auxiliar nesse caso como está mais familiar com a medida que desenvolveu?

 

 

Sequencia Ajustada = 
VAR vSemanaContexto =
    MAX ( dCalendario[AnoSemanaInt] )
VAR vPrimeiroValorZero = // Procurar o valor sem vendas mais próximo
    CALCULATE (
        MAXX (
            FILTER (
                VALUES(dCalendario[AnoSemanaInt]),
                [Possui Vendas Semana?] = 0
            ),
            dCalendario[AnoSemanaInt]
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] <= vSemanaContexto
        )
    )
VAR vResultadoPadrao = // Resultado padrão para os valores
    CALCULATE (
        COUNTROWS (
            VALUES(dCalendario[AnoSemanaInt])
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] < vSemanaContexto
                && dCalendario[AnoSemanaInt] > vPrimeiroValorZero
        )
    )
VAR vUmAnterior = // Procurar o valor com vendas mais próximo
    CALCULATE (
        MAXX (
            FILTER (
                VALUES(dCalendario[AnoSemanaInt]),
                [Possui Vendas Semana?] = 1
            ),
            dCalendario[AnoSemanaInt]
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] <= vSemanaContexto
        )
    )
VAR vZeroAnterior = // Procurar o valor sem vendas anterior ao com vendas mais próximo
    CALCULATE (
        MAXX (
            FILTER (
                VALUES(dCalendario[AnoSemanaInt]),
                [Possui Vendas Semana?] = 0
            ),
            dCalendario[AnoSemanaInt]
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] <= vUmAnterior
        )
    )
VAR vResultadoSemVenda = // Resultado para as semanas sem vendas
    CALCULATE (
        COUNTROWS (
            VALUES(dCalendario[AnoSemanaInt])
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] < vUmAnterior
                && dCalendario[AnoSemanaInt] >= vZeroAnterior
        )
    )
VAR vUmAnteriorAnterior = // Procurar o valor com vendas anterior ao valor com vendas mais próximo
    CALCULATE (
        MAXX (
            FILTER (
                VALUES(dCalendario[AnoSemanaInt]),
                [Possui Vendas Semana?] = 1
            ),
            dCalendario[AnoSemanaInt]
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] < vSemanaContexto
        )
    )
VAR vZeroAnteriorAnterior = // Procurar o valor sem vendas anterior ao valor anterior anterior com vendas
    CALCULATE (
        MAXX (
            FILTER (
                VALUES(dCalendario[AnoSemanaInt]),
                [Possui Vendas Semana?] = 0
            ),
            dCalendario[AnoSemanaInt]
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] <= vUmAnteriorAnterior
        )
    )
VAR vPrimeiroValorSequencia = // Resultado para a primeira semana com vendas após uma sequencia sem vendas
    CALCULATE (
        COUNTROWS (
            VALUES(dCalendario[AnoSemanaInt])
        ),
        FILTER (
            ALL ( dCalendario ),
            dCalendario[AnoSemanaInt] < vUmAnteriorAnterior
                && dCalendario[AnoSemanaInt] >= vZeroAnteriorAnterior
        )
    )
RETURN
    SWITCH (
        TRUE (),
        [Possui Vendas Semana?] = 0, vResultadoSemVenda + 0,
        vResultadoPadrao = 0, vPrimeiroValorSequencia + 0,
        vResultadoPadrao
    )

 

Sequencia de semanas vendidas (4).pbix

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
  • Membros

@Maycon Silva obrigado . Confesso que fiquei confuso com seu retorno pois até onde eu tinha conhecimento, armazenar as funções em VARs melhora consideravelmente a performance da medida, já que ela executa uma única vez consumindo menos memória e CPU.

De qualquer forma, eu segui sua sugestão desmembrando cada variável em uma nova medida, porém a minha medida final perdeu o contexto dos filtros e os valores aparecem zerados.

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

  • 0
  • Membros
Em 15/03/2023 em 15:01, Erick Oliveira disse:

Boa tarde Felipe;

Refatorei a medida reduzindo a quantidade de funções iteradoras, isso deu uma melhorada considerável na performance.

Verifique se o erro de memoria não aparece dessa forma. 

Sequencia de semanas vendidas.pbix 80.63 kB · 2 downloads

@Erick Oliveira muito obrigado, resolveu parcialmente...ela ficou mais rapida e permitiu que outros visuais que utilizavam essa mesma medida, aparecessem. Porém um dos visuais permaneceu com o problema de memória insuficiente. A unica forma que consegui solucionar em definitivo foi criando uma tabela calculada especifica para esse gráfico.

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