M 函数中的条件 FOR/WHILE - Power BI 中的分页 API



我在下面创建了这个API。它大致有效,但在 OFFSET 属性中,我需要指定记录的下一个序列号的编号,例如,对于第二页、编号 251、第二页的下一条记录,依此类推。

  • 我的每页记录限制是 250

  • 字段totalItems返回记录总数,例如:4500

  • 我将记录总数
  • 除以每页的记录总数,以了解我的 API 有多少页:pageRange = {0..Number.RoundUp(totalItems / 250)}

  • 当转到第二页时,在下面的 API 中发生的情况是,第二页的记录重复出现,因为我应该改用数字 1(指第二页(,传递数字 251,然后,当再次执行循环时,传递数字 501,直到完成整个序列(API 中的这个参数是:offset=(。

我需要更改此行以包含pages = List.Transform(pageRange, each ufnCallAPI(_)),项"ufnCallAPI(_("的 FOR/WHILE

例如,上面的项目:

List.Transform(pageRange, each ufnCallAPI(_)),
List.Transform(pageRange, each ufnCallAPI(250)),
List.Transform(pageRange, each ufnCallAPI(500)),
List.Transform(pageRange, each ufnCallAPI(750)),

最多总数totalItems

并包含一个 FOR/WHILE 来修改我的 API,使其不传递下一页的编号,而是传递下一项开始的列表开头的编号(偏移量(。

非常感谢!

我的代码:

let
ufnCallAPI = (offSet) =>
let
query = Web.Contents("https://api.vhsys.com/v2/pedidos?offset=" & Number.ToText(offSet)  &  "&limit=250", 
[Headers=[#"access-token"="OCKNYbAMaDgLBZBSQPCOGPWOXGSbdO", #"secret-access-token"="XXXXXXXXXXXXXX"]]),
result = Json.Document(query)
in
result,

tmpResult = ufnCallAPI(1),

auxTotal1 = Record.ToTable(tmpResult),
Value = auxTotal1{2}[Value],
auxTotal2 = Value[total],
totalItems = auxTotal2 -1,
pageRange = {0..Number.RoundUp(totalItems / 250)},

pages =List.Transform(pageRange, each ufnCallAPI(_)),
pages2 = Table.FromList(pages, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
pages3 = Table.ExpandRecordColumn(pages2, "Column1", {"code", "status", "paging", "data"}, {"Column1.code", "Column1.status", "Column1.paging", "Column1.data"}),
pages4 = Table.ExpandListColumn(pages3, "Column1.data"),
pages5 = Table.RemoveColumns(pages4,{"Column1.code", "Column1.status", "Column1.paging"}),
data = Table.ExpandRecordColumn(pages5, "Column1.data", {"id_ped", "id_pedido", "id_cliente", "nome_cliente", "id_local_retirada", "id_local_cobranca", "vendedor_pedido", "vendedor_pedido_id", "listapreco_produtos", "valor_total_produtos", "desconto_pedido", "desconto_pedido_porc", "peso_total_nota", "peso_total_nota_liq", "frete_pedido", "valor_total_nota", "valor_baseICMS", "valor_ICMS", "valor_baseST", "valor_ST", "valor_IPI", "condicao_pagamento_id", "condicao_pagamento", "frete_por_pedido", "transportadora_pedido", "id_transportadora", "data_pedido", "prazo_entrega", "referencia_pedido", "obs_pedido", "obs_interno_pedido", "status_pedido", "contas_pedido", "comissao_pedido", "estoque_pedido", "ordemc_emitido", "data_cad_pedido", "data_mod_pedido", "id_aplicativo", "id_pedido_aplicativo", "lixeira"}, {"id_ped", "id_pedido", "id_cliente", "nome_cliente", "id_local_retirada", "id_local_cobranca", "vendedor_pedido", "vendedor_pedido_id", "listapreco_produtos", "valor_total_produtos", "desconto_pedido", "desconto_pedido_porc", "peso_total_nota", "peso_total_nota_liq", "frete_pedido", "valor_total_nota", "valor_baseICMS", "valor_ICMS", "valor_baseST", "valor_ST", "valor_IPI", "condicao_pagamento_id", "condicao_pagamento", "frete_por_pedido", "transportadora_pedido", "id_transportadora", "data_pedido", "prazo_entrega", "referencia_pedido", "obs_pedido", "obs_interno_pedido", "status_pedido", "contas_pedido", "comissao_pedido", "estoque_pedido", "ordemc_emitido", "data_cad_pedido", "data_mod_pedido", "id_aplicativo", "id_pedido_aplicativo", "lixeira"}),
#"Tipo Alterado" = Table.TransformColumnTypes(data,{{"id_ped", type text}, {"id_pedido", Int64.Type}, {"nome_cliente", type text}, {"valor_total_produtos", type text}}),
#"Valor Substituído" = Table.ReplaceValue(#"Tipo Alterado",".",",",Replacer.ReplaceText,{"valor_total_produtos"}),
#"Tipo Alterado1" = Table.TransformColumnTypes(#"Valor Substituído",{{"valor_total_produtos", Currency.Type}}),
#"Valor Substituído1" = Table.ReplaceValue(#"Tipo Alterado1",".",",",Replacer.ReplaceValue,{"desconto_pedido", "desconto_pedido_porc", "peso_total_nota", "peso_total_nota_liq", "frete_pedido", "valor_total_nota", "valor_baseICMS", "valor_ICMS", "valor_baseST", "valor_ST", "valor_IPI"}),
#"Tipo Alterado2" = Table.TransformColumnTypes(#"Valor Substituído1",{{"desconto_pedido", Currency.Type}, {"desconto_pedido_porc", Currency.Type}, {"peso_total_nota", Currency.Type}, {"peso_total_nota_liq", Currency.Type}, {"frete_pedido", Currency.Type}, {"valor_total_nota", type text}, {"valor_baseICMS", Currency.Type}, {"valor_ICMS", Currency.Type}, {"valor_baseST", Currency.Type}, {"valor_ST", Currency.Type}, {"valor_IPI", Currency.Type}, {"prazo_entrega", type text}, {"data_pedido", type date}}),
#"Colunas Removidas" = Table.RemoveColumns(#"Tipo Alterado2",{"id_aplicativo", "id_pedido_aplicativo", "lixeira"}),
#"Tipo Alterado3" = Table.TransformColumnTypes(#"Colunas Removidas",{{"valor_total_nota", type text}}),
#"Valor Substituído2" = Table.ReplaceValue(#"Tipo Alterado3",".",",",Replacer.ReplaceText,{"valor_total_nota"}),
#"Tipo Alterado4" = Table.TransformColumnTypes(#"Valor Substituído2",{{"valor_total_nota", Currency.Type}})

in
#"Tipo Alterado4"

如果我正确理解了您的网页抓取问题,那么我建议您不需要申请/while 循环。

请查看以下链接,这可能有助于您的问题。 https://www.youtube.com/watch?v=n0bSddoCmss

https://www.myonlinetraininghub.com/scrape-data-multiple-web-pages-power-query

最新更新