Consulta API OMIE no Power BI – Orçamento Caixa

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

Continuando a série de vídeos sobre as consultas de API na OMIE, hoje será sobre como estruturar a consulta Orçamento Caixa.

Esta consulta retorna os valores Orçados X Realizados.

Para estruturar esta consulta, é preciso criar os períodos (Mês e Ano) conforme documentação.

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 = (Ano as number, Mes as number) => 
    let 
        body =
        "{
        ""call"":""ListarOrcamentos"",
        ""app_key"":""38333295000"",
        ""app_secret"":""4cea520a0e2a2ecdc267b75d3424a0ed"",
        ""param"":[
            {
                ""nAno"":"&Text.From(Ano)&",
                ""nMes"":"&Text.From(Mes)&"
            }
            ]
        }" 
    ,
    Consulta = 
        Json.Document(
            Web.Contents(
                "https://app.omie.com.br",
                [
                    RelativePath="api/v1/financas/caixa/",
                    Headers=[#"Content-Type"="application/json"],
                    Content=Text.ToBinary(body)
                ]
            )
        )
    in
    Consulta,
    DateMin = #date(2018,01,01),
    AnoMax = Date.Year(DateTime.LocalNow()) + 1,
    DateMax = #date(AnoMax,12,31),
    Duration = Duration.Days( DateMax - DateMin ) + 1,
    ListDates = List.Dates(DateMin, Duration, #duration(1,0,0,0)),
    #"Converted to Table" = Table.FromList(ListDates, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    #"Changed Type2" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type datetime}}),
    #"Inserted Month" = Table.AddColumn(#"Changed Type2", "Mes", each Date.Month([Column1]), Int64.Type),
    #"Inserted Year" = Table.AddColumn(#"Inserted Month", "Ano", each Date.Year([Column1]), Int64.Type),
    #"Renamed Columns" = Table.RenameColumns(#"Inserted Year",{{"Column1", "Data"}}),
    #"Removed Duplicates" = Table.Distinct(#"Renamed Columns", {"Mes", "Ano"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Duplicates", each ([Ano] = 2021) and ([Mês] = 1 or [Mês] = 2 or [Mês] = 3 or [Mês] = 4)),
    #"Invoked Custom Function" = Table.AddColumn(#"Removed Duplicates", "Finan_Orcado_Realizado", each Request([Ano], [Mes])),
    #"Expanded {0}" = Table.ExpandRecordColumn(#"Invoked Custom Function", "Finan_Orcado_Realizado", {"ListaOrcamentos"}, {"ListaOrcamentos"}),
    #"Expanded {0}1" = Table.ExpandListColumn(#"Expanded {0}", "ListaOrcamentos"),
    #"Expanded {0}2" = Table.ExpandRecordColumn(#"Expanded {0}1", "ListaOrcamentos", {"cCodCateg", "cDesCateg", "nValorPrevisto", "nValorRealilzado"}, {"cCodCateg", "cDesCateg", "nValorPrevisto", "nValorRealilzado"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded {0}2",{{"Data", type date}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "LinhaZerada", each [nValorPrevisto] = 0 and [nValorRealilzado] = 0),
    #"Filtered Rows1" = Table.SelectRows(#"Added Custom", each ([LinhaZerada] = false)),
    #"Removed Columns1" = Table.RemoveColumns(#"Filtered Rows1",{"LinhaZerada", "Mes", "Ano"})
in
    #"Removed Columns1"

O código acima eu expliquei no vídeo postado no YouTube:

Caso queira conhecer outras consultas da OMIE, você pode conferir aqui.

Neste link, tem o script de  uma consulta paginada e com incremento de páginas conforme o aumento de registros.