Ir para conteúdo
  • 0

Agrupar tabela FATO para otimizar cálculo lento


champanjonata

Pergunta

  • Membros

Bom dia pessoal, tudo bem?

Eu tenho uma fato com aproximadamente 3M de registros e pra tudo que usei até agora ela estava ok, porém preciso de um cálculo que envolve contagem distinta e está impossível de usar, então eu 'dupliquei' ela e agrupei os dados e ficou top com 7 MIL linhas apenas e essa contagem distinta ficou bala... ela está se relacionando com as minhas dimensões normalmente, a dúvida é: é uma boa continuar dessa forma ou melhor tentar otimizar a 'fato principal (com 3MI de registros)?

Pergunto pois na 'fato principal' eu tenho valores monetários e utilizo para vários fins e essa outra 'fato agrupada' é somente para um cálculo em específico.... tenho receio de precisar cruzar alguma informação e por ela estar agrupada e com menos dados (pois agrupei apenas com as colunas que vou utilizar) dar problema no futuro....

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
  • Membros
Postado (editado)

Boa tarde @champanjonata

Pode agrupar utilizando a função "SUMMARIZE" (criando a tabela virtual agrupada) em seguida realizar uma contagem distinta dessa tabela criada utilizando a função "DISTINCTCOUNT" ou mesmo uma "COUNTROWS" dessa tabela. Não utilizando função "FILTER" a "SUMMARIZE" é bem performática. 


Sucesso! 🚀

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

  • 0
  • Membros
4 minutos atrás, Tiago Craici disse:

Boa tarde @champanjonata

Pode agrupar utilizando a função "SUMMARIZE" (criando a tabela virtual agrupada) em seguida realizar uma contagem distinta dessa tabela criada utilizando a função "DISTINCTCOUNT" ou mesmo uma "COUNTROWS" dessa tabela. Não utilizando função "FILTER" a "SUMMARIZE" é bem performática. 


Sucesso! 🚀

Boa tarde Tiago.

Então, o problema é que eu preciso usar o FILTER e aí a summarize fica lenta demais.

Exemplo:
Tenho as datas:
31/03/2023
28/04/2023 (pois considero apenas o dia que tenho movimento)
01/05/2023
...
17/05/2023

Preciso contar determinada coluna distinto de modo que:

final mês 3: 10
final mês 4: 20
final mês 4 (no caso 17/05/2023): 30

Até aí tudo bem, fiz a fórmula:

LastDay =
 
VAR CurrDate = MAX(f_carteira[DATA_REFERENCIA])
 
RETURN
 
CALCULATE(
    MAX(f_dados[DATA_REFERENCIA]),
    FILTER(
        ALLSELECTED(f_carteira),
        f_carteira[DATA_REFERENCIA] >  EOMONTH(CurrDate, -1) &&
        f_carteira[DATA_REFERENCIA] <= EOMONTH(CurrDate, 0)
    )
)


E fica certo:
image.png.aaa1d370d7b9373e4580f34a3ede1f8e.png

Mas aí fica lento demais... mesmo na agrupada tá meio lento mas usual.

Um outro problema que ainda não entendi também é que:
Não sei porque está totalizando 136:
image.png.6e945fb7c0e76c24470d4c3786adf723.png

Enfim, tô tentando pensar em algo aqui. Mas obrigado pela dica.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros

Referente ao total com 136... Você esta utilizando campo de data para filtrar o valor., nos meses da certo por fica dentro do contexto (data), já o total é avaliado outro contexto ficando impossível validar essa parte da medida (  f_carteira[DATA_REFERENCIA] >  EOMONTH(CurrDate, -1) && f_carteira[DATA_REFERENCIA] <= EOMONTH(CurrDate, 0) ).


Os totais podem ser corrigidos utilizando a função SUMX. 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
1 minuto atrás, Tiago Craici disse:

Referente ao total com 136... Você esta utilizando campo de data para filtrar o valor., nos meses da certo por fica dentro do contexto (data), já o total é avaliado outro contexto ficando impossível validar essa parte da medida (  f_carteira[DATA_REFERENCIA] >  EOMONTH(CurrDate, -1) && f_carteira[DATA_REFERENCIA] <= EOMONTH(CurrDate, 0) ).


Os totais podem ser corrigidos utilizando a função SUMX. 

Eu já estou usando SUMX:

Qtde Grupos =
 
var vCorte = [LastDay]
 
return
 
CALCULATE(
    DISTINCTCOUNT(f_carteira[ID_GRUPO]),
    f_carteira[AUX_CONTA_GRUPO] = 0,
    f_carteira[DATA_REFERENCIA] = vCorte
)


image.png.a4e6ba06a75337de1257d230cf68fa22.png

Por isso não entendi esse total errado...

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
8 minutos atrás, champanjonata disse:

Eu já estou usando SUMX:

Qtde Grupos =
 
var vCorte = [LastDay]
 
return
 
CALCULATE(
    DISTINCTCOUNT(f_carteira[ID_GRUPO]),
    f_carteira[AUX_CONTA_GRUPO] = 0,
    f_carteira[DATA_REFERENCIA] = vCorte
)


image.png.a4e6ba06a75337de1257d230cf68fa22.png

Por isso não entendi esse total errado...

Uma possível resposta para o totalizador é:
meses indivisuais
jan ok
fev ok
mar ok

porém o total deveria ser 3 e não 4, ou seja, como em jan já teve a ocorrência de '10' não poderia contá-lo em mar...
image.png.ad9ee018b0730fa89d6368a91865f29f.png

Link para o comentário
Compartilhar em outros sites

  • 0
  • Membros
30 minutos atrás, champanjonata disse:

Eu já estou usando SUMX:

Qtde Grupos =
 
var vCorte = [LastDay]
 
return
 
CALCULATE(
    DISTINCTCOUNT(f_carteira[ID_GRUPO]),
    f_carteira[AUX_CONTA_GRUPO] = 0,
    f_carteira[DATA_REFERENCIA] = vCorte
)


image.png.a4e6ba06a75337de1257d230cf68fa22.png

Por isso não entendi esse total errado...

Utilize a SUMX criando uma nova medida. 

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