Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Estoy dando mis primeros pasos con Power Query y no tengo idea de lo que estoy haciendo. He llegado hasta aquí gracias a un script de Python de muestra proporcionado por FEMA y ChatGPT.
Estoy tratando de consultar una API de FEMA con un límite por página de 1000 registros por llamada. En el ejemplo con el que estoy trabajando, la consulta devuelve ~2300 registros. Esto significa que necesito encadenar tres llamadas de datos. Cuando ejecuto el script a continuación, obtengo buenos resultados para la segunda y tercera llamada, pero obtengo un error en la primera:
Expression.Error: No se encontró el campo 'resultado' del registro.
Detalles:
skip=0
Creo que el problema es que la primera llamada incluye "$skip=0", lo que creo que significa que le estoy diciendo a la API que no omita ningún registro en la primera llamada. Supongo que no le gusta eso.
Esto es lo que tengo hasta ahora:
dejar
definir la dirección URL para el extremo de los resúmenes de declaraciones de desastre
baseUrl = "https://www.fema.gov/api/open/v2/DisasterDeclarationsSummaries",
Definir una consulta mediante parámetros
select = "?$select=disasterNumber,declarationDate,declarationTitle,state", // omita este parámetro si desea que todos los campos
filter = "&$filter=state%20eq%20%27LA%27", // para fines de ejemplo, límite a Louisiana
orderby = "&$orderby=id", // orden sin importancia para mí, así que use id
limit = "&$top=1000", // no es necesario ya que el valor predeterminado es 1000 - incluso para mayor claridad
format = "&$format=jsona", // Permite usar una matriz de objetos json - más fácil
other = "&$metadata=off", // no es necesario ya que jsona suprime los metadatos, incluso para mayor claridad.
Número de registros que queremos devolver con cada llamada
arriba = 1000,
Devuelva 1 registro con sus criterios para obtener el recuento total de registros. Especificando sólo 1
aquí para reducir la cantidad de datos devueltos. Necesita inlinecount para obtener el recuento de registros.
url1 = baseUrl & "?$inlinecount=allpages&$select=id&$top=1" & filter,
source1 = Json.Document(Web.Contents(url1)),
count = source1[metadatos][count],
loopNum = Number.RoundUp(count/top),
Bucle y llamada al punto de enlace de la API cambiando el registro de inicio de cada iteración. Los metadatos están siendo
suprimido porque ya no lo necesitamos.
saltar = 0,
resultados = List.Generate(
() => [saltar = omitir],
cada [omitir] <= contar,
cada [
saltar = [omitir] + arriba,
url = baseUrl & select & filter & orderby & limit & format & other & "&$skip=" & Text.From([skip]),
result = Json.Document(Web.Contents(url))
],
cada [resultado]
),
combinado = Lista.Combinar(resultados),
Crear una tabla a partir de los resultados combinados
table = Table.FromList(merged, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(table, "Column1", {"disasterNumber", "declarationDate", "declarationTitle", "state"}, {"disasterNumber", "declarationDate", "declarationTitle", "state"}),
Salida de la tabla
#"Changed Type" = Table.TransformColumnTypes(expand,{{"disasterNumber", Int64.Type}, {"declarationDate", type date}, {"declarationTitle", type text}, {"state", type text}})
en
#"Tipo cambiado"
¡Toda la asistencia es muy apreciada!
David
¡Santa vaca! Funciona. Gracias por su ayuda. Aprendí mucho.
Su primera llamada $op=1 es un desperdicio. Su primera llamada debe solicitar los primeros 1000 artículos. Esto también se encargará de su problema de $skip = 0.
Use las opciones RelativePath y Query: hacen que su código se pueda actualizar.
Check out the September 2024 Power BI update to learn about new features.
Learn from experts, get hands-on experience, and win awesome prizes.
User | Count |
---|---|
2 | |
2 | |
1 | |
1 | |
1 |