Muita análise fica melhor com dado externo: cotação do dólar, IPCA, feriados nacionais, CEP, indicadores setoriais. O Power Query lê tudo isso com Web.Contents.
Linguagem MCotação do dólar na API do Banco Central
let Url = https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/" & "CotacaoDolarPeriodo(dataInicial=@di,dataFinalCotacao=@df)" & "?@di='01-01-2023'&@df='12-31-2024'&$format=json", Fonte = Json.Document(Web.Contents(Url)), Valores = Fonte[value], Tabela = Table.FromList(Valores, Splitter.SplitByNothing(), null, null, ExtraValues.Error), Expandido = Table.ExpandRecordColumn( Tabela, "Column1", {"cotacaoCompra", "cotacaoVenda", "dataHoraCotacao"}, {"Compra", "Venda", "DataHora"} ), Tipos = Table.TransformColumnTypes( Expandido, {{"Compra", type number}, {"Venda", type number}, {"DataHora", type datetime}} ), DataPura = Table.AddColumn(Tipos, "Data", each Date.From([DataHora]), type date)in DataPuraLinguagem MForma compatível com atualização agendada
let Resposta = Json.Document( Web.Contents( https://api.exemplo.com", [ RelativePath = "v1/pedidos", Query = [ desde = "2024-01-01", limite = "500" ], Headers = [ #"Authorization" = "Bearer " & ChaveApi ] ] ) )in RespostaPaginação
APIs sérias devolvem os dados em páginas. A técnica padrão é criar uma função que recebe o número da página e usar List.Generate ou List.Transform para percorrer todas.
Linguagem MPercorrendo 20 páginas de uma API
let fnPagina = (pagina as number) as table => let Resposta = Json.Document( Web.Contents(https://api.exemplo.com", [ RelativePath = "v1/pedidos", Query = [ page = Text.From(pagina) ] ]) ), Dados = Table.FromRecords(Resposta[data]) in Dados, Paginas = List.Transform({1..20}, each fnPagina(_)), Tudo = Table.Combine(Paginas)in Tudo