Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
4 years ago

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):

Consulta1
Error al guardar las modificaciones en el servidor. Error devuelto: 'Error OLE DB u ODBC: [DataSource.Error] ADO.NET: error de script de Python. requests.exceptions.MissingSchema: URL no válida 'nan': No se proporciona ningún esquema. ¿Quizás quisiste decir http://nan?. '.

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

  • 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.

  • 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's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      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:

      Krispin_0-1637826265014.pngKrispin_1-1637826331011.png

      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?