Forum Discussion

CarlosWagner's avatar
CarlosWagner
Frequent Visitor
5 years ago
Solved

API Json REST - com tabela de registros infinitos

Estou com um problema ao requisitar um endereço URL

E Estou seguindos os passos:

1º Criei uma tabela com os endereços;

 

 

 

 

startIndex =    1    & count =    100

startIndex =    101    & count =    200

startIndex =    201    & count =    300    .   .   .   .

 

 

 

 

2º tranformei esta tabela em endereço URL

3º Combinei em binário

 

Resultado.

 

 

 

 

 

 

deixei
    Fonte = Table.FromRows (Json.Document (Binary.Decompress (Binary.FromText ("tdxBa103EEDh / 5J1sK + kmZEUCIXusisl0EWaRRobUmj9gv0cmn / fQFY5t8uenVcWZ / Puh6TRu3cvPl2vn1 / d3j5cvnz48 + Huazuyrbr5 / Hi5frp / frr5 + Nfl + e56uX759ufl75s / Hl / FEcft4 / 3T9fbXt7 / 89vObI356un54vL55uLv / 53X7 / fk4en28PD9cX + dxvHj / 8n9fI48fVmmHs8y3 // vjOlJOQ0 + Xejp6utTT0TOknoGeIfUM9ITUE + gJqSfQk1JPoietnwP0lNRT6Cmpp9AzpZ6Jnin1TPQsqWehZ0k9Cz1b6tno2VLP / o / vqfVB5UrWJ / Vgk4aEkxI0JtAJzYJCoxSaRYVGKzQLC41aaBYXGr3QLDA0iqFZZGg0Q7PQ0KiGZrGh0Q3NgkOjHJpFh0Y7NAsPjXpoFh8a / dAsQDQKolmEaDREsxDRqIhmMaLREd1yRKcjuuWITkd0yxGdjuiWI/+ + Zntqw52naUxv3pCOm5YhJR0zLEZOOmJYjJh0xLUdMOmJZjlh0xLIcseiIZTli0RHLcsSiI5bliEVHLMsRi45YliMWHbEsRyw6YlmOWHTEshyx6IhlOWLREctyxKIjluWIRUcsyxGLjliWIxYdsSxHrNO7EdrDEaeXI7SnI iIZTli0RHLcsSiI7bliE1HbMsRm47YliM2HbEtR2w6YluO2HTEthyx6YhtOWLTEdtyxKYjtuWITUdsyxGbjtiWIzYdsS1HbDpiW47YdMS2HLHpiG05YtMR23LEpiO25YhNR2zLEfv0BtV3R7z / Fw ==", BinaryEncoding.Base64), Compression.Deflate)), vamos _T = ((DigiTar texto anulável) meta [Serialized.Text = Verdadeiro]) na Tabela tipo [# "Coluna 1"= _t ]), = _t]), = _t]),Texto = verdadeiro]) na Tabela tipo [# "Coluna 1" = _t]), = _t]), = _t]),Texto = verdadeiro]) na Tabela tipo [# "Coluna 1" = _t]), = _t]), = _t]),
    # "Tipo Alterado" = Table.TransformColumnTypes (Fonte, {{"Coluna 1", digite texto}}),
    # "Personalização Adicionada" = Table.AddColumn (# "Tipo Alterado", "Personalizar", cada Json.Document (Web.Contents ([Coluna 1]))),
    # "Personalizar Expandido" = Table.ExpandRecordColumn (# "Personalização Adicionada", "Personalizar", {"data"}, {"Personalizar.data"}),
    # "Personalizar.data Expandido" = Table.ExpandListColumn (# "Personalizar Expandido", "Personalizar.data"),
    # "Personalizar.data Expandido1" = Table.ExpandRecordColumn (# "Personalizar.data Expandido", "Personalizar.data", {"id", "Filial", "Item", "Produto", "DescProduto", "TipoProduto" , "UM", "Quantidade", "VlrPrecoVenda", "VlrUnitario", "VlrDesconto", "VlrTotal", "Custo", "TipoSaida", "NPedido", "Cliente", "Loja", "Nome", " Doc "," Serie "," TipoDoc "," DtEmissao "," CodGrupo "," DescGrupo "," CodTabPreco "," Vendedor "}, {" id "," Filial "," Item "," Produto "," DescProduto "," TipoProduto ","UM "," Quantidade "," VlrPrecoVenda "," VlrUnitario "," VlrDesconto "," VlrTotal "," Custo "," TipoSaida "," NPedido "," Cliente "," Loja "," Nome "," Doc " , "Série", "TipoDoc", "DtEmissao", "CodGrupo", "DescGrupo", "CodTabPreco", "Vendedor"}) Vendedor "}) Vendedor"})"CodTabPreco", "Vendedor"}) Vendedor "}) Vendedor"})"CodTabPreco", "Vendedor"}) Vendedor "}) Vendedor"})
não
    # "Personalizar.data Expandido1"

 

 

Estou com 02 problemas:

 

1º Como atualizar este serviço no Power BI online?

2º Esta é uma tabela de vendas e atualiza todos os dias, preciso fazer alguma função recursiva para atualizar?

 

 

  • The documentation seems ok, but as you have noticed it only returns 500  (well, 460) rows.  Can you talk to someone at that company to ask them for an exampe of how they use the API?  I think there are other parameters, or some other part of the process that we are missing.

     

    EDIT:  Try this version, this seems to work :

     

     

    let
        Source = List.Generate(()=>1, each _ < 5000, each _+500),
        #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", Int64.Type}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type", "Data", each Json.Document(Web.Contents("http://novaindy105186.protheus.cloudtotvs.com.br:4040/rest/RTPWBI04?startindex=" & Text.From([Column1]) & "&count=" & Text.From([Column1]+499)))),
        #"Expanded Data" = Table.ExpandRecordColumn(#"Added Custom", "Data", {"data"}, {"Data.data"}),
        #"Expanded Data.data" = Table.ExpandListColumn(#"Expanded Data", "Data.data"),
        #"Expanded Data.data1" = Table.ExpandRecordColumn(#"Expanded Data.data", "Data.data", {"id", "Filial", "Item", "Produto", "DescProduto", "TipoProduto", "UM", "Quantidade", "VlrPrecoVenda", "VlrUnitario", "VlrDesconto", "VlrTotal", "Custo", "TipoSaida", "NPedido", "Cliente", "Loja", "Nome", "Doc", "Serie", "TipoDoc", "DtEmissao", "CodGrupo", "DescGrupo", "CodTabPreco", "Vendedor"}, {"id", "Filial", "Item", "Produto", "DescProduto", "TipoProduto", "UM", "Quantidade", "VlrPrecoVenda", "VlrUnitario", "VlrDesconto", "VlrTotal", "Custo", "TipoSaida", "NPedido", "Cliente", "Loja", "Nome", "Doc", "Serie", "TipoDoc", "DtEmissao", "CodGrupo", "DescGrupo", "CodTabPreco", "Vendedor"})
    in
        #"Expanded Data.data1"

     

     

    In my opinion the "count"  parameter is wrongly named in their API. It should be called "endIndex".

5 Replies

  • The documentation seems ok, but as you have noticed it only returns 500  (well, 460) rows.  Can you talk to someone at that company to ask them for an exampe of how they use the API?  I think there are other parameters, or some other part of the process that we are missing.

     

    EDIT:  Try this version, this seems to work :

     

     

    let
        Source = List.Generate(()=>1, each _ < 5000, each _+500),
        #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", Int64.Type}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type", "Data", each Json.Document(Web.Contents("http://novaindy105186.protheus.cloudtotvs.com.br:4040/rest/RTPWBI04?startindex=" & Text.From([Column1]) & "&count=" & Text.From([Column1]+499)))),
        #"Expanded Data" = Table.ExpandRecordColumn(#"Added Custom", "Data", {"data"}, {"Data.data"}),
        #"Expanded Data.data" = Table.ExpandListColumn(#"Expanded Data", "Data.data"),
        #"Expanded Data.data1" = Table.ExpandRecordColumn(#"Expanded Data.data", "Data.data", {"id", "Filial", "Item", "Produto", "DescProduto", "TipoProduto", "UM", "Quantidade", "VlrPrecoVenda", "VlrUnitario", "VlrDesconto", "VlrTotal", "Custo", "TipoSaida", "NPedido", "Cliente", "Loja", "Nome", "Doc", "Serie", "TipoDoc", "DtEmissao", "CodGrupo", "DescGrupo", "CodTabPreco", "Vendedor"}, {"id", "Filial", "Item", "Produto", "DescProduto", "TipoProduto", "UM", "Quantidade", "VlrPrecoVenda", "VlrUnitario", "VlrDesconto", "VlrTotal", "Custo", "TipoSaida", "NPedido", "Cliente", "Loja", "Nome", "Doc", "Serie", "TipoDoc", "DtEmissao", "CodGrupo", "DescGrupo", "CodTabPreco", "Vendedor"})
    in
        #"Expanded Data.data1"

     

     

    In my opinion the "count"  parameter is wrongly named in their API. It should be called "endIndex".

  • Shouldn't your count always be 100?  You can use a recursive function (if the data isn't too big) and exit once the returned number of records from a call is less than 100.

    • CarlosWagner's avatar
      CarlosWagner
      Frequent Visitor

      Eu entendi, obrigado!

      Como faço para a atualização funcionar no serviço online?

       

  • Here is the pedestrian way (without recursion).  Your data is rather large so the recursion would hit memory issues soon. Does the API have a call to find out the maximum ID? Do you have a link to the API documentation? I don't think "startIndex"  is a valid field.

     

     

     

    let
        Source = List.Generate(()=>1, each _ < 5000, each _+500),
        #"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Changed Type" = Table.TransformColumnTypes(#"Converted to Table",{{"Column1", type text}}),
        #"Added Custom" = Table.AddColumn(#"Changed Type", "Data", each Json.Document(Web.Contents("http://novaindy105186.protheus.cloudtotvs.com.br:4040/rest/RTPWBI04?startIndex=" & [Column1] & "&count=500"))),
        #"Expanded Data" = Table.ExpandRecordColumn(#"Added Custom", "Data", {"data"}, {"Data.data"}),
        #"Expanded Data.data" = Table.ExpandListColumn(#"Expanded Data", "Data.data"),
        #"Expanded Data.data1" = Table.ExpandRecordColumn(#"Expanded Data.data", "Data.data", {"id", "Filial", "Item", "Produto", "DescProduto", "TipoProduto", "UM", "Quantidade", "VlrPrecoVenda", "VlrUnitario", "VlrDesconto", "VlrTotal", "Custo", "TipoSaida", "NPedido", "Cliente", "Loja", "Nome", "Doc", "Serie", "TipoDoc", "DtEmissao", "CodGrupo", "DescGrupo", "CodTabPreco", "Vendedor"}, {"id", "Filial", "Item", "Produto", "DescProduto", "TipoProduto", "UM", "Quantidade", "VlrPrecoVenda", "VlrUnitario", "VlrDesconto", "VlrTotal", "Custo", "TipoSaida", "NPedido", "Cliente", "Loja", "Nome", "Doc", "Serie", "TipoDoc", "DtEmissao", "CodGrupo", "DescGrupo", "CodTabPreco", "Vendedor"})
    in
        #"Expanded Data.data1"

     

     

  • CarlosWagner's avatar
    CarlosWagner
    Frequent Visitor

    Muito obrigado lbendlin!

    Eu fiz e deu certo, estou apenas com um problema  para atualizar no serviço do Power Bi On line. Mas, vi aqui que posso usar o RelativePath e Query. Estou quase conseguindo, irei conseguir rsrs

    novamente, obrigado!