Ir para conteúdo
  • 0

ABC: Erro em tabelas com muitas linhas


maikelgoncalves
Ir para solução Solucionado por Joao Raulino ,

Pergunta

  • Alunos

Olá, 

Todas as demos sempre vejo com poucas linhas. Na minha base tenho mais dados e estou enfrentando erros já quando calculo o valor acumulado. Até achei que agora com a função de cálculo nos visuais eu teria sucesso. Mas mesmo problema. Imagem no final.

A fato de vendas tem mais de 300 mil linhas. Se eu tento ver o valor acumulado por venda, sem colocar nenhum dimensão já da erro. 

Inicialmente, achei que o problema era só com a dimensão de clientes, que tem mais de 30 mil linhas ou produtos que tem algo na mesma proporção.

Alguém tem uma luz? Consegui fazer todo tipo de indicador, mas este eu não consigo fazer por causa do erro (acontece depois de ficar pensando um tempo).

Tentei algumas estratégias: Usando RANKX e TOPN; FILTER com total de vendas > que o total de vendas do contexto; Summarize (que encontrei em um artigo). Sempre o mesmo erro: O visual excedeu os recursos disponíveis.

Imagino que todas as estratégias tem o mesmo problema, para cada contexto é usada uma soma usando a tabela toda (por causa do ALL) e ao acumular essas tabelas todas (mais de 300 mil), estoura o recurso. Seria ótimo se pudesse usar OFFSET :-(

Desde já agradeço a atenção.

 

Abaixo a imagem do erro (do visual, que usa RUNNINGSUM):

image.png.8d5a0d84b887b74b9ed6d78bb3a355de.png

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Boa @maikelgoncalves!

O que exatamente você quer fazer com a medida [RankVenda Acumulado]?

Se for só mesmo o cumulativo dos valores da [TotalVendas] ordenados pelo ranking, você pode usar a formula abaixo:

Citar

RankVenda Acumulado = 
VAR _RankAtual = [RankVenda]
RETURN
    SUMX(
        FILTER(
            ALLSELECTED(dProdutosServicos),
            [RankVenda] <= _RankAtual
        ),
        [TotalVendas]
    )

Da maneira como você tinha feito com a RANKX() dentro da TOPN() estava gerando um loop recursivo na tua medida.

Se essa resposta te ajudou, não esquece de marcar como melhor solução 😉

Abs!

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Opa, obrigado por ter respondido.

Já me deixa feliz saber que você tem muito mais linhas. Vamos lá. Vou tentar organizar as informações e você vê se faz sentido. 

Vou falar da estratégia TOP - Ranking.

Claro que não descarto que seja algo no meu modelo.

Minha fVendas não tem nada demais, tem os Ids de produtos, clientes, as notas e valor de venda do produto. Seguindo orientações do Leo.

Medidas (vou tentar compactar elas em mesma linha para tentar ficar mais fácil de você ler.

TotalVendas = SUM(fVendas[ValorVenda])

 

RankVenda = RANKX(ALLSELECTED(dProdutosServicos), [TotalVendas],,DESC,Dense)

 

RankVenda Acumulado = 
CALCULATE(
    [TotalVendas],
    TOPN(
        [RankVenda],
        ALLSELECTED(dProdutosServicos),
        [TotalVendas],
        DESC
    )
)

 

Para validar os dados estou usando uma tabela. 

Quando eu arrasto o produto e as medidas TotalVendas e RankVenda para a tabela, mostra os dados calculados na hora. Se eu arrastar o RankVenda Acumulado, dá a mensagem.

E usando o cálculo no visual, dá a mensagem do print que anexei.

Se eu não arrastar a dimensão produto, só colocar o número da NF para ver acumulado, já dá o mesmo problema.

Desde já agradeço a atenção. Se tiver uma sugestão de estratégia diferente, ficaria grato.

 

Editado por maikelgoncalves
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Na verdade eu propus algumas estratégias que usei para tentar dar algum caminho para nossa conversa. Mas, você já matou de 1a rs.

Esta foi uma que peguei no YouTube, canal Fala Analíticos, mas também não entendi bem o que ele quis fazer. Porém, mesmo seguindo os caminhos que o Leo fez de exemplo, dava o mesmo erro com minha base.

A solução funcionou, leva alguns segundos (em torno de 15s) para calcular mas não gera erro pelo menos. No seu, com 40M de linhas, demora segundos para calcular também?

Agradeço muito pela ajuda, A minha solução era usando total, mas era um pouco diferente. Vou entender melhor sua estratégia para aprender mais. Mudei só para não usar mais Rank, usar a própria medida de valor. Penso que não precisa gerar Rank, menos cálculos. 

Ficou assim no final e também funcionou. O que acha?

 

TotalVenda Acumulado = 
    VAR _TotalVenda = [TotalVendas]

    RETURN
        SUMX(
            FILTER(
                ALLSELECTED(dProdutosServicos),
                [TotalVendas] <= _TotalVenda
            ),
            [TotalVendas]
        )


** Algo que acontece ainda de erro é se eu removo o produto da tabela e coloco o número da NF, continua dando erro.

Forte abraço e obrigado pela ajuda.

Editado por maikelgoncalves
Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Cenários que eu ainda tenho erro em uma base que estou fazendo testes:

- Colocando só o número da NF

- Se colocar o cliente no lugar de produto (claro que alterei a parte de ALLSELECTED). Para comparar, produtos tem 6193 linhas e clientes tem 92.812.

Vou tentar algumas coisas para ver se otimizo a dimensão clientes apenas para o ABC.

Abraços.

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