Ir para conteúdo
  • 0

Transformação no Power Query


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

Pergunta

8 respostass a esta questão

Posts Recomendados

  • 1
  • Alunos
  • Solução

Boa Noite, @suelenbn!

 

Trabalhar com PDFs é sempre complicado, em especial, se não houver uma certa padronização.

O PDF que você apresenta tem duas páginas, outros podem ter 3 ou mais e algumas posições podem mudar.

Veja que, por exemplo, o local da indicação da página 1 é diferente da página 2 depois que importa o PDF.

Assim, a solução abaixo pode não funcionar para outros PDFs e precisará de adaptações:

 

let
    Fonte = Pdf.Tables(File.Contents("D:\Downloads\51263930_RedeSamp (1).pdf"), [Implementation="1.2"]),
    #"Linhas Filtradas" = Table.SelectRows(Fonte, each ([Kind] = "Page")),
    #"Outras Colunas Removidas" = Table.SelectColumns(#"Linhas Filtradas",{"Data"}),
    #"Data Expandido" = Table.ExpandTableColumn(#"Outras Colunas Removidas", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5"}, {"Data.Column1", "Data.Column2", "Data.Column3", "Data.Column4", "Data.Column5"}),
    #"Outras Colunas Removidas1" = Table.SelectColumns(#"Data Expandido",{"Data.Column1", "Data.Column4"}),
    #"Linhas Principais Removidas" = Table.Skip(#"Outras Colunas Removidas1",10),
    #"Linhas Filtradas1" = Table.SelectRows(#"Linhas Principais Removidas", each ([Data.Column1] <> null and [Data.Column1] <> "[image]")),
    Indice = Table.AddIndexColumn(#"Linhas Filtradas1", "Índice", 0, 1, Int64.Type),
    #"Personalização Adicionada" = Table.AddColumn(Indice, "Personalizar", each if Text.Start([Data.Column1], 4) = "Tel:" then 3 
else if Text.Contains([Data.Column1], "CRM") or Text.Contains([Data.Column1], "CNPJ") then 1
else if [Índice] = 1 then 2
else if Text.Start(Indice[Data.Column1]{[Índice]-1}, 4) = "Tel:" then 4
else if Text.Start(Indice[Data.Column1]{[Índice]-2}, 4) = "Tel:" then 5
else 2),
    #"Personalização Adicionada1" = Table.AddColumn(#"Personalização Adicionada", "Personalizar.1", each if [Data.Column4] <> null then [Data.Column1] & [Data.Column4] else [Data.Column1]),
    #"Outras Colunas Removidas2" = Table.SelectColumns(#"Personalização Adicionada1",{"Personalizar", "Personalizar.1"}),
    #"Personalização Adicionada2" = Table.AddColumn(#"Outras Colunas Removidas2", "Médico / Clínica", each if [Personalizar] = 1 then [Personalizar.1] else null),
    #"-Temp1-" = Table.FillDown(#"Personalização Adicionada2",{"Médico / Clínica"}),
    #"Linhas Filtradas2" = Table.SelectRows(#"-Temp1-", each ([Personalizar] = 2)),
    #"Linhas Agrupadas" = Table.Group(#"Linhas Filtradas2", {"Médico / Clínica", "Personalizar"}, {{"Contagem", each _, type table [Personalizar=number, Personalizar.1=text, #"Médico / Clínica"=text]}}),
    #"Personalização Adicionada6" = Table.AddColumn(#"Linhas Agrupadas", "Especialidade", each [Contagem][Personalizar.1]),
    #"Valores Extraídos" = Table.TransformColumns(#"Personalização Adicionada6", {"Especialidade", each Text.Combine(List.Transform(_, Text.From), " / "), type text}),
    #"-Especialidade-" = Table.RemoveColumns(#"Valores Extraídos",{"Contagem"}),
    Personalizar1 = #"-Temp1-",
    #"Índice Adicionado" = Table.AddIndexColumn(Personalizar1, "Índice", 1, 1, Int64.Type),
    #"Consultas Mescladas" = Table.NestedJoin(#"Índice Adicionado", {"Personalizar", "Médico / Clínica"}, #"-Especialidade-", {"Personalizar", "Médico / Clínica"}, "Personalizar1", JoinKind.LeftOuter),
    #"Personalizar1 Expandido" = Table.ExpandTableColumn(#"Consultas Mescladas", "Personalizar1", {"Especialidade"}, {"Especialidade"}),
    #"Dividir Coluna por Delimitador" = Table.SplitColumn(#"Personalizar1 Expandido", "Médico / Clínica", Splitter.SplitTextByEachDelimiter({" - "}, QuoteStyle.Csv, true), {"Nome", "Tipo"}),
    #"Personalização Adicionada3" = Table.AddColumn(#"Dividir Coluna por Delimitador", "Telefone", each if [Personalizar] = 3 then [Personalizar.1] else null),
    #"Valor Substituído" = Table.ReplaceValue(#"Personalização Adicionada3","Tel: ","",Replacer.ReplaceText,{"Telefone"}),
    #"Personalização Adicionada4" = Table.AddColumn(#"Valor Substituído", "End1", each if [Personalizar] = 4 then [Personalizar.1] else null),
    #"Personalização Adicionada5" = Table.AddColumn(#"Personalização Adicionada4", "End2", each if [Personalizar] = 5 then [Personalizar.1] else null),
    #"Linhas Classificadas" = Table.Sort(#"Personalização Adicionada5",{{"Índice", Order.Ascending}}),
    #"Outras Colunas Removidas3" = Table.SelectColumns(#"Linhas Classificadas",{"Nome", "Tipo", "Especialidade", "Telefone", "End1", "End2"}),
    #"Preenchido Abaixo" = Table.FillDown(#"Outras Colunas Removidas3",{"Especialidade", "Telefone", "End1"}),
    #"Linhas Filtradas3" = Table.SelectRows(#"Preenchido Abaixo", each ([End2] <> null)),
    #"Colunas Mescladas" = Table.CombineColumns(#"Linhas Filtradas3",{"End1", "End2"},Combiner.CombineTextByDelimiter(", ", QuoteStyle.None),"Endereço")
in
    #"Colunas Mescladas"

 

Como resultado, obtive o seguinte:

 

image.thumb.png.faf1c6f20cadf47cf23e81d98d0e4914.png

 

Este código pode ser analisado com o objetivo de ser mais otimizado, mas num primeiro momento, foi a solução que me veio a cabeça.

Algumas observações:

Veja que o primeiro médico tem dois endereços de atendimento.

Observe que na segunda linha do original as vezes se fala do Nome da Clínica e por vezes da Especialidade.

Não tratei isto, apenas separei por /.

 

Bom, espero que te auxilie na resolução do seu problema.

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa Noite, Suelen!

 

Inicialmente, peço desculpas, mas não entendi exatamente qual o seu objetivo.

De toda forma, o seu primeiro passo é importar o PDF para o Power BI.

Com o Power BI aberto, selecione a Guia Página Inicial, Obter Dados, Mais...

Na janela que se abre, escolha PDF

image.thumb.png.b85bbefd4ac8a6ec59732cdb3679e32a.png

 

Escolha Conectar e escolha o PDF de seu interesse.

Uma nova janela de Navegador vai se abrir, nela, clique nas opções do lado direito para identificar aquela que corresponde as informações que precisa.

image.png.e885c272e1f4ae93bdb3fb4d6b9d5192.png

 

No meu, as informações estavam na Page001 e Page002.

Selecione as páginas e selecionar Transformar Dados.

O Power BI gera duas consultas, existem métodos para se trabalhar com uma única, mas o que você precisa decidir, e é algo que não ficou claro, é como você quer a disposição final dos seus dados.

A planilha em Excel não apresenta dados estruturados, logo, não aptos a serem utilizados no Power BI.

 

Acredito que neste ponto, você precisa definir a forma final que quer emprestar aos seus dados.

Definido isto, daí você vai poder escolher/definir as técnicas adequadas para te conduzir ao resultado esperado.

 

Sei que não deu para auxiliar muito, mas estes são os primeiros passos.

 

 

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Bom dia!!!!

Não senhor.

A importação dos dados eu fiz.

Na verdade, o que não consegui é estruturar os dados no PBI, pois estão muito mal estruturados.

No curso acho q tem algumas aulas mostrando como faz... vou estudar mais pra tentar ajustar a base no Power query.

Link para o comentário
Compartilhar em outros sites

  • 0
  • Alunos

Boa noite @Rafa Lemos!

Obrigada pelo vídeo.

Deu uma clareada na mente, mas ainda está confuso. Não entendo nada de linguagem M rsrs

E os dados estão literalmente desestruturados. E o pior de tudo é que não seguem uma lógica específica de quantidade de linhas.

A única lógica é que começa com o nome de um médico ou prestador, e termina com a cidade/Cep

Vou ter que dar uma estudada melhor nisso.

Mas obrigada pela ajuda

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...