• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

Consulta simultánea a varias webs

javistats

New member
Buenas tardes, soy Javier y soy nuevo en el foro. Encantado de haberos encontrado.
Veréis, quiero hacer varias consultas a diferentes webs de manera simultánea, de una tabla que contiene URLs. Para ello he creado una función power query que me aplica una serie de pasos y la aplico a la tabla de URLs. Pruebo con una tabla de 1 y 2 webs y todo bien, se carga estupendamente lo que quiero en una tabla. Pero cuando amplío a más webs (de 3 a 17) no consigue cargar la tabla correctamente, me da un error de web.Page timeout. He modificado el timeout dentro de la función web.contents a más de 100 segundos que trae por defecto pero sigue dando el mismo problema.
Lo más curioso es que soy capaz de previsualizar la consulta en el editor de power query perfectamente, incluso de copiar y pegarlo a mano... pero no soy capaz de que cargue en una tabla cuando uso 3 urls o más.
¿Alguien tiene idea de qué puede estar pasando y cómo resolverlo sin hacer las consultas por separado y anexarlas al final?

Gracias
buen verano a todos
 

Héctor Miguel

Well-known member
te das cuenta que tu consulta es (como) "una punta de iceberg" ?
(o algo así como: "adivinen lo que estoy pensando" ?)

desde este lado (del mensaje) no se puede "ver"...
- ni las webs que consultas
- ni los contenidos de dichas páginas
- ni los encabezados que obtienes
- ni el código "M" que usas
- ni el uso que das a la función creada
- ni ... ???

en vía de mientras, analiza, estudia y adapta de sitios como este:
- How To Extract Data From Multiple Webpages With Power Query
 

javistats

New member
Buenos días, disculpa Héctor desarrollo un poco más.
Primero creo la función de las conexiones que tiene esta pinta:
Código:
(URL) as table =>
let
    Origen = Web.Page(Web.Contents(URL)),
    Data0 = Origen{0}[Data],
    Tabla0 = Table.TransformColumnTypes(Data0,{{"Indicador", type text}, {"Nota", type text}, {"Unidad", type text}, {"Datos Último periodo", type text}, {"Datos Último dato", type text}, {"Datos Periodo base", type text}, {"Datos Dato base", type text}, {"Fuente", type text}, {"Resultados detallados", type text}, {"Descarga", type text}, {"Metodología", type text}})
in
    Tabla0
Posteriormente abro una consulta en blanco, cargo la tabla que contiene las URLs, personalizo una columna aplicando la función y hago una serie de pasos; que en el editor se ven como:
Código:
let
    Origen = Excel.CurrentWorkbook(),
    URLs = Origen{[Name="URLs"]}[Content],
    #"Tipo cambiado" = Table.TransformColumnTypes(URLs,{{"ODS", Int64.Type}, {"Web", type text}}),
    #"Personalizada agregada" = Table.AddColumn(#"Tipo cambiado", "Info", each Traer([Web])),
    #"Se expandió Info" = Table.ExpandTableColumn(#"Personalizada agregada", "Info", {"Indicador"}, {"Info.Indicador"})
in
    #"Se expandió Info"
Pues bien, en total tengo 17 webs y en el editor soy capaz de ver los 513 registros que contienen perfectamente. Cuando intento cargarlo como tabla es cuando empiezan los problemas.
Si la tabla solo contiene 1 web no hay ningún problema, si contiene 2 tampoco. Cuando tengo 3 o más se queda indefinidamente hasta que me da DataSource.Error The Web.Page function didn't finish within the timeout of 100 seconds:
1592982353266.png
He intentado arreglarlo siguiendo los pasos de https://community.powerbi.com/t5/Se...dn-t-finish-within-timeout-of-100/td-p/491565 , esencialmente modificando los parámetros de la función Web.Contents (da igual el tiempo que le ponga, sigue apareciendo el mismo error)
Código:
Web.Contents("web url", [Timeout=#duration(0, 0, 30, 0)]

Como solución temporal (y cutre), ya que soy capaz de ver el resultado en el editor, puedo copiar de la ventana de power query la tabla y pegarla en una hoja de excel; pero me gustaría una solución más permanente.
 

sailepaty

Active member
Has intentado ejecutar tu consulta una por una para ver cuál página(s) es la que produce el error? Recuerda lo que ves en la consulta preliminar no es el total de los registros que la tabla contiene, por eso no recibes el error mientras trabajas en PQ.

Has pruebas con la opciones de "Fast Data Load" y "Allow data preview to download in the Background" activadas o desactivadas.

Saludos
 

javistats

New member
Buenos días; en total contienen 513 registros y puedo verlos en PQ.
La opción de carga rápida la he marcado y desactivado también. En su día lo tuve que hacer para el trabajo y acabé haciendo las consultas una por una y luego combinándolas; pero ya me pica la curiosidad de saber por qué puedo hacerlas bien de 2 en 2 pero con 3 ya se atasca y no es capaz de continuar.
En esta página https://community.powerbi.com/t5/Se...inish-within-timeout-of-100/m-p/492235#M51153 daban una solución pero a mi no me funcionó.
En fin, gracias de todas maneras. Seguiré probando
 

sailepaty

Active member
La página a la que haces referencia es para una consulta individual, el problema que tienes es que todas las consultas tratan de regresar la información al mismo tiempo ya que están dentro del mismo query. En ocasiones el Table.Buffer puede ayudar pero hay que tener cuidado cuando y en donde se utiliza, porque el remedio puede ser peor que la enfermedad. Checate el siguiente post y video de Chris Webb.

https://blog.crossjoin.co.uk/2019/10/13/why-does-power-bi-query-my-data-source-more-than-once/

Saludos
 
Arriba