Ir para conteúdo
  • 0

Performance Medida


Ir para solução Solucionado por Erick Oliveira ,

Pergunta

  • Alunos
Postado

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

4 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
Postado

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

  • Like 1
  • 0
  • Alunos
Postado
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.

Faça login para comentar

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



Entrar Agora
×
×
  • Criar Novo...