Aprenda a remover linhas duplicadas no Power BI
Remover duplicadas é uma demanda que pode surgir em inúmeros cenários, que vão desde vários arquivos de um mesmo mês com dados redundantes até atualizações de um mesmo contrato que precisam ser consideradas.
Além disso, em algumas situações não basta você simplesmente remover duplicadas de qualquer maneira. Existem critérios a serem obedecidos para remover os dados duplicados.
No setor de Pricing, por exemplo, inúmeras listas de preços são exportadas de um sistema ERP. E nesse cenário, aparecer preços duplicados é quase inevitável. O grande desafio é definir quais dos dados presentes nas listas são válidos.
A existência de dados duplicados pode estar relacionada aos preços cadastrados que sofrem atualizações ao longo do tempo. Isso deve ser identificado durante o entendimento do escopo e da análise das fontes de dados disponíveis. Sendo assim, é necessário definir quais dos preços são válidos.
Uma estratégia bastante utilizada nessas situações é remover as duplicadas considerando o critério de manter o preço mais recente como válido.
Criar uma medida que utiliza a função da linguagem DAX chamada LASTDATE () é uma das formas de contornar esse problema direto no Power BI Desktop. Quando você utiliza essa função, ela retorna a última data do contexto atual para uma coluna de datas especificada.
No entanto, em algumas situações como as de listas de preços, as bases de dados podem possuir milhões ou até bilhões de linhas. Nesses casos, simplesmente importar todas essas linhas para o Power BI e depois criar uma medida não é a melhor estratégia.
Resolvendo o problema no Power Quey
Dessa forma, a estratégia mais adequada pode ser resolver esse problema no Power Query, mantendo somente os preços válidos, considerando o critério do registro mais recente.
Cenário de exemplo
Na base de dados abaixo é possível observar que cada produto possui mais de um preço cadastrado em datas diferentes que vão de janeiro até março de 2022. Contudo, só o preço mais recente deve ser considerado na hora de construir o relatório.
Carregar a base de dados para o Power Query: passo 1
A primeira coisa que você deve fazer é carregar a base de dados para o Power Query e iniciar o processo de ETL. A estratégia que você deve utilizar é remover os produtos duplicados, não esquecendo de usar a condição de manter sempre o registro mais recente.
A ideia da função “Remover Duplicada” no Power Query é manter a primeira linha que ocorre um determinado valor e remover as linhas subsequentes em que esse mesmo valor aparece.
Classificar a coluna “Válido em” em ordem decrescente: passo 2
Sendo assim, para fazer com que a primeira ocorrência de um valor seja sempre o mais recente você deve ordenar pela coluna de data as linhas da base de dados em ordem decrescente, ou seja, a datas mais recentes aparecem primeiro e as mais antigas em seguida.
Remover os ID’s duplicados: passo 3
Agora observe que, com as linhas classificadas pela coluna de data “Válido em”, diferente da base original, as primeiras ocorrências de cada produto são sempre as mais recentes. Dessa forma, ao aplicar a função “Remover Duplicadas” na coluna “ID” obtemos o seguinte resultado:
No exemplo acima, a primeira ocorrência que aparece do produto Mesa data de 01/01/2022 e é essa ocorrência que mantemos quando removemos as duplicadas.
Isso acontece porque especificamente a função “Linhas Classificadas” do Power Query aplica-se ao carregar a Consulta para o relatório, visto que a ferramenta entende que essa função altera apenas a visualização dos dados.
Ou seja, a etapa “Linhas Classificadas” aplica-se internamente por último no processo de tratamento da base de dados, a fim de melhorar a performance.
Removendo duplicadas com Power Query da maneira correta: passo 4
Para contornar isso, você deve aplicar a função Table.Buffer() logo após a etapa de “Linhas Classificadas” e depois remover as duplicadas.
A função Table.Buffer() armazena uma tabela em buffer na memória. Dessa forma, quando a usamos após a etapa de “Linhas Classificadas” o Power Query considera a classificação naquele momento e não somente no final.
Inserindo a função Table.Buffer() como Etapa Personalizada: passo 5
Para inserir a função Table.Buffer() basta você criar uma etapa personalizada tendo como único parâmetro o nome da etapa anterior, ou seja, a tabela classificada.
Finalmente, quando você remover as duplicadas, conseguirá o resultado desejado, como se vê abaixo:
Dica: aplique a etapa “Linhas Classificadas” por último
Veja que mesmo classificando as linhas antes de remover as duplicadas, o que o Power Query trouxe para a gente não foram as ocorrências mais recentes. Na verdade, ele trouxe a primeira ocorrência daquele valor na base original. Como se observa abaixo:
Conclusão
De modo geral, lidar com bases de dados com registros duplicados é uma tarefa que pode causar muita dor de cabeça durante o processo de ETL e cubo de dados.
Além disso, em algumas situações devemos obedecer a critérios preexistentes para remover os dados duplicados.
Um critério recorrente é manter dados mais recentes quando removemos as duplicadas. E para isso, vimos que simplesmente ordenar os dados do mais recente até o mais antigo e depois remover as duplicadas pode não funcionar devido a dinâmica do Power Query.
Como resultado, apresentamos uma estratégia utilizando a função Tuble.Buffer() para solucionar esse problema.
Então, se você quer encontrar mais soluções para possíveis problemas em análises de dados, acompanhe nossa produção de conteúdo no Youtube e também no Instagram.