Forum Discussion
Las solicitudes de Python que funcionan en Power Query no cuando se cargan en el modelo de datos
Mi script de Python no se carga correctamente en el modelo de datos. El guión funciona; se ejecuta en un IDE (uso Pycharm) y también ejecuta y devuelve datos en el Editor de Power Query. Lo estoy usando para obtener datos de una API, usando Python ya que es iterativo, usa HTML analizado para crear las solicitudes POST requeridas, otras razones....
Tengo el siguiente error (de la biblioteca de solicitudes):
El flujo del programa es el siguiente:
Consulta de parámetros (url) -> Tabla de parámetros (#sections[Sección1]) -> script de Python
donde uso un parámetro dinámico como dirección URL (hay varias direcciones URL en la versión de producción), creo la tabla Parámetros mediante secciones y, a continuación, paso los parámetros a Python, donde uso solicitudes para recuperar los datos e importarlos de nuevo a Power BI.
El escenario de ejemplo que genera el error es:
url = "https://jsonplaceholder.typicode.com/todos/" meta [IsParameterQuery=true, Type="Text", IsParameterQueryRequired=true]
Parámetros =
dejar
Source = Table.FromRecords({#sections[Section1]}),
#"Encabezados degradados" = Table.DemoteHeaders(Source),
#"Columnas no votadas" = Table.transpose(#"Encabezados degradados"),
#"Columnas renombradas" = Table.RenameColumns(#"Columnas no votadas",{{"Columna2", "Valor"}, {"Columna1", "Nombre"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Value", type text}}),
#"Errores eliminados" = Table.RemoveRowsWithErrors(#"Changed Type", {"Value"})
en
#"Errores eliminados"
Consulta1 =
dejar
Fuente = Parámetros,
#"Ejecutar script de Python" = Python.Execute(python_script,[dataset=Source])
en
#"Ejecutar script de Python"
donde python_script =
# 'dataset' contiene los datos de entrada para este script
solicitudes de importación
importar pandas como pd
importar json
url = dataset['Valor'][0]
r = requests.get(url)
lista = []
para i en json.loads(r.content.decode('utf-8')):
listi.append(i['título'])
df = pd. DataFrame({"col1": listi})
Como dije, esto funciona hasta que intento cargar en el modelo, luego devuelve un error. No sé cómo Power BI procesa realmente Python, por lo que la depuración es una lucha, con la esperanza de que alguien más haya tenido y solucionado este error antes. ¡Ayuda apreciada!
3 Replies
- Syndicate_Admin
Administrator
Actualización: pasar una tabla en como
Consulta1 = dejar
Fuente = Table.FromRecords({
[Nombre="url", Valor="https://jsonplaceholder.typicode.com/todos/"]
})en
Fuente
funciona tanto en el Editor como en el Modelo, ¿tal vez sea un problema con el orden de evaluación de las consultas con #sections? Todavía desea utilizar parámetros ya que esto expone las variables en el servicio, por lo que está abierto a sugerencias.
- Syndicate_Admin
Administrator
En ella, @Krispin
Puede iniciar el IDE de Python externo desde Power BI Desktop y hacer que los datos se importen y muestren automáticamente en el IDE de Python. Desde allí, puede modificar el script en ese IDE externo de Python y, a continuación, pegarlo de nuevo en Power BI Desktop para crear objetos visuales e informes de Power BI.
Consulte la siguiente documentación sobre el uso de Python en Power BI para ver si le ayuda.
Usar un IDE de Python externo con Power BI - Power BI | Documentos de Microsoft
Uso de Python en Power BI Power Query Editor - Power BI | Documentos de Microsoft
Saludos
Equipo de soporte de la comunidad _Charlotte
Si esta publicación ayuda,entonces considere Aceptarla como la solución para ayudar a los otros miembros a encontrarla más rápidamente.
- Syndicate_Admin
Administrator
Hola Charlotte @v-zhangti ,
Lo siento si hay un malentendido, editar el script de Python no es un problema que esté teniendo.
El problema es que no parece haber forma de consolidar parámetros dinámicos en una tabla que se pueda pasar a Python.Execute(), sin crear otra tabla con Table.FromRecords() o similar, que también funcione en la vista de informe. Vea las siguientes capturas de pantalla:
En la primera imagen, ha funcionado claramente (la vista previa muestra la salida de Python, una tabla de la API).
En la segunda imagen, después de hacer clic en "Cerrar y aplicar", la url está rota y no se muestra ninguna salida.
2 cosas, ¿por qué está sucediendo esto y cómo lo soluciono mejor?