Ir para conteúdo
  • 1

ETL lento referenciando outras tabelas


victorcastro_a
Ir para solução Solucionado por Vitor Peralva ,

Pergunta

  • Alunos

No meu relatório eu tenho as tabelas fFolhaPagamento, dCalendario e dFuncionario.

Na tabela dCalendario eu utilizo as seguintes funções:

    DataMin = List.Min(fEconomico[Data Emissão] & fFinanceiro[Disponibilidade] & fFolhaPagamento[Periodo] & fExtratoItau[Data]),
    DataMax = List.Max(fEconomico[Data Emissão] & fFinanceiro[Disponibilidade] & fFolhaPagamento[Periodo] & fExtratoItau[Data]),

Na tabela dFuncionario

    Fonte = Table.SelectColumns(fFolhaPagamento, {"Matrícula", "Nome"}),
    #"Duplicatas Removidas" = Table.Distinct(Fonte)

Dessa maneira, a consulta é executada 3 vezes, o que deixa o carregamento lento. Existe uma melhor forma para fazer isso?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
  • Alunos
  • Solução
Em 16/03/2022 em 15:04, victorcastro_a disse:

Obrigado pela resposta.

Sobre a sugestão para a dFuncionario, porque essa maneira aí teria ganho de performance?

 

Sobre a dCalendario, o usuário pode querer atualizar relatórios isolados, então tenho que juntar essas 4 datas para garantir. O relatório que possui a data de emissão é o econômico. Pode ser que ele atualize somente o financeiro, contendo uma data anterior.

 

Sobre o nome dos arquivos eu não entendi sua sugestão. Poderia me explicar melhor?

 

Segui sua sugestão de criar um List.Buffer e acredito que melhorou um pouco no carregamento da dCalendario, pois ela não precisou carregar duas vezes a mesma lista. Obrigado!

 

Vamos Lá!

 

dFuncionario.

 

O ganho estaria no fato de você aplicar primeiro um filtro a uma coluna e trazer somente os resultados das colunas que precisa.
Não é um ganho grande, e, em bases pequenas, pode ser praticamente imperceptível.

 

dCalendario

 

Você não pode ficar sujeito a todas as possibilidades de formas de utilização do usuário.

Tem que pensar naquilo que é padrão.

E veja, se estas datas máximas correspondem ao ano calendário, nem precisaria delas para data máxima.

Bastaria levar a data atual para o final do ano atual.

Lembre-se que na dCalendario você deve trabalhar com o ano completo.

Gosto, inclusive, muto mais desta solução.

 

Nome dos Arquivos.

 

Se você tem arquivos com o nome: "Contabilizacao_-_Funcionario 10-2021", percebe que você tem uma indicação de mês nele?

Você poderia extrai da listagem de arquivos este Ano/Mês, converter em data e você teria os períodos para usar na dCalendario.

Com isto, se tiver 24 arquivos, analisaria 24 linhas.

Numa tabela fato, ela teria que acessar a listagem, conferir data por data e determinar o menor e o maior, embora isto ocorra de forma super rápida, ainda assim, o número de linhas é muito superior e o mesmo tende a ocorrer com a utilização de recursos.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Desempenho é sempre algo complexo, mas vamos lá:

 

No que tange a dFuncionario, provavelmente você vai conseguir um melhor desempenho fazendo o seguinte:

Cria uma consulta nula e na Barra de Fórmula coloca:

= Table.Distinct(fFolhaPagamento[[Matrícula], [Nome]], "Matrícula")

Sobre a dCalendario, veja que você quer unir informações de 4 colunas.

A primeira reflexão é se precisa realmente destas 4 colunas.

Exemplo.: Existe uma Data de Emissão ela não precederia sempre às outras?

Se sim, bastaria pegar a data mínima dela.

Outro ponto é que se os nomes dos arquivos possuem referência aos períodos, você poderia utilizar eles como base para extração, trabalhando com muito menos linhas e tornando o processo muito mais rápido.

Se nada disso se aplicar ao seu caso, crie uma etapa antecedente, com a união das listas e coloque um List.Buffer e faço o List.Min e o List.Max desta etapa, evitando a montagem e a leitura por 2 (duas) vezes desta junção de datas.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Obrigado pela resposta.

Sobre a sugestão para a dFuncionario, porque essa maneira aí teria ganho de performance?

 

Sobre a dCalendario, o usuário pode querer atualizar relatórios isolados, então tenho que juntar essas 4 datas para garantir. O relatório que possui a data de emissão é o econômico. Pode ser que ele atualize somente o financeiro, contendo uma data anterior.

 

Sobre o nome dos arquivos eu não entendi sua sugestão. Poderia me explicar melhor?

 

Segui sua sugestão de criar um List.Buffer e acredito que melhorou um pouco no carregamento da dCalendario, pois ela não precisou carregar duas vezes a mesma lista. Obrigado!

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