Consulta API OMIE no Power BI – Pesquisar Cidades

Código M Language para Editor Avançado do Power Query

Nas últimas semanas quem utiliza a API da OMIE no Power BI pode ter encontrado alguns problemas na atualização das consultas.

Se você começou a sofre com erros nas atualizações no Power BI Online (Serviços), aqui tem um caminho para resolver o problema nas conexões.

O código abaixo está com os dados da OMIE, portanto o retorno do JSON será de acordo com o app_key e app_secret informados.

let
    Request = (Pagina as number) => 
    let 
        body =
        "{
        ""call"":""PesquisarCidades"",
        ""app_key"":""38333295000"",
        ""app_secret"":""4cea520a0e2a2ecdc267b75d3424a0ed"",
        ""param"":[
            {
                ""pagina"":"&Text.From(Pagina)&",
                ""registros_por_pagina"":50
            }
            ]
        }" 
    ,
    Consulta = 
        Json.Document(
            Web.Contents(
                "https://app.omie.com.br",
                [
                    RelativePath="api/v1/geral/cidades/",
                    Headers=[#"Content-Type"="application/json"],
                    Content=Text.ToBinary(body)
                ]
            )
        ),
    ListaCidades = Consulta[lista_cidades],
    #"Converted to Table" = Table.FromList(ListaCidades, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Expanded {0}" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"cCod", "cNome", "cUF", "nCodIBGE", "nCodSIAFI"}, {"cCod", "cNome", "cUF", "nCodIBGE", "nCodSIAFI"})
    in
    #"Expanded {0}"
in
    Request

Vale lembrar que este código é referente ao vídeo onde mostrei como conectar na API da OMIE:

Seguindo a lógica do código anterior e deixando a consulta automática.

Neste caso, precisamos criar apenas uma tabela no Power BI para cada consulta na OMIE.
Não é necessário criar uma função e depois chamá-la na tabela com páginas.

let
    Request = (Pagina as number) => 
    let 
        body =
        "{
        ""call"":""PesquisarCidades"",
        ""app_key"":""38333295000"",
        ""app_secret"":""4cea520a0e2a2ecdc267b75d3424a0ed"",
        ""param"":[
            {
                ""pagina"":"&Text.From(Pagina)&",
                ""registros_por_pagina"":50
            }
            ]
        }" 
    ,
    Consulta = 
        Json.Document(
            Web.Contents(
                "https://app.omie.com.br",
                [
                    RelativePath="api/v1/geral/cidades/",
                    Headers=[#"Content-Type"="application/json"],
                    Content=Text.ToBinary(body)
                ]
            )
        )
    in
    Consulta,
    Tabela = Table.FromRecords({[Pagina=1]}),
    AlterarTipo = Table.TransformColumnTypes(Tabela,{{"Pagina", Int64.Type}}),
    InvocarFuncao01 = Table.AddColumn(AlterarTipo, "Tabela", each Request([Pagina])),
    Tabela1 = InvocarFuncao01{0}[Tabela],
    Paginas = Tabela1[total_de_paginas],
    ListaPaginas = Table.FromList( List.Generate( () => 1, each _ <= Paginas , each _ +1 ), Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    InvocarFuncao02 = Table.AddColumn(ListaPaginas, "Tabela", each Request([Column1])),
    #"Removed Columns" = Table.RemoveColumns(InvocarFuncao02,{"Column1"}),
    #"Expanded {0}" = Table.ExpandRecordColumn(#"Removed Columns", "Tabela", {"lista_cidades"}, {"lista_cidades"}),
    #"Expanded {0}1" = Table.ExpandListColumn(#"Expanded {0}", "lista_cidades"),
    #"Expanded {0}2" = Table.ExpandRecordColumn(#"Expanded {0}1", "lista_cidades", {"cCod", "cNome", "cUF", "nCodIBGE", "nCodSIAFI"}, {"cCod", "cNome", "cUF", "nCodIBGE", "nCodSIAFI"})
in
    #"Expanded {0}2"

Vídeo explicando como montei a paginação automática: