The ultimate Fabric, Power BI, SQL, and AI community-led learning event. Save €200 with code FABCOMM.
Get registeredEnhance your career with this limited time 50% discount on Fabric and Power BI exams. Ends August 31st. Request your voucher.
Hola a todos,
Sé que esto ha sido cubierto una cantidad bastante frecuente de veces, pero parece que no puedo conseguir que funcione con mi api.
Actualmente estoy intentando conectarme a la siguiente API: https://api.searchsoftware.nl/v2/jobs?include=categories|contacts&access_token=XXX
Este es nuestro sistema CRM. Como hay un límite de 500, quiero paginar usando el método offset/limit. Intenté varios ejemplos, pero todos se costura para fallar conmigo.
= List.Skip(List.Generate( () => [Last_Key = "", Counter=0], // Start Value
each [Last_Key] <> null, // Condition under which the next execution will happen
each [ Last_Key = try if [Counter]<1 then "" else [WebCall][Value][offset] otherwise null,// determine the LastKey for the next execution
WebCall = try if [Counter]<1 then Json.Document(Web.Contents("https://api.searchsoftware.nl/v2/jobs?include=categories|contacts&access_token=MYKEY")) else Json.Document(Web.Contents("https://api.searchsoftware.nl/v2/jobs?include=categories|contacts&access_token=MYKEY&offset="&Last_Key)), // retrieve results per call
Counter = [Counter]+1// internal counter
],
each [WebCall]
),1)
¿Alguien puede decirme qué estoy haciendo mal aquí? Obtengo una lista de 50 registros según el límite estándar en la API. El segundo registro muestra un error que indica que el operador no se puede aplicar al texto y al número.
¡Muchas gracias!
¡Señores, buenas noches!
Me gustaría que me ayudaran a que esto no consiguiera que el power bi funcionara...
Este es el retorno de la paginación API.
--Total es la cantidad total de registros.
--Offset es el comienzo de mi búsqueda
--limit es el máximo que devuelve la API a la vez,...
He intentado de muchas maneras, pero todavía no puedo pensar en una solución,...
Lmoning que mi API usa un encabezado Headers.
dejar
linhasPorPaginas = 250,
ValorOffset= 0,
Token = [Encabezados = [#"access-token"="xxx", #"secret-access-token"="yyyyyy", #"content-type"="application/json", #"cache-control"="no-cache"]],
Limit = "&limit=" & Text.From(linhasPorPaginas),
Offset = "&offset=" & Text.From(ValorOffset),
Url = "¿https://api.vhsys.com/v2/categorias?" y Límite,
GetJson = (Url) = >
dejar
RawData = Web.Contents(Url, Token),
Json = Json.Document(RawData)
en Json,
Url2 = Url & "&offset=0,",
GetEntityCount = () = >
let url = (url2 & token),
Json = GetJson(Url),
Count = Json[#"total_count"]
en
Contar
GetPage = (Índice) = >
dejar
(opción A)desplazamiento igual al recuento de filas anterior
offset = "&offset=" & Text.From(Index * linhasPorPaginas)&",",
(opción B)desplazamiento igual al número de página
offset = "&offset=" & Text.From(Índice),
Url = Url & offset & Token,
Json = GetJson(Url),
Valor = Json[#"jobs"]
en
Valor
EntityCount = GetEntityCount(),
PageCount = Number.RoundUp(EntityCount / linhasPorPaginas),
PageIndices = { 0 .. PageCount - 1 },
Pages = List.Transform(PageIndices, cada GetPage(_)),
Entidades = List.Union(Páginas),
Tabla = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
en
Mesa
Desafortunadamente he estado pasando por todos estos enlaces ya, pero no hay éxito hasta lejos, pero gracias!
HOLA @bwhdegroot,
Parece que está copiando la fórmula de consulta de ejemplo y trata de usarla con su escenario, ¿verdad?
Creo que debe realizar alguna modificación en las funciones internas con su cadena de consulta de dirección URL y propiedades devueltas. (su API no contiene parámetros 'top, skip, count')
Por favor, eche un vistazo a la siguiente fórmula si cumple con su requisito:
let
MYKEY="xxxxxx",//token string
EntitiesPerPage = 500,
Token= "&access_token=" & MYKEY,
Limit="&limit=" & Text.From(EntitiesPerPage),
Url = "https://api.searchsoftware.nl/v2/jobs?include=categories|contacts" & Limit,
GetJson = (Url) =>
let
RawData = Web.Contents(Url & Token),
Json = Json.Document(RawData)
in Json,
GetEntityCount = () =>
let Url = Url & "&offset=0" & Token,
Json = GetJson(Url),
Count = Json[#"total_count"]
in
Count,
GetPage = (Index) =>
let
//(option A)offset equal to previous row count
offset = "$offset=" & Text.From(Index * EntitiesPerPage),
//(option B)offset equal to page numer
//offset = "$offset=" & Text.From(Index),
Url = Url & offset & Token,
Json = GetJson(Url),
Value = Json[#"jobs"]
in
Value,
EntityCount = GetEntityCount(),
PageCount = Number.RoundUp(EntityCount / EntitiesPerPage),
PageIndices = { 0 .. PageCount - 1 },
Pages = List.Transform(PageIndices, each GetPage(_)),
Entities = List.Union(Pages),
Table = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
Table
Aviso: No estoy tan seguro de qué tipo de parámetro de desplazamiento usó la API, elija uno de los dos pasos de desplazamiento opcionales en función de su escenario.
saludos
Xiaoxin Sheng
Hola @v-shex-msft
¡Gracias! Esto es casi lo que necesito y lo veo recuperar datos. La única observación es que basado en mis 836 registros y límite por página de 50, veo 17 páginas. Sin embargo, estas 17 páginas tienen todos los mismos datos. ¿Cómo se puede adaptar el código de código para que se recorra el desplazamiento para mostrar diferentes páginas?
¡Muchas gracias!
HOLA @bwhdegroot,
Después de comprobar mi código, creo que puede ser causado por el error tipográfico. La API usa el carácter '&' para vincular parámetros de cadena de consulta, pero tengo que escribir '$' carácter (en la función GetPage) que puede no funcionar.
Por favor, intente utilizar los siguientes códigos para confirmar que han solucionado el problema de los datos de página duplicados:
let
MYKEY="xxxxxx",//token string
EntitiesPerPage = 500,
Token= "&access_token=" & MYKEY,
Limit="&limit=" & Text.From(EntitiesPerPage),
Url = "https://api.searchsoftware.nl/v2/jobs?include=categories|contacts" & Limit,
GetJson = (Url) =>
let
RawData = Web.Contents(Url & Token),
Json = Json.Document(RawData)
in Json,
GetEntityCount = () =>
let Url = Url & "&offset=0" & Token,
Json = GetJson(Url),
Count = Json[#"total_count"]
in
Count,
GetPage = (Index) =>
let
//(option A)offset equal to previous row count
offset = "&offset=" & Text.From(Index * EntitiesPerPage),
//(option B)offset equal to page numer
//offset = "&offset=" & Text.From(Index),
Url = Url & offset & Token,
Json = GetJson(Url),
Value = Json[#"jobs"]
in
Value,
EntityCount = GetEntityCount(),
PageCount = Number.RoundUp(EntityCount / EntitiesPerPage),
PageIndices = { 0 .. PageCount - 1 },
Pages = List.Transform(PageIndices, each GetPage(_)),
Entities = List.Union(Pages),
Table = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
Table
saludos
Xiaoxin Sheng
¡Señores, buenas noches!
Me gustaría que me ayudaran a que esto no consiguiera que el power bi funcionara... A continuación se muestra el retorno de la paginación API.
Me gustaría traer todos los datos de esta tabla de API...
--Total es la cantidad total de registros.
--Offset es el comienzo de mi búsqueda
--limit es el máximo que devuelve la API a la vez,...
He intentado de muchas maneras, pero todavía no puedo pensar en una solución,...
Lmoning que mi API usa un encabezado Headers.
let
linhasPorPaginas = 250,
Token = [Headers = [#"access-token"="xxxxxxx", #"secret-access-token"="yyyyyyy", #"content-type"="application/json", #"cache-control"="no-cache"]],
Limit = "&limit=" & Text.From(linhasPorPaginas),
Url = "https://api.vhsys.com/v2/produtos?" & Limit,
GetJson = (Url) =>
let
RawData = Web.Contents(Url, Token),
Json = Json.Document(RawData)
in Json,
Url2 = Url & "&offset=0,",
GetEntityCount = () =>
let Url = (Url2 & Token),
Json = GetJson(Url),
Count = Json[#"total_count"]
in
Count,
GetPage = (Index) =>
let
//(option A)offset equal to previous row count
offset = "&offset=" & Text.From(Index * linhasPorPaginas)&",",
//(option B)offset equal to page numer
//offset = "&offset=" & Text.From(Index),
Url = Url & offset & Token,
Json = GetJson(Url),
Value = Json[#"jobs"]
in
Value,
EntityCount = GetEntityCount(),
PageCount = Number.RoundUp(EntityCount / linhasPorPaginas),
PageIndices = { 0 .. PageCount - 1 },
Pages = List.Transform(PageIndices, each GetPage(_)),
Entities = List.Union(Pages),
Table = Table.FromList(Entities, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
Table